From d23a477d8829d22244bbc28bcb1ff342235efbdc Mon Sep 17 00:00:00 2001 From: Ankur Bansal <ankban@codeaurora.org> Date: Thu, 5 Apr 2018 16:31:11 +0530 Subject: [PATCH] lrdp_v2 : Fix for broken memstat.py print cached memory for all kernel version In some case, zram is not used so skip the calculation of zram compressed memory. Change-Id: I79d925fb56d3ce9f4e0ebf5244136332ada182a9 --- linux-ramdump-parser-v2/parsers/memstat.py | 48 +++++++++++++--------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/linux-ramdump-parser-v2/parsers/memstat.py b/linux-ramdump-parser-v2/parsers/memstat.py index 0650520..8477b2a 100644 --- a/linux-ramdump-parser-v2/parsers/memstat.py +++ b/linux-ramdump-parser-v2/parsers/memstat.py @@ -69,9 +69,14 @@ class MemStats(RamParser): return other_mem def calculate_cached(self): - vmstat_file_pages = self.ramdump.read_word( + if self.ramdump.kernel_version >= (4, 9): + vmstat_file_pages = self.ramdump.read_word( 'vm_node_stat[NR_FILE_PAGES]') - cached = self.pages_to_mb(vmstat_file_pages) + cached = self.pages_to_mb(vmstat_file_pages) + else: + vmstat_file_pages = self.ramdump.read_word( + 'vm_stat[NR_FILE_PAGES]') + cached = self.pages_to_mb(vmstat_file_pages) return cached def calculate_vm_node_zone_stat(self): @@ -161,7 +166,7 @@ class MemStats(RamParser): total_slab = self.pages_to_mb(slab_rec + slab_unrec) # others other_mem = self.calculate_vm_node_zone_stat() - cached = self.calculate_cached() + cached = self.calculate_cached() # ion memory ion_mem = self.calculate_ionmem() @@ -179,25 +184,28 @@ class MemStats(RamParser): 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 = 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 = self.ramdump.read_word(zram_meta) - 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: + if zram_index_idr is None: stat_val = 0 else: - page_allocated = mem_pool + self.ramdump.field_offset( - 'struct zs_pool', 'pages_allocated') - stat_val = self.ramdump.read_u64(page_allocated) - if stat_val is None: + 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 = self.ramdump.read_word(zram_meta) + 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 - stat_val = self.pages_to_mb(stat_val) + else: + page_allocated = mem_pool + self.ramdump.field_offset( + 'struct zs_pool', 'pages_allocated') + stat_val = self.ramdump.read_u64(page_allocated) + if stat_val is None: + stat_val = 0 + stat_val = self.pages_to_mb(stat_val) else: zram_devices_word = self.ramdump.read_word('zram_devices') if zram_devices_word is not None: @@ -206,6 +214,8 @@ class MemStats(RamParser): stat_addr = zram_devices_word + zram_devices_stat_offset stat_val = self.ramdump.read_u64(stat_addr) stat_val = self.bytes_to_mb(stat_val) + else: + stat_val = 0 self.out_mem_stat = out_mem_stat self.vmalloc_size = 0 -- GitLab