[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