From 3506649d33b31b59da5dc33fcadc9888e65dd9d4 Mon Sep 17 00:00:00 2001
From: Ankur Bansal <ankban@codeaurora.org>
Date: Thu, 22 Mar 2018 12:33:13 +0530
Subject: [PATCH] lrdp_v2 : Fix for broken memstat.py for kernel 4.14

Fix for broken memstat.py for kernel 4.14
NR_SLAB_RECLAIMABLE and NR_SLAB_UNRECLAIMABLE moved to vm_node_stat
from vm_zone_stat in kernel 4.14

Change-Id: I7aa4575bd2dc350bef9eacf0eeeef9c84de807a3
---
 linux-ramdump-parser-v2/parsers/memstat.py | 49 +++++++++++++---------
 1 file changed, 30 insertions(+), 19 deletions(-)

diff --git a/linux-ramdump-parser-v2/parsers/memstat.py b/linux-ramdump-parser-v2/parsers/memstat.py
index d9cec38..0650520 100644
--- a/linux-ramdump-parser-v2/parsers/memstat.py
+++ b/linux-ramdump-parser-v2/parsers/memstat.py
@@ -96,6 +96,8 @@ class MemStats(RamParser):
         offset_total_allocated = \
             self.ramdump.field_offset(
                 'struct ion_heap', 'total_allocated')
+        if offset_total_allocated is None:
+            return "ion buffer debugging change is not there in this kernel"
         size = self.ramdump.sizeof(
                 '((struct ion_heap *)0x0)->total_allocated')
         if self.ramdump.arm64:
@@ -140,19 +142,26 @@ class MemStats(RamParser):
            #others
            other_mem = self.calculate_vm_stat()
         else:
-           # Free Memory
-           total_free = self.ramdump.read_word('vm_zone_stat[NR_FREE_PAGES]')
-           total_free = self.pages_to_mb(total_free)
+            # Free Memory
+            total_free = self.ramdump.read_word('vm_zone_stat[NR_FREE_PAGES]')
+            total_free = self.pages_to_mb(total_free)
+
+            # slab Memory
+            if (self.ramdump.kernel_version >= (4, 14)):
+                slab_rec = self.ramdump.read_word(
+                   'vm_node_stat[NR_SLAB_RECLAIMABLE]')
+                slab_unrec = self.ramdump.read_word(
+                   'vm_node_stat[NR_SLAB_UNRECLAIMABLE]')
+            else:
+                slab_rec = self.ramdump.read_word(
+                        'vm_zone_stat[NR_SLAB_RECLAIMABLE]')
+                slab_unrec = self.ramdump.read_word(
+                        'vm_zone_stat[NR_SLAB_UNRECLAIMABLE]')
 
-           # slab Memory
-           slab_rec = \
-               self.ramdump.read_word('vm_zone_stat[NR_SLAB_RECLAIMABLE]')
-           slab_unrec = \
-               self.ramdump.read_word('vm_zone_stat[NR_SLAB_UNRECLAIMABLE]')
-           total_slab = self.pages_to_mb(slab_rec + slab_unrec)
-           #others
-           other_mem = self.calculate_vm_node_zone_stat()
-           cached = self.calculate_cached()
+            total_slab = self.pages_to_mb(slab_rec + slab_unrec)
+            # others
+            other_mem = self.calculate_vm_node_zone_stat()
+            cached = self.calculate_cached()
 
         # ion memory
         ion_mem = self.calculate_ionmem()
@@ -166,17 +175,19 @@ class MemStats(RamParser):
             kgsl_memory = 0
 
         # zcompressed ram
-        if self.ramdump.kernel_version >= (4,4) :
+        if self.ramdump.kernel_version >= (4, 14):
+            stat_val = 0
+        elif self.ramdump.kernel_version >= (4, 4):
             zram_index_idr = self.ramdump.read_word('zram_index_idr')
-            idr_layer_ary_offset = self.ramdump.field_offset\
-                                        ('struct idr_layer','ary')
+            idr_layer_ary_offset = self.ramdump.field_offset(
+                        'struct idr_layer', 'ary')
             idr_layer_ary = self.ramdump.read_word(zram_index_idr +
                                                    idr_layer_ary_offset)
-            zram_meta = idr_layer_ary + self.ramdump.field_offset\
-                                            ('struct zram','meta')
+            zram_meta = idr_layer_ary + self.ramdump.field_offset(
+                            'struct zram', 'meta')
             zram_meta = self.ramdump.read_word(zram_meta)
-            mem_pool = zram_meta + self.ramdump.field_offset\
-                                        ('struct zram_meta','mem_pool')
+            mem_pool = zram_meta + self.ramdump.field_offset(
+                        'struct zram_meta', 'mem_pool')
             mem_pool = self.ramdump.read_word(mem_pool)
             if mem_pool is None:
                 stat_val = 0
-- 
GitLab