[PATCH 0/6] treewide: remove unnecessary invalid range checks in memblock iteration loops

2 views
Skip to first unread message

Sang-Heon Jeon

unread,
Jun 21, 2026, 10:59:30 AM (9 days ago) Jun 21
to Albert Ou, Andrew Morton, Andrey Ryabinin, Catalin Marinas, Huacai Chen, Mike Rapoport, Muchun Song, Oscar Salvador, Palmer Dabbelt, Paul Walmsley, Will Deacon, Sang-Heon Jeon, Alexander Potapenko, Alexandre Ghiti, Andrey Konovalov, David Hildenbrand, Dmitry Vyukov, kasa...@googlegroups.com, linux-ar...@lists.infradead.org, linu...@kvack.org, linux...@lists.infradead.org, loon...@lists.linux.dev, 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

Sang-Heon Jeon

unread,
Jun 21, 2026, 10:59:35 AM (9 days ago) Jun 21
to Andrey Ryabinin, Catalin Marinas, Will Deacon, Sang-Heon Jeon, Alexander Potapenko, Andrey Konovalov, Dmitry Vyukov, kasa...@googlegroups.com, linux-ar...@lists.infradead.org, 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 <ekffu...@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

Sang-Heon Jeon

unread,
Jun 21, 2026, 10:59:40 AM (9 days ago) Jun 21
to Andrey Ryabinin, Huacai Chen, Sang-Heon Jeon, Alexander Potapenko, Andrey Konovalov, Dmitry Vyukov, kasa...@googlegroups.com, loon...@lists.linux.dev, 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 <ekffu...@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

Sang-Heon Jeon

unread,
Jun 21, 2026, 10:59:52 AM (9 days ago) Jun 21
to Andrey Ryabinin, Paul Walmsley, Palmer Dabbelt, Albert Ou, Sang-Heon Jeon, Alexander Potapenko, Alexandre Ghiti, Andrey Konovalov, Dmitry Vyukov, kasa...@googlegroups.com, linux...@lists.infradead.org, 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 <ekffu...@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

Charlie Jenkins

unread,
Jun 22, 2026, 1:11:39 AM (8 days ago) Jun 22
to Sang-Heon Jeon, Andrey Ryabinin, Paul Walmsley, Palmer Dabbelt, Albert Ou, Alexander Potapenko, Alexandre Ghiti, Andrey Konovalov, Dmitry Vyukov, kasa...@googlegroups.com, linux...@lists.infradead.org, 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 <ekffu...@gmail.com>

Reviewed-by: Charlie Jenkins <thecharl...@gmail.com>
Tested-by: Charlie Jenkins <thecharl...@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...@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-riscv
>

Andrey Ryabinin

unread,
Jun 22, 2026, 12:52:18 PM (8 days ago) Jun 22
to Sang-Heon Jeon, Catalin Marinas, Will Deacon, Alexander Potapenko, Andrey Konovalov, Dmitry Vyukov, kasa...@googlegroups.com, linux-ar...@lists.infradead.org, Vincenzo Frascino
Sang-Heon Jeon <ekffu...@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 <ekffu...@gmail.com>
> ---
> arch/arm64/mm/kasan_init.c | 3 ---
> 1 file changed, 3 deletions(-)
>

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

Andrey Ryabinin

unread,
Jun 22, 2026, 12:53:01 PM (8 days ago) Jun 22
to Sang-Heon Jeon, Huacai Chen, Alexander Potapenko, Andrey Konovalov, Dmitry Vyukov, kasa...@googlegroups.com, loon...@lists.linux.dev, Vincenzo Frascino, WANG Xuerui
Sang-Heon Jeon <ekffu...@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 <ekffu...@gmail.com>
> ---
> arch/loongarch/mm/kasan_init.c | 3 ---
> 1 file changed, 3 deletions(-)
>

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

Andrey Ryabinin

unread,
Jun 22, 2026, 12:53:16 PM (8 days ago) Jun 22
to Sang-Heon Jeon, Paul Walmsley, Palmer Dabbelt, Albert Ou, Alexander Potapenko, Alexandre Ghiti, Andrey Konovalov, Dmitry Vyukov, kasa...@googlegroups.com, linux...@lists.infradead.org, Vincenzo Frascino
Sang-Heon Jeon <ekffu...@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 <ekffu...@gmail.com>
> ---
> arch/riscv/mm/kasan_init.c | 3 ---
> 1 file changed, 3 deletions(-)
>

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

