diff --git a/linux-ramdump-parser-v2/parsers/slabinfo.py b/linux-ramdump-parser-v2/parsers/slabinfo.py index 3569b560110d99a5312a51f198d12db0cdf3366c..223564e60b7731c7888d270fbc8a36fcfb10e1a7 100644 --- a/linux-ramdump-parser-v2/parsers/slabinfo.py +++ b/linux-ramdump-parser-v2/parsers/slabinfo.py @@ -29,7 +29,7 @@ class Slabinfo(RamParser): def slab_index(self, ramdump, p, addr, slab): slab_size_offset = self.ramdump.field_offset( 'struct kmem_cache', 'size') - slab_size = self.ramdump.read_word(slab + slab_size_offset) + slab_size = self.ramdump.read_int(slab + slab_size_offset) if slab_size is None: return -1 return (p - addr) / slab_size @@ -56,10 +56,10 @@ class Slabinfo(RamParser): 'struct kmem_cache', 'offset') slab_inuse_offset = self.ramdump.field_offset( 'struct kmem_cache', 'inuse') - slab_offset = self.ramdump.read_word(slab + slab_offset_offset) - slab_inuse = self.ramdump.read_word(slab + slab_inuse_offset) + slab_offset = self.ramdump.read_int(slab + slab_offset_offset) + slab_inuse = self.ramdump.read_int(slab + slab_inuse_offset) if slab_offset != 0: - p = obj + slab_offset + 4 + p = obj + slab_offset + self.ramdump.sizeof("void *") else: p = obj + slab_inuse return p + track_type * track_size @@ -68,12 +68,13 @@ class Slabinfo(RamParser): p = self.get_track(self.ramdump, slab, obj, track_type) track_addrs_offset = self.ramdump.field_offset('struct track', 'addrs') start = p + track_addrs_offset + pointer_size = self.ramdump.sizeof("unsigned long") if track_type == 0: out_file.write(' ALLOC STACK\n') else: out_file.write(' FREE STACK\n') for i in range(0, 16): - a = self.ramdump.read_word(start + 4 * i) + a = self.ramdump.read_word(start + pointer_size * i) if a == 0: break look = self.ramdump.unwind_lookup(a) @@ -95,7 +96,7 @@ class Slabinfo(RamParser): # offset is always 0. Work around this for now map_count_offset = self.ramdump.field_offset( 'struct page', '_mapcount') - count = self.ramdump.read_word(page + map_count_offset) + count = self.ramdump.read_int(page + map_count_offset) if count is None: return None n_objects = (count >> 16) & 0xFFFF @@ -110,7 +111,7 @@ class Slabinfo(RamParser): return slab_size_offset = self.ramdump.field_offset( 'struct kmem_cache', 'size') - slab_size = self.ramdump.read_word(slab + slab_size_offset) + slab_size = self.ramdump.read_int(slab + slab_size_offset) if slab_size is None: return slab_max_offset = self.ramdump.field_offset('struct kmem_cache', 'max') @@ -216,8 +217,7 @@ class Slabinfo(RamParser): self.ramdump, slab, slab_node, slab_node_addr + slab_full_offset, slab_out) for i in range(0, cpus): - cpu_slabn_addr = cpu_slab_addr + \ - self.ramdump.read_word(per_cpu_offset + 4 * i) + cpu_slabn_addr = self.ramdump.read_word(cpu_slab_addr, cpu=i) self.print_per_cpu_slab_info( self.ramdump, slab, slab_node, cpu_slabn_addr + cpu_cache_page_offset, slab_out)