Hi, While trying device passthrough on Linux-rt with KVM Arm, I had the following splat. [ 363.410141] 000: BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:974 [ 363.410150] 000: in_atomic(): 0, irqs_disabled(): 128, pid: 2916, name: qemu-system-aar [ 363.410153] 000: 4 locks held by qemu-system-aar/2916: [ 363.410157] 000: #0: ffff8007bd248100 (&vcpu->mutex){+.+.}, at: kvm_vcpu_ioctl+0x70/0xae0 [ 363.410171] 000: #1: ffff8007bd1e2b20 (&kvm->irq_srcu){....}, at: kvm_notify_acked_irq+0x7c/0x300 [ 363.410179] 000: #2: ffff8007bd1e2b20 (&kvm->irq_srcu){....}, at: irqfd_resampler_ack+0x0/0xd8 [ 363.410187] 000: #3: ffff8007c2b27d28 (&ctx->wqh#2){+.+.}, at: eventfd_signal+0x24/0x78 [ 363.410196] 000: irq event stamp: 4033894 [ 363.410197] 000: hardirqs last enabled at (4033893): [<ffff000011119400>] _raw_spin_unlock_irqrestore+0x88/0x90 [ 363.410203] 000: hardirqs last disabled at (4033894): [<ffff0000100bed18>] kvm_arch_vcpu_ioctl_run+0x2a8/0xc08 [ 363.410207] 000: softirqs last enabled at (0): [<ffff0000100edde0>] copy_process.isra.1.part.2+0x8d8/0x1958 [ 363.410212] 000: softirqs last disabled at (0): [<0000000000000000>] (null) [ 363.410216] 000: CPU: 0 PID: 2916 Comm: qemu-system-aar Tainted: G W 5.0.14-rt9-00013-g4b2a13c8a804 #84 [ 363.410219] 000: Hardware name: AMD Seattle (Rev.B0) Development Board (Overdrive) (DT) [ 363.410221] 000: Call trace: [ 363.410222] 000: dump_backtrace+0x0/0x158 [ 363.410225] 000: show_stack+0x14/0x20 [ 363.410227] 000: dump_stack+0xa0/0xd4 [ 363.410230] 000: ___might_sleep+0x16c/0x1f8 [ 363.410234] 000: rt_spin_lock+0x5c/0x70 [ 363.410237] 000: eventfd_signal+0x24/0x78 [ 363.410238] 000: irqfd_resampler_ack+0x94/0xd8 [ 363.410241] 000: kvm_notify_acked_irq+0xf8/0x300 [ 363.410243] 000: vgic_v2_fold_lr_state+0x174/0x1e0 [ 363.410246] 000: kvm_vgic_sync_hwstate+0x5c/0x2b8 [ 363.410249] 000: kvm_arch_vcpu_ioctl_run+0x624/0xc08 [ 363.410250] 000: kvm_vcpu_ioctl+0x3a0/0xae0 [ 363.410252] 000: do_vfs_ioctl+0xbc/0x910 [ 363.410255] 000: ksys_ioctl+0x78/0xa8 [ 363.410257] 000: __arm64_sys_ioctl+0x1c/0x28 [ 363.410260] 000: el0_svc_common+0x90/0x118 [ 363.410263] 000: el0_svc_handler+0x2c/0x80 [ 363.410265] 000: el0_svc+0x8/0xc This is happening because vgic_v2_fold_lr_state() is expected to be called with interrupt disabled. However, some of the path (e.g eventfd) will take a spinlock. The spinlock is from the waitqueue, so using a raw_spin_lock cannot even be considered. Do you have any input on how this could be solved? Cheers, -- Julien Grall _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm