From 001912c1157fcea7401e1250892050252132a167 Mon Sep 17 00:00:00 2001
From: Sudhir Kumar Reddy Varakantham <skvara@codeaurora.org>
Date: Fri, 15 Dec 2017 15:09:26 +0530
Subject: [PATCH] lrdp_v2 : Fix for broken watchdog_v2.py for kernel < 4.4

For kernel version less than 4.4, as the member variable timer_expired
is not available we need to get watchdog timer expire status

Change-Id: I28db293d7d0300d55f5ae0abac188205b80d0359
Signed-off-by: Sudhir Kumar Reddy Varakantham <skvara@codeaurora.org>
---
 linux-ramdump-parser-v2/watchdog_v2.py | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/linux-ramdump-parser-v2/watchdog_v2.py b/linux-ramdump-parser-v2/watchdog_v2.py
index 0f9d5e8..63b3242 100644
--- a/linux-ramdump-parser-v2/watchdog_v2.py
+++ b/linux-ramdump-parser-v2/watchdog_v2.py
@@ -848,9 +848,22 @@ def get_wdog_timing(ramdump):
         wdog_data_addr + pet_timer_off + timer_expires_off)
     wdog_last_pet = ramdump.read_structure_field(
         wdog_data_addr, 'struct msm_watchdog_data', 'last_pet')
-    timer_expired_off = ramdump.field_offset(
-        'struct msm_watchdog_data', 'timer_expired')
-    pet_timer_expired = ramdump.read_word(wdog_data_addr + timer_expired_off)
+    #For kernel version less than 4.4, as the member variable timer_expired
+    #  is not available we need to get watchdog timer expire status
+    if (ramdump.kernel_version < (4, 4)):
+        pet_timer_entry_offset = ramdump.field_offset('struct timer_list', 'entry')
+        pet_timer_prev_offset = ramdump.field_offset('struct list_head', 'prev')
+        pet_timer_entry_prev = ramdump.read_word(
+            wdog_data_addr + pet_timer_off + pet_timer_entry_offset + pet_timer_prev_offset)
+
+        if(pet_timer_entry_prev == '0x200'):
+            pet_timer_expired = 1
+        else:
+            pet_timer_expired = 0
+    else:
+        timer_expired_off = ramdump.field_offset(
+            'struct msm_watchdog_data', 'timer_expired')
+        pet_timer_expired = ramdump.read_word(wdog_data_addr + timer_expired_off)
     pet_time_off = ramdump.field_offset('struct msm_watchdog_data', 'pet_time')
     bark_time_off = ramdump.field_offset(
         'struct msm_watchdog_data', 'bark_time')
-- 
GitLab