All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pu Wen <puwen@hygon.cn>
To: tglx@linutronix.de, mingo@redhat.com, hpa@zytor.com,
	x86@kernel.org, thomas.lendacky@amd.com, bp@alien8.de,
	pbonzini@redhat.com
Cc: linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org,
	Pu Wen <puwen@hygon.cn>
Subject: [PATCH v5 09/16] x86/bugs: add lfence mitigation to spectre v2 and no meltdown for Hygon
Date: Wed, 29 Aug 2018 20:44:41 +0800	[thread overview]
Message-ID: <bf6e0e5403ae96715606366b3b5f817cbdab0dc3.1535459013.git.puwen@hygon.cn> (raw)
In-Reply-To: <cover.1535459012.git.puwen@hygon.cn>

To share codes between AMD and Hygon to mitigate Spectre V2 Retpoline
vulnerability, rename macros SPECTRE_V2_RETPOLINE_MINIMAL_AMD to
SPECTRE_V2_RETPOLINE_MINIMAL_LFENCE, and SPECTRE_V2_CMD_RETPOLINE_AMD
to SPECTRE_V2_CMD_RETPOLINE_LFENCE.

As Hygon processors are not affected by meltdown vulnerability as AMD's,
so add exception in array cpu_no_meltdown[] for Hygon.

Signed-off-by: Pu Wen <puwen@hygon.cn>
---
 arch/x86/include/asm/nospec-branch.h |  4 ++--
 arch/x86/kernel/cpu/bugs.c           | 28 +++++++++++++++-------------
 arch/x86/kernel/cpu/common.c         |  1 +
 3 files changed, 18 insertions(+), 15 deletions(-)

diff --git a/arch/x86/include/asm/nospec-branch.h b/arch/x86/include/asm/nospec-branch.h
index fd2a8c1..6763f9b 100644
--- a/arch/x86/include/asm/nospec-branch.h
+++ b/arch/x86/include/asm/nospec-branch.h
@@ -211,9 +211,9 @@
 enum spectre_v2_mitigation {
 	SPECTRE_V2_NONE,
 	SPECTRE_V2_RETPOLINE_MINIMAL,
-	SPECTRE_V2_RETPOLINE_MINIMAL_AMD,
+	SPECTRE_V2_RETPOLINE_MINIMAL_LFENCE,
 	SPECTRE_V2_RETPOLINE_GENERIC,
-	SPECTRE_V2_RETPOLINE_AMD,
+	SPECTRE_V2_RETPOLINE_LFENCE,
 	SPECTRE_V2_IBRS_ENHANCED,
 };
 
diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
index 4c2313d..15be045 100644
--- a/arch/x86/kernel/cpu/bugs.c
+++ b/arch/x86/kernel/cpu/bugs.c
@@ -132,15 +132,15 @@ enum spectre_v2_mitigation_cmd {
 	SPECTRE_V2_CMD_FORCE,
 	SPECTRE_V2_CMD_RETPOLINE,
 	SPECTRE_V2_CMD_RETPOLINE_GENERIC,
-	SPECTRE_V2_CMD_RETPOLINE_AMD,
+	SPECTRE_V2_CMD_RETPOLINE_LFENCE,
 };
 
 static const char *spectre_v2_strings[] = {
 	[SPECTRE_V2_NONE]			= "Vulnerable",
 	[SPECTRE_V2_RETPOLINE_MINIMAL]		= "Vulnerable: Minimal generic ASM retpoline",
-	[SPECTRE_V2_RETPOLINE_MINIMAL_AMD]	= "Vulnerable: Minimal AMD ASM retpoline",
+	[SPECTRE_V2_RETPOLINE_MINIMAL_LFENCE]	= "Vulnerable: Minimal LFENCE ASM retpoline",
 	[SPECTRE_V2_RETPOLINE_GENERIC]		= "Mitigation: Full generic retpoline",
-	[SPECTRE_V2_RETPOLINE_AMD]		= "Mitigation: Full AMD retpoline",
+	[SPECTRE_V2_RETPOLINE_LFENCE]		= "Mitigation: Full LFENCE retpoline",
 	[SPECTRE_V2_IBRS_ENHANCED]		= "Mitigation: Enhanced IBRS",
 };
 
@@ -272,7 +272,7 @@ static const struct {
 	{ "off",               SPECTRE_V2_CMD_NONE,              false },
 	{ "on",                SPECTRE_V2_CMD_FORCE,             true },
 	{ "retpoline",         SPECTRE_V2_CMD_RETPOLINE,         false },
-	{ "retpoline,amd",     SPECTRE_V2_CMD_RETPOLINE_AMD,     false },
+	{ "retpoline,lfence",     SPECTRE_V2_CMD_RETPOLINE_LFENCE,     false },
 	{ "retpoline,generic", SPECTRE_V2_CMD_RETPOLINE_GENERIC, false },
 	{ "auto",              SPECTRE_V2_CMD_AUTO,              false },
 };
