linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] arm64: Workaround for Thunder KVM hang issues.
@ 2017-04-24 18:42 David Daney
  2017-04-24 18:42 ` [PATCH 1/2] arm64: Add MIDR values for Cavium cn83XX SoCs David Daney
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: David Daney @ 2017-04-24 18:42 UTC (permalink / raw)
  To: linux-arm-kernel, linux-doc, kvmarm, kvm,
	Radim Krčmář,
	Paolo Bonzini, Marc Zyngier, Christoffer Dall, Jonathan Corbet,
	Will Deacon, Catalin Marinas
  Cc: linux-kernel, Robert Richter, David Daney

We have discovered in rare circumstances, guest execution may result
in host not receiving one or more interrupts.  This does not otherwise
affect guest or host execution and/or isolation.


David Daney (2):
  arm64: Add MIDR values for Cavium cn83XX SoCs
  arm64: Add workaround for Cavium Thunder erratum 30115

 Documentation/arm64/silicon-errata.txt |  1 +
 arch/arm64/Kconfig                     | 11 +++++++++++
 arch/arm64/include/asm/cpucaps.h       |  3 ++-
 arch/arm64/include/asm/cputype.h       |  2 ++
 arch/arm64/kernel/cpu_errata.c         | 21 +++++++++++++++++++++
 arch/arm64/kvm/hyp/switch.c            |  9 +++++++++
 6 files changed, 46 insertions(+), 1 deletion(-)

-- 
2.7.4

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 1/2] arm64: Add MIDR values for Cavium cn83XX SoCs
  2017-04-24 18:42 [PATCH 0/2] arm64: Workaround for Thunder KVM hang issues David Daney
@ 2017-04-24 18:42 ` David Daney
  2017-04-24 18:42 ` [PATCH 2/2] arm64: Add workaround for Cavium Thunder erratum 30115 David Daney
  2017-05-01  4:53 ` [PATCH 0/2] arm64: Workaround for Thunder KVM hang issues Jon Masters
  2 siblings, 0 replies; 4+ messages in thread
From: David Daney @ 2017-04-24 18:42 UTC (permalink / raw)
  To: linux-arm-kernel, linux-doc, kvmarm, kvm,
	Radim Krčmář,
	Paolo Bonzini, Marc Zyngier, Christoffer Dall, Jonathan Corbet,
	Will Deacon, Catalin Marinas
  Cc: linux-kernel, Robert Richter, David Daney

Signed-off-by: David Daney <david.daney@cavium.com>
---
 arch/arm64/include/asm/cputype.h | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/arch/arm64/include/asm/cputype.h b/arch/arm64/include/asm/cputype.h
index 0984d1b..235e77d 100644
--- a/arch/arm64/include/asm/cputype.h
+++ b/arch/arm64/include/asm/cputype.h
@@ -86,6 +86,7 @@
 
 #define CAVIUM_CPU_PART_THUNDERX	0x0A1
 #define CAVIUM_CPU_PART_THUNDERX_81XX	0x0A2
+#define CAVIUM_CPU_PART_THUNDERX_83XX	0x0A3
 
 #define BRCM_CPU_PART_VULCAN		0x516
 
@@ -96,6 +97,7 @@
 #define MIDR_CORTEX_A73 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A73)
 #define MIDR_THUNDERX	MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX)
 #define MIDR_THUNDERX_81XX MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX_81XX)