Mike Rapoport

unread,
Jun 25, 2026, 4:47:03 AM (5 days ago) Jun 25
to Sang-Heon Jeon, 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, kasa...@googlegroups.com, linux-ar...@lists.infradead.org, linu...@kvack.org, linux...@lists.infradead.org, loon...@lists.linux.dev, Vincenzo Frascino, WANG Xuerui
On Sun, 21 Jun 2026 23:59:10 +0900, Sang-Heon Jeon <ekffu...@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) <rp...@kernel.org>

--
Sincerely yours,
Mike.

Mike Rapoport

unread,
Jun 26, 2026, 4:23:18 AM (4 days ago) Jun 26
to Sang-Heon Jeon, 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, kasa...@googlegroups.com, linux-ar...@lists.infradead.org, linu...@kvack.org, linux...@lists.infradead.org, loon...@lists.linux.dev, 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.

Sang-Heon Jeon

unread,
Jun 26, 2026, 6:59:35 AM (4 days ago) Jun 26
to Mike Rapoport, 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, kasa...@googlegroups.com, linux-ar...@lists.infradead.org, linu...@kvack.org, linux...@lists.infradead.org, loon...@lists.linux.dev, Vincenzo Frascino, WANG Xuerui
On Fri, Jun 26, 2026 at 5:23 PM Mike Rapoport <rp...@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.70...@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

Mike Rapoport

unread,
Jun 29, 2026, 7:44:10 AM (22 hours ago) Jun 29
to Sang-Heon Jeon, 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, kasa...@googlegroups.com, linux-ar...@lists.infradead.org, linu...@kvack.org, linux...@lists.infradead.org, loon...@lists.linux.dev, Vincenzo Frascino, WANG Xuerui
On Fri, Jun 26, 2026 at 07:59:22PM +0900, Sang-Heon Jeon wrote:
> On Fri, Jun 26, 2026 at 5:23 PM Mike Rapoport <rp...@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.

Can you please resend them all as a single set?

> [1] https://lore.kernel.org/all/20260626032902.70...@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

--
Sincerely yours,
Mike.

Sang-Heon Jeon

unread,
Jun 29, 2026, 12:37:53 PM (17 hours ago) Jun 29
to rp...@kernel.org, Albert Ou, Andrew Morton, Andrey Ryabinin, Catalin Marinas, Huacai Chen, Madhavan Srinivasan, Michael Ellerman, Muchun Song, Oscar Salvador, Palmer Dabbelt, Paul Walmsley, Russell King, Will Deacon, linu...@kvack.org, Sang-Heon Jeon, Alexander Potapenko, Alexandre Ghiti, Andrey Konovalov, Christophe Leroy (CS GROUP), David Hildenbrand, Dmitry Vyukov, kasa...@googlegroups.com, linux-ar...@lists.infradead.org, linux-...@vger.kernel.org, linuxp...@lists.ozlabs.org, linux...@lists.infradead.org, loon...@lists.linux.dev, Nicholas Piggin, 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-6 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 7-8 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.

---
Changes from v1 [1]
- Add review-by, tested-by tags from v1
- Add missing simliar patches(5,6) to patch series
- Change base to rppt/for-next

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

Sang-Heon Jeon (8):
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()
ARM: remove unreachable invalid range check in kasan_init()
powerpc64/kasan: Remove unreachable invalid range check in
kasan_init_phys_region()
mm: remove unnecessary empty range check in
early_calculate_totalpages()
mm/hugetlb: remove unnecessary empty range check in
hugetlb_bootmem_set_nodes()

arch/arm/mm/kasan_init.c | 6 ------
arch/arm64/mm/kasan_init.c | 3 ---
arch/loongarch/mm/kasan_init.c | 3 ---
arch/powerpc/mm/kasan/init_book3e_64.c | 3 ---
arch/powerpc/mm/kasan/init_book3s_64.c | 3 ---
arch/riscv/mm/init.c | 2 --
arch/riscv/mm/kasan_init.c | 3 ---
mm/hugetlb.c | 3 +--
mm/mm_init.c | 3 +--
9 files changed, 2 insertions(+), 27 deletions(-)

--
2.43.0

Sang-Heon Jeon

