* [PATCH 0/6] treewide: remove unnecessary invalid range checks in memblock iteration loops
@ 2026-06-21 14:59 ` Sang-Heon Jeon
0 siblings, 0 replies; 21+ 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
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 21+ messages in thread* [PATCH 1/6] arm64: mm: remove unreachable invalid range check in kasan_init_shadow()
2026-06-21 14:59 ` Sang-Heon Jeon
(?)
@ 2026-06-21 14:59 ` Sang-Heon Jeon
2026-06-22 16:52 ` Andrey Ryabinin
-1 siblings, 1 reply; 21+ 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] 21+ 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; 21+ 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] 21+ messages in thread
* [PATCH 2/6] LoongArch: remove unreachable invalid range check in kasan_init()
2026-06-21 14:59 ` Sang-Heon Jeon
(?)
(?)
@ 2026-06-21 14:59 ` Sang-Heon Jeon
2026-06-22 16:52 ` Andrey Ryabinin
-1 siblings, 1 reply; 21+ messages in thread
From: Sang-Heon Jeon @ 2026-06-21 14:59 UTC (permalink / raw)
To: Andrey Ryabinin, Huacai Chen
Cc: Sang-Heon Jeon, Alexander Potapenko, Andrey Konovalov,
Dmitry Vyukov, kasan-dev, loongarch, Vincenzo Frascino,
WANG Xuerui
kasan_init() populates the linear mapping shadow 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/loongarch/mm/kasan_init.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/arch/loongarch/mm/kasan_init.c b/arch/loongarch/mm/kasan_init.c
index 0fc02ca06457..92ca0ba86406 100644
--- a/arch/loongarch/mm/kasan_init.c
+++ b/arch/loongarch/mm/kasan_init.c
@@ -305,9 +305,6 @@ void __init kasan_init(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)mem_to_shadow(start),
(unsigned long)mem_to_shadow(end), NUMA_NO_NODE);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH 2/6] LoongArch: remove unreachable invalid range check in kasan_init()
2026-06-21 14:59 ` [PATCH 2/6] LoongArch: remove unreachable invalid range check in kasan_init() Sang-Heon Jeon
@ 2026-06-22 16:52 ` Andrey Ryabinin
0 siblings, 0 replies; 21+ messages in thread
From: Andrey Ryabinin @ 2026-06-22 16:52 UTC (permalink / raw)
To: Sang-Heon Jeon, Huacai Chen
Cc: Alexander Potapenko, Andrey Konovalov, Dmitry Vyukov, kasan-dev,
loongarch, Vincenzo Frascino, WANG Xuerui
Sang-Heon Jeon <ekffu200098@gmail.com> writes:
> kasan_init() populates the linear mapping shadow 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/loongarch/mm/kasan_init.c | 3 ---
> 1 file changed, 3 deletions(-)
>
Reviewed-by: Andrey Ryabinin <ryabinin.a.a@gmail.com>
^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH 3/6] riscv: remove unreachable invalid range check in create_linear_mapping_page_table()
2026-06-21 14:59 ` Sang-Heon Jeon
` (2 preceding siblings ...)
(?)
@ 2026-06-21 14:59 ` Sang-Heon Jeon
2026-06-22 5:10 ` Charlie Jenkins
-1 siblings, 1 reply; 21+ messages in thread
From: Sang-Heon Jeon @ 2026-06-21 14:59 UTC (permalink / raw)
To: Paul Walmsley, Palmer Dabbelt, Albert Ou
Cc: Sang-Heon Jeon, Alexandre Ghiti, linux-riscv
create_linear_mapping_page_table() iterates memblock regions 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/riscv/mm/init.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c
index 5b1b3c88b4d1..eb93c2ac05a6 100644
--- a/arch/riscv/mm/init.c
+++ b/arch/riscv/mm/init.c
@@ -1229,8 +1229,6 @@ static void __init create_linear_mapping_page_table(void)
/* Map all memory banks in the linear mapping */
for_each_mem_range(i, &start, &end) {
- if (start >= end)
- break;
if (start <= __pa(PAGE_OFFSET) &&
__pa(PAGE_OFFSET) < end)
start = __pa(PAGE_OFFSET);
--
2.43.0
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply related [flat|nested] 21+ messages in thread* Re: [PATCH 3/6] riscv: remove unreachable invalid range check in create_linear_mapping_page_table()
2026-06-21 14:59 ` [PATCH 3/6] riscv: remove unreachable invalid range check in create_linear_mapping_page_table() Sang-Heon Jeon
@ 2026-06-22 5:10 ` Charlie Jenkins
0 siblings, 0 replies; 21+ messages in thread
From: Charlie Jenkins @ 2026-06-22 5:10 UTC (permalink / raw)
To: Sang-Heon Jeon
Cc: Paul Walmsley, Palmer Dabbelt, Albert Ou, Alexandre Ghiti,
linux-riscv
On Sun, Jun 21, 2026 at 11:59:13PM +0900, Sang-Heon Jeon wrote:
> create_linear_mapping_page_table() iterates memblock regions 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>
Reviewed-by: Charlie Jenkins <thecharlesjenkins@gmail.com>
Tested-by: Charlie Jenkins <thecharlesjenkins@gmail.com>
> ---
> arch/riscv/mm/init.c | 2 --
> 1 file changed, 2 deletions(-)
>
> diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c
> index 5b1b3c88b4d1..eb93c2ac05a6 100644
> --- a/arch/riscv/mm/init.c
> +++ b/arch/riscv/mm/init.c
> @@ -1229,8 +1229,6 @@ static void __init create_linear_mapping_page_table(void)
>
> /* Map all memory banks in the linear mapping */
> for_each_mem_range(i, &start, &end) {
> - if (start >= end)
> - break;
> if (start <= __pa(PAGE_OFFSET) &&
> __pa(PAGE_OFFSET) < end)
> start = __pa(PAGE_OFFSET);
> --
> 2.43.0
>
>
> _______________________________________________
> linux-riscv mailing list
> linux-riscv@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-riscv
>
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH 4/6] riscv: remove unreachable invalid range check in kasan_init()
2026-06-21 14:59 ` Sang-Heon Jeon
` (3 preceding siblings ...)
(?)
@ 2026-06-21 14:59 ` Sang-Heon Jeon
2026-06-22 5:11 ` Charlie Jenkins
2026-06-22 16:53 ` Andrey Ryabinin
-1 siblings, 2 replies; 21+ messages in thread
From: Sang-Heon Jeon @ 2026-06-21 14:59 UTC (permalink / raw)
To: Andrey Ryabinin, Paul Walmsley, Palmer Dabbelt, Albert Ou
Cc: Sang-Heon Jeon, Alexander Potapenko, Alexandre Ghiti,
Andrey Konovalov, Dmitry Vyukov, kasan-dev, linux-riscv,
Vincenzo Frascino
kasan_init() populates the linear mapping shadow 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/riscv/mm/kasan_init.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/arch/riscv/mm/kasan_init.c b/arch/riscv/mm/kasan_init.c
index c4a2a9e5586e..1f3aa9611187 100644
--- a/arch/riscv/mm/kasan_init.c
+++ b/arch/riscv/mm/kasan_init.c
@@ -512,9 +512,6 @@ void __init kasan_init(void)
void *start = (void *)__va(p_start);
void *end = (void *)__va(p_end);
- if (start >= end)
- break;
-
kasan_populate(kasan_mem_to_shadow(start), kasan_mem_to_shadow(end));
}
--
2.43.0
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply related [flat|nested] 21+ messages in thread* Re: [PATCH 4/6] riscv: remove unreachable invalid range check in kasan_init()
2026-06-21 14:59 ` [PATCH 4/6] riscv: remove unreachable invalid range check in kasan_init() Sang-Heon Jeon
@ 2026-06-22 5:11 ` Charlie Jenkins
2026-06-22 16:53 ` Andrey Ryabinin
1 sibling, 0 replies; 21+ messages in thread
From: Charlie Jenkins @ 2026-06-22 5:11 UTC (permalink / raw)
To: Sang-Heon Jeon
Cc: Andrey Ryabinin, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Alexander Potapenko, Alexandre Ghiti, Andrey Konovalov,
Dmitry Vyukov, kasan-dev, linux-riscv, Vincenzo Frascino
On Sun, Jun 21, 2026 at 11:59:14PM +0900, Sang-Heon Jeon wrote:
> kasan_init() populates the linear mapping shadow 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>
Reviewed-by: Charlie Jenkins <thecharlesjenkins@gmail.com>
Tested-by: Charlie Jenkins <thecharlesjenkins@gmail.com>
> ---
> arch/riscv/mm/kasan_init.c | 3 ---
> 1 file changed, 3 deletions(-)
>
> diff --git a/arch/riscv/mm/kasan_init.c b/arch/riscv/mm/kasan_init.c
> index c4a2a9e5586e..1f3aa9611187 100644
> --- a/arch/riscv/mm/kasan_init.c
> +++ b/arch/riscv/mm/kasan_init.c
> @@ -512,9 +512,6 @@ void __init kasan_init(void)
> void *start = (void *)__va(p_start);
> void *end = (void *)__va(p_end);
>
> - if (start >= end)
> - break;
> -
> kasan_populate(kasan_mem_to_shadow(start), kasan_mem_to_shadow(end));
> }
>
> --
> 2.43.0
>
>
> _______________________________________________
> linux-riscv mailing list
> linux-riscv@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-riscv
>
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 4/6] riscv: remove unreachable invalid range check in kasan_init()
2026-06-21 14:59 ` [PATCH 4/6] riscv: remove unreachable invalid range check in kasan_init() Sang-Heon Jeon
2026-06-22 5:11 ` Charlie Jenkins
@ 2026-06-22 16:53 ` Andrey Ryabinin
1 sibling, 0 replies; 21+ messages in thread
From: Andrey Ryabinin @ 2026-06-22 16:53 UTC (permalink / raw)
To: Sang-Heon Jeon, Paul Walmsley, Palmer Dabbelt, Albert Ou
Cc: Alexander Potapenko, Alexandre Ghiti, Andrey Konovalov,
Dmitry Vyukov, kasan-dev, linux-riscv, Vincenzo Frascino
Sang-Heon Jeon <ekffu200098@gmail.com> writes:
> kasan_init() populates the linear mapping shadow 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/riscv/mm/kasan_init.c | 3 ---
> 1 file changed, 3 deletions(-)
>
Reviewed-by: Andrey Ryabinin <ryabinin.a.a@gmail.com>
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH 5/6] mm: remove unnecessary empty range check in early_calculate_totalpages()
2026-06-21 14:59 ` Sang-Heon Jeon
` (4 preceding siblings ...)
(?)
@ 2026-06-21 14:59 ` Sang-Heon Jeon
2026-06-25 8:46 ` Mike Rapoport
-1 siblings, 1 reply; 21+ messages in thread
From: Sang-Heon Jeon @ 2026-06-21 14:59 UTC (permalink / raw)
To: Mike Rapoport, Andrew Morton; +Cc: Sang-Heon Jeon, linux-mm
early_calculate_totalpages() iterates the memory ranges with
for_each_mem_pfn_range() and calls node_set_state(nid, N_MEMORY) only when
end_pfn - start_pfn is non-zero. for_each_mem_pfn_range() never returns an
empty range, so start_pfn < end_pfn always.
Therefore the check is unnecessary, so remove it.
No functional change.
Signed-off-by: Sang-Heon Jeon <ekffu200098@gmail.com>
---
mm/mm_init.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/mm/mm_init.c b/mm/mm_init.c
index 0f64909e8d20..17498a13eb99 100644
--- a/mm/mm_init.c
+++ b/mm/mm_init.c
@@ -332,8 +332,7 @@ static unsigned long __init early_calculate_totalpages(void)
unsigned long pages = end_pfn - start_pfn;
totalpages += pages;
- if (pages)
- node_set_state(nid, N_MEMORY);
+ node_set_state(nid, N_MEMORY);
}
return totalpages;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread* [PATCH 6/6] mm/hugetlb: remove unnecessary empty range check in hugetlb_bootmem_set_nodes()
2026-06-21 14:59 ` Sang-Heon Jeon
` (5 preceding siblings ...)
(?)
@ 2026-06-21 14:59 ` Sang-Heon Jeon
2026-06-22 9:07 ` David Hildenbrand (Arm)
-1 siblings, 1 reply; 21+ messages in thread
From: Sang-Heon Jeon @ 2026-06-21 14:59 UTC (permalink / raw)
To: Muchun Song, Oscar Salvador, Andrew Morton
Cc: Sang-Heon Jeon, David Hildenbrand, linux-mm
hugetlb_bootmem_set_nodes() iterates the memory ranges with
for_each_mem_pfn_range() and calls node_set(nid, hugetlb_bootmem_nodes)
only when end_pfn > start_pfn. for_each_mem_pfn_range() never returns an
empty range, so start_pfn < end_pfn always.
Therefore the check is unnecessary, so remove it.
No functional change.
Signed-off-by: Sang-Heon Jeon <ekffu200098@gmail.com>
---
mm/hugetlb.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index 571212b80835..d4d4c9df5f51 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -4450,8 +4450,7 @@ void __init hugetlb_bootmem_set_nodes(void)
return;
for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, &nid) {
- if (end_pfn > start_pfn)
- node_set(nid, hugetlb_bootmem_nodes);
+ node_set(nid, hugetlb_bootmem_nodes);
}
}
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread* Re: [PATCH 6/6] mm/hugetlb: remove unnecessary empty range check in hugetlb_bootmem_set_nodes()
2026-06-21 14:59 ` [PATCH 6/6] mm/hugetlb: remove unnecessary empty range check in hugetlb_bootmem_set_nodes() Sang-Heon Jeon
@ 2026-06-22 9:07 ` David Hildenbrand (Arm)
0 siblings, 0 replies; 21+ messages in thread
From: David Hildenbrand (Arm) @ 2026-06-22 9:07 UTC (permalink / raw)
To: Sang-Heon Jeon, Muchun Song, Oscar Salvador, Andrew Morton; +Cc: linux-mm
On 6/21/26 16:59, Sang-Heon Jeon wrote:
> hugetlb_bootmem_set_nodes() iterates the memory ranges with
> for_each_mem_pfn_range() and calls node_set(nid, hugetlb_bootmem_nodes)
> only when end_pfn > start_pfn. for_each_mem_pfn_range() never returns an
> empty range, so start_pfn < end_pfn always.
>
> Therefore the check is unnecessary, so remove it.
>
> No functional change.
>
> Signed-off-by: Sang-Heon Jeon <ekffu200098@gmail.com>
> ---
> mm/hugetlb.c | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/mm/hugetlb.c b/mm/hugetlb.c
> index 571212b80835..d4d4c9df5f51 100644
> --- a/mm/hugetlb.c
> +++ b/mm/hugetlb.c
> @@ -4450,8 +4450,7 @@ void __init hugetlb_bootmem_set_nodes(void)
> return;
>
> for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, &nid) {
> - if (end_pfn > start_pfn)
> - node_set(nid, hugetlb_bootmem_nodes);
> + node_set(nid, hugetlb_bootmem_nodes);
> }
> }
We have
if (PFN_UP(r->base) >= PFN_DOWN(r->base + r->size))
continue;
...
*out_start_pfn = PFN_UP(r->base);
*out_end_pfn = PFN_DOWN(r->base + r->size);
So we should always have *out_start_pfn < *out_end_pfn
Reviewed-by: David Hildenbrand (Arm) <david@kernel.org>
--
Cheers,
David
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 0/6] treewide: remove unnecessary invalid range checks in memblock iteration loops
2026-06-21 14:59 ` Sang-Heon Jeon
@ 2026-06-25 8:46 ` Mike Rapoport
-1 siblings, 0 replies; 21+ 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] 21+ messages in thread
* Re: [PATCH 0/6] treewide: remove unnecessary invalid range checks in memblock iteration loops
@ 2026-06-25 8:46 ` Mike Rapoport
0 siblings, 0 replies; 21+ 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.
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 0/6] treewide: remove unnecessary invalid range checks in memblock iteration loops
2026-06-21 14:59 ` Sang-Heon Jeon
@ 2026-06-26 8:23 ` Mike Rapoport
-1 siblings, 0 replies; 21+ 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] 21+ messages in thread
* Re: [PATCH 0/6] treewide: remove unnecessary invalid range checks in memblock iteration loops
@ 2026-06-26 8:23 ` Mike Rapoport
0 siblings, 0 replies; 21+ 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.
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 21+ 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
-1 siblings, 0 replies; 21+ 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] 21+ messages in thread
* Re: [PATCH 0/6] treewide: remove unnecessary invalid range checks in memblock iteration loops
@ 2026-06-26 10:59 ` Sang-Heon Jeon
0 siblings, 0 replies; 21+ 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
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 21+ messages in thread