+#define MIDR_THUNDERX_83XX MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX_83XX)
 #define MIDR_QCOM_FALKOR_V1 MIDR_CPU_MODEL(ARM_CPU_IMP_QCOM, QCOM_CPU_PART_FALKOR_V1)
 
 #ifndef __ASSEMBLY__
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/2] arm64: Add workaround for Cavium Thunder erratum 30115
  2017-04-24 18:42 [PATCH 0/2] arm64: Workaround for Thunder KVM hang issues David Daney
  2017-04-24 18:42 ` [PATCH 1/2] arm64: Add MIDR values for Cavium cn83XX SoCs David Daney
@ 2017-04-24 18:42 ` David Daney
  2017-05-01  4:53 ` [PATCH 0/2] arm64: Workaround for Thunder KVM hang issues Jon Masters
  2 siblings, 0 replies; 4+ messages in thread
From: David Daney @ 2017-04-24 18:42 UTC (permalink / raw)
  To: linux-arm-kernel, linux-doc, kvmarm, kvm,
	Radim Krčmář,
	Paolo Bonzini, Marc Zyngier, Christoffer Dall, Jonathan Corbet,
	Will Deacon, Catalin Marinas
  Cc: linux-kernel, Robert Richter, David Daney

Some Cavium Thunder CPUs suffer a problem where a KVM guest may
inadvertently cause the host kernel to quit receiving interrupts.

The workaround is to toggle the group-1 interrupt enable on each exit
from the guest.

Signed-off-by: David Daney <david.daney@cavium.com>
---
 Documentation/arm64/silicon-errata.txt |  1 +
 arch/arm64/Kconfig                     | 11 +++++++++++
 arch/arm64/include/asm/cpucaps.h       |  3 ++-
 arch/arm64/kernel/cpu_errata.c         | 21 +++++++++++++++++++++
 arch/arm64/kvm/hyp/switch.c            |  9 +++++++++
 5 files changed, 44 insertions(+), 1 deletion(-)

diff --git a/Documentation/arm64/silicon-errata.txt b/Documentation/arm64/silicon-errata.txt
index 10f2ddd..f5f93dc 100644
--- a/Documentation/arm64/silicon-errata.txt
+++ b/Documentation/arm64/silicon-errata.txt
@@ -62,6 +62,7 @@ stable kernels.
 | Cavium         | ThunderX GICv3  | #23154          | CAVIUM_ERRATUM_23154        |
 | Cavium         | ThunderX Core   | #27456          | CAVIUM_ERRATUM_27456        |
 | Cavium         | ThunderX SMMUv2 | #27704          | N/A                         |
+| Cavium         | ThunderX Core   | #30115          | CAVIUM_ERRATUM_30115        |
 |                |                 |                 |                             |
 | Freescale/NXP  | LS2080A/LS1043A | A-008585        | FSL_ERRATUM_A008585         |
 |                |                 |                 |                             |
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
index e7f043e..fe29277 100644
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
@@ -480,6 +480,17 @@ config CAVIUM_ERRATUM_27456
 
 	  If unsure, say Y.
 
+config CAVIUM_ERRATUM_30115
+	bool "Cavium erratum 30115: Guest may disable interrupts in host"
+	default y
+	help
+	  On ThunderX T88 pass 1.x through 2.2, T81 pass 1.0 through
+	  1.2, and T83 Pass 1.0, KVM guest execution may disable
+	  interrupts in host.  The fix is to reenable group 1
+	  interrupts when returning to host mode.
+
+	  If unsure, say Y.
+
 config QCOM_FALKOR_ERRATUM_1003
 	bool "Falkor E1003: Incorrect translation due to ASID change"
 	default y
diff --git a/arch/arm64/include/asm/cpucaps.h b/arch/arm64/include/asm/cpucaps.h
index b3aab8a..8d2272c 100644
--- a/arch/arm64/include/asm/cpucaps.h
+++ b/arch/arm64/include/asm/cpucaps.h
@@ -38,7 +38,8 @@
 #define ARM64_WORKAROUND_REPEAT_TLBI		17
 #define ARM64_WORKAROUND_QCOM_FALKOR_E1003	18
 #define ARM64_WORKAROUND_858921			19
+#define ARM64_WORKAROUND_CAVIUM_30115		20
 
-#define ARM64_NCAPS				20
+#define ARM64_NCAPS				21
 
 #endif /* __ASM_CPUCAPS_H */
diff --git a/arch/arm64/kernel/cpu_errata.c b/arch/arm64/kernel/cpu_errata.c
index 2ed2a76..0e27f86 100644
--- a/arch/arm64/kernel/cpu_errata.c
+++ b/arch/arm64/kernel/cpu_errata.c
@@ -133,6 +133,27 @@ const struct arm64_cpu_capabilities arm64_errata[] = {
 		MIDR_RANGE(MIDR_THUNDERX_81XX, 0x00, 0x00),
 	},
 #endif
+#ifdef CONFIG_CAVIUM_ERRATUM_30115
+	{
+	/* Cavium ThunderX, T88 pass 1.x - 2.2 */
+		.desc = "Cavium erratum 30115",
+		.capability = ARM64_WORKAROUND_CAVIUM_30115,
+		MIDR_RANGE(MIDR_THUNDERX, 0x00,
+			   (1 << MIDR_VARIANT_SHIFT) | 2),
+	},
+	{
+	/* Cavium ThunderX, T81 pass 1.0 - 1.2 */
+		.desc = "Cavium erratum 30115",
+		.capability = ARM64_WORKAROUND_CAVIUM_30115,
+		MIDR_RANGE(MIDR_THUNDERX_81XX, 0x00, 0x02),
+	},
+	{
+	/* Cavium ThunderX, T83 pass 1.0 */
+		.desc = "Cavium erratum 30115",
+		.capability = ARM64_WORKAROUND_CAVIUM_30115,
+		MIDR_RANGE(MIDR_THUNDERX_83XX, 0x00, 0x00),
+	},
+#endif
 	{
 		.desc = "Mismatched cache line size",
 		.capability = ARM64_MISMATCHED_CACHE_LINE_SIZE,
diff --git a/arch/arm64/kvm/hyp/switch.c b/arch/arm64/kvm/hyp/switch.c
index aede165..c174b5f 100644
--- a/arch/arm64/kvm/hyp/switch.c
+++ b/arch/arm64/kvm/hyp/switch.c
@@ -17,11 +17,13 @@
 
 #include <linux/types.h>
 #include <linux/jump_label.h>
+#include <linux/irqchip/arm-gic-v3.h>
 
 #include <asm/kvm_asm.h>
 #include <asm/kvm_emulate.h>
 #include <asm/kvm_hyp.h>
 #include <asm/fpsimd.h>
+#include <asm/cpufeature.h>
 
 static bool __hyp_text __fpsimd_enabled_nvhe(void)
 {
@@ -166,6 +168,13 @@ static void __hyp_text __vgic_save_state(struct kvm_vcpu *vcpu)
 		__vgic_v2_save_state(vcpu);
 
 	write_sysreg(read_sysreg(hcr_el2) & ~HCR_INT_OVERRIDE, hcr_el2);
+
+#ifdef CONFIG_CAVIUM_ERRATUM_30115
+	if (cpus_have_const_cap(ARM64_WORKAROUND_CAVIUM_30115)) {
+		gic_write_grpen1(0);
+		gic_write_grpen1(1);
+	}
+#endif
 }
 
 static void __hyp_text __vgic_restore_state(struct kvm_vcpu *vcpu)
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 0/2] arm64: Workaround for Thunder KVM hang issues.
  2017-04-24 18:42 [PATCH 0/2] arm64: Workaround for Thunder KVM hang issues David Daney
  2017-04-24 18:42 ` [PATCH 1/2] arm64: Add MIDR values for Cavium cn83XX SoCs David Daney
  2017-04-24 18:42 ` [PATCH 2/2] arm64: Add workaround for Cavium Thunder erratum 30115 David Daney
@ 2017-05-01  4:53 ` Jon Masters
  2 siblings, 0 replies; 4+ messages in thread
