Revision f4e61f0c9add3b00bd5f2df3c814d688849b8707 authored by Wanpeng Li on 15 March 2021, 06:55:28 UTC, committed by Paolo Bonzini on 18 March 2021, 17:58:14 UTC
After commit 997acaf6b4b59c (lockdep: report broken irq restoration), the guest
splatting below during boot:

 raw_local_irq_restore() called with IRQs enabled
 WARNING: CPU: 1 PID: 169 at kernel/locking/irqflag-debug.c:10 warn_bogus_irq_restore+0x26/0x30
 Modules linked in: hid_generic usbhid hid
 CPU: 1 PID: 169 Comm: systemd-udevd Not tainted 5.11.0+ #25
 RIP: 0010:warn_bogus_irq_restore+0x26/0x30
 Call Trace:
  kvm_wait+0x76/0x90
  __pv_queued_spin_lock_slowpath+0x285/0x2e0
  do_raw_spin_lock+0xc9/0xd0
  _raw_spin_lock+0x59/0x70
  lockref_get_not_dead+0xf/0x50
  __legitimize_path+0x31/0x60
  legitimize_root+0x37/0x50
  try_to_unlazy_next+0x7f/0x1d0
  lookup_fast+0xb0/0x170
  path_openat+0x165/0x9b0
  do_filp_open+0x99/0x110
  do_sys_openat2+0x1f1/0x2e0
  do_sys_open+0x5c/0x80
  __x64_sys_open+0x21/0x30
  do_syscall_64+0x32/0x50
  entry_SYSCALL_64_after_hwframe+0x44/0xae

The new consistency checking,  expects local_irq_save() and
local_irq_restore() to be paired and sanely nested, and therefore expects
local_irq_restore() to be called with irqs disabled.
The irqflags handling in kvm_wait() which ends up doing:

	local_irq_save(flags);
	safe_halt();
	local_irq_restore(flags);

instead triggers it.  This patch fixes it by using
local_irq_disable()/enable() directly.

Cc: Thomas Gleixner <tglx@linutronix.de>
Reported-by: Dmitry Vyukov <dvyukov@google.com>
Signed-off-by: Wanpeng Li <wanpengli@tencent.com>
Message-Id: <1615791328-2735-1-git-send-email-wanpengli@tencent.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
1 parent c2162e1
History
File Mode Size
lxdialog
tests
.gitignore -rw-r--r-- 123 bytes
Makefile -rw-r--r-- 7.2 KB
conf.c -rw-r--r-- 15.6 KB
confdata.c -rw-r--r-- 27.2 KB
expr.c -rw-r--r-- 30.0 KB
expr.h -rw-r--r-- 9.6 KB
gconf-cfg.sh -rwxr-xr-x 733 bytes
gconf.c -rw-r--r-- 38.1 KB
gconf.glade -rw-r--r-- 25.0 KB
images.c -rw-r--r-- 6.4 KB
images.h -rw-r--r-- 857 bytes
lexer.l -rw-r--r-- 9.1 KB
list.h -rw-r--r-- 3.7 KB
lkc.h -rw-r--r-- 4.4 KB
lkc_proto.h -rw-r--r-- 1.9 KB
mconf-cfg.sh -rwxr-xr-x 1.4 KB
mconf.c -rw-r--r-- 27.3 KB
menu.c -rw-r--r-- 22.2 KB
merge_config.sh -rwxr-xr-x 4.6 KB
nconf-cfg.sh -rwxr-xr-x 1.3 KB
nconf.c -rw-r--r-- 38.1 KB
nconf.gui.c -rw-r--r-- 14.8 KB
nconf.h -rw-r--r-- 1.8 KB
parser.y -rw-r--r-- 15.3 KB
preprocess.c -rw-r--r-- 11.0 KB
qconf-cfg.sh -rwxr-xr-x 594 bytes
qconf.cc -rw-r--r-- 43.4 KB
qconf.h -rw-r--r-- 6.4 KB
streamline_config.pl -rwxr-xr-x 16.7 KB
symbol.c -rw-r--r-- 28.6 KB
util.c -rw-r--r-- 2.2 KB

back to top