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