Commit 408eb741 authored by Ravi Bangoria's avatar Ravi Bangoria Committed by Thomas Gleixner
Browse files

x86/bus_lock: Add support for AMD

Add Bus Lock Detect (called Bus Lock Trap in AMD docs) support for AMD
platforms. Bus Lock Detect is enumerated with CPUID Fn0000_0007_ECX_x0
bit [24 / BUSLOCKTRAP]. It can be enabled through MSR_IA32_DEBUGCTLMSR.
When enabled, hardware clears DR6[11] and raises a #DB exception on
occurrence of Bus Lock if CPL > 0. More detail about the feature can be
found in AMD APM[1].

[1]: AMD64 Architecture Programmer's Manual Pub. 40332, Rev. 4.07 - June
     2023, Vol 2, 13.1.3.6 Bus Lock Trap
     https://bugzilla.kernel.org/attachment.cgi?id=304653



Signed-off-by: default avatarRavi Bangoria <ravi.bangoria@amd.com>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Reviewed-by: default avatarTom Lendacky <thomas.lendacky@amd.com>
Link: https://lore.kernel.org/all/20240808062937.1149-3-ravi.bangoria@amd.com
parent 350afa8a
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -26,7 +26,8 @@ Detection
=========

Intel processors may support either or both of the following hardware
mechanisms to detect split locks and bus locks.
mechanisms to detect split locks and bus locks. Some AMD processors also
support bus lock detect.

#AC exception for split lock detection
--------------------------------------
+1 −1
Original line number Diff line number Diff line
@@ -2428,7 +2428,7 @@ source "kernel/livepatch/Kconfig"

config X86_BUS_LOCK_DETECT
	bool "Split Lock Detect and Bus Lock Detect support"
	depends on CPU_SUP_INTEL
	depends on CPU_SUP_INTEL || CPU_SUP_AMD
	default y
	help
	  Enable Split Lock Detect and Bus Lock Detect functionalities.
+2 −0
Original line number Diff line number Diff line
@@ -1832,6 +1832,8 @@ static void identify_cpu(struct cpuinfo_x86 *c)
	if (this_cpu->c_init)
		this_cpu->c_init(c);

	bus_lock_init();

	/* Disable the PN if appropriate */
	squash_the_stupid_serial_number(c);

+0 −1
Original line number Diff line number Diff line
@@ -610,7 +610,6 @@ static void init_intel(struct cpuinfo_x86 *c)
	init_intel_misc_features(c);

	split_lock_init();
	bus_lock_init();

	intel_init_thermal(c);
}