arch/loongarch/mm/mmap.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
With ltp test case "testcases/bin/hugefork02", there is dmesg error
report message such as
kernel BUG at mm/hugetlb.c:5550!
Oops - BUG[#1]:
CPU: 0 UID: 0 PID: 1517 Comm: hugefork02 Not tainted 6.14.0-rc2+ #241
Hardware name: QEMU QEMU Virtual Machine, BIOS unknown 2/2/2022
pc 90000000004eaf1c ra 9000000000485538 tp 900000010edbc000 sp 900000010edbf940
a0 900000010edbfb00 a1 9000000108d20280 a2 00007fffe9474000 a3 00007ffff3474000
a4 0000000000000000 a5 0000000000000003 a6 00000000003cadd3 a7 0000000000000000
t0 0000000001ffffff t1 0000000001474000 t2 900000010ecd7900 t3 00007fffe9474000
t4 00007fffe9474000 t5 0000000000000040 t6 900000010edbfb00 t7 0000000000000001
t8 0000000000000005 u0 90000000004849d0 s9 900000010edbfa00 s0 9000000108d20280
s1 00007fffe9474000 s2 0000000002000000 s3 9000000108d20280 s4 9000000002b38b10
s5 900000010edbfb00 s6 00007ffff3474000 s7 0000000000000406 s8 900000010edbfa08
ra: 9000000000485538 unmap_vmas+0x130/0x218
ERA: 90000000004eaf1c __unmap_hugepage_range+0x6f4/0x7d0
PRMD: 00000004 (PPLV0 +PIE -PWE)
EUEN: 00000007 (+FPE +SXE +ASXE -BTE)
ECFG: 00071c1d (LIE=0,2-4,10-12 VS=7)
ESTAT: 000c0000 [BRK] (IS= ECode=12 EsubCode=0)
PRID: 0014c010 (Loongson-64bit, Loongson-3A5000)
Modules linked in: snd_seq_dummy snd_seq snd_seq_device rfkill vfat fat virtio_net net_failover failover efi_pstore virtio_balloon pstore fuse nfnetlink virtio_scsi dm_multipath efivarfs
Process hugefork02 (pid: 1517, threadinfo=00000000a670eaf4, task=000000007a95fc64)
Call Trace:
[<90000000004eaf1c>] __unmap_hugepage_range+0x6f4/0x7d0
[<9000000000485534>] unmap_vmas+0x12c/0x218
[<9000000000494068>] exit_mmap+0xe0/0x308
[<900000000025fdc4>] mmput+0x74/0x180
[<900000000026a284>] do_exit+0x294/0x898
[<900000000026aa30>] do_group_exit+0x30/0x98
[<900000000027bed4>] get_signal+0x83c/0x868
[<90000000002457b4>] arch_do_signal_or_restart+0x54/0xfa0
[<90000000015795e8>] irqentry_exit_to_user_mode+0xb8/0x138
[<90000000002572d0>] tlb_do_page_fault_1+0x114/0x1b4
The problem is that base address allocated from hugetlbfs is not aligned
with pmd size. Here add checking for hugetlbfs and align base address
with pmd size. After this patch rest case "testcases/bin/hugefork02"
passes to run.
Signed-off-by: Bibo Mao <maobibo@loongson.cn>
---
arch/loongarch/mm/mmap.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/arch/loongarch/mm/mmap.c b/arch/loongarch/mm/mmap.c
index 914e82ff3f65..1df9e99582cc 100644
--- a/arch/loongarch/mm/mmap.c
+++ b/arch/loongarch/mm/mmap.c
@@ -3,6 +3,7 @@
* Copyright (C) 2020-2022 Loongson Technology Corporation Limited
*/
#include <linux/export.h>
+#include <linux/hugetlb.h>
#include <linux/io.h>
#include <linux/kfence.h>
#include <linux/memblock.h>
@@ -63,8 +64,11 @@ static unsigned long arch_get_unmapped_area_common(struct file *filp,
}
info.length = len;
- info.align_mask = do_color_align ? (PAGE_MASK & SHM_ALIGN_MASK) : 0;
info.align_offset = pgoff << PAGE_SHIFT;
+ if (filp && is_file_hugepages(filp))
+ info.align_mask = huge_page_mask_align(filp);
+ else
+ info.align_mask = do_color_align ? (PAGE_MASK & SHM_ALIGN_MASK) : 0;
if (dir == DOWN) {
info.flags = VM_UNMAPPED_AREA_TOPDOWN;
--
2.39.3
Hi, Bibo,
On Tue, Mar 4, 2025 at 7:27 PM Bibo Mao <maobibo@loongson.cn> wrote:
>
> With ltp test case "testcases/bin/hugefork02", there is dmesg error
> report message such as
> kernel BUG at mm/hugetlb.c:5550!
> Oops - BUG[#1]:
> CPU: 0 UID: 0 PID: 1517 Comm: hugefork02 Not tainted 6.14.0-rc2+ #241
> Hardware name: QEMU QEMU Virtual Machine, BIOS unknown 2/2/2022
> pc 90000000004eaf1c ra 9000000000485538 tp 900000010edbc000 sp 900000010edbf940
> a0 900000010edbfb00 a1 9000000108d20280 a2 00007fffe9474000 a3 00007ffff3474000
> a4 0000000000000000 a5 0000000000000003 a6 00000000003cadd3 a7 0000000000000000
> t0 0000000001ffffff t1 0000000001474000 t2 900000010ecd7900 t3 00007fffe9474000
> t4 00007fffe9474000 t5 0000000000000040 t6 900000010edbfb00 t7 0000000000000001
> t8 0000000000000005 u0 90000000004849d0 s9 900000010edbfa00 s0 9000000108d20280
> s1 00007fffe9474000 s2 0000000002000000 s3 9000000108d20280 s4 9000000002b38b10
> s5 900000010edbfb00 s6 00007ffff3474000 s7 0000000000000406 s8 900000010edbfa08
> ra: 9000000000485538 unmap_vmas+0x130/0x218
> ERA: 90000000004eaf1c __unmap_hugepage_range+0x6f4/0x7d0
> PRMD: 00000004 (PPLV0 +PIE -PWE)
> EUEN: 00000007 (+FPE +SXE +ASXE -BTE)
> ECFG: 00071c1d (LIE=0,2-4,10-12 VS=7)
> ESTAT: 000c0000 [BRK] (IS= ECode=12 EsubCode=0)
> PRID: 0014c010 (Loongson-64bit, Loongson-3A5000)
> Modules linked in: snd_seq_dummy snd_seq snd_seq_device rfkill vfat fat virtio_net net_failover failover efi_pstore virtio_balloon pstore fuse nfnetlink virtio_scsi dm_multipath efivarfs
> Process hugefork02 (pid: 1517, threadinfo=00000000a670eaf4, task=000000007a95fc64)
> Call Trace:
> [<90000000004eaf1c>] __unmap_hugepage_range+0x6f4/0x7d0
> [<9000000000485534>] unmap_vmas+0x12c/0x218
> [<9000000000494068>] exit_mmap+0xe0/0x308
> [<900000000025fdc4>] mmput+0x74/0x180
> [<900000000026a284>] do_exit+0x294/0x898
> [<900000000026aa30>] do_group_exit+0x30/0x98
> [<900000000027bed4>] get_signal+0x83c/0x868
> [<90000000002457b4>] arch_do_signal_or_restart+0x54/0xfa0
> [<90000000015795e8>] irqentry_exit_to_user_mode+0xb8/0x138
> [<90000000002572d0>] tlb_do_page_fault_1+0x114/0x1b4
>
> The problem is that base address allocated from hugetlbfs is not aligned
> with pmd size. Here add checking for hugetlbfs and align base address
> with pmd size. After this patch rest case "testcases/bin/hugefork02"
> passes to run.
>
> Signed-off-by: Bibo Mao <maobibo@loongson.cn>
> ---
> arch/loongarch/mm/mmap.c | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/arch/loongarch/mm/mmap.c b/arch/loongarch/mm/mmap.c
> index 914e82ff3f65..1df9e99582cc 100644
> --- a/arch/loongarch/mm/mmap.c
> +++ b/arch/loongarch/mm/mmap.c
> @@ -3,6 +3,7 @@
> * Copyright (C) 2020-2022 Loongson Technology Corporation Limited
> */
> #include <linux/export.h>
> +#include <linux/hugetlb.h>
> #include <linux/io.h>
> #include <linux/kfence.h>
> #include <linux/memblock.h>
> @@ -63,8 +64,11 @@ static unsigned long arch_get_unmapped_area_common(struct file *filp,
> }
>
> info.length = len;
> - info.align_mask = do_color_align ? (PAGE_MASK & SHM_ALIGN_MASK) : 0;
> info.align_offset = pgoff << PAGE_SHIFT;
> + if (filp && is_file_hugepages(filp))
> + info.align_mask = huge_page_mask_align(filp);
> + else
> + info.align_mask = do_color_align ? (PAGE_MASK & SHM_ALIGN_MASK) : 0;
Thank you for your catch, I think this problem only exist after commit
7f24cbc9c4d42db8a3c8484d120cf9c1 ("mm/mmap: teach
generic_get_unmapped_area{_topdown} to handle hugetlb mappings"). But
you don't need to resend, I will add this information when I apply.
Huacai
>
> if (dir == DOWN) {
> info.flags = VM_UNMAPPED_AREA_TOPDOWN;
> --
> 2.39.3
>
© 2016 - 2026 Red Hat, Inc.