Messages in this thread | | | Date | Fri, 6 Dec 2019 09:51:26 +0800 | From | Wei Yang <> | Subject | Re: [Patch v2 4/6] x86/mm: Refine debug print string retrieval function |
| |
On Thu, Dec 05, 2019 at 10:13:11AM +0100, Peter Zijlstra wrote: >On Thu, Dec 05, 2019 at 10:14:01AM +0800, Wei Yang wrote: >> Generally, the mapping page size are: >> >> 4K, 2M, 1G >> >> except in case 32-bit without PAE, the mapping page size are: >> >> 4K, 4M >> >> Based on PG_LEVEL_X definition and mr->page_size_mask, we can calculate >> the mapping page size from a predefined string array. >> >> Signed-off-by: Wei Yang <richardw.yang@linux.intel.com> >> --- >> arch/x86/mm/init.c | 39 +++++++++++++-------------------------- >> 1 file changed, 13 insertions(+), 26 deletions(-) >> >> diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c >> index 0eb5edb63fa2..ded58a31c679 100644 >> --- a/arch/x86/mm/init.c >> +++ b/arch/x86/mm/init.c >> @@ -308,29 +308,20 @@ static void __ref adjust_range_page_size_mask(struct map_range *mr, >> } >> } >> >> +static void __meminit mr_print(struct map_range *mr, unsigned int maxidx) >> { >> +#if defined(CONFIG_X86_32) && !defined(CONFIG_X86_PAE) >> + static const char *sz[2] = { "4K", "4M" }; >> +#else >> + static const char *sz[4] = { "4K", "2M", "1G", "" }; >> +#endif >> + unsigned int idx, s; >> >> + for (idx = 0; idx < maxidx; idx++, mr++) { >> + s = (mr->page_size_mask >> PG_LEVEL_2M) & (ARRAY_SIZE(sz) - 1); > >Is it at all possible for !PAE to have 1G here, if you use the sz[4] >definition unconditionally? >
You mean remove the ifdef and use sz[4] for both condition?
Then how to differentiate 4M and 2M?
>> + pr_debug(" [mem %#010lx-%#010lx] page size %s\n", >> + mr->start, mr->end - 1, sz[s]); >> + } >> }
-- Wei Yang Help you, Help me
| |