Commit 928930c2 authored by David Woodhouse's avatar David Woodhouse Committed by Andrew Morton
Browse files

mm: implement for_each_valid_pfn() for CONFIG_FLATMEM

In the FLATMEM case, the default pfn_valid() just checks that the PFN is
within the range [ ARCH_PFN_OFFSET ..  ARCH_PFN_OFFSET + max_mapnr ).

The for_each_valid_pfn() function can therefore be a simple for() loop
using those as min/max respectively.

Link: https://lkml.kernel.org/r/20250423133821.789413-3-dwmw2@infradead.org


Signed-off-by: default avatarDavid Woodhouse <dwmw@amazon.co.uk>
Reviewed-by: default avatarMike Rapoport (Microsoft) <rppt@kernel.org>
Acked-by: default avatarDavid Hildenbrand <david@redhat.com>
Cc: Anshuman Khandual <anshuman.khandual@arm.com>
Cc: Ard Biesheuvel <ardb@kernel.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Marc Rutland <mark.rutland@arm.com>
Cc: Marc Zyngier <maz@kernel.org>
Cc: Ruihan Li <lrh2000@pku.edu.cn>
Cc: Will Deacon <will@kernel.org>
Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent f88ce2c8
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -30,7 +30,15 @@ static inline int pfn_valid(unsigned long pfn)
	return pfn >= pfn_offset && (pfn - pfn_offset) < max_mapnr;
}
#define pfn_valid pfn_valid
#endif

#ifndef for_each_valid_pfn
#define for_each_valid_pfn(pfn, start_pfn, end_pfn)			 \
	for ((pfn) = max_t(unsigned long, (start_pfn), ARCH_PFN_OFFSET); \
	     (pfn) < min_t(unsigned long, (end_pfn),			 \
			   ARCH_PFN_OFFSET + max_mapnr);		 \
	     (pfn)++)
#endif /* for_each_valid_pfn */
#endif /* valid_pfn */

#elif defined(CONFIG_SPARSEMEM_VMEMMAP)