From: Jon Masters @ 2017-05-01  4:53 UTC (permalink / raw)
  To: David Daney, linux-arm-kernel, linux-doc, kvmarm, kvm,
	Radim Krčmář,
	Paolo Bonzini, Marc Zyngier, Christoffer Dall, Jonathan Corbet,
	Will Deacon, Catalin Marinas
  Cc: linux-kernel, Robert Richter

On 04/24/2017 02:42 PM, David Daney wrote:
> We have discovered in rare circumstances, guest execution may result
> in host not receiving one or more interrupts.  This does not otherwise
> affect guest or host execution and/or isolation.

Thanks David. I have tested these and can confirm that a 4.11 machine
previously experiencing an issue has stable VMs with these.

Tested-by: Jon Masters <jcm@redhat.com>

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2017-05-01  4:53 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-04-24 18:42 [PATCH 0/2] arm64: Workaround for Thunder KVM hang issues David Daney
2017-04-24 18:42 ` [PATCH 1/2] arm64: Add MIDR values for Cavium cn83XX SoCs David Daney
2017-04-24 18:42 ` [PATCH 2/2] arm64: Add workaround for Cavium Thunder erratum 30115 David Daney
2017-05-01  4:53 ` [PATCH 0/2] arm64: Workaround for Thunder KVM hang issues Jon Masters

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).