diff --git a/arch/x86/kernel/cpu/bus_lock.c b/arch/x86/kernel/cpu/bus_lock.c
index 981f8b1f0792..e4f50c211cea 100644
--- a/arch/x86/kernel/cpu/bus_lock.c
+++ b/arch/x86/kernel/cpu/bus_lock.c
@@ -344,14 +344,19 @@ void handle_bus_lock(struct pt_regs *regs)
 	}
 }
 
-/*
- * CPU models that are known to have the per-core split-lock detection
- * feature even though they do not enumerate IA32_CORE_CAPABILITIES.
- */
+enum sld_type {
+	SLD_SUPPORTED,
+	SLD_CORE_CAP,
+};
+
 static const struct x86_cpu_id split_lock_cpu_ids[] __initconst = {
-	X86_MATCH_VFM(INTEL_ICELAKE_X,	0),
-	X86_MATCH_VFM(INTEL_ICELAKE_L,	0),
-	X86_MATCH_VFM(INTEL_ICELAKE_D,	0),
+	/* These support split lock detection regardless of IA32_CORE_CAPABILITIES: */
+	X86_MATCH_VFM(INTEL_ICELAKE_X,	SLD_SUPPORTED),
+	X86_MATCH_VFM(INTEL_ICELAKE_L,	SLD_SUPPORTED),
+	X86_MATCH_VFM(INTEL_ICELAKE_D,	SLD_SUPPORTED),
+
+	/* These must check MSR_IA32_CORE_CAPS_SPLIT_LOCK_DETECT: */
+	X86_MATCH_FEATURE(X86_FEATURE_CORE_CAPABILITIES, SLD_CORE_CAP),
 	{}
 };
 
@@ -363,27 +368,21 @@ static void __init split_lock_setup(struct cpuinfo_x86 *c)
 	if (boot_cpu_has(X86_FEATURE_HYPERVISOR))
 		return;
 
-	/* Check for CPUs that have support but do not enumerate it: */
 	m = x86_match_cpu(split_lock_cpu_ids);
-	if (m)
-		goto supported;
-
-	if (!cpu_has(c, X86_FEATURE_CORE_CAPABILITIES))
+	if (!m)
 		return;
 
-	/*
-	 * Not all bits in MSR_IA32_CORE_CAPS are architectural, but
-	 * MSR_IA32_CORE_CAPS_SPLIT_LOCK_DETECT is.  All CPUs that set
-	 * it have split lock detection.
-	 */
-	rdmsrq(MSR_IA32_CORE_CAPS, ia32_core_caps);
-	if (ia32_core_caps & MSR_IA32_CORE_CAPS_SPLIT_LOCK_DETECT)
-		goto supported;
-
-	/* CPU is not in the model list and does not have the MSR bit: */
-	return;
+	if (m->data = SLD_CORE_CAP) {
+		/*
+		 * Not all bits in MSR_IA32_CORE_CAPS are architectural, but
+		 * MSR_IA32_CORE_CAPS_SPLIT_LOCK_DETECT is.  All CPUs that set
+		 * it have split lock detection.
+		 */
+		rdmsrq(MSR_IA32_CORE_CAPS, ia32_core_caps);
+		if (!(ia32_core_caps & MSR_IA32_CORE_CAPS_SPLIT_LOCK_DETECT))
+			return
+	}
 
-supported:
 	cpu_model_supports_sld = true;
 	__split_lock_setup();
 }
