The internal helper for_each_task iterates over all tasks of the target,
calling the provided function on each.

Signed-off-by: Jan Kiszka <[email protected]>
---
 scripts/gdb/task.py |   35 +++++++++++++++++++++++++++++++++++
 1 files changed, 35 insertions(+), 0 deletions(-)
 create mode 100644 scripts/gdb/task.py

diff --git a/scripts/gdb/task.py b/scripts/gdb/task.py
new file mode 100644
index 0000000..6b73dbf
--- /dev/null
+++ b/scripts/gdb/task.py
@@ -0,0 +1,35 @@
+#
+# gdb helper commands and functions for Linux kernel debugging
+#
+#  task & thread tools
+#
+# Copyright (c) Siemens AG, 2011-2013
+#
+# Authors:
+#  Jan Kiszka <[email protected]>
+#
+# This work is licensed under the terms of the GNU GPL version 2.
+#
+
+import gdb
+
+from utils import *
+
+task_type = CachedType("struct task_struct")
+
+def for_each_task(func, arg = None):
+       global task_type
+       task_ptr_type = task_type.get_type().pointer()
+       init_task = gdb.parse_and_eval("init_task")
+       g = init_task.address
+       while True:
+               g =  container_of(g['tasks']['next'], task_ptr_type, "tasks")
+               if g == init_task.address:
+                       break;
+               t = g
+               while True:
+                       func(t, arg)
+                       t = container_of(t['thread_group']['next'],
+                                        task_ptr_type, "thread_group")
+                       if t == g:
+                               break
-- 
1.7.3.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to