[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20211005230550.1819406-7-sathyanarayanan.kuppuswamy@linux.intel.com>
Date: Tue, 5 Oct 2021 16:05:50 -0700
From: Kuppuswamy Sathyanarayanan
<sathyanarayanan.kuppuswamy@...ux.intel.com>
To: Thomas Gleixner <tglx@...utronix.de>,
Ingo Molnar <mingo@...hat.com>, Borislav Petkov <bp@...en8.de>,
x86@...nel.org, Paolo Bonzini <pbonzini@...hat.com>,
David Hildenbrand <david@...hat.com>,
Andrea Arcangeli <aarcange@...hat.com>,
Josh Poimboeuf <jpoimboe@...hat.com>,
"H . Peter Anvin" <hpa@...or.com>
Cc: Dave Hansen <dave.hansen@...el.com>,
Tony Luck <tony.luck@...el.com>,
Dan Williams <dan.j.williams@...el.com>,
Andi Kleen <ak@...ux.intel.com>,
Kirill Shutemov <kirill.shutemov@...ux.intel.com>,
Sean Christopherson <seanjc@...gle.com>,
Kuppuswamy Sathyanarayanan <knsathya@...nel.org>,
Kuppuswamy Sathyanarayanan
<sathyanarayanan.kuppuswamy@...ux.intel.com>,
linux-kernel@...r.kernel.org
Subject: [PATCH v7 6/6] x86/split_lock: Fix the split lock #AC handling when running as guest
From: Xiaoyao Li <xiaoyao.li@...el.com>
If running as guest and hypervisor enables
MSR_TEST_CTRL.SPLIT_LOCK_DETECT during its running, it can get split
lock #AC even though sld_state is sld_off.
For kernel mode #AC, it always dies("split lock"), no more action
needed.
For user mode #AC, it should treat sld_off (default state when feature
is not available) as fatal as well.
Signed-off-by: Xiaoyao Li <xiaoyao.li@...el.com>
Signed-off-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@...ux.intel.com>
---
arch/x86/kernel/cpu/intel.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c
index 01d7935feaed..47f0bc95ce2a 100644
--- a/arch/x86/kernel/cpu/intel.c
+++ b/arch/x86/kernel/cpu/intel.c
@@ -1190,7 +1190,12 @@ static void bus_lock_init(void)
bool handle_user_split_lock(struct pt_regs *regs, long error_code)
{
- if ((regs->flags & X86_EFLAGS_AC) || sld_state == sld_fatal)
+ /*
+ * In virtualization environment, it can get split lock #AC even when
+ * sld_off but hypervisor enables it.
+ * Thus only handles when sld_warn explicitly.
+ */
+ if ((regs->flags & X86_EFLAGS_AC) || sld_state != sld_warn)
return false;
split_lock_warn(regs->ip);
return true;
--
2.25.1
Powered by blists - more mailing lists