virt_to_page() is typically implemented as a macro containing a cast so it'll accept both pointers and unsigned long without causing a warning. MIPS virt_to_page() uses virt_to_phys which is a function so passing an unsigned long will cause a warning: CC mm/page_alloc.o /home/ralf/src/linux/linux-mips/mm/page_alloc.c: In function ‘free_reserved_area’: /home/ralf/src/linux/linux-mips/mm/page_alloc.c:5161:3: warning: passing argument 1 of ‘virt_to_phys’ makes pointer from integer without a cast [enabled by default] In file included from /home/ralf/src/linux/linux-mips/arch/mips/include/asm/page.h:153:0, from /home/ralf/src/linux/linux-mips/include/linux/mmzone.h:20, from /home/ralf/src/linux/linux-mips/include/linux/gfp.h:4, from /home/ralf/src/linux/linux-mips/include/linux/mm.h:8, from /home/ralf/src/linux/linux-mips/mm/page_alloc.c:18: /home/ralf/src/linux/linux-mips/arch/mips/include/asm/io.h:119:100: note: expected ‘const volatile void *’ but argument is of type ‘long unsigned int’ All others users of virt_to_page() in mm/ are passing a void *. Signed-off-by: Ralf Baechle <ralf@xxxxxxxxxxxxxx> Reported-by: Eunbong Song <eunb.song@xxxxxxxxxxx> Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> Cc: linux-kernel@xxxxxxxxxxxxxxx Cc: linux-mm@xxxxxxxxx Cc: linux-mips@xxxxxxxxxxxxxx --- mm/page_alloc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 98cbdf6..378a15b 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -5158,7 +5158,7 @@ unsigned long free_reserved_area(unsigned long start, unsigned long end, for (pages = 0; pos < end; pos += PAGE_SIZE, pages++) { if (poison) memset((void *)pos, poison, PAGE_SIZE); - free_reserved_page(virt_to_page(pos)); + free_reserved_page(virt_to_page((void *)pos)); } if (pages && s)