* [PATCH 0/3] mm, arch: add generic implementation of pfn_valid() for FLATMEM
@ 2023-01-25 19:07 Mike Rapoport
2023-01-25 19:07 ` [PATCH 1/3] m68k: use asm-generic/memory_model.h for both MMU and !MMU Mike Rapoport
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Mike Rapoport @ 2023-01-25 19:07 UTC (permalink / raw)
To: Andrew Morton
Cc: Rich Felker, linux-ia64, linux-sh, x86, linux-mips, Max Filippov,
Guo Ren, sparclinux, linux-hexagon, WANG Xuerui, Greg Ungerer,
linux-arch, Yoshinori Sato, Michael Ellerman, Helge Deller,
Huacai Chen, linux-riscv, Vineet Gupta, Matt Turner,
linux-snps-arc, linux--csky, Arnd Bergmann, linux-xtensa,
linux-um, Richard Weinberger, linux-m68k, openrisc, loongarch,
Stafford Horne, Brian Cain, Michal Simek, Thomas Bogendoerfer,
linux-parisc, linux-kernel, Dinh Nguyen, Palmer Dabbelt,
linux-alpha, linuxppc-dev, David S. Miller, Mike Rapoport (IBM)
From: "Mike Rapoport (IBM)" <rppt@kernel.org>
Hi,
Every architecture that supports FLATMEM memory model defines its own
version of pfn_valid() that essentially compares a pfn to max_mapnr.
Use mips/powerpc version implemented as static inline as a generic
implementation of pfn_valid() and drop its per-architecture definitions
Mike Rapoport (IBM) (3):
m68k: use asm-generic/memory_model.h for both MMU and !MMU
mips: drop definition of pfn_valid() for DISCONTIGMEM
mm, arch: add generic implementation of pfn_valid() for FLATMEM
arch/alpha/include/asm/page.h | 4 ----
arch/arc/include/asm/page.h | 1 -
arch/csky/include/asm/page.h | 1 -
arch/hexagon/include/asm/page.h | 1 -
arch/ia64/include/asm/page.h | 4 ----
arch/loongarch/include/asm/page.h | 13 -------------
arch/m68k/include/asm/page.h | 6 +-----
arch/m68k/include/asm/page_mm.h | 1 -
arch/m68k/include/asm/page_no.h | 4 ----
arch/microblaze/include/asm/page.h | 1 -
arch/mips/include/asm/page.h | 28 ----------------------------
arch/nios2/include/asm/page.h | 9 ---------
arch/openrisc/include/asm/page.h | 2 --
arch/parisc/include/asm/page.h | 4 ----
arch/powerpc/include/asm/page.h | 9 ---------
arch/riscv/include/asm/page.h | 5 -----
arch/sh/include/asm/page.h | 3 ---
arch/sparc/include/asm/page_32.h | 1 -
arch/um/include/asm/page.h | 1 -
arch/x86/include/asm/page_32.h | 4 ----
arch/x86/include/asm/page_64.h | 4 ----
arch/xtensa/include/asm/page.h | 2 --
include/asm-generic/memory_model.h | 12 ++++++++++++
include/asm-generic/page.h | 2 --
24 files changed, 13 insertions(+), 109 deletions(-)
base-commit: 2241ab53cbb5cdb08a6b2d4688feb13971058f65
--
2.35.1
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH 1/3] m68k: use asm-generic/memory_model.h for both MMU and !MMU 2023-01-25 19:07 [PATCH 0/3] mm, arch: add generic implementation of pfn_valid() for FLATMEM Mike Rapoport @ 2023-01-25 19:07 ` Mike Rapoport 2023-01-26 8:20 ` Geert Uytterhoeven 2023-01-25 19:07 ` [PATCH 2/3] mips: drop definition of pfn_valid() for DISCONTIGMEM Mike Rapoport 2023-01-25 19:07 ` [PATCH 3/3] mm, arch: add generic implementation of pfn_valid() for FLATMEM Mike Rapoport 2 siblings, 1 reply; 8+ messages in thread From: Mike Rapoport @ 2023-01-25 19:07 UTC (permalink / raw) To: Andrew Morton Cc: Rich Felker, linux-ia64, linux-sh, x86, linux-mips, Max Filippov, Guo Ren, sparclinux, linux-hexagon, WANG Xuerui, Greg Ungerer, linux-arch, Yoshinori Sato, Michael Ellerman, Helge Deller, Huacai Chen, linux-riscv, Vineet Gupta, Matt Turner, linux-snps-arc, linux--csky, Arnd Bergmann, linux-xtensa, linux-um, Richard Weinberger, linux-m68k, openrisc, loongarch, Stafford Horne, Brian Cain, Michal Simek, Thomas Bogendoerfer, linux-parisc, linux-kernel, Dinh Nguyen, Palmer Dabbelt, linux-alpha, linuxppc-dev, David S. Miller, Mike Rapoport (IBM) From: "Mike Rapoport (IBM)" <rppt@kernel.org> The MMU variant uses generic definitions of page_to_pfn() and pfn_to_page(), but !MMU defines them in include/asm/page_no.h for no good reason. Include asm-generic/memory_model.h in the common include/asm/page.h and drop redundant definitions. Signed-off-by: Mike Rapoport (IBM) <rppt@kernel.org> --- arch/m68k/include/asm/page.h | 6 +----- arch/m68k/include/asm/page_mm.h | 1 - arch/m68k/include/asm/page_no.h | 2 -- 3 files changed, 1 insertion(+), 8 deletions(-) diff --git a/arch/m68k/include/asm/page.h b/arch/m68k/include/asm/page.h index 2f1c54e4725d..a5993ad83ed8 100644 --- a/arch/m68k/include/asm/page.h +++ b/arch/m68k/include/asm/page.h @@ -62,11 +62,7 @@ extern unsigned long _ramend; #include <asm/page_no.h> #endif -#ifndef CONFIG_MMU -#define __phys_to_pfn(paddr) ((unsigned long)((paddr) >> PAGE_SHIFT)) -#define __pfn_to_phys(pfn) PFN_PHYS(pfn) -#endif - #include <asm-generic/getorder.h> +#include <asm-generic/memory_model.h> #endif /* _M68K_PAGE_H */ diff --git a/arch/m68k/include/asm/page_mm.h b/arch/m68k/include/asm/page_mm.h index a5b459bcb7d8..3903db2e8da7 100644 --- a/arch/m68k/include/asm/page_mm.h +++ b/arch/m68k/include/asm/page_mm.h @@ -134,7 +134,6 @@ extern int m68k_virt_to_node_shift; }) #define ARCH_PFN_OFFSET (m68k_memory[0].addr >> PAGE_SHIFT) -#include <asm-generic/memory_model.h> #define virt_addr_valid(kaddr) ((unsigned long)(kaddr) >= PAGE_OFFSET && (unsigned long)(kaddr) < (unsigned long)high_memory) #define pfn_valid(pfn) virt_addr_valid(pfn_to_virt(pfn)) diff --git a/arch/m68k/include/asm/page_no.h b/arch/m68k/include/asm/page_no.h index c9d0d84158a4..0a8ccef777fd 100644 --- a/arch/m68k/include/asm/page_no.h +++ b/arch/m68k/include/asm/page_no.h @@ -26,8 +26,6 @@ extern unsigned long memory_end; #define virt_to_page(addr) (mem_map + (((unsigned long)(addr)-PAGE_OFFSET) >> PAGE_SHIFT)) #define page_to_virt(page) __va(((((page) - mem_map) << PAGE_SHIFT) + PAGE_OFFSET)) -#define pfn_to_page(pfn) virt_to_page(pfn_to_virt(pfn)) -#define page_to_pfn(page) virt_to_pfn(page_to_virt(page)) #define pfn_valid(pfn) ((pfn) < max_mapnr) #define virt_addr_valid(kaddr) (((unsigned long)(kaddr) >= PAGE_OFFSET) && \ -- 2.35.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] m68k: use asm-generic/memory_model.h for both MMU and !MMU 2023-01-25 19:07 ` [PATCH 1/3] m68k: use asm-generic/memory_model.h for both MMU and !MMU Mike Rapoport @ 2023-01-26 8:20 ` Geert Uytterhoeven 0 siblings, 0 replies; 8+ messages in thread From: Geert Uytterhoeven @ 2023-01-26 8:20 UTC (permalink / raw) To: Mike Rapoport Cc: Rich Felker, linux-ia64, linux-sh, x86, linux-mips, Max Filippov, Guo Ren, sparclinux, linux-hexagon, WANG Xuerui, Greg Ungerer, linux-arch, Yoshinori Sato, Michael Ellerman, Helge Deller, Huacai Chen, linux-riscv, Vineet Gupta, Matt Turner, linux-snps-arc, linux--csky, Arnd Bergmann, linux-xtensa, linux-um, Richard Weinberger, linux-m68k, openrisc, loongarch, Stafford Horne, Brian Cain, Michal Simek, Thomas Bogendoerfer, linux-parisc, linux-kernel, Dinh Nguyen, Palmer Dabbelt, linux-alpha, Andrew Morton, linuxppc-dev, David S. Miller On Wed, Jan 25, 2023 at 8:08 PM Mike Rapoport <rppt@kernel.org> wrote: > From: "Mike Rapoport (IBM)" <rppt@kernel.org> > > The MMU variant uses generic definitions of page_to_pfn() and > pfn_to_page(), but !MMU defines them in include/asm/page_no.h for no > good reason. > > Include asm-generic/memory_model.h in the common include/asm/page.h and > drop redundant definitions. > > Signed-off-by: Mike Rapoport (IBM) <rppt@kernel.org> Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org> Acked-by: Geert Uytterhoeven <geert@linux-m68k.org> Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/3] mips: drop definition of pfn_valid() for DISCONTIGMEM 2023-01-25 19:07 [PATCH 0/3] mm, arch: add generic implementation of pfn_valid() for FLATMEM Mike Rapoport 2023-01-25 19:07 ` [PATCH 1/3] m68k: use asm-generic/memory_model.h for both MMU and !MMU Mike Rapoport @ 2023-01-25 19:07 ` Mike Rapoport 2023-01-25 19:07 ` [PATCH 3/3] mm, arch: add generic implementation of pfn_valid() for FLATMEM Mike Rapoport 2 siblings, 0 replies; 8+ messages in thread From: Mike Rapoport @ 2023-01-25 19:07 UTC (permalink / raw) To: Andrew Morton Cc: Rich Felker, linux-ia64, linux-sh, x86, linux-mips, Max Filippov, Guo Ren, sparclinux, linux-hexagon, WANG Xuerui, Greg Ungerer, linux-arch, Yoshinori Sato, Michael Ellerman, Helge Deller, Huacai Chen, linux-riscv, Vineet Gupta, Matt Turner, linux-snps-arc, linux--csky, Arnd Bergmann, linux-xtensa, linux-um, Richard Weinberger, linux-m68k, openrisc, loongarch, Stafford Horne, Brian Cain, Michal Simek, Thomas Bogendoerfer, linux-parisc, linux-kernel, Dinh Nguyen, Palmer Dabbelt, linux-alpha, linuxppc-dev, David S. Miller, Mike Rapoport (IBM) From: "Mike Rapoport (IBM)" <rppt@kernel.org> There is stale definition of pfn_valid() for DISCONTINGMEM memory model guarded !FLATMEM && !SPARSEMEM && NUMA ifdefery. Remove everything but definition of pfn_valid() for FLATMEM. Signed-off-by: Mike Rapoport (IBM) <rppt@kernel.org> --- arch/mips/include/asm/page.h | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/arch/mips/include/asm/page.h b/arch/mips/include/asm/page.h index 96bc798c1ec1..9286f11ff6ad 100644 --- a/arch/mips/include/asm/page.h +++ b/arch/mips/include/asm/page.h @@ -235,21 +235,6 @@ static inline int pfn_valid(unsigned long pfn) return pfn >= pfn_offset && pfn < max_mapnr; } -#elif defined(CONFIG_SPARSEMEM) - -/* pfn_valid is defined in linux/mmzone.h */ - -#elif defined(CONFIG_NUMA) - -#define pfn_valid(pfn) \ -({ \ - unsigned long __pfn = (pfn); \ - int __n = pfn_to_nid(__pfn); \ - ((__n >= 0) ? (__pfn < NODE_DATA(__n)->node_start_pfn + \ - NODE_DATA(__n)->node_spanned_pages) \ - : 0); \ -}) - #endif #define virt_to_pfn(kaddr) PFN_DOWN(virt_to_phys((void *)(kaddr))) -- 2.35.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 3/3] mm, arch: add generic implementation of pfn_valid() for FLATMEM 2023-01-25 19:07 [PATCH 0/3] mm, arch: add generic implementation of pfn_valid() for FLATMEM Mike Rapoport 2023-01-25 19:07 ` [PATCH 1/3] m68k: use asm-generic/memory_model.h for both MMU and !MMU Mike Rapoport 2023-01-25 19:07 ` [PATCH 2/3] mips: drop definition of pfn_valid() for DISCONTIGMEM Mike Rapoport @ 2023-01-25 19:07 ` Mike Rapoport 2023-01-26 1:45 ` Andrew Morton 2023-01-27 1:58 ` Guo Ren 2 siblings, 2 replies; 8+ messages in thread From: Mike Rapoport @ 2023-01-25 19:07 UTC (permalink / raw) To: Andrew Morton Cc: Rich Felker, linux-ia64, linux-sh, x86, linux-mips, Max Filippov, Guo Ren, sparclinux, linux-hexagon, WANG Xuerui, Greg Ungerer, linux-arch, Yoshinori Sato, Michael Ellerman, Helge Deller, Huacai Chen, linux-riscv, Vineet Gupta, Matt Turner, linux-snps-arc, linux--csky, Arnd Bergmann, linux-xtensa, linux-um, Richard Weinberger, linux-m68k, openrisc, loongarch, Stafford Horne, Brian Cain, Michal Simek, Thomas Bogendoerfer, linux-parisc, linux-kernel, Dinh Nguyen, Palmer Dabbelt, linux-alpha, linuxppc-dev, David S. Miller, Mike Rapoport (IBM) From: "Mike Rapoport (IBM)" <rppt@kernel.org> Every architecture that supports FLATMEM memory model defines its own version of pfn_valid() that essentially compares a pfn to max_mapnr. Use mips/powerpc version implemented as static inline as a generic implementation of pfn_valid() and drop its per-architecture definitions Signed-off-by: Mike Rapoport (IBM) <rppt@kernel.org> --- arch/alpha/include/asm/page.h | 4 ---- arch/arc/include/asm/page.h | 1 - arch/csky/include/asm/page.h | 1 - arch/hexagon/include/asm/page.h | 1 - arch/ia64/include/asm/page.h | 4 ---- arch/loongarch/include/asm/page.h | 13 ------------- arch/m68k/include/asm/page_no.h | 2 -- arch/microblaze/include/asm/page.h | 1 - arch/mips/include/asm/page.h | 13 ------------- arch/nios2/include/asm/page.h | 9 --------- arch/openrisc/include/asm/page.h | 2 -- arch/parisc/include/asm/page.h | 4 ---- arch/powerpc/include/asm/page.h | 9 --------- arch/riscv/include/asm/page.h | 5 ----- arch/sh/include/asm/page.h | 3 --- arch/sparc/include/asm/page_32.h | 1 - arch/um/include/asm/page.h | 1 - arch/x86/include/asm/page_32.h | 4 ---- arch/x86/include/asm/page_64.h | 4 ---- arch/xtensa/include/asm/page.h | 2 -- include/asm-generic/memory_model.h | 12 ++++++++++++ include/asm-generic/page.h | 2 -- 22 files changed, 12 insertions(+), 86 deletions(-) diff --git a/arch/alpha/include/asm/page.h b/arch/alpha/include/asm/page.h index 8f3f5eecba28..227d32b6b75f 100644 --- a/arch/alpha/include/asm/page.h +++ b/arch/alpha/include/asm/page.h @@ -87,10 +87,6 @@ typedef struct page *pgtable_t; #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) #define virt_addr_valid(kaddr) pfn_valid((__pa(kaddr) >> PAGE_SHIFT)) -#ifdef CONFIG_FLATMEM -#define pfn_valid(pfn) ((pfn) < max_mapnr) -#endif /* CONFIG_FLATMEM */ - #include <asm-generic/memory_model.h> #include <asm-generic/getorder.h> diff --git a/arch/arc/include/asm/page.h b/arch/arc/include/asm/page.h index 9a62e1d87967..e43fe27ec54d 100644 --- a/arch/arc/include/asm/page.h +++ b/arch/arc/include/asm/page.h @@ -109,7 +109,6 @@ extern int pfn_valid(unsigned long pfn); #else /* CONFIG_HIGHMEM */ #define ARCH_PFN_OFFSET virt_to_pfn(CONFIG_LINUX_RAM_BASE) -#define pfn_valid(pfn) (((pfn) - ARCH_PFN_OFFSET) < max_mapnr) #endif /* CONFIG_HIGHMEM */ diff --git a/arch/csky/include/asm/page.h b/arch/csky/include/asm/page.h index ed7451478b1b..b23e3006a9e0 100644 --- a/arch/csky/include/asm/page.h +++ b/arch/csky/include/asm/page.h @@ -39,7 +39,6 @@ #define virt_addr_valid(kaddr) ((void *)(kaddr) >= (void *)PAGE_OFFSET && \ (void *)(kaddr) < high_memory) -#define pfn_valid(pfn) ((pfn) >= ARCH_PFN_OFFSET && ((pfn) - ARCH_PFN_OFFSET) < max_mapnr) extern void *memset(void *dest, int c, size_t l); extern void *memcpy(void *to, const void *from, size_t l); diff --git a/arch/hexagon/include/asm/page.h b/arch/hexagon/include/asm/page.h index d7d4f9fca327..9c03b9965f07 100644 --- a/arch/hexagon/include/asm/page.h +++ b/arch/hexagon/include/asm/page.h @@ -95,7 +95,6 @@ struct page; /* Default vm area behavior is non-executable. */ #define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_NON_EXEC -#define pfn_valid(pfn) ((pfn) < max_mapnr) #define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT) /* Need to not use a define for linesize; may move this to another file. */ diff --git a/arch/ia64/include/asm/page.h b/arch/ia64/include/asm/page.h index 1b990466d540..783eceab5df3 100644 --- a/arch/ia64/include/asm/page.h +++ b/arch/ia64/include/asm/page.h @@ -97,10 +97,6 @@ do { \ #include <asm-generic/memory_model.h> -#ifdef CONFIG_FLATMEM -# define pfn_valid(pfn) ((pfn) < max_mapnr) -#endif - #define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT) #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) diff --git a/arch/loongarch/include/asm/page.h b/arch/loongarch/include/asm/page.h index 53f284a96182..fb5338b352e6 100644 --- a/arch/loongarch/include/asm/page.h +++ b/arch/loongarch/include/asm/page.h @@ -82,19 +82,6 @@ typedef struct { unsigned long pgprot; } pgprot_t; #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) -#ifdef CONFIG_FLATMEM - -static inline int pfn_valid(unsigned long pfn) -{ - /* avoid <linux/mm.h> include hell */ - extern unsigned long max_mapnr; - unsigned long pfn_offset = ARCH_PFN_OFFSET; - - return pfn >= pfn_offset && pfn < max_mapnr; -} - -#endif - #define virt_to_pfn(kaddr) PFN_DOWN(PHYSADDR(kaddr)) #define virt_to_page(kaddr) pfn_to_page(virt_to_pfn(kaddr)) diff --git a/arch/m68k/include/asm/page_no.h b/arch/m68k/include/asm/page_no.h index 0a8ccef777fd..2555ec57149d 100644 --- a/arch/m68k/include/asm/page_no.h +++ b/arch/m68k/include/asm/page_no.h @@ -26,8 +26,6 @@ extern unsigned long memory_end; #define virt_to_page(addr) (mem_map + (((unsigned long)(addr)-PAGE_OFFSET) >> PAGE_SHIFT)) #define page_to_virt(page) __va(((((page) - mem_map) << PAGE_SHIFT) + PAGE_OFFSET)) -#define pfn_valid(pfn) ((pfn) < max_mapnr) - #define virt_addr_valid(kaddr) (((unsigned long)(kaddr) >= PAGE_OFFSET) && \ ((unsigned long)(kaddr) < memory_end)) diff --git a/arch/microblaze/include/asm/page.h b/arch/microblaze/include/asm/page.h index 4b8b2fa78fc5..7b9861bcd458 100644 --- a/arch/microblaze/include/asm/page.h +++ b/arch/microblaze/include/asm/page.h @@ -112,7 +112,6 @@ extern int page_is_ram(unsigned long pfn); # define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT) # define ARCH_PFN_OFFSET (memory_start >> PAGE_SHIFT) -# define pfn_valid(pfn) ((pfn) >= ARCH_PFN_OFFSET && (pfn) < (max_mapnr + ARCH_PFN_OFFSET)) # endif /* __ASSEMBLY__ */ #define virt_addr_valid(vaddr) (pfn_valid(virt_to_pfn(vaddr))) diff --git a/arch/mips/include/asm/page.h b/arch/mips/include/asm/page.h index 9286f11ff6ad..5978a8dfb917 100644 --- a/arch/mips/include/asm/page.h +++ b/arch/mips/include/asm/page.h @@ -224,19 +224,6 @@ extern phys_addr_t __phys_addr_symbol(unsigned long x); #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) -#ifdef CONFIG_FLATMEM - -static inline int pfn_valid(unsigned long pfn) -{ - /* avoid <linux/mm.h> include hell */ - extern unsigned long max_mapnr; - unsigned long pfn_offset = ARCH_PFN_OFFSET; - - return pfn >= pfn_offset && pfn < max_mapnr; -} - -#endif - #define virt_to_pfn(kaddr) PFN_DOWN(virt_to_phys((void *)(kaddr))) #define virt_to_page(kaddr) pfn_to_page(virt_to_pfn(kaddr)) diff --git a/arch/nios2/include/asm/page.h b/arch/nios2/include/asm/page.h index 6a989819a7c1..0ae7d9ce369b 100644 --- a/arch/nios2/include/asm/page.h +++ b/arch/nios2/include/asm/page.h @@ -86,15 +86,6 @@ extern struct page *mem_map; # define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) -static inline bool pfn_valid(unsigned long pfn) -{ - /* avoid <linux/mm.h> include hell */ - extern unsigned long max_mapnr; - unsigned long pfn_offset = ARCH_PFN_OFFSET; - - return pfn >= pfn_offset && pfn < max_mapnr; -} - # define virt_to_page(vaddr) pfn_to_page(PFN_DOWN(virt_to_phys(vaddr))) # define virt_addr_valid(vaddr) pfn_valid(PFN_DOWN(virt_to_phys(vaddr))) diff --git a/arch/openrisc/include/asm/page.h b/arch/openrisc/include/asm/page.h index aab6e64d6db4..52b0d7e76446 100644 --- a/arch/openrisc/include/asm/page.h +++ b/arch/openrisc/include/asm/page.h @@ -80,8 +80,6 @@ typedef struct page *pgtable_t; #define page_to_phys(page) ((dma_addr_t)page_to_pfn(page) << PAGE_SHIFT) -#define pfn_valid(pfn) ((pfn) < max_mapnr) - #define virt_addr_valid(kaddr) (pfn_valid(virt_to_pfn(kaddr))) #endif /* __ASSEMBLY__ */ diff --git a/arch/parisc/include/asm/page.h b/arch/parisc/include/asm/page.h index 6faaaa3ebe9b..667e703c0e8f 100644 --- a/arch/parisc/include/asm/page.h +++ b/arch/parisc/include/asm/page.h @@ -155,10 +155,6 @@ extern int npmem_ranges; #define __pa(x) ((unsigned long)(x)-PAGE_OFFSET) #define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET)) -#ifndef CONFIG_SPARSEMEM -#define pfn_valid(pfn) ((pfn) < max_mapnr) -#endif - #ifdef CONFIG_HUGETLB_PAGE #define HPAGE_SHIFT PMD_SHIFT /* fixed for transparent huge pages */ #define HPAGE_SIZE ((1UL) << HPAGE_SHIFT) diff --git a/arch/powerpc/include/asm/page.h b/arch/powerpc/include/asm/page.h index edf1dd1b0ca9..f2b6bf5687d0 100644 --- a/arch/powerpc/include/asm/page.h +++ b/arch/powerpc/include/asm/page.h @@ -117,15 +117,6 @@ extern long long virt_phys_offset; #ifdef CONFIG_FLATMEM #define ARCH_PFN_OFFSET ((unsigned long)(MEMORY_START >> PAGE_SHIFT)) -#ifndef __ASSEMBLY__ -extern unsigned long max_mapnr; -static inline bool pfn_valid(unsigned long pfn) -{ - unsigned long min_pfn = ARCH_PFN_OFFSET; - - return pfn >= min_pfn && pfn < max_mapnr; -} -#endif #endif #define virt_to_pfn(kaddr) (__pa(kaddr) >> PAGE_SHIFT) diff --git a/arch/riscv/include/asm/page.h b/arch/riscv/include/asm/page.h index 9f432c1b5289..7fed7c431928 100644 --- a/arch/riscv/include/asm/page.h +++ b/arch/riscv/include/asm/page.h @@ -171,11 +171,6 @@ extern phys_addr_t __phys_addr_symbol(unsigned long x); #define sym_to_pfn(x) __phys_to_pfn(__pa_symbol(x)) -#ifdef CONFIG_FLATMEM -#define pfn_valid(pfn) \ - (((pfn) >= ARCH_PFN_OFFSET) && (((pfn) - ARCH_PFN_OFFSET) < max_mapnr)) -#endif - #endif /* __ASSEMBLY__ */ #define virt_addr_valid(vaddr) ({ \ diff --git a/arch/sh/include/asm/page.h b/arch/sh/include/asm/page.h index eca5daa43b93..09ac6c7faee0 100644 --- a/arch/sh/include/asm/page.h +++ b/arch/sh/include/asm/page.h @@ -169,9 +169,6 @@ typedef struct page *pgtable_t; #define PFN_START (__MEMORY_START >> PAGE_SHIFT) #define ARCH_PFN_OFFSET (PFN_START) #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) -#ifdef CONFIG_FLATMEM -#define pfn_valid(pfn) ((pfn) >= min_low_pfn && (pfn) < max_low_pfn) -#endif #define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT) #include <asm-generic/memory_model.h> diff --git a/arch/sparc/include/asm/page_32.h b/arch/sparc/include/asm/page_32.h index fff8861df107..6be6f683f98f 100644 --- a/arch/sparc/include/asm/page_32.h +++ b/arch/sparc/include/asm/page_32.h @@ -130,7 +130,6 @@ extern unsigned long pfn_base; #define ARCH_PFN_OFFSET (pfn_base) #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) -#define pfn_valid(pfn) (((pfn) >= (pfn_base)) && (((pfn)-(pfn_base)) < max_mapnr)) #define virt_addr_valid(kaddr) ((((unsigned long)(kaddr)-PAGE_OFFSET)>>PAGE_SHIFT) < max_mapnr) #include <asm-generic/memory_model.h> diff --git a/arch/um/include/asm/page.h b/arch/um/include/asm/page.h index cdbd9653aa14..84866127d074 100644 --- a/arch/um/include/asm/page.h +++ b/arch/um/include/asm/page.h @@ -108,7 +108,6 @@ extern unsigned long uml_physmem; #define phys_to_pfn(p) ((p) >> PAGE_SHIFT) #define pfn_to_phys(pfn) PFN_PHYS(pfn) -#define pfn_valid(pfn) ((pfn) < max_mapnr) #define virt_addr_valid(v) pfn_valid(phys_to_pfn(__pa(v))) #include <asm-generic/memory_model.h> diff --git a/arch/x86/include/asm/page_32.h b/arch/x86/include/asm/page_32.h index df42f8aa99e4..580d71aca65a 100644 --- a/arch/x86/include/asm/page_32.h +++ b/arch/x86/include/asm/page_32.h @@ -15,10 +15,6 @@ extern unsigned long __phys_addr(unsigned long); #define __phys_addr_symbol(x) __phys_addr(x) #define __phys_reloc_hide(x) RELOC_HIDE((x), 0) -#ifdef CONFIG_FLATMEM -#define pfn_valid(pfn) ((pfn) < max_mapnr) -#endif /* CONFIG_FLATMEM */ - #include <linux/string.h> static inline void clear_page(void *page) diff --git a/arch/x86/include/asm/page_64.h b/arch/x86/include/asm/page_64.h index 198e03e59ca1..cc6b8e087192 100644 --- a/arch/x86/include/asm/page_64.h +++ b/arch/x86/include/asm/page_64.h @@ -39,10 +39,6 @@ extern unsigned long __phys_addr_symbol(unsigned long); #define __phys_reloc_hide(x) (x) -#ifdef CONFIG_FLATMEM -#define pfn_valid(pfn) ((pfn) < max_pfn) -#endif - void clear_page_orig(void *page); void clear_page_rep(void *page); void clear_page_erms(void *page); diff --git a/arch/xtensa/include/asm/page.h b/arch/xtensa/include/asm/page.h index 493eb7083b1a..3267c672cd11 100644 --- a/arch/xtensa/include/asm/page.h +++ b/arch/xtensa/include/asm/page.h @@ -189,8 +189,6 @@ static inline unsigned long ___pa(unsigned long va) #endif #define __va(x) \ ((void *)((unsigned long) (x) - PHYS_OFFSET + PAGE_OFFSET)) -#define pfn_valid(pfn) \ - ((pfn) >= ARCH_PFN_OFFSET && ((pfn) - ARCH_PFN_OFFSET) < max_mapnr) #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) #define page_to_virt(page) __va(page_to_pfn(page) << PAGE_SHIFT) diff --git a/include/asm-generic/memory_model.h b/include/asm-generic/memory_model.h index a2c8ed60233a..13d2a844d928 100644 --- a/include/asm-generic/memory_model.h +++ b/include/asm-generic/memory_model.h @@ -19,6 +19,18 @@ #define __page_to_pfn(page) ((unsigned long)((page) - mem_map) + \ ARCH_PFN_OFFSET) +#ifndef pfn_valid +static inline int pfn_valid(unsigned long pfn) +{ + /* avoid <linux/mm.h> include hell */ + extern unsigned long max_mapnr; + unsigned long pfn_offset = ARCH_PFN_OFFSET; + + return pfn >= pfn_offset && pfn < max_mapnr; +} +#define pfn_valid pfn_valid +#endif + #elif defined(CONFIG_SPARSEMEM_VMEMMAP) /* memmap is virtually contiguous. */ diff --git a/include/asm-generic/page.h b/include/asm-generic/page.h index 6fc47561814c..c0be2edeb484 100644 --- a/include/asm-generic/page.h +++ b/include/asm-generic/page.h @@ -84,8 +84,6 @@ extern unsigned long memory_end; #define page_to_phys(page) ((dma_addr_t)page_to_pfn(page) << PAGE_SHIFT) #endif -#define pfn_valid(pfn) ((pfn) >= ARCH_PFN_OFFSET && ((pfn) - ARCH_PFN_OFFSET) < max_mapnr) - #define virt_addr_valid(kaddr) (((void *)(kaddr) >= (void *)PAGE_OFFSET) && \ ((void *)(kaddr) < (void *)memory_end)) -- 2.35.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 3/3] mm, arch: add generic implementation of pfn_valid() for FLATMEM 2023-01-25 19:07 ` [PATCH 3/3] mm, arch: add generic implementation of pfn_valid() for FLATMEM Mike Rapoport @ 2023-01-26 1:45 ` Andrew Morton 2023-01-27 1:58 ` Guo Ren 1 sibling, 0 replies; 8+ messages in thread From: Andrew Morton @ 2023-01-26 1:45 UTC (permalink / raw) To: Mike Rapoport Cc: Rich Felker, linux-ia64, linux-sh, x86, linux-mips, Max Filippov, Guo Ren, sparclinux, linux-hexagon, WANG Xuerui, Greg Ungerer, linux-arch, Yoshinori Sato, Michael Ellerman, Helge Deller, Huacai Chen, linux-riscv, Vineet Gupta, Matt Turner, linux-snps-arc, linux--csky, Arnd Bergmann, linux-xtensa, linux-um, Richard Weinberger, linux-m68k, openrisc, loongarch, Stafford Horne, Brian Cain, Michal Simek, Thomas Bogendoerfer, linux-parisc, linux-kernel, Dinh Nguyen, Palmer Dabbelt, linux-alpha, linuxppc-dev, David S. Miller On Wed, 25 Jan 2023 21:07:57 +0200 Mike Rapoport <rppt@kernel.org> wrote: > Every architecture that supports FLATMEM memory model defines its own > version of pfn_valid() that essentially compares a pfn to max_mapnr. > > Use mips/powerpc version implemented as static inline as a generic > implementation of pfn_valid() and drop its per-architecture definitions arm allnoconfig: ./include/asm-generic/memory_model.h:23:19: error: static declaration of 'pfn_valid' follows non-static declaration 23 | static inline int pfn_valid(unsigned long pfn) | ^~~~~~~~~ ./arch/arm/include/asm/page.h:160:12: note: previous declaration of 'pfn_valid' with type 'int(long unsigned int)' 160 | extern int pfn_valid(unsigned long); | ^~~~~~~~~ I thought of doing --- a/arch/arm/include/asm/page.h~mm-arch-add-generic-implementation-of-pfn_valid-for-flatmem-fix +++ a/arch/arm/include/asm/page.h @@ -156,10 +156,6 @@ extern void copy_page(void *to, const vo typedef struct page *pgtable_t; -#ifdef CONFIG_HAVE_ARCH_PFN_VALID -extern int pfn_valid(unsigned long); -#endif - #include <asm/memory.h> #endif /* !__ASSEMBLY__ */ _ but I'm seeing a pfn_valid declaration in arch/arc/include/asm/page.h which might be a problem. v2, please ;) ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 3/3] mm, arch: add generic implementation of pfn_valid() for FLATMEM 2023-01-25 19:07 ` [PATCH 3/3] mm, arch: add generic implementation of pfn_valid() for FLATMEM Mike Rapoport 2023-01-26 1:45 ` Andrew Morton @ 2023-01-27 1:58 ` Guo Ren 2023-01-28 5:07 ` Huacai Chen 1 sibling, 1 reply; 8+ messages in thread From: Guo Ren @ 2023-01-27 1:58 UTC (permalink / raw) To: Mike Rapoport Cc: Rich Felker, linux-ia64, linux-sh, x86, linux-mips, Max Filippov, sparclinux, linux-hexagon, WANG Xuerui, Greg Ungerer, linux-arch, Yoshinori Sato, Michael Ellerman, Helge Deller, Huacai Chen, linux-riscv, Vineet Gupta, Matt Turner, linux-snps-arc, linux--csky, Arnd Bergmann, linux-xtensa, linux-um, Richard Weinberger, linux-m68k, openrisc, loongarch, Stafford Horne, Brian Cain, Michal Simek, Thomas Bogendoerfer, linux-parisc, linux-kernel, Dinh Nguyen, Palmer Dabbelt, linux-alpha, Andrew Morton, linuxppc-dev, David S. Miller On Thu, Jan 26, 2023 at 3:08 AM Mike Rapoport <rppt@kernel.org> wrote: > > From: "Mike Rapoport (IBM)" <rppt@kernel.org> > > Every architecture that supports FLATMEM memory model defines its own > version of pfn_valid() that essentially compares a pfn to max_mapnr. > > Use mips/powerpc version implemented as static inline as a generic > implementation of pfn_valid() and drop its per-architecture definitions > > Signed-off-by: Mike Rapoport (IBM) <rppt@kernel.org> > --- > arch/alpha/include/asm/page.h | 4 ---- > arch/arc/include/asm/page.h | 1 - > arch/csky/include/asm/page.h | 1 - > arch/hexagon/include/asm/page.h | 1 - > arch/ia64/include/asm/page.h | 4 ---- > arch/loongarch/include/asm/page.h | 13 ------------- > arch/m68k/include/asm/page_no.h | 2 -- > arch/microblaze/include/asm/page.h | 1 - > arch/mips/include/asm/page.h | 13 ------------- > arch/nios2/include/asm/page.h | 9 --------- > arch/openrisc/include/asm/page.h | 2 -- > arch/parisc/include/asm/page.h | 4 ---- > arch/powerpc/include/asm/page.h | 9 --------- > arch/riscv/include/asm/page.h | 5 ----- > arch/sh/include/asm/page.h | 3 --- > arch/sparc/include/asm/page_32.h | 1 - > arch/um/include/asm/page.h | 1 - > arch/x86/include/asm/page_32.h | 4 ---- > arch/x86/include/asm/page_64.h | 4 ---- > arch/xtensa/include/asm/page.h | 2 -- > include/asm-generic/memory_model.h | 12 ++++++++++++ > include/asm-generic/page.h | 2 -- > 22 files changed, 12 insertions(+), 86 deletions(-) > > diff --git a/arch/alpha/include/asm/page.h b/arch/alpha/include/asm/page.h > index 8f3f5eecba28..227d32b6b75f 100644 > --- a/arch/alpha/include/asm/page.h > +++ b/arch/alpha/include/asm/page.h > @@ -87,10 +87,6 @@ typedef struct page *pgtable_t; > #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) > #define virt_addr_valid(kaddr) pfn_valid((__pa(kaddr) >> PAGE_SHIFT)) > > -#ifdef CONFIG_FLATMEM > -#define pfn_valid(pfn) ((pfn) < max_mapnr) > -#endif /* CONFIG_FLATMEM */ > - > #include <asm-generic/memory_model.h> > #include <asm-generic/getorder.h> > > diff --git a/arch/arc/include/asm/page.h b/arch/arc/include/asm/page.h > index 9a62e1d87967..e43fe27ec54d 100644 > --- a/arch/arc/include/asm/page.h > +++ b/arch/arc/include/asm/page.h > @@ -109,7 +109,6 @@ extern int pfn_valid(unsigned long pfn); > #else /* CONFIG_HIGHMEM */ > > #define ARCH_PFN_OFFSET virt_to_pfn(CONFIG_LINUX_RAM_BASE) > -#define pfn_valid(pfn) (((pfn) - ARCH_PFN_OFFSET) < max_mapnr) > > #endif /* CONFIG_HIGHMEM */ > > diff --git a/arch/csky/include/asm/page.h b/arch/csky/include/asm/page.h > index ed7451478b1b..b23e3006a9e0 100644 > --- a/arch/csky/include/asm/page.h > +++ b/arch/csky/include/asm/page.h > @@ -39,7 +39,6 @@ > > #define virt_addr_valid(kaddr) ((void *)(kaddr) >= (void *)PAGE_OFFSET && \ > (void *)(kaddr) < high_memory) > -#define pfn_valid(pfn) ((pfn) >= ARCH_PFN_OFFSET && ((pfn) - ARCH_PFN_OFFSET) < max_mapnr) For csky part: Acked-by: Guo Ren <guoren@kernel.org> > > extern void *memset(void *dest, int c, size_t l); > extern void *memcpy(void *to, const void *from, size_t l); > diff --git a/arch/hexagon/include/asm/page.h b/arch/hexagon/include/asm/page.h > index d7d4f9fca327..9c03b9965f07 100644 > --- a/arch/hexagon/include/asm/page.h > +++ b/arch/hexagon/include/asm/page.h > @@ -95,7 +95,6 @@ struct page; > /* Default vm area behavior is non-executable. */ > #define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_NON_EXEC > > -#define pfn_valid(pfn) ((pfn) < max_mapnr) > #define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT) > > /* Need to not use a define for linesize; may move this to another file. */ > diff --git a/arch/ia64/include/asm/page.h b/arch/ia64/include/asm/page.h > index 1b990466d540..783eceab5df3 100644 > --- a/arch/ia64/include/asm/page.h > +++ b/arch/ia64/include/asm/page.h > @@ -97,10 +97,6 @@ do { \ > > #include <asm-generic/memory_model.h> > > -#ifdef CONFIG_FLATMEM > -# define pfn_valid(pfn) ((pfn) < max_mapnr) > -#endif > - > #define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT) > #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) > #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) > diff --git a/arch/loongarch/include/asm/page.h b/arch/loongarch/include/asm/page.h > index 53f284a96182..fb5338b352e6 100644 > --- a/arch/loongarch/include/asm/page.h > +++ b/arch/loongarch/include/asm/page.h > @@ -82,19 +82,6 @@ typedef struct { unsigned long pgprot; } pgprot_t; > > #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) > > -#ifdef CONFIG_FLATMEM > - > -static inline int pfn_valid(unsigned long pfn) > -{ > - /* avoid <linux/mm.h> include hell */ > - extern unsigned long max_mapnr; > - unsigned long pfn_offset = ARCH_PFN_OFFSET; > - > - return pfn >= pfn_offset && pfn < max_mapnr; > -} > - > -#endif > - > #define virt_to_pfn(kaddr) PFN_DOWN(PHYSADDR(kaddr)) > #define virt_to_page(kaddr) pfn_to_page(virt_to_pfn(kaddr)) > > diff --git a/arch/m68k/include/asm/page_no.h b/arch/m68k/include/asm/page_no.h > index 0a8ccef777fd..2555ec57149d 100644 > --- a/arch/m68k/include/asm/page_no.h > +++ b/arch/m68k/include/asm/page_no.h > @@ -26,8 +26,6 @@ extern unsigned long memory_end; > #define virt_to_page(addr) (mem_map + (((unsigned long)(addr)-PAGE_OFFSET) >> PAGE_SHIFT)) > #define page_to_virt(page) __va(((((page) - mem_map) << PAGE_SHIFT) + PAGE_OFFSET)) > > -#define pfn_valid(pfn) ((pfn) < max_mapnr) > - > #define virt_addr_valid(kaddr) (((unsigned long)(kaddr) >= PAGE_OFFSET) && \ > ((unsigned long)(kaddr) < memory_end)) > > diff --git a/arch/microblaze/include/asm/page.h b/arch/microblaze/include/asm/page.h > index 4b8b2fa78fc5..7b9861bcd458 100644 > --- a/arch/microblaze/include/asm/page.h > +++ b/arch/microblaze/include/asm/page.h > @@ -112,7 +112,6 @@ extern int page_is_ram(unsigned long pfn); > # define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT) > > # define ARCH_PFN_OFFSET (memory_start >> PAGE_SHIFT) > -# define pfn_valid(pfn) ((pfn) >= ARCH_PFN_OFFSET && (pfn) < (max_mapnr + ARCH_PFN_OFFSET)) > # endif /* __ASSEMBLY__ */ > > #define virt_addr_valid(vaddr) (pfn_valid(virt_to_pfn(vaddr))) > diff --git a/arch/mips/include/asm/page.h b/arch/mips/include/asm/page.h > index 9286f11ff6ad..5978a8dfb917 100644 > --- a/arch/mips/include/asm/page.h > +++ b/arch/mips/include/asm/page.h > @@ -224,19 +224,6 @@ extern phys_addr_t __phys_addr_symbol(unsigned long x); > > #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) > > -#ifdef CONFIG_FLATMEM > - > -static inline int pfn_valid(unsigned long pfn) > -{ > - /* avoid <linux/mm.h> include hell */ > - extern unsigned long max_mapnr; > - unsigned long pfn_offset = ARCH_PFN_OFFSET; > - > - return pfn >= pfn_offset && pfn < max_mapnr; > -} > - > -#endif > - > #define virt_to_pfn(kaddr) PFN_DOWN(virt_to_phys((void *)(kaddr))) > #define virt_to_page(kaddr) pfn_to_page(virt_to_pfn(kaddr)) > > diff --git a/arch/nios2/include/asm/page.h b/arch/nios2/include/asm/page.h > index 6a989819a7c1..0ae7d9ce369b 100644 > --- a/arch/nios2/include/asm/page.h > +++ b/arch/nios2/include/asm/page.h > @@ -86,15 +86,6 @@ extern struct page *mem_map; > > # define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) > > -static inline bool pfn_valid(unsigned long pfn) > -{ > - /* avoid <linux/mm.h> include hell */ > - extern unsigned long max_mapnr; > - unsigned long pfn_offset = ARCH_PFN_OFFSET; > - > - return pfn >= pfn_offset && pfn < max_mapnr; > -} > - > # define virt_to_page(vaddr) pfn_to_page(PFN_DOWN(virt_to_phys(vaddr))) > # define virt_addr_valid(vaddr) pfn_valid(PFN_DOWN(virt_to_phys(vaddr))) > > diff --git a/arch/openrisc/include/asm/page.h b/arch/openrisc/include/asm/page.h > index aab6e64d6db4..52b0d7e76446 100644 > --- a/arch/openrisc/include/asm/page.h > +++ b/arch/openrisc/include/asm/page.h > @@ -80,8 +80,6 @@ typedef struct page *pgtable_t; > > #define page_to_phys(page) ((dma_addr_t)page_to_pfn(page) << PAGE_SHIFT) > > -#define pfn_valid(pfn) ((pfn) < max_mapnr) > - > #define virt_addr_valid(kaddr) (pfn_valid(virt_to_pfn(kaddr))) > > #endif /* __ASSEMBLY__ */ > diff --git a/arch/parisc/include/asm/page.h b/arch/parisc/include/asm/page.h > index 6faaaa3ebe9b..667e703c0e8f 100644 > --- a/arch/parisc/include/asm/page.h > +++ b/arch/parisc/include/asm/page.h > @@ -155,10 +155,6 @@ extern int npmem_ranges; > #define __pa(x) ((unsigned long)(x)-PAGE_OFFSET) > #define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET)) > > -#ifndef CONFIG_SPARSEMEM > -#define pfn_valid(pfn) ((pfn) < max_mapnr) > -#endif > - > #ifdef CONFIG_HUGETLB_PAGE > #define HPAGE_SHIFT PMD_SHIFT /* fixed for transparent huge pages */ > #define HPAGE_SIZE ((1UL) << HPAGE_SHIFT) > diff --git a/arch/powerpc/include/asm/page.h b/arch/powerpc/include/asm/page.h > index edf1dd1b0ca9..f2b6bf5687d0 100644 > --- a/arch/powerpc/include/asm/page.h > +++ b/arch/powerpc/include/asm/page.h > @@ -117,15 +117,6 @@ extern long long virt_phys_offset; > > #ifdef CONFIG_FLATMEM > #define ARCH_PFN_OFFSET ((unsigned long)(MEMORY_START >> PAGE_SHIFT)) > -#ifndef __ASSEMBLY__ > -extern unsigned long max_mapnr; > -static inline bool pfn_valid(unsigned long pfn) > -{ > - unsigned long min_pfn = ARCH_PFN_OFFSET; > - > - return pfn >= min_pfn && pfn < max_mapnr; > -} > -#endif > #endif > > #define virt_to_pfn(kaddr) (__pa(kaddr) >> PAGE_SHIFT) > diff --git a/arch/riscv/include/asm/page.h b/arch/riscv/include/asm/page.h > index 9f432c1b5289..7fed7c431928 100644 > --- a/arch/riscv/include/asm/page.h > +++ b/arch/riscv/include/asm/page.h > @@ -171,11 +171,6 @@ extern phys_addr_t __phys_addr_symbol(unsigned long x); > > #define sym_to_pfn(x) __phys_to_pfn(__pa_symbol(x)) > > -#ifdef CONFIG_FLATMEM > -#define pfn_valid(pfn) \ > - (((pfn) >= ARCH_PFN_OFFSET) && (((pfn) - ARCH_PFN_OFFSET) < max_mapnr)) > -#endif > - > #endif /* __ASSEMBLY__ */ > > #define virt_addr_valid(vaddr) ({ \ > diff --git a/arch/sh/include/asm/page.h b/arch/sh/include/asm/page.h > index eca5daa43b93..09ac6c7faee0 100644 > --- a/arch/sh/include/asm/page.h > +++ b/arch/sh/include/asm/page.h > @@ -169,9 +169,6 @@ typedef struct page *pgtable_t; > #define PFN_START (__MEMORY_START >> PAGE_SHIFT) > #define ARCH_PFN_OFFSET (PFN_START) > #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) > -#ifdef CONFIG_FLATMEM > -#define pfn_valid(pfn) ((pfn) >= min_low_pfn && (pfn) < max_low_pfn) > -#endif > #define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT) > > #include <asm-generic/memory_model.h> > diff --git a/arch/sparc/include/asm/page_32.h b/arch/sparc/include/asm/page_32.h > index fff8861df107..6be6f683f98f 100644 > --- a/arch/sparc/include/asm/page_32.h > +++ b/arch/sparc/include/asm/page_32.h > @@ -130,7 +130,6 @@ extern unsigned long pfn_base; > #define ARCH_PFN_OFFSET (pfn_base) > #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) > > -#define pfn_valid(pfn) (((pfn) >= (pfn_base)) && (((pfn)-(pfn_base)) < max_mapnr)) > #define virt_addr_valid(kaddr) ((((unsigned long)(kaddr)-PAGE_OFFSET)>>PAGE_SHIFT) < max_mapnr) > > #include <asm-generic/memory_model.h> > diff --git a/arch/um/include/asm/page.h b/arch/um/include/asm/page.h > index cdbd9653aa14..84866127d074 100644 > --- a/arch/um/include/asm/page.h > +++ b/arch/um/include/asm/page.h > @@ -108,7 +108,6 @@ extern unsigned long uml_physmem; > #define phys_to_pfn(p) ((p) >> PAGE_SHIFT) > #define pfn_to_phys(pfn) PFN_PHYS(pfn) > > -#define pfn_valid(pfn) ((pfn) < max_mapnr) > #define virt_addr_valid(v) pfn_valid(phys_to_pfn(__pa(v))) > > #include <asm-generic/memory_model.h> > diff --git a/arch/x86/include/asm/page_32.h b/arch/x86/include/asm/page_32.h > index df42f8aa99e4..580d71aca65a 100644 > --- a/arch/x86/include/asm/page_32.h > +++ b/arch/x86/include/asm/page_32.h > @@ -15,10 +15,6 @@ extern unsigned long __phys_addr(unsigned long); > #define __phys_addr_symbol(x) __phys_addr(x) > #define __phys_reloc_hide(x) RELOC_HIDE((x), 0) > > -#ifdef CONFIG_FLATMEM > -#define pfn_valid(pfn) ((pfn) < max_mapnr) > -#endif /* CONFIG_FLATMEM */ > - > #include <linux/string.h> > > static inline void clear_page(void *page) > diff --git a/arch/x86/include/asm/page_64.h b/arch/x86/include/asm/page_64.h > index 198e03e59ca1..cc6b8e087192 100644 > --- a/arch/x86/include/asm/page_64.h > +++ b/arch/x86/include/asm/page_64.h > @@ -39,10 +39,6 @@ extern unsigned long __phys_addr_symbol(unsigned long); > > #define __phys_reloc_hide(x) (x) > > -#ifdef CONFIG_FLATMEM > -#define pfn_valid(pfn) ((pfn) < max_pfn) > -#endif > - > void clear_page_orig(void *page); > void clear_page_rep(void *page); > void clear_page_erms(void *page); > diff --git a/arch/xtensa/include/asm/page.h b/arch/xtensa/include/asm/page.h > index 493eb7083b1a..3267c672cd11 100644 > --- a/arch/xtensa/include/asm/page.h > +++ b/arch/xtensa/include/asm/page.h > @@ -189,8 +189,6 @@ static inline unsigned long ___pa(unsigned long va) > #endif > #define __va(x) \ > ((void *)((unsigned long) (x) - PHYS_OFFSET + PAGE_OFFSET)) > -#define pfn_valid(pfn) \ > - ((pfn) >= ARCH_PFN_OFFSET && ((pfn) - ARCH_PFN_OFFSET) < max_mapnr) > > #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) > #define page_to_virt(page) __va(page_to_pfn(page) << PAGE_SHIFT) > diff --git a/include/asm-generic/memory_model.h b/include/asm-generic/memory_model.h > index a2c8ed60233a..13d2a844d928 100644 > --- a/include/asm-generic/memory_model.h > +++ b/include/asm-generic/memory_model.h > @@ -19,6 +19,18 @@ > #define __page_to_pfn(page) ((unsigned long)((page) - mem_map) + \ > ARCH_PFN_OFFSET) > > +#ifndef pfn_valid > +static inline int pfn_valid(unsigned long pfn) > +{ > + /* avoid <linux/mm.h> include hell */ > + extern unsigned long max_mapnr; > + unsigned long pfn_offset = ARCH_PFN_OFFSET; > + > + return pfn >= pfn_offset && pfn < max_mapnr; > +} > +#define pfn_valid pfn_valid > +#endif > + > #elif defined(CONFIG_SPARSEMEM_VMEMMAP) > > /* memmap is virtually contiguous. */ > diff --git a/include/asm-generic/page.h b/include/asm-generic/page.h > index 6fc47561814c..c0be2edeb484 100644 > --- a/include/asm-generic/page.h > +++ b/include/asm-generic/page.h > @@ -84,8 +84,6 @@ extern unsigned long memory_end; > #define page_to_phys(page) ((dma_addr_t)page_to_pfn(page) << PAGE_SHIFT) > #endif > > -#define pfn_valid(pfn) ((pfn) >= ARCH_PFN_OFFSET && ((pfn) - ARCH_PFN_OFFSET) < max_mapnr) > - > #define virt_addr_valid(kaddr) (((void *)(kaddr) >= (void *)PAGE_OFFSET) && \ > ((void *)(kaddr) < (void *)memory_end)) > > -- > 2.35.1 > -- Best Regards Guo Ren ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 3/3] mm, arch: add generic implementation of pfn_valid() for FLATMEM 2023-01-27 1:58 ` Guo Ren @ 2023-01-28 5:07 ` Huacai Chen 0 siblings, 0 replies; 8+ messages in thread From: Huacai Chen @ 2023-01-28 5:07 UTC (permalink / raw) To: Guo Ren Cc: Rich Felker, linux-ia64, linux-sh, linux-mips, Max Filippov, sparclinux, linux-hexagon, WANG Xuerui, Greg Ungerer, linux-arch, Yoshinori Sato, Michael Ellerman, Helge Deller, x86, linux-riscv, Vineet Gupta, Matt Turner, linux-snps-arc, linux--csky, Arnd Bergmann, linux-xtensa, linux-um, Richard Weinberger, linux-m68k, openrisc, loongarch, Stafford Horne, Brian Cain, Michal Simek, Thomas Bogendoerfer, linux-parisc, linux-kernel, Dinh Nguyen, Palmer Dabbelt, linux-alpha, Andrew Morton, linuxppc-dev, David S. Miller, Mike Rapoport For LoongArch part: Acked-by: Huacai Chen <chenhuacai@loongson.cn> On Fri, Jan 27, 2023 at 9:58 AM Guo Ren <guoren@kernel.org> wrote: > > On Thu, Jan 26, 2023 at 3:08 AM Mike Rapoport <rppt@kernel.org> wrote: > > > > From: "Mike Rapoport (IBM)" <rppt@kernel.org> > > > > Every architecture that supports FLATMEM memory model defines its own > > version of pfn_valid() that essentially compares a pfn to max_mapnr. > > > > Use mips/powerpc version implemented as static inline as a generic > > implementation of pfn_valid() and drop its per-architecture definitions > > > > Signed-off-by: Mike Rapoport (IBM) <rppt@kernel.org> > > --- > > arch/alpha/include/asm/page.h | 4 ---- > > arch/arc/include/asm/page.h | 1 - > > arch/csky/include/asm/page.h | 1 - > > arch/hexagon/include/asm/page.h | 1 - > > arch/ia64/include/asm/page.h | 4 ---- > > arch/loongarch/include/asm/page.h | 13 ------------- > > arch/m68k/include/asm/page_no.h | 2 -- > > arch/microblaze/include/asm/page.h | 1 - > > arch/mips/include/asm/page.h | 13 ------------- > > arch/nios2/include/asm/page.h | 9 --------- > > arch/openrisc/include/asm/page.h | 2 -- > > arch/parisc/include/asm/page.h | 4 ---- > > arch/powerpc/include/asm/page.h | 9 --------- > > arch/riscv/include/asm/page.h | 5 ----- > > arch/sh/include/asm/page.h | 3 --- > > arch/sparc/include/asm/page_32.h | 1 - > > arch/um/include/asm/page.h | 1 - > > arch/x86/include/asm/page_32.h | 4 ---- > > arch/x86/include/asm/page_64.h | 4 ---- > > arch/xtensa/include/asm/page.h | 2 -- > > include/asm-generic/memory_model.h | 12 ++++++++++++ > > include/asm-generic/page.h | 2 -- > > 22 files changed, 12 insertions(+), 86 deletions(-) > > > > diff --git a/arch/alpha/include/asm/page.h b/arch/alpha/include/asm/page.h > > index 8f3f5eecba28..227d32b6b75f 100644 > > --- a/arch/alpha/include/asm/page.h > > +++ b/arch/alpha/include/asm/page.h > > @@ -87,10 +87,6 @@ typedef struct page *pgtable_t; > > #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) > > #define virt_addr_valid(kaddr) pfn_valid((__pa(kaddr) >> PAGE_SHIFT)) > > > > -#ifdef CONFIG_FLATMEM > > -#define pfn_valid(pfn) ((pfn) < max_mapnr) > > -#endif /* CONFIG_FLATMEM */ > > - > > #include <asm-generic/memory_model.h> > > #include <asm-generic/getorder.h> > > > > diff --git a/arch/arc/include/asm/page.h b/arch/arc/include/asm/page.h > > index 9a62e1d87967..e43fe27ec54d 100644 > > --- a/arch/arc/include/asm/page.h > > +++ b/arch/arc/include/asm/page.h > > @@ -109,7 +109,6 @@ extern int pfn_valid(unsigned long pfn); > > #else /* CONFIG_HIGHMEM */ > > > > #define ARCH_PFN_OFFSET virt_to_pfn(CONFIG_LINUX_RAM_BASE) > > -#define pfn_valid(pfn) (((pfn) - ARCH_PFN_OFFSET) < max_mapnr) > > > > #endif /* CONFIG_HIGHMEM */ > > > > diff --git a/arch/csky/include/asm/page.h b/arch/csky/include/asm/page.h > > index ed7451478b1b..b23e3006a9e0 100644 > > --- a/arch/csky/include/asm/page.h > > +++ b/arch/csky/include/asm/page.h > > @@ -39,7 +39,6 @@ > > > > #define virt_addr_valid(kaddr) ((void *)(kaddr) >= (void *)PAGE_OFFSET && \ > > (void *)(kaddr) < high_memory) > > -#define pfn_valid(pfn) ((pfn) >= ARCH_PFN_OFFSET && ((pfn) - ARCH_PFN_OFFSET) < max_mapnr) > For csky part: > Acked-by: Guo Ren <guoren@kernel.org> > > > > > extern void *memset(void *dest, int c, size_t l); > > extern void *memcpy(void *to, const void *from, size_t l); > > diff --git a/arch/hexagon/include/asm/page.h b/arch/hexagon/include/asm/page.h > > index d7d4f9fca327..9c03b9965f07 100644 > > --- a/arch/hexagon/include/asm/page.h > > +++ b/arch/hexagon/include/asm/page.h > > @@ -95,7 +95,6 @@ struct page; > > /* Default vm area behavior is non-executable. */ > > #define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_NON_EXEC > > > > -#define pfn_valid(pfn) ((pfn) < max_mapnr) > > #define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT) > > > > /* Need to not use a define for linesize; may move this to another file. */ > > diff --git a/arch/ia64/include/asm/page.h b/arch/ia64/include/asm/page.h > > index 1b990466d540..783eceab5df3 100644 > > --- a/arch/ia64/include/asm/page.h > > +++ b/arch/ia64/include/asm/page.h > > @@ -97,10 +97,6 @@ do { \ > > > > #include <asm-generic/memory_model.h> > > > > -#ifdef CONFIG_FLATMEM > > -# define pfn_valid(pfn) ((pfn) < max_mapnr) > > -#endif > > - > > #define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT) > > #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) > > #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) > > diff --git a/arch/loongarch/include/asm/page.h b/arch/loongarch/include/asm/page.h > > index 53f284a96182..fb5338b352e6 100644 > > --- a/arch/loongarch/include/asm/page.h > > +++ b/arch/loongarch/include/asm/page.h > > @@ -82,19 +82,6 @@ typedef struct { unsigned long pgprot; } pgprot_t; > > > > #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) > > > > -#ifdef CONFIG_FLATMEM > > - > > -static inline int pfn_valid(unsigned long pfn) > > -{ > > - /* avoid <linux/mm.h> include hell */ > > - extern unsigned long max_mapnr; > > - unsigned long pfn_offset = ARCH_PFN_OFFSET; > > - > > - return pfn >= pfn_offset && pfn < max_mapnr; > > -} > > - > > -#endif > > - > > #define virt_to_pfn(kaddr) PFN_DOWN(PHYSADDR(kaddr)) > > #define virt_to_page(kaddr) pfn_to_page(virt_to_pfn(kaddr)) > > > > diff --git a/arch/m68k/include/asm/page_no.h b/arch/m68k/include/asm/page_no.h > > index 0a8ccef777fd..2555ec57149d 100644 > > --- a/arch/m68k/include/asm/page_no.h > > +++ b/arch/m68k/include/asm/page_no.h > > @@ -26,8 +26,6 @@ extern unsigned long memory_end; > > #define virt_to_page(addr) (mem_map + (((unsigned long)(addr)-PAGE_OFFSET) >> PAGE_SHIFT)) > > #define page_to_virt(page) __va(((((page) - mem_map) << PAGE_SHIFT) + PAGE_OFFSET)) > > > > -#define pfn_valid(pfn) ((pfn) < max_mapnr) > > - > > #define virt_addr_valid(kaddr) (((unsigned long)(kaddr) >= PAGE_OFFSET) && \ > > ((unsigned long)(kaddr) < memory_end)) > > > > diff --git a/arch/microblaze/include/asm/page.h b/arch/microblaze/include/asm/page.h > > index 4b8b2fa78fc5..7b9861bcd458 100644 > > --- a/arch/microblaze/include/asm/page.h > > +++ b/arch/microblaze/include/asm/page.h > > @@ -112,7 +112,6 @@ extern int page_is_ram(unsigned long pfn); > > # define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT) > > > > # define ARCH_PFN_OFFSET (memory_start >> PAGE_SHIFT) > > -# define pfn_valid(pfn) ((pfn) >= ARCH_PFN_OFFSET && (pfn) < (max_mapnr + ARCH_PFN_OFFSET)) > > # endif /* __ASSEMBLY__ */ > > > > #define virt_addr_valid(vaddr) (pfn_valid(virt_to_pfn(vaddr))) > > diff --git a/arch/mips/include/asm/page.h b/arch/mips/include/asm/page.h > > index 9286f11ff6ad..5978a8dfb917 100644 > > --- a/arch/mips/include/asm/page.h > > +++ b/arch/mips/include/asm/page.h > > @@ -224,19 +224,6 @@ extern phys_addr_t __phys_addr_symbol(unsigned long x); > > > > #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) > > > > -#ifdef CONFIG_FLATMEM > > - > > -static inline int pfn_valid(unsigned long pfn) > > -{ > > - /* avoid <linux/mm.h> include hell */ > > - extern unsigned long max_mapnr; > > - unsigned long pfn_offset = ARCH_PFN_OFFSET; > > - > > - return pfn >= pfn_offset && pfn < max_mapnr; > > -} > > - > > -#endif > > - > > #define virt_to_pfn(kaddr) PFN_DOWN(virt_to_phys((void *)(kaddr))) > > #define virt_to_page(kaddr) pfn_to_page(virt_to_pfn(kaddr)) > > > > diff --git a/arch/nios2/include/asm/page.h b/arch/nios2/include/asm/page.h > > index 6a989819a7c1..0ae7d9ce369b 100644 > > --- a/arch/nios2/include/asm/page.h > > +++ b/arch/nios2/include/asm/page.h > > @@ -86,15 +86,6 @@ extern struct page *mem_map; > > > > # define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) > > > > -static inline bool pfn_valid(unsigned long pfn) > > -{ > > - /* avoid <linux/mm.h> include hell */ > > - extern unsigned long max_mapnr; > > - unsigned long pfn_offset = ARCH_PFN_OFFSET; > > - > > - return pfn >= pfn_offset && pfn < max_mapnr; > > -} > > - > > # define virt_to_page(vaddr) pfn_to_page(PFN_DOWN(virt_to_phys(vaddr))) > > # define virt_addr_valid(vaddr) pfn_valid(PFN_DOWN(virt_to_phys(vaddr))) > > > > diff --git a/arch/openrisc/include/asm/page.h b/arch/openrisc/include/asm/page.h > > index aab6e64d6db4..52b0d7e76446 100644 > > --- a/arch/openrisc/include/asm/page.h > > +++ b/arch/openrisc/include/asm/page.h > > @@ -80,8 +80,6 @@ typedef struct page *pgtable_t; > > > > #define page_to_phys(page) ((dma_addr_t)page_to_pfn(page) << PAGE_SHIFT) > > > > -#define pfn_valid(pfn) ((pfn) < max_mapnr) > > - > > #define virt_addr_valid(kaddr) (pfn_valid(virt_to_pfn(kaddr))) > > > > #endif /* __ASSEMBLY__ */ > > diff --git a/arch/parisc/include/asm/page.h b/arch/parisc/include/asm/page.h > > index 6faaaa3ebe9b..667e703c0e8f 100644 > > --- a/arch/parisc/include/asm/page.h > > +++ b/arch/parisc/include/asm/page.h > > @@ -155,10 +155,6 @@ extern int npmem_ranges; > > #define __pa(x) ((unsigned long)(x)-PAGE_OFFSET) > > #define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET)) > > > > -#ifndef CONFIG_SPARSEMEM > > -#define pfn_valid(pfn) ((pfn) < max_mapnr) > > -#endif > > - > > #ifdef CONFIG_HUGETLB_PAGE > > #define HPAGE_SHIFT PMD_SHIFT /* fixed for transparent huge pages */ > > #define HPAGE_SIZE ((1UL) << HPAGE_SHIFT) > > diff --git a/arch/powerpc/include/asm/page.h b/arch/powerpc/include/asm/page.h > > index edf1dd1b0ca9..f2b6bf5687d0 100644 > > --- a/arch/powerpc/include/asm/page.h > > +++ b/arch/powerpc/include/asm/page.h > > @@ -117,15 +117,6 @@ extern long long virt_phys_offset; > > > > #ifdef CONFIG_FLATMEM > > #define ARCH_PFN_OFFSET ((unsigned long)(MEMORY_START >> PAGE_SHIFT)) > > -#ifndef __ASSEMBLY__ > > -extern unsigned long max_mapnr; > > -static inline bool pfn_valid(unsigned long pfn) > > -{ > > - unsigned long min_pfn = ARCH_PFN_OFFSET; > > - > > - return pfn >= min_pfn && pfn < max_mapnr; > > -} > > -#endif > > #endif > > > > #define virt_to_pfn(kaddr) (__pa(kaddr) >> PAGE_SHIFT) > > diff --git a/arch/riscv/include/asm/page.h b/arch/riscv/include/asm/page.h > > index 9f432c1b5289..7fed7c431928 100644 > > --- a/arch/riscv/include/asm/page.h > > +++ b/arch/riscv/include/asm/page.h > > @@ -171,11 +171,6 @@ extern phys_addr_t __phys_addr_symbol(unsigned long x); > > > > #define sym_to_pfn(x) __phys_to_pfn(__pa_symbol(x)) > > > > -#ifdef CONFIG_FLATMEM > > -#define pfn_valid(pfn) \ > > - (((pfn) >= ARCH_PFN_OFFSET) && (((pfn) - ARCH_PFN_OFFSET) < max_mapnr)) > > -#endif > > - > > #endif /* __ASSEMBLY__ */ > > > > #define virt_addr_valid(vaddr) ({ \ > > diff --git a/arch/sh/include/asm/page.h b/arch/sh/include/asm/page.h > > index eca5daa43b93..09ac6c7faee0 100644 > > --- a/arch/sh/include/asm/page.h > > +++ b/arch/sh/include/asm/page.h > > @@ -169,9 +169,6 @@ typedef struct page *pgtable_t; > > #define PFN_START (__MEMORY_START >> PAGE_SHIFT) > > #define ARCH_PFN_OFFSET (PFN_START) > > #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) > > -#ifdef CONFIG_FLATMEM > > -#define pfn_valid(pfn) ((pfn) >= min_low_pfn && (pfn) < max_low_pfn) > > -#endif > > #define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT) > > > > #include <asm-generic/memory_model.h> > > diff --git a/arch/sparc/include/asm/page_32.h b/arch/sparc/include/asm/page_32.h > > index fff8861df107..6be6f683f98f 100644 > > --- a/arch/sparc/include/asm/page_32.h > > +++ b/arch/sparc/include/asm/page_32.h > > @@ -130,7 +130,6 @@ extern unsigned long pfn_base; > > #define ARCH_PFN_OFFSET (pfn_base) > > #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) > > > > -#define pfn_valid(pfn) (((pfn) >= (pfn_base)) && (((pfn)-(pfn_base)) < max_mapnr)) > > #define virt_addr_valid(kaddr) ((((unsigned long)(kaddr)-PAGE_OFFSET)>>PAGE_SHIFT) < max_mapnr) > > > > #include <asm-generic/memory_model.h> > > diff --git a/arch/um/include/asm/page.h b/arch/um/include/asm/page.h > > index cdbd9653aa14..84866127d074 100644 > > --- a/arch/um/include/asm/page.h > > +++ b/arch/um/include/asm/page.h > > @@ -108,7 +108,6 @@ extern unsigned long uml_physmem; > > #define phys_to_pfn(p) ((p) >> PAGE_SHIFT) > > #define pfn_to_phys(pfn) PFN_PHYS(pfn) > > > > -#define pfn_valid(pfn) ((pfn) < max_mapnr) > > #define virt_addr_valid(v) pfn_valid(phys_to_pfn(__pa(v))) > > > > #include <asm-generic/memory_model.h> > > diff --git a/arch/x86/include/asm/page_32.h b/arch/x86/include/asm/page_32.h > > index df42f8aa99e4..580d71aca65a 100644 > > --- a/arch/x86/include/asm/page_32.h > > +++ b/arch/x86/include/asm/page_32.h > > @@ -15,10 +15,6 @@ extern unsigned long __phys_addr(unsigned long); > > #define __phys_addr_symbol(x) __phys_addr(x) > > #define __phys_reloc_hide(x) RELOC_HIDE((x), 0) > > > > -#ifdef CONFIG_FLATMEM > > -#define pfn_valid(pfn) ((pfn) < max_mapnr) > > -#endif /* CONFIG_FLATMEM */ > > - > > #include <linux/string.h> > > > > static inline void clear_page(void *page) > > diff --git a/arch/x86/include/asm/page_64.h b/arch/x86/include/asm/page_64.h > > index 198e03e59ca1..cc6b8e087192 100644 > > --- a/arch/x86/include/asm/page_64.h > > +++ b/arch/x86/include/asm/page_64.h > > @@ -39,10 +39,6 @@ extern unsigned long __phys_addr_symbol(unsigned long); > > > > #define __phys_reloc_hide(x) (x) > > > > -#ifdef CONFIG_FLATMEM > > -#define pfn_valid(pfn) ((pfn) < max_pfn) > > -#endif > > - > > void clear_page_orig(void *page); > > void clear_page_rep(void *page); > > void clear_page_erms(void *page); > > diff --git a/arch/xtensa/include/asm/page.h b/arch/xtensa/include/asm/page.h > > index 493eb7083b1a..3267c672cd11 100644 > > --- a/arch/xtensa/include/asm/page.h > > +++ b/arch/xtensa/include/asm/page.h > > @@ -189,8 +189,6 @@ static inline unsigned long ___pa(unsigned long va) > > #endif > > #define __va(x) \ > > ((void *)((unsigned long) (x) - PHYS_OFFSET + PAGE_OFFSET)) > > -#define pfn_valid(pfn) \ > > - ((pfn) >= ARCH_PFN_OFFSET && ((pfn) - ARCH_PFN_OFFSET) < max_mapnr) > > > > #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) > > #define page_to_virt(page) __va(page_to_pfn(page) << PAGE_SHIFT) > > diff --git a/include/asm-generic/memory_model.h b/include/asm-generic/memory_model.h > > index a2c8ed60233a..13d2a844d928 100644 > > --- a/include/asm-generic/memory_model.h > > +++ b/include/asm-generic/memory_model.h > > @@ -19,6 +19,18 @@ > > #define __page_to_pfn(page) ((unsigned long)((page) - mem_map) + \ > > ARCH_PFN_OFFSET) > > > > +#ifndef pfn_valid > > +static inline int pfn_valid(unsigned long pfn) > > +{ > > + /* avoid <linux/mm.h> include hell */ > > + extern unsigned long max_mapnr; > > + unsigned long pfn_offset = ARCH_PFN_OFFSET; > > + > > + return pfn >= pfn_offset && pfn < max_mapnr; > > +} > > +#define pfn_valid pfn_valid > > +#endif > > + > > #elif defined(CONFIG_SPARSEMEM_VMEMMAP) > > > > /* memmap is virtually contiguous. */ > > diff --git a/include/asm-generic/page.h b/include/asm-generic/page.h > > index 6fc47561814c..c0be2edeb484 100644 > > --- a/include/asm-generic/page.h > > +++ b/include/asm-generic/page.h > > @@ -84,8 +84,6 @@ extern unsigned long memory_end; > > #define page_to_phys(page) ((dma_addr_t)page_to_pfn(page) << PAGE_SHIFT) > > #endif > > > > -#define pfn_valid(pfn) ((pfn) >= ARCH_PFN_OFFSET && ((pfn) - ARCH_PFN_OFFSET) < max_mapnr) > > - > > #define virt_addr_valid(kaddr) (((void *)(kaddr) >= (void *)PAGE_OFFSET) && \ > > ((void *)(kaddr) < (void *)memory_end)) > > > > -- > > 2.35.1 > > > > > -- > Best Regards > Guo Ren ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2023-01-28 22:23 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-01-25 19:07 [PATCH 0/3] mm, arch: add generic implementation of pfn_valid() for FLATMEM Mike Rapoport 2023-01-25 19:07 ` [PATCH 1/3] m68k: use asm-generic/memory_model.h for both MMU and !MMU Mike Rapoport 2023-01-26 8:20 ` Geert Uytterhoeven 2023-01-25 19:07 ` [PATCH 2/3] mips: drop definition of pfn_valid() for DISCONTIGMEM Mike Rapoport 2023-01-25 19:07 ` [PATCH 3/3] mm, arch: add generic implementation of pfn_valid() for FLATMEM Mike Rapoport 2023-01-26 1:45 ` Andrew Morton 2023-01-27 1:58 ` Guo Ren 2023-01-28 5:07 ` Huacai Chen
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox