Linux-ARM-Kernel Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/6] treewide: remove unnecessary invalid range checks in memblock iteration loops
@ 2026-06-21 14:59 Sang-Heon Jeon
  2026-06-21 14:59 ` [PATCH 1/6] arm64: mm: remove unreachable invalid range check in kasan_init_shadow() Sang-Heon Jeon
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Sang-Heon Jeon @ 2026-06-21 14:59 UTC (permalink / raw)
  To: Albert Ou, Andrew Morton, Andrey Ryabinin, Catalin Marinas,
	Huacai Chen, Mike Rapoport, Muchun Song, Oscar Salvador,
	Palmer Dabbelt, Paul Walmsley, Will Deacon
  Cc: Sang-Heon Jeon, Alexander Potapenko, Alexandre Ghiti,
	Andrey Konovalov, David Hildenbrand, Dmitry Vyukov, kasan-dev,
	linux-arm-kernel, linux-mm, linux-riscv, loongarch,
	Vincenzo Frascino, WANG Xuerui

The memblock API guarantees that for_each_mem_range() and
for_each_mem_pfn_range() never return an invalid range, meaning start is
always less than end.

Several memblock callers still have unnecessary invalid range checks in
their loop bodies, so remove them.

Patches 1-4 cover for_each_mem_range() callers. memblock never stores a
zero-size region, so the range it returns always has start < end. Some
callers apply __va() or __phys_to_virt() before comparing, but these keep
start < end too, so the check is unreachable.

Patches 5-6 cover for_each_mem_pfn_range() callers. __next_mem_pfn_range()
skips any region that contains no whole page, so it only ever returns
start_pfn < end_pfn and the check is unnecessary.

For reference, commit 36ca7f4be809 ("arm64: mm: Remove bogus stop
condition from map_mem() loop") did a similar cleanup in arm64 map_mem().

All these checks are in different trees, so I split the change into one
patch per arch/subsystem. The patches are independent and can be applied
separately.

Sang-Heon Jeon (6):
  arm64: mm: remove unreachable invalid range check in
    kasan_init_shadow()
  LoongArch: remove unreachable invalid range check in kasan_init()
  riscv: remove unreachable invalid range check in
    create_linear_mapping_page_table()
  riscv: remove unreachable invalid range check in kasan_init()
  mm: remove unnecessary empty range check in
    early_calculate_totalpages()
  mm/hugetlb: remove unnecessary empty range check in
    hugetlb_bootmem_set_nodes()

 arch/arm64/mm/kasan_init.c     | 3 ---
 arch/loongarch/mm/kasan_init.c | 3 ---
 arch/riscv/mm/init.c           | 2 --
 arch/riscv/mm/kasan_init.c     | 3 ---
 mm/hugetlb.c                   | 3 +--
 mm/mm_init.c                   | 3 +--
 6 files changed, 2 insertions(+), 15 deletions(-)

-- 
2.43.0



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 1/6] arm64: mm: remove unreachable invalid range check in kasan_init_shadow()
  2026-06-21 14:59 [PATCH 0/6] treewide: remove unnecessary invalid range checks in memblock iteration loops Sang-Heon Jeon
@ 2026-06-21 14:59 ` Sang-Heon Jeon
  2026-06-22 16:52   ` Andrey Ryabinin
  2026-06-25  8:46 ` [PATCH 0/6] treewide: remove unnecessary invalid range checks in memblock iteration loops Mike Rapoport
  2026-06-26  8:23 ` Mike Rapoport
  2 siblings, 1 reply; 6+ messages in thread
From: Sang-Heon Jeon @ 2026-06-21 14:59 UTC (permalink / raw)
  To: Andrey Ryabinin, Catalin Marinas, Will Deacon
  Cc: Sang-Heon Jeon, Alexander Potapenko, Andrey Konovalov,
	Dmitry Vyukov, kasan-dev, linux-arm-kernel, Vincenzo Frascino

kasan_init_shadow() maps each memblock region with for_each_mem_range()
and breaks the loop when start >= end. for_each_mem_range() never returns
an invalid range, so start < end always.

Therefore the start >= end check is unreachable, so remove it.

No functional change.

Signed-off-by: Sang-Heon Jeon <ekffu200098@gmail.com>
---
 arch/arm64/mm/kasan_init.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/arch/arm64/mm/kasan_init.c b/arch/arm64/mm/kasan_init.c
index 3fcad956fdf7..45fbdce684c8 100644
--- a/arch/arm64/mm/kasan_init.c
+++ b/arch/arm64/mm/kasan_init.c
@@ -353,9 +353,6 @@ static void __init kasan_init_shadow(void)
 		void *start = (void *)__phys_to_virt(pa_start);
 		void *end = (void *)__phys_to_virt(pa_end);
 
-		if (start >= end)
-			break;
-
 		kasan_map_populate((unsigned long)kasan_mem_to_shadow(start),
 				   (unsigned long)kasan_mem_to_shadow(end),
 				   early_pfn_to_nid(virt_to_pfn(start)));
-- 
2.43.0



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/6] arm64: mm: remove unreachable invalid range check in kasan_init_shadow()
  2026-06-21 14:59 ` [PATCH 1/6] arm64: mm: remove unreachable invalid range check in kasan_init_shadow() Sang-Heon Jeon
@ 2026-06-22 16:52   ` Andrey Ryabinin
  0 siblings, 0 replies; 6+ messages in thread
From: Andrey Ryabinin @ 2026-06-22 16:52 UTC (permalink / raw)
  To: Sang-Heon Jeon, Catalin Marinas, Will Deacon
  Cc: Alexander Potapenko, Andrey Konovalov, Dmitry Vyukov, kasan-dev,
	linux-arm-kernel, Vincenzo Frascino

Sang-Heon Jeon <ekffu200098@gmail.com> writes:

> kasan_init_shadow() maps each memblock region with for_each_mem_range()
> and breaks the loop when start >= end. for_each_mem_range() never returns
> an invalid range, so start < end always.
>
> Therefore the start >= end check is unreachable, so remove it.
>
> No functional change.
>
> Signed-off-by: Sang-Heon Jeon <ekffu200098@gmail.com>
> ---
>  arch/arm64/mm/kasan_init.c | 3 ---
>  1 file changed, 3 deletions(-)
>

Reviewed-by: Andrey Ryabinin <ryabinin.a.a@gmail.com>

> diff --git a/arch/arm64/mm/kasan_init.c b/arch/arm64/mm/kasan_init.c
> index 3fcad956fdf7..45fbdce684c8 100644
> --- a/arch/arm64/mm/kasan_init.c
> +++ b/arch/arm64/mm/kasan_init.c
> @@ -353,9 +353,6 @@ static void __init kasan_init_shadow(void)
>  		void *start = (void *)__phys_to_virt(pa_start);
>  		void *end = (void *)__phys_to_virt(pa_end);
>
> -		if (start >= end)
> -			break;
> -
>  		kasan_map_populate((unsigned long)kasan_mem_to_shadow(start),
>  				   (unsigned long)kasan_mem_to_shadow(end),
>  				   early_pfn_to_nid(virt_to_pfn(start)));
> --
> 2.43.0


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 0/6] treewide: remove unnecessary invalid range checks in memblock iteration loops
  2026-06-21 14:59 [PATCH 0/6] treewide: remove unnecessary invalid range checks in memblock iteration loops Sang-Heon Jeon
  2026-06-21 14:59 ` [PATCH 1/6] arm64: mm: remove unreachable invalid range check in kasan_init_shadow() Sang-Heon Jeon
@ 2026-06-25  8:46 ` Mike Rapoport
  2026-06-26  8:23 ` Mike Rapoport
  2 siblings, 0 replies; 6+ messages in thread
From: Mike Rapoport @ 2026-06-25  8:46 UTC (permalink / raw)
  To: Sang-Heon Jeon
  Cc: Albert Ou, Andrew Morton, Andrey Ryabinin, Catalin Marinas,
	Huacai Chen, Mike Rapoport, Muchun Song, Oscar Salvador,
	Palmer Dabbelt, Paul Walmsley, Will Deacon, Alexander Potapenko,
	Alexandre Ghiti, Andrey Konovalov, David Hildenbrand,
	Dmitry Vyukov, kasan-dev, linux-arm-kernel, linux-mm, linux-riscv,
	loongarch, Vincenzo Frascino, WANG Xuerui

On Sun, 21 Jun 2026 23:59:10 +0900, Sang-Heon Jeon <ekffu200098@gmail.com> wrote:
> treewide: remove unnecessary invalid range checks in memblock iteration loops
> 
> The memblock API guarantees that for_each_mem_range() and
> for_each_mem_pfn_range() never return an invalid range, meaning start is
> always less than end.
> 
> Several memblock callers still have unnecessary invalid range checks in
> their loop bodies, so remove them.
> 
> [...]

Acked-by: Mike Rapoport (Microsoft) <rppt@kernel.org>

-- 
Sincerely yours,
Mike.



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 0/6] treewide: remove unnecessary invalid range checks in memblock iteration loops
  2026-06-21 14:59 [PATCH 0/6] treewide: remove unnecessary invalid range checks in memblock iteration loops Sang-Heon Jeon
  2026-06-21 14:59 ` [PATCH 1/6] arm64: mm: remove unreachable invalid range check in kasan_init_shadow() Sang-Heon Jeon
  2026-06-25  8:46 ` [PATCH 0/6] treewide: remove unnecessary invalid range checks in memblock iteration loops Mike Rapoport
@ 2026-06-26  8:23 ` Mike Rapoport
  2026-06-26 10:59   ` Sang-Heon Jeon
  2 siblings, 1 reply; 6+ messages in thread
From: Mike Rapoport @ 2026-06-26  8:23 UTC (permalink / raw)
  To: Sang-Heon Jeon
  Cc: Albert Ou, Andrew Morton, Andrey Ryabinin, Catalin Marinas,
	Huacai Chen, Muchun Song, Oscar Salvador, Palmer Dabbelt,
	Paul Walmsley, Will Deacon, Alexander Potapenko, Alexandre Ghiti,
	Andrey Konovalov, David Hildenbrand, Dmitry Vyukov, kasan-dev,
	linux-arm-kernel, linux-mm, linux-riscv, loongarch,
	Vincenzo Frascino, WANG Xuerui

