From e2f87e118a85f6df065355af69724f054efd2476 Mon Sep 17 00:00:00 2001 From: Mitchel Humpherys <mitchelh@codeaurora.org> Date: Wed, 23 Apr 2014 11:08:37 -0700 Subject: [PATCH] lrdp-v2: linux_list.py: make the `extra' argument of `walk' optional It's not always useful to pass extra data to the list walker function. For example, if the list walker function is a class method, state can be passed around by simply modifying class instance variables. Update `ListWalker.walk' to accept extra arguments optionally, not require them. Change-Id: I433f1e34db5c143c838f0eb2ed7f58203712ccb3 --- linux-ramdump-parser-v2/iommulib.py | 2 +- linux-ramdump-parser-v2/linux_list.py | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/linux-ramdump-parser-v2/iommulib.py b/linux-ramdump-parser-v2/iommulib.py index f7f8079..44934ad 100644 --- a/linux-ramdump-parser-v2/iommulib.py +++ b/linux-ramdump-parser-v2/iommulib.py @@ -104,7 +104,7 @@ class IommuLib(object): list_walker = llist.ListWalker( self.ramdump, list_attached, self.ramdump.field_offset('struct msm_iommu_ctx_drvdata', 'attached_elm')) - list_walker.walk(list_attached, self._iommu_list_func, extra=ctx_list) + list_walker.walk(list_attached, self._iommu_list_func, ctx_list) domain_list.append( Domain(domain_num, pg_table, redirect, ctx_list, client_name)) diff --git a/linux-ramdump-parser-v2/linux_list.py b/linux-ramdump-parser-v2/linux_list.py index cdcfca5..e1637be 100644 --- a/linux-ramdump-parser-v2/linux_list.py +++ b/linux-ramdump-parser-v2/linux_list.py @@ -32,13 +32,19 @@ class ListWalker(object): self.last_node = node_addr self.seen_nodes = [] - def walk(self, node_addr, func, extra=None): + def walk(self, node_addr, func, *args): + """Walk the linked list starting at `node_addr', calling `func' on + each node. `func' will be passed the current node and *args, + if given. + + """ while True: if node_addr == 0: break - func(node_addr - self.list_elem_offset, extra) + funcargs = [node_addr - self.list_elem_offset] + list(args) + func(*funcargs) next_node_addr = node_addr + self.ram_dump.field_offset('struct list_head', 'next') next_node = self.ram_dump.read_word(next_node_addr) -- GitLab