Message ID | 1453288550-4706-3-git-send-email-kieran.bingham@linaro.org |
---|---|
State | New |
Headers | show |
On 23/01/16 15:08, Jan Kiszka wrote: > On 2016-01-20 12:15, Kieran Bingham wrote: >> Facilitate linked-list items by providing a generator to return >> the dereferenced, and type-cast objects from a kernel linked list >> >> Signed-off-by: Kieran Bingham <kieran.bingham@linaro.org> >> --- >> >> This is quite a useful wrapper to faciliate looping on lists. >> It is sort of equivalent to the list_for_each_entry macro. >> >> Let me know if it should be renamed, or live elsewhere. > > Location is fine. Maybe call it list_items? > >> >> scripts/gdb/linux/lists.py | 9 +++++++++ >> 1 file changed, 9 insertions(+) >> >> diff --git a/scripts/gdb/linux/lists.py b/scripts/gdb/linux/lists.py >> index 3a3775bc162b..d2c6ce165cb1 100644 >> --- a/scripts/gdb/linux/lists.py >> +++ b/scripts/gdb/linux/lists.py >> @@ -18,6 +18,15 @@ from linux import utils >> list_head = utils.CachedType("struct list_head") >> >> >> +def items(list_type, list_location, item_list): >> + """items Generator return items from a kernel linked list""" >> + item_list_head = item_list >> + next_item = item_list_head['next'].dereference() >> + while next_item != item_list_head: >> + yield utils.container_of(next_item, list_type, list_location) >> + next_item = next_item['next'].dereference() >> + >> + >> def list_check(head): >> nb = 0 >> if (head.type == list_head.get_type().pointer()): >> > > Could you apply it on existing list iterations? module_list() seems like > a candidate, e.g. Yes, It probably is. I'll update, and add a patch to my series, and check to see if there are any more. -- Kieran > > Jan >
diff --git a/scripts/gdb/linux/lists.py b/scripts/gdb/linux/lists.py index 3a3775bc162b..d2c6ce165cb1 100644 --- a/scripts/gdb/linux/lists.py +++ b/scripts/gdb/linux/lists.py @@ -18,6 +18,15 @@ from linux import utils list_head = utils.CachedType("struct list_head") +def items(list_type, list_location, item_list): + """items Generator return items from a kernel linked list""" + item_list_head = item_list + next_item = item_list_head['next'].dereference() + while next_item != item_list_head: + yield utils.container_of(next_item, list_type, list_location) + next_item = next_item['next'].dereference() + + def list_check(head): nb = 0 if (head.type == list_head.get_type().pointer()):
Facilitate linked-list items by providing a generator to return the dereferenced, and type-cast objects from a kernel linked list Signed-off-by: Kieran Bingham <kieran.bingham@linaro.org> --- This is quite a useful wrapper to faciliate looping on lists. It is sort of equivalent to the list_for_each_entry macro. Let me know if it should be renamed, or live elsewhere. scripts/gdb/linux/lists.py | 9 +++++++++ 1 file changed, 9 insertions(+) -- 2.5.0