[PATCH 1/1] um: virt-pci: Switch to msi_create_parent_irq_domain()
Johannes Berg
johannes at sipsolutions.net
Fri Jun 27 01:24:38 PDT 2025
On Thu, 2025-06-26 at 16:47 +0200, Nam Cao wrote:
> Move away from the legacy MSI domain setup, switch to use
> msi_create_parent_irq_domain().
I applied this on 6.16-rc1 (plus a handful of local patches), and got a
lockdep warning and kernel crash with this change:
================================
WARNING: inconsistent lock state
6.16.0-rc1-g05358285a53b #1 Tainted: G O
--------------------------------
inconsistent {IN-HARDIRQ-W} -> {HARDIRQ-ON-W} usage.
modprobe/462 [HC0[0]:SC0[0]:HE0:SE1] takes:
0000000061b3fd30 (&irq_desc_lock_class){?...}-{2:2}, at: __setup_irq+0x4ac/0x12d5
{IN-HARDIRQ-W} state was registered at:
save_stack_trace+0x55/0x62
stack_trace_save+0x81/0xa4
save_trace+0xc7/0x354
mark_lock+0x17d/0x4d9
__lock_acquire+0x670/0x1a60
lock_acquire+0x172/0x30e
_raw_spin_lock+0xa4/0x107
handle_edge_irq+0x2e/0x2a6
handle_irq_desc+0x182/0x1a0
generic_handle_irq+0x1f/0x23
irq_event_handler+0xbb/0xc8
deliver_time_travel_irqs+0x254/0x2c3
unblock_signals.part.0+0x34/0x11c
unblock_signals+0x1f/0x26
um_set_signals+0x26/0x40
time_travel_update_time_rel+0xeb/0xff
time_travel_ndelay+0x10/0x16
virtio_pcidev_send_cmd+0x693/0x73a
virtio_pcidev_cfgspace_read+0xbc/0x129
um_pci_cfgspace_read+0xde/0xf5
__raw_readl+0xe6/0xfc
pci_generic_config_read+0xfc/0x133
pci_bus_read_config_dword+0xe0/0x18f
pci_bus_generic_read_dev_vendor_id+0x2e/0x2b4
pci_bus_read_dev_vendor_id+0xbf/0xd6
pci_scan_single_device+0xbc/0x218
pci_scan_slot+0x277/0x3d6
pci_scan_child_bus_extend+0xa3/0x5be
pci_scan_child_bus+0x12/0x18
pci_rescan_bus+0x16/0x41
um_pci_device_register+0x1b2/0x1f6
virtio_pcidev_virtio_probe+0x4f2/0x5ee
virtio_dev_probe+0x53e/0x639
really_probe+0x3f6/0x8d0
__driver_probe_device+0x373/0x3f3
driver_probe_device+0x72/0x12c
__driver_attach+0x35d/0x3ae
bus_for_each_dev+0x136/0x184
driver_attach+0x4e/0x5a
bus_add_driver+0x343/0x63c
driver_register+0x2e4/0x3a1
__register_virtio_driver+0x13e/0x14e
0x600066bf
do_one_initcall+0x13b/0x46e
0x60002e8a
kernel_init+0x29/0x1f0
new_thread_handler+0xf2/0x119
irq event stamp: 118040
hardirqs last enabled at (118039): [<00000000603cc7af>] kasan_quarantine_put+0x1b9/0x1f3
hardirqs last disabled at (118040): [<0000000060f3c278>] _raw_spin_lock_irqsave+0x6d/0x16d
softirqs last enabled at (117512): [<00000000600ac1db>] handle_softirqs+0x749/0x8c5
softirqs last disabled at (117339): [<0000000060f3db56>] __do_softirq+0x12/0x18
other info that might help us debug this:
Possible unsafe locking scenario:
CPU0
----
lock(&irq_desc_lock_class);
<Interrupt>
lock(&irq_desc_lock_class);
*** DEADLOCK ***
3 locks held by modprobe/462:
#0: 000000006518a1a8 (&dev->mutex){....}-{4:4}, at: device_lock+0x16/0x1e
#1: 0000000061b3fe58 (&desc->request_mutex){+.+.}-{4:4}, at: __setup_irq+0x332/0x12d5
#2: 0000000061b3fd30 (&irq_desc_lock_class){?...}-{2:2}, at: __setup_irq+0x4ac/0x12d5
stack backtrace:
CPU: 0 UID: 0 PID: 462 Comm: modprobe Tainted: G O 6.16.0-rc1-g05358285a53b #1 VOLUNTARY
Tainted: [O]=OOT_MODULE
Stack:
66454828 6119fd60 61cb6fa0 00000000
ffffff00 6119fd60 612dd005 6015081f
61cb6ff0 60066af1 00000000 6005180e
Call Trace:
[<6005180e>] ? _printk+0x0/0xdc
[<6006d7f5>] show_stack+0x1bd/0x1d4
[<6015081f>] ? __print_lock_name+0x0/0xb7
[<60066af1>] dump_stack_lvl+0xab/0x12f
[<6005180e>] ? _printk+0x0/0xdc
[<60066b8f>] dump_stack+0x1a/0x20
[<60154818>] print_usage_bug+0x309/0x334
[<60154843>] ? valid_state+0x0/0x98
[<601548c6>] valid_state+0x83/0x98
[<6014f895>] ? hlock_class+0x0/0xcd
[<60154a9e>] mark_lock+0x1c3/0x4d9
[<60071f82>] ? segv+0x336/0x71b
[<602e2a12>] ? _end_441+0x9c/0x16c
[<60071c4c>] ? segv+0x0/0x71b
[<601548db>] ? mark_lock+0x0/0x4d9
[<60154e0a>] mark_held_locks+0x56/0x70
[<60154db4>] ? mark_held_locks+0x0/0x70
[<60155086>] lockdep_hardirqs_on_prepare+0x262/0x319
[<6008b3ef>] ? um_set_signals+0x0/0x40
[<60288534>] trace_hardirqs_on+0x1b4/0x1d6
[<6006cfb8>] unblock_signals_trace+0x47/0x5d
[<6008af06>] sig_handler_common+0xa1/0xe4
[<6008b5d1>] sig_handler+0xcb/0xea
[<6008ae45>] hard_handler+0x18/0x24
Modules linked in: iwlwifi(O+) iwlmei(O) cfg80211(O) meisim(O) vlab_control(O) compat(O)
Pid: 462, comm: modprobe Tainted: G O 6.16.0-rc1-g05358285a53b
RIP: 0033:0x0
RSP: 00000000724ff038 EFLAGS: 00010246
RAX: 0000100000000000 RBX: 000000006aa4c400 RCX: 0000000000000000
RDX: 000000000c280950 RSI: 0000000000000001 RDI: 000000006aa4c400
RBP: 00000000724ff050 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000000 R12: 0000000061404a40
R13: 000000006a813030 R14: 0000000061b3fc98 R15: 0000000000000001
Kernel panic - not syncing: Kernel mode fault at addr 0x0, ip 0x0
CPU: 0 UID: 0 PID: 462 Comm: modprobe Tainted: G O 6.16.0-rc1-g05358285a53b #1 VOLUNTARY
Tainted: [O]=OOT_MODULE
Stack:
6018488e 61b3fc98 6a813198 724ff070
607b3a44 61b3fc80 61b3fca8 724ff0a0
60186c6e 0d502609 61b3fc80 61b3fca8
Call Trace:
[<6018488e>] ? irq_chip_unmask_parent+0x8d/0x98
[<607b3a44>] pci_irq_unmask_msix+0xa3/0x147
[<60186c6e>] unmask_irq+0xd1/0x138
[<60186d52>] irq_enable+0x7d/0x151
[<6018705a>] irq_startup+0x234/0x29e
[<60180e06>] __setup_irq+0xdad/0x12d5
[<733ea37a>] ? iwl_pcie_msix_isr+0x0/0x6 [iwlwifi]
[<60181598>] request_threaded_irq+0x26a/0x2e5
[<733e79c3>] ? iwl_pcie_irq_rx_msix_handler+0x0/0x55f [iwlwifi]
[<60188f5c>] devm_request_threaded_irq+0xe6/0x18b
[<733e79c3>] ? iwl_pcie_irq_rx_msix_handler+0x0/0x55f [iwlwifi]
[<733ea37a>] ? iwl_pcie_msix_isr+0x0/0x6 [iwlwifi]
[<7340d595>] iwl_pci_gen1_2_probe+0x15b3/0x2a0f [iwlwifi]
[<60087977>] ? virtio_pcidev_bar_copy_from+0xb1/0xd3
[<7340bfe2>] ? iwl_pci_gen1_2_probe+0x0/0x2a0f [iwlwifi]
[<6008fefe>] ? copy_sc_from_user+0x4a0/0x632
[<6008b3e8>] ? unblock_signals+0x1f/0x26
[<6008b415>] ? um_set_signals+0x26/0x40
[<600859fa>] ? um_pci_bar_read+0x0/0x111
[<733ddc30>] iwl_pci_probe+0x281/0x2b1 [iwlwifi]
[<6008b3e8>] ? unblock_signals+0x1f/0x26
[<733dd9af>] ? iwl_pci_probe+0x0/0x2b1 [iwlwifi]
[<60f3c65d>] ? _raw_spin_unlock_irqrestore+0x9f/0x11a
[<6079c55d>] pci_device_probe+0x1bb/0x324
[<60832c93>] really_probe+0x3f6/0x8d0
[<6083289d>] ? really_probe+0x0/0x8d0
[<603cbea0>] ? __kasan_check_read+0x0/0x22
[<608334e0>] __driver_probe_device+0x373/0x3f3
[<603cbec2>] ? __kasan_check_write+0x0/0x25
[<603cbea0>] ? __kasan_check_read+0x0/0x22
[<60833696>] driver_probe_device+0x72/0x12c
[<60833a15>] ? __driver_attach+0x0/0x3ae
[<60eda91e>] ? klist_next+0x0/0x2d5
[<60833d72>] __driver_attach+0x35d/0x3ae
[<60833a15>] ? __driver_attach+0x0/0x3ae
[<60eda91e>] ? klist_next+0x0/0x2d5
[<6082d714>] bus_for_each_dev+0x136/0x184
[<60eda021>] ? klist_add_tail+0x84/0x94
[<6082d5de>] ? bus_for_each_dev+0x0/0x184
[<60830f1c>] driver_attach+0x4e/0x5a
[<6082fc3c>] bus_add_driver+0x343/0x63c
[<60835a96>] driver_register+0x2e4/0x3a1
[<607993b6>] __pci_register_driver+0x249/0x25d
[<733de1d6>] iwl_pci_register_driver+0x30/0x5c [iwlwifi]
[<7208514e>] __init_backport+0x14e/0x1000 [iwlwifi]
[<72085000>] ? __init_backport+0x0/0x1000 [iwlwifi]
[<60067ede>] do_one_initcall+0x13b/0x46e
[<603c96bc>] ? poison_kmalloc_redzone+0x76/0x89
[<60067da3>] ? do_one_initcall+0x0/0x46e
[<603cac13>] ? __asan_register_globals+0x6a/0x85
[<601bbe3c>] do_init_module+0x2f5/0x7fd
[<601bbb47>] ? do_init_module+0x0/0x7fd
[<601c12fb>] load_module+0x492e/0x4df4
[<603e1938>] ? __kernel_read+0x0/0x3b7
[<601bc9cd>] ? load_module+0x0/0x4df4
[<603e1cef>] ? kernel_read+0x0/0x5b
[<603e1d3a>] ? kernel_read+0x4b/0x5b
[<6048d18e>] ? kernel_read_file+0x406/0x466
[<60156d68>] ? __lock_acquire+0x1838/0x1a60
[<601c1d0a>] init_module_from_file+0x11a/0x160
[<601c1bf0>] ? init_module_from_file+0x0/0x160
[<6008b3e8>] ? unblock_signals+0x1f/0x26
[<60f3c40d>] ? _raw_spin_unlock+0x0/0xa6
[<60f3c40d>] ? _raw_spin_unlock+0x0/0xa6
[<601c2020>] idempotent_init_module+0x2d0/0x59c
[<60f3bcd6>] ? _raw_spin_lock+0x0/0x107
[<601c1d50>] ? idempotent_init_module+0x0/0x59c
[<6043dc3a>] ? __fget_light+0xd1/0x13f
[<601c23d6>] sys_finit_module+0xb2/0xe7
[<601c2324>] ? sys_finit_module+0x0/0xe7
[<60073ed9>] handle_syscall+0x2cc/0x38b
[<6008dcca>] userspace+0x677/0x727
[<6006bb49>] ? interrupt_end+0x0/0x11d
[<6006b9b1>] fork_handler+0xa9/0xb4
johannes
More information about the linux-um
mailing list