On Tue, Mar 10, 2020 at 07:10:10PM -0700, John Hubbard wrote: > 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 Hi John, I tested this patch only on arm64 build, not sure if any other build breakings. But I think any architecture is worth to support virt_to_pfn() API. Could you please send your compile-tested patch to x86 upstream? Thanks Qiwu