On 3/6/20 2:19 AM, qiwuchen55@xxxxxxxxx wrote: > From: chenqiwu <chenqiwu@xxxxxxxxxx> > > Use wrapped macros instead of open-coding for better code > readability. > > Signed-off-by: chenqiwu <chenqiwu@xxxxxxxxxx> This breaks my x86 (64-bit) build: mm/sparse.c: In function ‘check_usemap_section_nr’: mm/sparse.c:389:33: error: implicit declaration of function ‘virt_to_pfn’; did you mean ‘virt_to_phys’? [-Werror=implicit-function-declaration] 389 | usemap_snr = pfn_to_section_nr(virt_to_pfn(usage)); | ^~~~~~~~~~~ | virt_to_phys ...and I think the reason is that the arch/x86/include/asm/page.h does not have virt_to_pfn(). For that reason, I'm concerned that the following fix, which fixes up x86, may not completely correct for the patch. Here's a compile-tested (only, and only on x86 64-bit) fix: diff --git a/arch/x86/include/asm/page.h b/arch/x86/include/asm/page.h index 7555b48803a8..982bc76bf13c 100644 --- a/arch/x86/include/asm/page.h +++ b/arch/x86/include/asm/page.h @@ -62,6 +62,9 @@ static inline void copy_user_page(void *to, void *from, unsigned long vaddr, #define __boot_va(x) __va(x) #define __boot_pa(x) __pa(x) +#define virt_to_pfn(kaddr) (__pa(kaddr) >> PAGE_SHIFT) +#define pfn_to_virt(pfn) __va((pfn) << PAGE_SHIFT) + /* * virt_to_page(kaddr) returns a valid pointer if and only if * virt_addr_valid(kaddr) returns true. thanks, -- John Hubbard NVIDIA > --- > mm/sparse.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/mm/sparse.c b/mm/sparse.c > index 42c18a3..9b14164 100644 > --- a/mm/sparse.c > +++ b/mm/sparse.c > @@ -385,8 +385,8 @@ static void __init check_usemap_section_nr(int nid, > old_pgdat_snr = NR_MEM_SECTIONS; > } > > - usemap_snr = pfn_to_section_nr(__pa(usage) >> PAGE_SHIFT); > - pgdat_snr = pfn_to_section_nr(__pa(pgdat) >> PAGE_SHIFT); > + usemap_snr = pfn_to_section_nr(virt_to_pfn(usage)); > + pgdat_snr = pfn_to_section_nr(virt_to_pfn(pgdat)); > if (usemap_snr == pgdat_snr) > return; > > @@ -677,7 +677,7 @@ struct page * __meminit populate_section_memmap(unsigned long pfn, > > return NULL; > got_map_page: > - ret = (struct page *)pfn_to_kaddr(page_to_pfn(page)); > + ret = (struct page *)page_to_virt(page); > got_map_ptr: > > return ret; >