Skip to content
Snippets Groups Projects
Commit 97bb3a74 authored by Shiraz Hashim's avatar Shiraz Hashim Committed by Gerrit - the friendly Code Review server
Browse files

lrdp_v2: Fix page_owner parsing on 32bit

ARM 32bit targets donot support SPARSE_MEM but FLAT_MEM
for managing page objects. Fix it to parse page owner
information for arm 32bit based dumps.

Change-Id: I3cda98836362256c643c4ca0fb494ed55bb61488
parent 3e46a959
No related branches found
No related tags found
No related merge requests found
...@@ -23,7 +23,10 @@ class PageTracking(RamParser): ...@@ -23,7 +23,10 @@ class PageTracking(RamParser):
return return
if (self.ramdump.kernel_version >= (3, 19, 0)): if (self.ramdump.kernel_version >= (3, 19, 0)):
mem_section = self.ramdump.read_word('mem_section') if self.ramdump.is_config_defined('CONFIG_SPARSEMEM'):
mem_section = self.ramdump.read_word('mem_section')
else:
mem_section = self.ramdump.address_of('contig_page_data')
trace_offset = 0 trace_offset = 0
nr_entries_offset = 0 nr_entries_offset = 0
...@@ -39,8 +42,13 @@ class PageTracking(RamParser): ...@@ -39,8 +42,13 @@ class PageTracking(RamParser):
trace_entries_offset = self.ramdump.field_offset( trace_entries_offset = self.ramdump.field_offset(
'struct page', 'trace_entries') 'struct page', 'trace_entries')
else: else:
page_ext_offset = self.ramdump.field_offset( if self.ramdump.is_config_defined('CONFIG_SPARSEMEM'):
page_ext_offset = self.ramdump.field_offset(
'struct mem_section', 'page_ext') 'struct mem_section', 'page_ext')
else:
page_ext_offset = self.ramdump.field_offset(
'struct pglist_data', 'node_page_ext')
trace_offset = self.ramdump.field_offset( trace_offset = self.ramdump.field_offset(
'struct page_ext', 'trace') 'struct page_ext', 'trace')
if self.ramdump.is_config_defined('CONFIG_STACKDEPOT'): if self.ramdump.is_config_defined('CONFIG_STACKDEPOT'):
...@@ -53,7 +61,10 @@ class PageTracking(RamParser): ...@@ -53,7 +61,10 @@ class PageTracking(RamParser):
nr_entries_offset = self.ramdump.field_offset( nr_entries_offset = self.ramdump.field_offset(
'struct page_ext', 'nr_entries') 'struct page_ext', 'nr_entries')
mem_section_size = self.ramdump.sizeof("struct mem_section") if self.ramdump.is_config_defined('CONFIG_SPARSEMEM'):
mem_section_size = self.ramdump.sizeof("struct mem_section")
else:
mem_section_size = 0;
page_ext_size = self.ramdump.sizeof("struct page_ext") page_ext_size = self.ramdump.sizeof("struct page_ext")
if self.ramdump.kernel_version >= (4,9,0): if self.ramdump.kernel_version >= (4,9,0):
page_owner_size = self.ramdump.sizeof("struct page_owner") page_owner_size = self.ramdump.sizeof("struct page_owner")
...@@ -86,11 +97,22 @@ class PageTracking(RamParser): ...@@ -86,11 +97,22 @@ class PageTracking(RamParser):
continue continue
offset = phys >> 30 offset = phys >> 30
mem_section_0_offset = ( if self.ramdump.is_config_defined('CONFIG_SPARSEMEM'):
mem_section_0_offset = (
mem_section + (offset * mem_section_size)) mem_section + (offset * mem_section_size))
page_ext = self.ramdump.read_word( page_ext = self.ramdump.read_word(
mem_section_0_offset + page_ext_offset) mem_section_0_offset + page_ext_offset)
temp_page_ext = page_ext + (pfn * page_ext_size) else:
page_ext = self.ramdump.read_word(
mem_section + page_ext_offset)
if self.ramdump.arm64:
temp_page_ext = page_ext + (pfn * page_ext_size)
else:
pfn_index = pfn - (self.ramdump.phys_offset >> 12)
temp_page_ext = page_ext + (pfn_index * page_ext_size)
if self.ramdump.kernel_version >= (4,9,0): if self.ramdump.kernel_version >= (4,9,0):
temp_page_ext = temp_page_ext + page_owner_ops_offset temp_page_ext = temp_page_ext + page_owner_ops_offset
order = self.ramdump.read_structure_field( order = self.ramdump.read_structure_field(
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment