rust: devres: fix race condition due to nesting

sysrq: Show Blocked State
task:rmmod           state:D stack:0     pid:1331  tgid:1331  ppid:1330   task_flags:0x400100 flags:0x00000010
Call trace:
 __switch_to+0x190/0x294 (T)
 __schedule+0x878/0xf10
 schedule+0x4c/0xcc
 schedule_timeout+0x44/0x118
 wait_for_common+0xc0/0x18c
 wait_for_completion+0x18/0x24
 _RINvNtCs4gKlGRWyJ5S_4core3ptr13drop_in_placeINtNtNtCsgzhNYVB7wSz_6kernel4sync3arc3ArcINtNtBN_6devres6DevresmEEECsRdyc7Hyps3_15rust_driver_pci+0x68/0xe8 [rust_driver_pci]
 _RINvNvNtCsgzhNYVB7wSz_6kernel6devres16register_foreign8callbackINtNtCs4gKlGRWyJ5S_4core3pin3PinINtNtNtB6_5alloc4kbox3BoxINtNtNtB6_4sync3arc3ArcINtB4_6DevresmEENtNtB1A_9allocator7KmallocEEECsRdyc7Hyps3_15rust_driver_pci+0x34/0xc8 [rust_driver_pci]
 devm_action_release+0x14/0x20
 devres_release_all+0xb8/0x118
 device_release_driver_internal+0x1c4/0x28c
 driver_detach+0x94/0xd4
 bus_remove_driver+0xdc/0x11c
 driver_unregister+0x34/0x58
 pci_unregister_driver+0x20/0x80
 __arm64_sys_delete_module+0x1d8/0x254
 invoke_syscall+0x40/0xcc
 el0_svc_common+0x8c/0xd8
 do_el0_svc+0x1c/0x28
 el0_svc+0x54/0x1d4
 el0t_64_sync_handler+0x84/0x12c
 el0t_64_sync+0x198/0x19c

Signed-off-by: Danilo Krummrich <dakr@kernel.org>
1 file changed