unread,
Jun 29, 2026, 12:38:00 PM (17 hours ago) Jun 29
to rp...@kernel.org, Andrey Ryabinin, Catalin Marinas, Will Deacon, linu...@kvack.org, Sang-Heon Jeon, Alexander Potapenko, Andrey Konovalov, Dmitry Vyukov, kasa...@googlegroups.com, linux-ar...@lists.infradead.org, linux-...@vger.kernel.org, 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 <ekffu...@gmail.com>
Reviewed-by: Andrey Ryabinin <ryabin...@gmail.com>
---
arch/arm64/mm/kasan_init.c | 3 ---
1 file changed, 3 deletions(-)

Sang-Heon Jeon

unread,
Jun 29, 2026, 12:38:06 PM (17 hours ago) Jun 29
to rp...@kernel.org, Andrey Ryabinin, Huacai Chen, linu...@kvack.org, Sang-Heon Jeon, Alexander Potapenko, Andrey Konovalov, Dmitry Vyukov, kasa...@googlegroups.com, linux-...@vger.kernel.org, loon...@lists.linux.dev, 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 <ekffu...@gmail.com>
Reviewed-by: Andrey Ryabinin <ryabin...@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;
-

Sang-Heon Jeon

unread,
Jun 29, 2026, 12:38:15 PM (17 hours ago) Jun 29
to rp...@kernel.org, Andrey Ryabinin, Paul Walmsley, Palmer Dabbelt, Albert Ou, linu...@kvack.org, Sang-Heon Jeon, Alexander Potapenko, Alexandre Ghiti, Andrey Konovalov, Dmitry Vyukov, kasa...@googlegroups.com, linux-...@vger.kernel.org, linux...@lists.infradead.org, Vincenzo Frascino, Charlie Jenkins
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 <ekffu...@gmail.com>
Reviewed-by: Charlie Jenkins <thecharl...@gmail.com>
Tested-by: Charlie Jenkins <thecharl...@gmail.com>
Reviewed-by: Andrey Ryabinin <ryabin...@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

Sang-Heon Jeon

unread,
Jun 29, 2026, 12:38:18 PM (17 hours ago) Jun 29
to rp...@kernel.org, Andrey Ryabinin, Russell King, linu...@kvack.org, Sang-Heon Jeon, Alexander Potapenko, Andrey Konovalov, Dmitry Vyukov, kasa...@googlegroups.com, linux-ar...@lists.infradead.org, linux-...@vger.kernel.org, Vincenzo Frascino
kasan_init() maps each memblock region with for_each_mem_range(), which
guarantees pa_start < pa_end. Then it skips any region with
pa_start >= arm_lowmem_limit, so pa_start < arm_lowmem_limit is guaranteed
as well.

When pa_end <= arm_lowmem_limit, pa_start < pa_end means start < end, so
the start >= end check is unreachable.

When pa_end > arm_lowmem_limit, end is clamped to __va(arm_lowmem_limit),
and pa_start < arm_lowmem_limit means start < end, so the check is
unreachable as well.

No functional change.

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

diff --git a/arch/arm/mm/kasan_init.c b/arch/arm/mm/kasan_init.c
index c6625e808bf8..1f7c74c5df9e 100644
--- a/arch/arm/mm/kasan_init.c
+++ b/arch/arm/mm/kasan_init.c
@@ -262,12 +262,6 @@ void __init kasan_init(void)
&pa_start, &pa_end, &arm_lowmem_limit);
end = __va(arm_lowmem_limit);
}
- if (start >= end) {
- pr_info("Skipping invalid memory block %pa-%pa (virtual %p-%p)\n",
- &pa_start, &pa_end, start, end);
- continue;
- }
-
create_mapping(start, end);
}

--
2.43.0

Sang-Heon Jeon

unread,
Jun 29, 2026, 12:48:41 PM (17 hours ago) Jun 29
to Mike Rapoport, 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, kasa...@googlegroups.com, linux-ar...@lists.infradead.org, linu...@kvack.org, linux...@lists.infradead.org, loon...@lists.linux.dev, Vincenzo Frascino, WANG Xuerui
Thanks for considering, Mike.
I've sent v2 patch series [1] that includes the missing patches.

[1] https://lore.kernel.org/all/20260629163736.160...@gmail.com/#t

> > [1] https://lore.kernel.org/all/20260626032902.70...@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
>
> --
> Sincerely yours,
> Mike.

Best Regards,
Sang-Heon Jeon
Reply all
Reply to author
Forward
0 new messages