On Sun, Jun 21, 2026 at 11:59:10PM +0900, Sang-Heon Jeon wrote:
> The memblock API guarantees that for_each_mem_range() and
> for_each_mem_pfn_range() never return an invalid range, meaning start is
> always less than end.
> 
> Several memblock callers still have unnecessary invalid range checks in
> their loop bodies, so remove them.
> 
> Sang-Heon Jeon (6):
>   arm64: mm: remove unreachable invalid range check in
>     kasan_init_shadow()
>   LoongArch: remove unreachable invalid range check in kasan_init()
>   riscv: remove unreachable invalid range check in
>     create_linear_mapping_page_table()
>   riscv: remove unreachable invalid range check in kasan_init()
>   mm: remove unnecessary empty range check in
>     early_calculate_totalpages()
>   mm/hugetlb: remove unnecessary empty range check in
>     hugetlb_bootmem_set_nodes()

I queued this for inclusion into memblock tree.

>  arch/arm64/mm/kasan_init.c     | 3 ---
>  arch/loongarch/mm/kasan_init.c | 3 ---
>  arch/riscv/mm/init.c           | 2 --
>  arch/riscv/mm/kasan_init.c     | 3 ---
>  mm/hugetlb.c                   | 3 +--
>  mm/mm_init.c                   | 3 +--
>  6 files changed, 2 insertions(+), 15 deletions(-)
> 
> -- 
> 2.43.0
> 

-- 
Sincerely yours,
Mike.


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 0/6] treewide: remove unnecessary invalid range checks in memblock iteration loops
  2026-06-26  8:23 ` Mike Rapoport
@ 2026-06-26 10:59   ` Sang-Heon Jeon
  0 siblings, 0 replies; 6+ messages in thread
From: Sang-Heon Jeon @ 2026-06-26 10:59 UTC (permalink / raw)
  To: Mike Rapoport
  Cc: Albert Ou, Andrew Morton, Andrey Ryabinin, Catalin Marinas,
	Huacai Chen, Muchun Song, Oscar Salvador, Palmer Dabbelt,
	Paul Walmsley, Will Deacon, Alexander Potapenko, Alexandre Ghiti,
	Andrey Konovalov, David Hildenbrand, Dmitry Vyukov, kasan-dev,
	linux-arm-kernel, linux-mm, linux-riscv, loongarch,
	Vincenzo Frascino, WANG Xuerui

On Fri, Jun 26, 2026 at 5:23 PM Mike Rapoport <rppt@kernel.org> wrote:
>
> On Sun, Jun 21, 2026 at 11:59:10PM +0900, Sang-Heon Jeon wrote:
> > The memblock API guarantees that for_each_mem_range() and
> > for_each_mem_pfn_range() never return an invalid range, meaning start is
> > always less than end.
> >
> > Several memblock callers still have unnecessary invalid range checks in
> > their loop bodies, so remove them.
> >
> > Sang-Heon Jeon (6):
> >   arm64: mm: remove unreachable invalid range check in
> >     kasan_init_shadow()
> >   LoongArch: remove unreachable invalid range check in kasan_init()
> >   riscv: remove unreachable invalid range check in
> >     create_linear_mapping_page_table()
> >   riscv: remove unreachable invalid range check in kasan_init()
> >   mm: remove unnecessary empty range check in
> >     early_calculate_totalpages()
> >   mm/hugetlb: remove unnecessary empty range check in
> >     hugetlb_bootmem_set_nodes()
>
> I queued this for inclusion into memblock tree.

Thank you, Mike.

Could you please review and queue this patch [1] as well? It does the
same kind of clean up, I just missed it at the time.

[1] https://lore.kernel.org/all/20260626032902.703944-1-ekffu200098@gmail.com/

> >  arch/arm64/mm/kasan_init.c     | 3 ---
> >  arch/loongarch/mm/kasan_init.c | 3 ---
> >  arch/riscv/mm/init.c           | 2 --
> >  arch/riscv/mm/kasan_init.c     | 3 ---
> >  mm/hugetlb.c                   | 3 +--
> >  mm/mm_init.c                   | 3 +--
> >  6 files changed, 2 insertions(+), 15 deletions(-)
> >
> > --
> > 2.43.0
> >
>
> --
> Sincerely yours,
> Mike.

Best Regards,
Sang-Heon Jeon


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2026-06-26 10:59 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-21 14:59 [PATCH 0/6] treewide: remove unnecessary invalid range checks in memblock iteration loops Sang-Heon Jeon
2026-06-21 14:59 ` [PATCH 1/6] arm64: mm: remove unreachable invalid range check in kasan_init_shadow() Sang-Heon Jeon
2026-06-22 16:52   ` Andrey Ryabinin
2026-06-25  8:46 ` [PATCH 0/6] treewide: remove unnecessary invalid range checks in memblock iteration loops Mike Rapoport
2026-06-26  8:23 ` Mike Rapoport
2026-06-26 10:59   ` Sang-Heon Jeon

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox