From b80259950758628383da8c9353b6465ac23a02a1 Mon Sep 17 00:00:00 2001
From: Runmin Wang <runminw@codeaurora.org>
Date: Fri, 20 Jan 2017 10:56:32 -0800
Subject: [PATCH] lrdp-v2: Check if tvec_base_deferrable exisits

tvec_base_deferrable is defined after msm-3.18. Add a check to skip
dumping this for previous kernel version

Change-Id: Ib2de82c5c6549d9ca5d53c96019fc47621a02e23
---
 linux-ramdump-parser-v2/parsers/timerlist.py | 49 ++++++++++----------
 1 file changed, 25 insertions(+), 24 deletions(-)

diff --git a/linux-ramdump-parser-v2/parsers/timerlist.py b/linux-ramdump-parser-v2/parsers/timerlist.py
index e72501c..80510a0 100755
--- a/linux-ramdump-parser-v2/parsers/timerlist.py
+++ b/linux-ramdump-parser-v2/parsers/timerlist.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
+# Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License version 2 and
@@ -100,31 +100,32 @@ class TimerList(RamParser) :
         self.output_file.write("Timer List Dump\n\n")
 
         tvec_base_deferral_addr = self.ramdump.address_of('tvec_base_deferrable')
-        timer_jiffies_addr = tvec_base_deferral_addr + self.ramdump.field_offset('struct tvec_base', 'timer_jiffies')
-        next_timer_addr = tvec_base_deferral_addr + self.ramdump.field_offset('struct tvec_base', 'next_timer')
-
-        timer_jiffies = self.ramdump.read_word(timer_jiffies_addr)
-        next_timer = self.ramdump.read_word(next_timer_addr)
-        active_timers_offset = self.ramdump.field_offset('struct tvec_base', 'active_timers')
-        if active_timers_offset is not None:
-                active_timers_addr = tvec_base_deferral_addr + self.ramdump.field_offset('struct tvec_base', 'active_timers')
-                active_timers = self.ramdump.read_word(active_timers_addr)
-        else:
-                active_timers = "NA"
+        if tvec_base_deferral_addr:
+            timer_jiffies_addr = tvec_base_deferral_addr + self.ramdump.field_offset('struct tvec_base', 'timer_jiffies')
+            next_timer_addr = tvec_base_deferral_addr + self.ramdump.field_offset('struct tvec_base', 'next_timer')
 
-        title = "(deferrable_base: {0:x} ".format(tvec_base_deferral_addr)
-        title += "timer_jiffies: {0} next_timer: {1} active_timers: {2})\n".format(timer_jiffies, next_timer, active_timers)
-        self.output_file.write("-" * len(title) + "\n")
-        self.output_file.write(title)
-        self.output_file.write("-" * len(title) + "\n\n")
-
-        for vec in sorted(self.vectors):
-            self.output = []
-            if self.timer_42:
-                  self.iterate_vec_v2(vec, tvec_base_deferral_addr)
+            timer_jiffies = self.ramdump.read_word(timer_jiffies_addr)
+            next_timer = self.ramdump.read_word(next_timer_addr)
+            active_timers_offset = self.ramdump.field_offset('struct tvec_base', 'active_timers')
+            if active_timers_offset is not None:
+                    active_timers_addr = tvec_base_deferral_addr + self.ramdump.field_offset('struct tvec_base', 'active_timers')
+                    active_timers = self.ramdump.read_word(active_timers_addr)
             else:
-                 self.iterate_vec(vec, tvec_base_deferral_addr)
-            self.print_vec(vec)
+                    active_timers = "NA"
+
+            title = "(deferrable_base: {0:x} ".format(tvec_base_deferral_addr)
+            title += "timer_jiffies: {0} next_timer: {1} active_timers: {2})\n".format(timer_jiffies, next_timer, active_timers)
+            self.output_file.write("-" * len(title) + "\n")
+            self.output_file.write(title)
+            self.output_file.write("-" * len(title) + "\n\n")
+
+            for vec in sorted(self.vectors):
+                self.output = []
+                if self.timer_42:
+                      self.iterate_vec_v2(vec, tvec_base_deferral_addr)
+                else:
+                     self.iterate_vec(vec, tvec_base_deferral_addr)
+                self.print_vec(vec)
 
         tvec_bases_addr = self.ramdump.address_of('tvec_bases')
 
-- 
GitLab