Regression: sched/preempt: Add static_key() to preempt_notifiers breaks my KVM

Pontus Fuchs
2015-06-25T12:00:17Z

Hi,

On 4.1+ kernels I can no longer start my KVM guest. Upon trying to start
it I can see the following log message:

[ 25.821060] BUG: sleeping function called from invalid context at
kernel/locking/mutex.c:97
[ 25.821063] in_atomic(): 1, irqs_disabled(): 0, pid: 2113, name:
qemu-system-x86
[ 25.821066] CPU: 0 PID: 2113 Comm: qemu-system-x86 Not tainted 4.1.0+ #88
[ 25.821067] Hardware name: Dell Inc. Dell System XPS
15Z/00WW5M, BIOS A12 09/07/2012
[ 25.821068] 0000000000000061 ffff88021339bcd8 ffffffff816b8c81
0000000000000007
[ 25.821070] ffff880231159d40 ffff88021339bcf8 ffffffff8107d163
ffff88021339bd18
[ 25.821072] ffffffff81a451bc ffff88021339bd28 ffffffff8107d1ed
ffff8802133a0000
[ 25.821073] Call Trace:
[ 25.821078] [<ffffffff816b8c81>] dump_stack+0x4c/0x65
[ 25.821081] [<ffffffff8107d163>] ___might_sleep+0xd3/0x110
[ 25.821083] [<ffffffff8107d1ed>] __might_sleep+0x4d/0x90
[ 25.821085] [<ffffffff816bde74>] mutex_lock+0x24/0x50
[ 25.821087] [<ffffffff81141ef7>] static_key_slow_inc+0x57/0xc0
[ 25.821089] [<ffffffff8107cafd>] preempt_notifier_register+0x1d/0x60
[ 25.821099] [<ffffffffa04f11fd>] vcpu_load+0x3d/0x70 [kvm]
[ 25.821108] [<ffffffffa050699e>] kvm_arch_vcpu_setup+0x1e/0x50 [kvm]
[ 25.821115] [<ffffffffa05066e1>] ? kvm_arch_vcpu_create+0x51/0x70 [kvm]
[ 25.821120] [<ffffffffa04f29b2>] kvm_vm_ioctl+0x1d2/0x7a0 [kvm]
[ 25.821123] [<ffffffff811b7881>] do_vfs_ioctl+0x301/0x550
[ 25.821124] [<ffffffff811b7b49>] SyS_ioctl+0x79/0x90
[ 25.821127] [<ffffffff816c0257>] entry_SYSCALL_64_fastpath+0x12/0x6a

The offending commit is

commit 1cde2930e15473cb4dd7e5a07d83e605a969bd6e
Author: Peter Zijlstra <peterz@infradead.org>
Date: Mon Jun 8 16:00:30 2015 +0200

sched/preempt: Add static_key() to preempt_notifiers

BR,

Pontus Fuchs