Home Home > GIT Browse
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Suchanek <msuchanek@suse.de>2019-10-03 10:29:35 +0200
committerMichal Suchanek <msuchanek@suse.de>2019-10-03 10:29:35 +0200
commit096c2a9d3c1b5775ff832e78a7530f1cef673ec6 (patch)
treeaaad795476a7a8f3dedebabc206b6d2566a9453d
parented9227d8ec5659452f79a43be3039eabf2c16e9b (diff)
KVM: PPC: Book3S HV: Fix lockdep warning when entering the guest
(bsc#1061840).
-rw-r--r--patches.suse/KVM-PPC-Book3S-HV-Fix-lockdep-warning-when-entering-.patch96
-rw-r--r--series.conf1
2 files changed, 97 insertions, 0 deletions
diff --git a/patches.suse/KVM-PPC-Book3S-HV-Fix-lockdep-warning-when-entering-.patch b/patches.suse/KVM-PPC-Book3S-HV-Fix-lockdep-warning-when-entering-.patch
new file mode 100644
index 0000000000..017729fd6b
--- /dev/null
+++ b/patches.suse/KVM-PPC-Book3S-HV-Fix-lockdep-warning-when-entering-.patch
@@ -0,0 +1,96 @@
+From 3309bec85e60d60d6394802cb8e183a4f4a72def Mon Sep 17 00:00:00 2001
+From: Alexey Kardashevskiy <aik@ozlabs.ru>
+Date: Fri, 29 Mar 2019 16:40:13 +1100
+Subject: [PATCH] KVM: PPC: Book3S HV: Fix lockdep warning when entering the
+ guest
+
+References: bsc#1061840
+Patch-mainline: v5.2-rc1
+Git-commit: 3309bec85e60d60d6394802cb8e183a4f4a72def
+
+The trace_hardirqs_on() sets current->hardirqs_enabled and from here
+the lockdep assumes interrupts are enabled although they are remain
+disabled until the context switches to the guest. Consequent
+srcu_read_lock() checks the flags in rcu_lock_acquire(), observes
+disabled interrupts and prints a warning (see below).
+
+This moves trace_hardirqs_on/off closer to __kvmppc_vcore_entry to
+prevent lockdep from being confused.
+
+DEBUG_LOCKS_WARN_ON(current->hardirqs_enabled)
+WARNING: CPU: 16 PID: 8038 at kernel/locking/lockdep.c:4128 check_flags.part.25+0x224/0x280
+[...]
+NIP [c000000000185b84] check_flags.part.25+0x224/0x280
+LR [c000000000185b80] check_flags.part.25+0x220/0x280
+Call Trace:
+[c000003fec253710] [c000000000185b80] check_flags.part.25+0x220/0x280 (unreliable)
+[c000003fec253780] [c000000000187ea4] lock_acquire+0x94/0x260
+[c000003fec253840] [c00800001a1e9768] kvmppc_run_core+0xa60/0x1ab0 [kvm_hv]
+[c000003fec253a10] [c00800001a1ed944] kvmppc_vcpu_run_hv+0x73c/0xec0 [kvm_hv]
+[c000003fec253ae0] [c00800001a1095dc] kvmppc_vcpu_run+0x34/0x48 [kvm]
+[c000003fec253b00] [c00800001a1056bc] kvm_arch_vcpu_ioctl_run+0x2f4/0x400 [kvm]
+[c000003fec253b90] [c00800001a0f3618] kvm_vcpu_ioctl+0x460/0x850 [kvm]
+[c000003fec253d00] [c00000000041c4f4] do_vfs_ioctl+0xe4/0x930
+[c000003fec253db0] [c00000000041ce04] ksys_ioctl+0xc4/0x110
+[c000003fec253e00] [c00000000041ce78] sys_ioctl+0x28/0x80
+[c000003fec253e20] [c00000000000b5a4] system_call+0x5c/0x70
+Instruction dump:
+419e0034 3d220004 39291730 81290000 2f890000 409e0020 3c82ffc6 3c62ffc5
+3884be70 386329c0 4bf6ea71 60000000 <0fe00000> 3c62ffc6 3863be90 4801273d
+irq event stamp: 1025
+hardirqs last enabled at (1025): [<c00800001a1e9728>] kvmppc_run_core+0xa20/0x1ab0 [kvm_hv]
+hardirqs last disabled at (1024): [<c00800001a1e9358>] kvmppc_run_core+0x650/0x1ab0 [kvm_hv]
+softirqs last enabled at (0): [<c0000000000f1210>] copy_process.isra.4.part.5+0x5f0/0x1d00
+softirqs last disabled at (0): [<0000000000000000>] (null)
+---[ end trace 31180adcc848993e ]---
+possible reason: unannotated irqs-off.
+irq event stamp: 1025
+hardirqs last enabled at (1025): [<c00800001a1e9728>] kvmppc_run_core+0xa20/0x1ab0 [kvm_hv]
+hardirqs last disabled at (1024): [<c00800001a1e9358>] kvmppc_run_core+0x650/0x1ab0 [kvm_hv]
+softirqs last enabled at (0): [<c0000000000f1210>] copy_process.isra.4.part.5+0x5f0/0x1d00
+softirqs last disabled at (0): [<0000000000000000>] (null)
+
+Fixes: 8b24e69fc47e ("KVM: PPC: Book3S HV: Close race with testing for signals on guest entry", 2017-06-26)
+Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
+Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
+Acked-by: Michal Suchanek <msuchanek@suse.de>
+---
+ arch/powerpc/kvm/book3s_hv.c | 15 ++++++++-------
+ 1 file changed, 8 insertions(+), 7 deletions(-)
+
+--- a/arch/powerpc/kvm/book3s_hv.c
++++ b/arch/powerpc/kvm/book3s_hv.c
+@@ -2962,25 +2962,26 @@ static noinline void kvmppc_run_core(str
+ for (sub = 0; sub < core_info.n_subcores; ++sub)
+ spin_unlock(&core_info.vc[sub]->lock);
+
+- /*
+- * Interrupts will be enabled once we get into the guest,
+- * so tell lockdep that we're about to enable interrupts.
+- */
+- trace_hardirqs_on();
+-
+ guest_enter_irqoff();
+
+ srcu_idx = srcu_read_lock(&vc->kvm->srcu);
+
+ this_cpu_disable_ftrace();
+
++ /*
++ * Interrupts will be enabled once we get into the guest,
++ * so tell lockdep that we're about to enable interrupts.
++ */
++ trace_hardirqs_on();
++
+ trap = __kvmppc_vcore_entry();
+
++ trace_hardirqs_off();
++
+ this_cpu_enable_ftrace();
+
+ srcu_read_unlock(&vc->kvm->srcu, srcu_idx);
+
+- trace_hardirqs_off();
+ set_irq_happened(trap);
+
+ spin_lock(&vc->lock);
diff --git a/series.conf b/series.conf
index 686de48c1c..c89e369f46 100644
--- a/series.conf
+++ b/series.conf
@@ -23509,6 +23509,7 @@
patches.suse/kvm-x86-skip-efer-vs-guest-cpuid-checks-for-host-initiated-writes
patches.suse/KVM-polling-add-architecture-backend-to-disable-poll.patch
patches.suse/KVM-s390-provide-kvm_arch_no_poll-function.patch
+ patches.suse/KVM-PPC-Book3S-HV-Fix-lockdep-warning-when-entering-.patch
patches.suse/KVM-PPC-Book3S-HV-Avoid-lockdep-debugging-in-TCE-rea.patch
patches.suse/KVM-PPC-Book3S-HV-Handle-virtual-mode-in-XIVE-VCPU-p.patch
patches.suse/ALSA-hda-realtek-Fixup-headphone-noise-via-runtime-s.patch