From 8904144c87072721326ef36c82312470b43a7fe2 Mon Sep 17 00:00:00 2001
From: Sarangdhar Joshi <spjoshi@codeaurora.org>
Date: Tue, 9 Jun 2015 17:35:22 -0700
Subject: [PATCH] lrdpv2: Add parsing support for 3.18 kernel

Add support to parse dmesg and workqueue output with 3.18 kernel

Change-Id: If31d4e7512f9da8a9f14fc6814fe57aab05d978d
---
 linux-ramdump-parser-v2/dmesglib.py          | 15 +++++++--------
 linux-ramdump-parser-v2/parsers/workqueue.py | 14 ++++++++------
 2 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/linux-ramdump-parser-v2/dmesglib.py b/linux-ramdump-parser-v2/dmesglib.py
index c22a2db..2375f59 100644
--- a/linux-ramdump-parser-v2/dmesglib.py
+++ b/linux-ramdump-parser-v2/dmesglib.py
@@ -132,11 +132,10 @@ class DmesgLib(object):
             curr_idx = self.verify_log(curr_idx, logbuf_addr, last_idx)
 
     def extract_dmesg(self):
-        if re.search('3.7.\d', self.ramdump.version) is not None:
-            self.extract_dmesg_binary()
-        elif re.search('3\.10\.\d', self.ramdump.version) is not None:
-            self.extract_dmesg_binary()
-        elif re.search('3\.14\.\d', self.ramdump.version) is not None:
-            self.extract_dmesg_binary()
-        else:
-            self.extract_dmesg_flat()
+        match = re.search('(\d+)\.(\d+)\.(\d+)', self.ramdump.version)
+        if match is not None:
+            major, minor, patch = map(int, match.groups())
+            if (major, minor) >= (3, 7):
+                self.extract_dmesg_binary()
+                return
+        self.extract_dmesg_flat()
diff --git a/linux-ramdump-parser-v2/parsers/workqueue.py b/linux-ramdump-parser-v2/parsers/workqueue.py
index 0fd3f21..dcecd42 100644
--- a/linux-ramdump-parser-v2/parsers/workqueue.py
+++ b/linux-ramdump-parser-v2/parsers/workqueue.py
@@ -441,9 +441,11 @@ class Workqueues(RamParser):
 
     def parse(self):
             ver = self.ramdump.version
-            if re.search('3.0.\d', ver) is not None:
+            match = re.search('(\d+)\.(\d+)\.(\d+)', ver)
+            major, minor, patch = map(int, match.groups())
+            if (major, minor) == (3, 0):
                     print_workqueue_state_3_0(self.ramdump)
-            if re.search('3.4.\d', ver) is not None:
+            elif (major, minor) == (3, 4):
                     # somebody did a backport of 3.7 workqueue patches to msm so
                     # need to detect new vs. old versions
                     idle_list_offset = self.ramdump.field_offset(
@@ -452,9 +454,9 @@ class Workqueues(RamParser):
                         self.print_workqueue_state_3_7(self.ramdump)
                     else:
                         self.print_workqueue_state_3_0(self.ramdump)
-            if re.search('3.7.\d', ver) is not None:
+            elif (major, minor) == (3, 7):
                     self.print_workqueue_state_3_7(self.ramdump)
-            if re.search('3.10.\d', ver) is not None:
-                    self.print_workqueue_state_3_10(self.ramdump)
-            if re.search('3.14.\d', ver) is not None:
+            elif (major, minor) >= (3, 10):
                     self.print_workqueue_state_3_10(self.ramdump)
+            else:
+                    print_out_str('Kernel version {0}.{1} is not yet supported for parsing workqueues'.format(major, minor))
-- 
GitLab