2024-03-08 11:53:45

by Naresh Kamboju

[permalink] [raw]
Subject: arm64: WARNING: at mm/vmalloc.c:315 ioremap_page_range

The following warning was noticed while boot arm and arm64 devices.
The below log is extracted from arm64 ROCK Pi 4B while booting and
another issue is kernel oops noticed while testing selftests: kvm:
memslot_perf_test.

1) WARNING: CPU: 1 PID: 201 at mm/vmalloc.c:315 ioremap_page_range
2) Unable to handle kernel NULL pointer dereference at virtual address
Internal error: Oops: 0000000096000006 [#1] PREEMPT SMP
Kernel panic - not syncing: Oops: Fatal exception in interrupt

Please find steps to reproduce, logs and config file links below.

Reported-by: Linux Kernel Functional Testing <[email protected]>

Warning log:
-----------
[ 21.074045] ------------[ cut here ]------------
[ 21.074468] vm_area at addr ffffffffc0800000 is not marked as VM_IOREMAP
[ 21.075125] WARNING: CPU: 1 PID: 201 at mm/vmalloc.c:315
ioremap_page_range (vmalloc.c:?)
[ 21.075854] Modules linked in: industrialio_triggered_buffer
pcie_rockchip_host(+) coresight kfifo_buf drm fuse backlight dm_mod
ip_tables x_tables
[ 21.077047] CPU: 1 PID: 201 Comm: (udev-worker) Not tainted
6.8.0-rc7-next-20240307 #1
[ 21.077749] Hardware name: Radxa ROCK Pi 4B (DT)
[ 21.078163] pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[ 21.078782] pc : ioremap_page_range (vmalloc.c:?)
[ 21.079197] lr : ioremap_page_range (vmalloc.c:?)
<trim>
[ 21.086242] Call trace:
[ 21.086464] ioremap_page_range (vmalloc.c:?)
[ 21.086839] pci_remap_iospace (??:?)
[ 21.087192] devm_pci_remap_iospace (??:?)
[ 21.087579] devm_of_pci_bridge_init (??:?)
[ 21.087990] devm_pci_alloc_host_bridge (??:?)
[ 21.088410] rockchip_pcie_probe+0x34/0x30c pcie_rockchip_host
[ 21.088955] platform_probe (platform.c:?)
[ 21.089288] really_probe (dd.c:?)
[ 21.089617] __driver_probe_device (dd.c:?)
[ 21.090009] driver_probe_device (dd.c:?)
[ 21.090385] __driver_attach (dd.c:?)
[ 21.090731] bus_for_each_dev (??:?)
[ 21.091084] driver_attach (??:?)
[ 21.091412] bus_add_driver (??:?)
[ 21.091760] driver_register (??:?)
[ 21.092105] __platform_driver_register (??:?)
[ 21.092525] init_module+0x20/0xfe8 pcie_rockchip_host
[ 21.093010] do_one_initcall (??:?)
[ 21.093357] do_init_module (main.c:?)
[ 21.093701] load_module (main.c:?)
[ 21.094059] __arm64_sys_finit_module (??:?)
[ 21.094486] invoke_syscall (syscall.c:?)
[ 21.094829] el0_svc_common (syscall.c:?)
[ 21.095163] do_el0_svc (??:?)
[ 21.095462] el0_svc (entry-common.c:?)
[ 21.095740] el0t_64_sync_handler (??:?)
[ 21.096113] el0t_64_sync (debug-monitors.c:?)
[ 21.096442] ---[ end trace 0000000000000000 ]---


<trim>

# selftests: kvm: memslot_perf_test
# Testing map performance with 1 runs, 5 seconds each
# Memslot count too high for this test, decrease the cap (max is 8209)
#
# Testing unmap performance with 1 runs, 5 seconds each
# Test took 5.097229878s for slot setup + 5.061973294s all iterations
# Done 68 iterations, avg 0.074440783s each
# Best runtime result was 0.074440783s per iteration (with 68 iterations)
#
# Testing unmap chunked performance with 1 runs, 5 seconds each
# Test took 5.037993336s for slot setup + 5.006405252s all iterations
# Done 71 iterations, avg 0.070512750s each
# Best runtime result was 0.070512750s per iteration (with 71 iterations)
#
# Testing move active area performance with 1 runs, 5 seconds each
[ 353.142236] Unable to handle kernel NULL pointer dereference at
virtual address 000000000000000a
[ 353.143045] Mem abort info:
[ 353.143300] ESR = 0x0000000096000006
[ 353.143638] EC = 0x25: DABT (current EL), IL = 32 bits
[ 353.144115] SET = 0, FnV = 0
[ 353.144394] EA = 0, S1PTW = 0
[ 353.144680] FSC = 0x06: level 2 translation fault
[ 353.145124] Data abort info:
[ 353.145724] ISV = 0, ISS = 0x00000006, ISS2 = 0x00000000
[ 353.146221] CM = 0, WnR = 0, TnD = 0, TagAccess = 0
[ 353.146675] GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
[ 353.147153] user pgtable: 4k pages, 48-bit VAs, pgdp=00000000095d5000
[ 353.147728] [000000000000000a] pgd=0800000009a7d003,
p4d=0800000009a7d003, pud=0800000006cd8003, pmd=0000000000000000
[ 353.148692] Internal error: Oops: 0000000096000006 [#1] PREEMPT SMP
[ 353.149253] Modules linked in: hantro_vpu snd_soc_hdmi_codec
brcmfmac dw_hdmi_i2s_audio dw_hdmi_cec v4l2_h264 v4l2_vp9 brcmutil
hci_uart v4l2_mem2mem btqca videobuf2_v4l2 btbcm rockchipdrm videodev
bluetooth dw_mipi_dsi panfrost snd_soc_audio_graph_card
snd_soc_simple_card analogix_dp videobuf2_dma_contig ecdh_generic
snd_soc_simple_card_utils dw_hdmi gpu_sched snd_soc_spdif_tx
crct10dif_ce videobuf2_memops cfg80211 videobuf2_common ecc
drm_shmem_helper cec phy_rockchip_pcie mc drm_display_helper rfkill
snd_soc_rockchip_i2s rtc_rk808 drm_dma_helper rockchip_saradc
snd_soc_es8316 drm_kms_helper rockchip_thermal coresight_cpu_debug
industrialio_triggered_buffer pcie_rockchip_host coresight kfifo_buf
drm fuse backlight dm_mod ip_tables x_tables
[ 353.155470] CPU: 1 PID: 1146 Comm: memslot_perf_te Tainted: G
W 6.8.0-rc7-next-20240307 #1
[ 353.156328] Hardware name: Radxa ROCK Pi 4B (DT)
[ 353.156743] pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[ 353.157369] pc : unmap_region (mmap.c:?)
[ 353.157744] lr : unmap_region (mmap.c:?)
<trim>

[ 353.164918] Call trace:
[ 353.165144] unmap_region (mmap.c:?)
[ 353.165478] do_vmi_align_munmap (mmap.c:?)
[ 353.165873] do_vmi_munmap (??:?)
[ 353.166215] __arm64_sys_munmap (??:?)
[ 353.166587] invoke_syscall (syscall.c:?)
[ 353.166939] el0_svc_common (syscall.c:?)
[ 353.167280] do_el0_svc (??:?)
[ 353.167592] el0_svc (entry-common.c:?)
[ 353.167881] el0t_64_sync_handler (??:?)
[ 353.168265] el0t_64_sync (debug-monitors.c:?)
[ 353.168612] Code: b9003a88 b40000b6 f94006c3 b40000b5 (f94002a4)
All code
========
0: b9003a88 str w8, [x20, #56]
4: b40000b6 cbz x22, 0x18
8: f94006c3 ldr x3, [x22, #8]
c: b40000b5 cbz x21, 0x20
10:* f94002a4 ldr x4, [x21] <-- trapping instruction

Code starting with the faulting instruction
===========================================
0: f94002a4 ldr x4, [x21]
[ 353.169156] ---[ end trace 0000000000000000 ]---
[ 353.174026] Unable to handle kernel NULL pointer dereference at
virtual address 000000000000000a
[ 353.174820] Mem abort info:
[ 353.175068] ESR = 0x0000000096000006
[ 353.175400] EC = 0x25: DABT (current EL), IL = 32 bits
[ 353.175899] SET = 0, FnV = 0
[ 353.176171] EA = 0, S1PTW = 0
[ 353.176451] FSC = 0x06: level 2 translation fault
[ 353.176881] Data abort info:
[ 353.177136] ISV = 0, ISS = 0x00000006, ISS2 = 0x00000000
[ 353.177694] CM = 0, WnR = 0, TnD = 0, TagAccess = 0
[ 353.178140] GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
[ 353.178608] user pgtable: 4k pages, 48-bit VAs, pgdp=00000000095d5000
[ 353.179174] [000000000000000a] pgd=0800000009a7d003,
p4d=0800000009a7d003, pud=0800000006cd8003, pmd=0000000000000000
[ 353.180113] Internal error: Oops: 0000000096000006 [#2] PREEMPT SMP
[ 353.180664] Modules linked in: hantro_vpu snd_soc_hdmi_codec
brcmfmac dw_hdmi_i2s_audio dw_hdmi_cec v4l2_h264 v4l2_vp9 brcmutil
hci_uart v4l2_mem2mem btqca videobuf2_v4l2 btbcm rockchipdrm videodev
bluetooth dw_mipi_dsi panfrost snd_soc_audio_graph_card
snd_soc_simple_card analogix_dp videobuf2_dma_contig ecdh_generic
snd_soc_simple_card_utils dw_hdmi gpu_sched snd_soc_spdif_tx
crct10dif_ce videobuf2_memops cfg80211 videobuf2_common ecc
drm_shmem_helper cec phy_rockchip_pcie mc drm_display_helper rfkill
snd_soc_rockchip_i2s rtc_rk808 drm_dma_helper rockchip_saradc
snd_soc_es8316 drm_kms_helper rockchip_thermal coresight_cpu_debug
industrialio_triggered_buffer pcie_rockchip_host coresight kfifo_buf
drm fuse backlight dm_mod ip_tables x_tables
[ 353.186529] CPU: 1 PID: 1146 Comm: memslot_perf_te Tainted: G
D W 6.8.0-rc7-next-20240307 #1
[ 353.187375] Hardware name: Radxa ROCK Pi 4B (DT)
[ 353.187782] pstate: 80000005 (Nzcv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[ 353.188394] pc : acct_collect (??:?)
[ 353.188753] lr : acct_collect (??:?)
<trim>
[ 353.195711] Call trace:
[ 353.195929] acct_collect (??:?)
[ 353.196250] do_exit (exit.c:?)
[ 353.196543] make_task_dead (exit.c:?)
[ 353.196878] die (??:?)
[ 353.197138] __do_kernel_fault (fault.c:?)
[ 353.197504] do_page_fault (fault.c:?)
[ 353.197832] do_translation_fault (fault.c:?)
[ 353.198204] do_mem_abort (??:?)
[ 353.198516] el1_abort (entry-common.c:?)
[ 353.198807] el1h_64_sync_handler (??:?)
[ 353.199179] el1h_64_sync (debug-monitors.c:?)
[ 353.199490] unmap_region (mmap.c:?)
[ 353.199813] do_vmi_align_munmap (mmap.c:?)
[ 353.200193] do_vmi_munmap (??:?)
[ 353.200521] __arm64_sys_munmap (??:?)
[ 353.200880] invoke_syscall (syscall.c:?)
[ 353.201217] el0_svc_common (syscall.c:?)
[ 353.201545] do_el0_svc (??:?)
[ 353.201842] el0_svc (entry-common.c:?)
[ 353.202117] el0t_64_sync_handler (??:?)
[ 353.202488] el0t_64_sync (debug-monitors.c:?)
[ 353.202821] Code: 92800001 943f6bcb aa1f03f7 b4000100 (a9402009)
All code
========
0: 92800001 mov x1, #0xffffffffffffffff // #-1
4: 943f6bcb bl 0xfdaf30
8: aa1f03f7 mov x23, xzr
c: b4000100 cbz x0, 0x2c
10:* a9402009 ldp x9, x8, [x0] <-- trapping instruction

Code starting with the faulting instruction
===========================================
0: a9402009 ldp x9, x8, [x0]
[ 353.203355] ---[ end trace 0000000000000000 ]---
[ 353.204109] Fixing recursive fault but reboot is needed!
[ 353.217290] Unable to handle kernel NULL pointer dereference at
virtual address 0000000000000038
[ 353.218090] Mem abort info:
[ 353.218340] ESR = 0x0000000096000006
[ 353.218675] EC = 0x25: DABT (current EL), IL = 32 bits
[ 353.219147] SET = 0, FnV = 0
[ 353.219422] EA = 0, S1PTW = 0
[ 353.219705] FSC = 0x06: level 2 translation fault
[ 353.220138] Data abort info:
[ 353.220396] ISV = 0, ISS = 0x00000006, ISS2 = 0x00000000
[ 353.220881] CM = 0, WnR = 0, TnD = 0, TagAccess = 0
[ 353.221348] GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
[ 353.221821] user pgtable: 4k pages, 48-bit VAs, pgdp=00000000095d5000
[ 353.222393] [0000000000000038] pgd=0800000009a7d003,
p4d=0800000009a7d003, pud=0800000006cd8003, pmd=0000000000000000
[ 353.223345] Internal error: Oops: 0000000096000006 [#3] PREEMPT SMP
[ 353.223901] Modules linked in: hantro_vpu snd_soc_hdmi_codec
brcmfmac dw_hdmi_i2s_audio dw_hdmi_cec v4l2_h264 v4l2_vp9 brcmutil
hci_uart v4l2_mem2mem btqca videobuf2_v4l2 btbcm rockchipdrm videodev
bluetooth dw_mipi_dsi panfrost snd_soc_audio_graph_card
snd_soc_simple_card analogix_dp videobuf2_dma_contig ecdh_generic
snd_soc_simple_card_utils dw_hdmi gpu_sched snd_soc_spdif_tx
crct10dif_ce videobuf2_memops cfg80211 videobuf2_common ecc
drm_shmem_helper cec phy_rockchip_pcie mc drm_display_helper rfkill
snd_soc_rockchip_i2s rtc_rk808 drm_dma_helper rockchip_saradc
snd_soc_es8316 drm_kms_helper rockchip_thermal coresight_cpu_debug
industrialio_triggered_buffer pcie_rockchip_host coresight kfifo_buf
drm fuse backlight dm_mod ip_tables x_tables
[ 353.229874] CPU: 1 PID: 0 Comm: swapper/1 Tainted: G D W
6.8.0-rc7-next-20240307 #1
[ 353.230659] Hardware name: Radxa ROCK Pi 4B (DT)
[ 353.231070] pstate: 80000005 (Nzcv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[ 353.231689] pc : kmem_cache_free (slub.c:?)
[ 353.232079] lr : mt_free_walk (maple_tree.c:?)
<trim>
[ 353.239161] Call trace:
[ 353.239384] kmem_cache_free (slub.c:?)
[ 353.239733] mt_free_walk (maple_tree.c:?)
[ 353.240065] rcu_core (tree.c:?)
[ 353.240374] rcu_core_si (tree.c:?)
[ 353.240687] __do_softirq (??:?)
[ 353.241013] ____do_softirq (irq.c:?)
[ 353.241346] call_on_irq_stack (debug-monitors.c:?)
[ 353.241703] do_softirq_own_stack (??:?)
[ 353.242082] __irq_exit_rcu (softirq.c:?)
[ 353.242419] irq_exit_rcu (??:?)
[ 353.242741] el1_interrupt (entry-common.c:?)
[ 353.243068] el1h_64_irq_handler (??:?)
[ 353.243439] el1h_64_irq (debug-monitors.c:?)
[ 353.243748] arch_local_irq_enable (build_policy.c:?)
[ 353.244121] cpuidle_enter (??:?)
[ 353.244446] do_idle (build_policy.c:?)
[ 353.244743] cpu_startup_entry (??:?)
[ 353.245099] secondary_start_kernel (smp.c:?)
[ 353.245510] __secondary_switched (mte.c:?)
[ 353.245898] Code: f90003f3 d34c2d08 8a88fed6 d503201f (f9401ec8)
All code
========
0: f90003f3 str x19, [sp]
4: d34c2d08 lsl x8, x8, #52
8: 8a88fed6 and x22, x22, x8, asr #63
c: d503201f nop
10:* f9401ec8 ldr x8, [x22, #56] <-- trapping instruction

Code starting with the faulting instruction
===========================================
0: f9401ec8 ldr x8, [x22, #56]
[ 353.246438] ---[ end trace 0000000000000000 ]---
[ 353.246850] Kernel panic - not syncing: Oops: Fatal exception in interrupt
[ 353.247456] SMP: stopping secondary CPUs
[ 353.247938] Kernel Offset: disabled
[ 353.248250] CPU features: 0x2,00000820,b0280000,2100421b
[ 353.248722] Memory Limit: none
[ 353.249007] ---[ end Kernel panic - not syncing: Oops: Fatal
exception in interrupt ]---


steps to reproduce:
--------

Boot warning on qemu-arm64:
- https://tuxapi.tuxsuite.com/v1/groups/linaro/projects/lkft/tests/2dLoS0ddamJtpsqNeVNZ6CKglNv/reproducer


Links:
- https://lkft.validation.linaro.org/scheduler/job/7340334#L1014
- https://qa-reports.linaro.org/lkft/linux-next-master/build/next-20240307/testrun/22996522/suite/log-parser-test/test/check-kernel-oops-25b0708a1d4f25b5107a2f0a7d82f4edd2712d1b32a1c72988a53386013c1d6c/log
- https://qa-reports.linaro.org/lkft/linux-next-master/build/next-20240307/testrun/22996522/suite/log-parser-test/test/check-kernel-oops-25b0708a1d4f25b5107a2f0a7d82f4edd2712d1b32a1c72988a53386013c1d6c/details/
- https://storage.tuxsuite.com/public/linaro/lkft/builds/2dLoQ0q6xeDevTFQGWYZqtTey7X/
- https://storage.tuxsuite.com/public/linaro/lkft/builds/2dLoQ0q6xeDevTFQGWYZqtTey7X/config


--
Linaro LKFT
https://lkft.linaro.org


2024-03-08 12:05:01

by Arnd Bergmann

[permalink] [raw]
Subject: Re: arm64: WARNING: at mm/vmalloc.c:315 ioremap_page_range

On Fri, Mar 8, 2024, at 12:53, Naresh Kamboju wrote:
> The following warning was noticed while boot arm and arm64 devices.
> The below log is extracted from arm64 ROCK Pi 4B while booting and
> another issue is kernel oops noticed while testing selftests: kvm:
> memslot_perf_test.
>
> 1) WARNING: CPU: 1 PID: 201 at mm/vmalloc.c:315 ioremap_page_range
> 2) Unable to handle kernel NULL pointer dereference at virtual address
> Internal error: Oops: 0000000096000006 [#1] PREEMPT SMP
> Kernel panic - not syncing: Oops: Fatal exception in interrupt
>
> Please find steps to reproduce, logs and config file links below.
>
> Reported-by: Linux Kernel Functional Testing <[email protected]>
>
> Warning log:
> -----------
> [ 21.074045] ------------[ cut here ]------------
> [ 21.074468] vm_area at addr ffffffffc0800000 is not marked as VM_IOREMAP
> [ 21.075125] WARNING: CPU: 1 PID: 201 at mm/vmalloc.c:315
> ioremap_page_range (vmalloc.c:?)
> [ 21.075854] Modules linked in: industrialio_triggered_buffer
> pcie_rockchip_host(+) coresight kfifo_buf drm fuse backlight dm_mod
> ip_tables x_tables
> [ 21.077047] CPU: 1 PID: 201 Comm: (udev-worker) Not tainted
> 6.8.0-rc7-next-20240307 #1
> [ 21.077749] Hardware name: Radxa ROCK Pi 4B (DT)
> [ 21.078163] pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
> [ 21.078782] pc : ioremap_page_range (vmalloc.c:?)
> [ 21.079197] lr : ioremap_page_range (vmalloc.c:?)
> <trim>
> [ 21.086242] Call trace:
> [ 21.086464] ioremap_page_range (vmalloc.c:?)
> [ 21.086839] pci_remap_iospace (??:?)
> [ 21.087192] devm_pci_remap_iospace (??:?)
> [ 21.087579] devm_of_pci_bridge_init (??:?)
> [ 21.087990] devm_pci_alloc_host_bridge (??:?)
> [ 21.088410] rockchip_pcie_probe+0x34/0x30c pcie_rockchip_host

The warning was added by commit 3e49a866c9dc ("mm: Enforce
VM_IOREMAP flag and range in ioremap_page_range.").

This indeed uses a special memory area at a fixed physical address,
but I don't see where the vm_struct comes from.


> # Testing move active area performance with 1 runs, 5 seconds each
> [ 353.142236] Unable to handle kernel NULL pointer dereference at
> virtual address 000000000000000a
> [ 353.143045] Mem abort info:
...
> [ 353.156328] Hardware name: Radxa ROCK Pi 4B (DT)
> [ 353.156743] pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
> [ 353.157369] pc : unmap_region (mmap.c:?)
> [ 353.157744] lr : unmap_region (mmap.c:?)
> <trim>
>
> [ 353.164918] Call trace:
> [ 353.165144] unmap_region (mmap.c:?)
> [ 353.165478] do_vmi_align_munmap (mmap.c:?)
> [ 353.165873] do_vmi_munmap (??:?)

No idea here, but it seems unrelated to the first one.

Something is wrong with your address decoding, there are no line
numbers.

Arnd

2024-03-08 14:24:54

by Naresh Kamboju

[permalink] [raw]
Subject: Re: arm64: WARNING: at mm/vmalloc.c:315 ioremap_page_range

On Fri, 8 Mar 2024 at 17:34, Arnd Bergmann <[email protected]> wrote:
>
> On Fri, Mar 8, 2024, at 12:53, Naresh Kamboju wrote:
> > The following warning was noticed while boot arm and arm64 devices.
> > The below log is extracted from arm64 ROCK Pi 4B while booting and
> > another issue is kernel oops noticed while testing selftests: kvm:
> > memslot_perf_test.
> >
> > 1) WARNING: CPU: 1 PID: 201 at mm/vmalloc.c:315 ioremap_page_range
> > 2) Unable to handle kernel NULL pointer dereference at virtual address
> > Internal error: Oops: 0000000096000006 [#1] PREEMPT SMP
> > Kernel panic - not syncing: Oops: Fatal exception in interrupt
> >
> > Please find steps to reproduce, logs and config file links below.
> >
> > Reported-by: Linux Kernel Functional Testing <[email protected]>

<trim>

> The warning was added by commit 3e49a866c9dc ("mm: Enforce
> VM_IOREMAP flag and range in ioremap_page_range.").
>
> This indeed uses a special memory area at a fixed physical address,
> but I don't see where the vm_struct comes from.

Thanks for your explanation.

> No idea here, but it seems unrelated to the first one.

I will reproduce this issue a few more times and get back to you.

>
> Something is wrong with your address decoding, there are no line
> numbers.

Sorry for previous warning lines without line number.
Here is the generated warning log with more information.

<4>[ 1.657402] ------------[ cut here ]------------
<4>[ 1.657810] vm_area at addr ffffffffc0800000 is not marked as VM_IOREMAP
<4>[ 1.659792] WARNING: CPU: 1 PID: 1 at mm/vmalloc.c:315
ioremap_page_range (mm/vmalloc.c:3114)
<4>[ 1.661271] Modules linked in:
<4>[ 1.662912] CPU: 1 PID: 1 Comm: swapper/0 Not tainted
6.8.0-rc7-next-20240307 #1
<4>[ 1.663816] Hardware name: linux,dummy-virt (DT)
<4>[ 1.666004] pstate: 62400009 (nZCv daif +PAN -UAO +TCO -DIT
-SSBS BTYPE=--)
<4>[ 1.667123] pc : ioremap_page_range (mm/vmalloc.c:3114)
<4>[ 1.667602] lr : ioremap_page_range (mm/vmalloc.c:3114)

<trim>

<4>[ 1.683829] Call trace:
<4>[ 1.684158] ioremap_page_range (mm/vmalloc.c:3114)
<4>[ 1.684596] pci_remap_iospace (drivers/pci/pci.c:4138)
<4>[ 1.685355] devm_pci_remap_iospace (drivers/pci/devres.c:43)
<4>[ 1.687499] devm_of_pci_bridge_init (drivers/pci/of.c:592
drivers/pci/of.c:606)
<4>[ 1.687932] devm_pci_alloc_host_bridge (drivers/pci/probe.c:2726
drivers/pci/probe.c:2704)
<4>[ 1.688364] pci_host_common_probe
(drivers/pci/controller/pci-host-common.c:64)
<4>[ 1.688795] platform_probe (drivers/base/platform.c:1411)
<4>[ 1.689557] really_probe (drivers/base/dd.c:623 (discriminator 1))
<4>[ 1.689914] __driver_probe_device (drivers/base/dd.c:808)
<4>[ 1.691509] driver_probe_device (drivers/base/dd.c:831)
<4>[ 1.691902] __driver_attach (drivers/base/dd.c:1217)
<4>[ 1.692265] bus_for_each_dev (drivers/base/bus.c:445)
<4>[ 1.693324] driver_attach (drivers/base/dd.c:1234)
<4>[ 1.693634] bus_add_driver (drivers/base/bus.c:711)
<4>[ 1.693945] driver_register (drivers/base/driver.c:258)
<4>[ 1.694247] __platform_driver_register (drivers/base/platform.c:868)
<4>[ 1.694639] gen_pci_driver_init
(drivers/pci/controller/pci-host-generic.c:87)
<4>[ 1.694969] do_one_initcall (init/main.c:1255)
<4>[ 1.695316] do_initcall_level+0xa8/0x158
<4>[ 1.696868] do_initcalls+0x60/0xa8
<4>[ 1.697734] do_basic_setup+0x28/0x40
<4>[ 1.698282] kernel_init_freeable (init/main.c:1343 (discriminator
1) init/main.c:1537 (discriminator 1))
<4>[ 1.699075] kernel_init (init/main.c:1439)
<4>[ 1.699840] ret_from_fork (arch/arm64/kernel/entry.S:861)
<4>[ 1.701010] ---[ end trace 0000000000000000 ]---


- Naresh

2024-03-08 15:49:43

by Alexei Starovoitov

[permalink] [raw]
Subject: Re: arm64: WARNING: at mm/vmalloc.c:315 ioremap_page_range

On Fri, Mar 8, 2024 at 6:24 AM Naresh Kamboju <[email protected]> wrote:
>
> On Fri, 8 Mar 2024 at 17:34, Arnd Bergmann <[email protected]> wrote:
> >
> > On Fri, Mar 8, 2024, at 12:53, Naresh Kamboju wrote:
> > > The following warning was noticed while boot arm and arm64 devices.
> > > The below log is extracted from arm64 ROCK Pi 4B while booting and
> > > another issue is kernel oops noticed while testing selftests: kvm:
> > > memslot_perf_test.
> > >
> > > 1) WARNING: CPU: 1 PID: 201 at mm/vmalloc.c:315 ioremap_page_range
> > > 2) Unable to handle kernel NULL pointer dereference at virtual address
> > > Internal error: Oops: 0000000096000006 [#1] PREEMPT SMP
> > > Kernel panic - not syncing: Oops: Fatal exception in interrupt
> > >
> > > Please find steps to reproduce, logs and config file links below.
> > >
> > > Reported-by: Linux Kernel Functional Testing <[email protected]>
>
> <trim>
>
> > The warning was added by commit 3e49a866c9dc ("mm: Enforce
> > VM_IOREMAP flag and range in ioremap_page_range.").
> >
> > This indeed uses a special memory area at a fixed physical address,
> > but I don't see where the vm_struct comes from.
>
> Thanks for your explanation.
>
> > No idea here, but it seems unrelated to the first one.
>
> I will reproduce this issue a few more times and get back to you.

See the proposed fix:
https://lore.kernel.org/bpf/CAADnVQLP=dxBb+RiMGXoaCEuRrbK387J6B+pfzWKF_F=aRgCPQ@mail.gmail.com/

but Christoph believes a different approach is necessary:
https://lore.kernel.org/bpf/[email protected]/