@@ -304,16 +304,17 @@ static enum spectre_v2_mitigation_cmd __init spectre_v2_parse_cmdline(void)
 	}
 
 	if ((cmd == SPECTRE_V2_CMD_RETPOLINE ||
-	     cmd == SPECTRE_V2_CMD_RETPOLINE_AMD ||
+	     cmd == SPECTRE_V2_CMD_RETPOLINE_LFENCE ||
 	     cmd == SPECTRE_V2_CMD_RETPOLINE_GENERIC) &&
 	    !IS_ENABLED(CONFIG_RETPOLINE)) {
 		pr_err("%s selected but not compiled in. Switching to AUTO select\n", mitigation_options[i].option);
 		return SPECTRE_V2_CMD_AUTO;
 	}
 
-	if (cmd == SPECTRE_V2_CMD_RETPOLINE_AMD &&
+	if (cmd == SPECTRE_V2_CMD_RETPOLINE_LFENCE &&
+	    boot_cpu_data.x86_vendor != X86_VENDOR_HYGON &&
 	    boot_cpu_data.x86_vendor != X86_VENDOR_AMD) {
-		pr_err("retpoline,amd selected but CPU is not AMD. Switching to AUTO select\n");
+		pr_err("retpoline,lfence selected but CPU is not AMD or Hygon. Switching to AUTO select\n");
 		return SPECTRE_V2_CMD_AUTO;
 	}
 
@@ -354,9 +355,9 @@ static void __init spectre_v2_select_mitigation(void)
 		if (IS_ENABLED(CONFIG_RETPOLINE))
 			goto retpoline_auto;
 		break;
-	case SPECTRE_V2_CMD_RETPOLINE_AMD:
+	case SPECTRE_V2_CMD_RETPOLINE_LFENCE:
 		if (IS_ENABLED(CONFIG_RETPOLINE))
-			goto retpoline_amd;
+			goto retpoline_lfence;
 		break;
 	case SPECTRE_V2_CMD_RETPOLINE_GENERIC:
 		if (IS_ENABLED(CONFIG_RETPOLINE))
@@ -371,14 +372,15 @@ static void __init spectre_v2_select_mitigation(void)
 	return;
 
 retpoline_auto:
-	if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD) {
-	retpoline_amd:
+	if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD ||
+	    boot_cpu_data.x86_vendor == X86_VENDOR_HYGON) {
+	retpoline_lfence:
 		if (!boot_cpu_has(X86_FEATURE_LFENCE_RDTSC)) {
 			pr_err("Spectre mitigation: LFENCE not serializing, switching to generic retpoline\n");
 			goto retpoline_generic;
 		}
-		mode = retp_compiler() ? SPECTRE_V2_RETPOLINE_AMD :
-					 SPECTRE_V2_RETPOLINE_MINIMAL_AMD;
+		mode = retp_compiler() ? SPECTRE_V2_RETPOLINE_LFENCE :
+					 SPECTRE_V2_RETPOLINE_MINIMAL_LFENCE;
 		setup_force_cpu_cap(X86_FEATURE_RETPOLINE_AMD);
 		setup_force_cpu_cap(X86_FEATURE_RETPOLINE);
 	} else {
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
index 84dee5a..ffcc501 100644
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -962,6 +962,7 @@ static const __initconst struct x86_cpu_id cpu_no_speculation[] = {
 
 static const __initconst struct x86_cpu_id cpu_no_meltdown[] = {
 	{ X86_VENDOR_AMD },
+	{ X86_VENDOR_HYGON },
 	{}
 };
 
-- 
2.7.4


  parent reply	other threads:[~2018-08-29 12:45 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-29 12:42 [PATCH v5 00/16] Add support for Hygon Dhyana Family 18h processor Pu Wen
2018-08-29 12:42 ` [PATCH v5 01/16] x86/cpu: create Dhyana init file and register new cpu_dev to system Pu Wen
2018-08-29 19:35   ` Andi Kleen
2018-08-30 17:40     ` Pu Wen
2018-08-30 12:35   ` Borislav Petkov
2018-08-30 18:02     ` Pu Wen
2018-08-29 12:43 ` [PATCH v5 02/16] x86/cache: get cache size/leaves and setup cache cpumap for Dhyana Pu Wen
2018-09-03  9:57   ` Borislav Petkov
2018-09-03 12:59     ` Pu Wen
2018-08-29 12:43 ` [PATCH v5 03/16] x86/mtrr: get MTRR number and support TOP_MEM2 Pu Wen
2018-09-03 19:04   ` Borislav Petkov
2018-09-04  3:02     ` Pu Wen
2018-09-04  8:02       ` Borislav Petkov
2018-09-04 12:43         ` Pu Wen
2018-08-29 12:43 ` [PATCH v5 04/16] x86/smpboot: smp init nodelay and no flush caches before sleep Pu Wen
2018-09-04  9:15   ` Borislav Petkov
2018-08-29 12:43 ` [PATCH v5 05/16] x86/pmu: enable Hygon support to PMU infrastructure Pu Wen
2018-09-04 10:48   ` Borislav Petkov
2018-09-04 13:32     ` Pu Wen
2018-08-29 12:44 ` [PATCH v5 06/16] x86/nops: init ideal_nops for Hygon Pu Wen
2018-09-04 14:01   ` Borislav Petkov
2018-08-29 12:44 ` [PATCH v5 07/16] x86/pci: add Hygon PCI vendor and northbridge support Pu Wen
2018-09-04 14:52   ` Borislav Petkov
2018-09-04 15:45     ` Pu Wen
2018-09-04 16:03       ` Borislav Petkov
2018-08-29 12:44 ` [PATCH v5 08/16] x86/apic: add modern APIC support for Hygon Pu Wen
2018-09-04 18:33   ` Borislav Petkov
2018-09-05  8:08     ` Pu Wen
2018-08-29 12:44 ` Pu Wen [this message]
2018-09-05  9:13   ` [PATCH v5 09/16] x86/bugs: add lfence mitigation to spectre v2 and no meltdown " Borislav Petkov
2018-09-05 10:40     ` Pu Wen
2018-08-29 12:44 ` [PATCH v5 10/16] x86/mce: enable Hygon support to MCE infrastructure Pu Wen
2018-08-29 12:44   ` [v5,10/16] " Pu Wen
2018-09-05  9:22   ` [PATCH v5 10/16] " Borislav Petkov
2018-09-05  9:22     ` [v5,10/16] " Borislav Petkov
2018-09-05 12:59     ` [PATCH v5 10/16] " Pu Wen
2018-09-05 12:59       ` [v5,10/16] " Pu Wen
2018-09-05 13:15       ` [PATCH v5 10/16] " Borislav Petkov
2018-09-05 13:15         ` [v5,10/16] " Borislav Petkov
2018-09-06  3:52         ` [PATCH v5 10/16] " Pu Wen
2018-09-06  3:52           ` [v5,10/16] " Pu Wen
2018-09-06  8:39           ` [PATCH v5 10/16] " Borislav Petkov
2018-09-06  8:39             ` [v5,10/16] " Borislav Petkov
2018-09-06 11:40             ` [PATCH v5 10/16] " Pu Wen
2018-09-06 11:40               ` [v5,10/16] " Pu Wen
2018-09-06 12:29               ` [PATCH v5 10/16] " Borislav Petkov
2018-09-06 12:29                 ` [v5,10/16] " Borislav Petkov
2018-09-06 15:47                 ` [PATCH v5 10/16] " Pu Wen
2018-09-06 15:47                   ` [v5,10/16] " Pu Wen
2018-08-29 12:45 ` [PATCH v5 11/16] x86/kvm: enable Hygon support to KVM infrastructure Pu Wen
2018-09-05 10:30   ` Borislav Petkov
2018-08-29 12:45 ` [PATCH v5 12/16] x86/xen: enable Hygon support to Xen Pu Wen
2018-08-29 12:45 ` Pu Wen
2018-08-29 12:45 ` [PATCH v5 13/16] driver/acpi: enable Hygon support to ACPI driver Pu Wen
2018-08-29 12:45 ` [PATCH v5 14/16] driver/cpufreq: enable Hygon support to cpufreq driver Pu Wen
2018-08-29 12:45 ` [PATCH v5 15/16] driver/edac: enable Hygon support to AMD64 EDAC driver Pu Wen
2018-08-29 12:45   ` [v5,15/16] " Pu Wen
2018-09-05 10:44   ` [PATCH v5 15/16] " Borislav Petkov
2018-09-05 10:44     ` [v5,15/16] " Borislav Petkov
2018-09-05 13:03     ` [PATCH v5 15/16] " Pu Wen
2018-09-05 13:03       ` [v5,15/16] " Pu Wen
2018-08-29 12:45 ` [PATCH v5 16/16] tools/cpupower: enable Hygon support to cpupower tool Pu Wen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bf6e0e5403ae96715606366b3b5f817cbdab0dc3.1535459013.git.puwen@hygon.cn \
    --to=puwen@hygon.cn \
    --cc=bp@alien8.de \
    --cc=hpa@zytor.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=tglx@linutronix.de \
    --cc=thomas.lendacky@amd.com \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.