All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/31] arm64: KVM: Mediate access to GICv3 sysregs at EL2
@ 2017-05-03 10:45 ` Marc Zyngier
  0 siblings, 0 replies; 162+ messages in thread
From: Marc Zyngier @ 2017-05-03 10:45 UTC (permalink / raw)
  To: Christoffer Dall
  Cc: David Daney, Catalin Marinas, Mark Rutland, Robert Richter,
	kvmarm, linux-arm-kernel, kvm

[Apologies for posting this at the beginning of a merge window, but as
 this is a rather hot topic, I'd rather put it out as soon as possible]

Some systems have less than perfect GICv3 implementations, leading to
all kind of ugly issues (guest hanging, host dying). In order to allow
some level of diagnostic, and in some cases implement workarounds,
this series enables the trapping of both Group-0, Group-1 and Common
sysregs. Mediating the access at EL2 allows some form of sanity
checking that the HW is sometimes sorely lacking.

Instead of fully emulating a GICv3 CPU interface, we still use the
existing HW (list registers, AP registers, VMCR...), which allows the
code to be independent from the rest of the KVM code, and to cope with
partial trapping.

Of course, trapping has a cost, which is why this must be either
enabled on the command line, or selected by another cpu capability
(see Cavium erratum 30115). A quick test on an A57-based platform
shows a 25% hit when repeatedly banging on the trapped registers,
while normal workloads do not seem to suffer noticeably from such
trapping (hackbench variance is in the usual noise, despite being very
IPI happy).

This has been tested on a dual socket Thundex-X and a Freescale LS-2085a.

The first 6 patches are fixes, and only here for reference as they
have already been posted separately. The rest of the patches implement
Group-1, Group-0 and Common sysreg handlers, with the corresponding
command line options. I've also taken the liberty to rebase David
Daney's initial Cavium erratum 30115 workaround on top of this series,
and included it here as a typical use case.

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

Marc Zyngier (29):
  arm64: KVM: Fix decoding of Rt/Rt2 when trapping AArch32 CP accesses
  arm64: KVM: Do not use stack-protector to compile EL2 code
  arm: KVM: Do not use stack-protector to compile HYP code
  KVM: arm/arm64: vgic-v2: Do not use Active+Pending state for a HW
    interrupt
  KVM: arm/arm64: vgic-v3: Do not use Active+Pending state for a HW
    interrupt
  KVM: arm/arm64: vgic-v3: Use PREbits to infer the number of
    ICH_APxRn_EL2 registers
  KVM: arm/arm64: vgic-v3: Add accessors for the ICH_APxRn_EL2 registers
  arm64: Add a facility to turn an ESR syndrome into a sysreg encoding
  KVM: arm64: Make kvm_condition_valid32() accessible from EL2
  KVM: arm64: vgic-v3: Add hook to handle guest GICv3 sysreg accesses at
    EL2
  KVM: arm64: vgic-v3: Add ICV_BPR1_EL1 handler
  KVM: arm64: vgic-v3: Add ICV_IGRPEN1_EL1 handler
  KVM: arm64: vgic-v3: Add ICV_IAR1_EL1 handler
  KVM: arm64: vgic-v3: Add ICV_EOIR1_EL1 handler
  KVM: arm64: vgic-v3: Add ICV_AP1Rn_EL1 handler
  KVM: arm64: vgic-v3: Add ICV_HPPIR1_EL1 handler
  KVM: arm64: vgic-v3: Enable trapping of Group-1 system registers
  KVM: arm64: Enable GICv3 Group-1 sysreg trapping via command-line
  KVM: arm64: vgic-v3: Add ICV_BPR0_EL1 handler
  KVM: arm64: vgic-v3: Add ICV_IGNREN0_EL1 handler
  KVM: arm64: vgic-v3: Add misc Group-0 handlers
  KVM: arm64: vgic-v3: Enable trapping of Group-0 system registers
  KVM: arm64: Enable GICv3 Group-0 sysreg trapping via command-line
  KVM: arm64: vgic-v3: Add ICV_DIR_EL1 handler
  KVM: arm64: vgic-v3: Add ICV_RPR_EL1 handler
  KVM: arm64: vgic-v3: Add ICV_CTLR_EL1 handler
  KVM: arm64: vgic-v3: Add ICV_PMR_EL1 handler
  KVM: arm64: Enable GICv3 common sysreg trapping via command-line
  KVM: arm64: vgic-v3: Log which GICv3 system registers are trapped

 Documentation/arm64/silicon-errata.txt |   1 +
 arch/arm/kvm/hyp/Makefile              |   2 +
 arch/arm64/Kconfig                     |  11 +
 arch/arm64/include/asm/cpucaps.h       |   3 +-
 arch/arm64/include/asm/cputype.h       |   2 +
 arch/arm64/include/asm/esr.h           |  25 ++
 arch/arm64/include/asm/kvm_emulate.h   |   6 +
 arch/arm64/include/asm/kvm_hyp.h       |   1 +
 arch/arm64/include/asm/sysreg.h        |   9 +
 arch/arm64/kernel/cpu_errata.c         |  21 +
 arch/arm64/kvm/hyp/Makefile            |   2 +
 arch/arm64/kvm/hyp/switch.c            |  14 +
 arch/arm64/kvm/sys_regs.c              |   8 +-
 include/kvm/arm_vgic.h                 |   1 +
 include/linux/irqchip/arm-gic-v3.h     |   6 +
 virt/kvm/arm/aarch32.c                 |   2 +-
 virt/kvm/arm/hyp/vgic-v3-sr.c          | 792 +++++++++++++++++++++++++++++++--
 virt/kvm/arm/vgic/vgic-v2.c            |   7 +
 virt/kvm/arm/vgic/vgic-v3.c            |  52 +++
 19 files changed, 934 insertions(+), 31 deletions(-)

-- 
2.11.0

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

end of thread, other threads:[~2017-06-09 10:43 UTC | newest]

Thread overview: 162+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-03 10:45 [PATCH 00/31] arm64: KVM: Mediate access to GICv3 sysregs at EL2 Marc Zyngier
2017-05-03 10:45 ` Marc Zyngier
2017-05-03 10:45 ` [PATCH 01/31] arm64: KVM: Fix decoding of Rt/Rt2 when trapping AArch32 CP accesses Marc Zyngier
2017-05-03 10:45   ` Marc Zyngier
2017-05-03 10:45 ` [PATCH 02/31] arm64: KVM: Do not use stack-protector to compile EL2 code Marc Zyngier
2017-05-03 10:45   ` Marc Zyngier
2017-05-03 10:45 ` [PATCH 03/31] arm: KVM: Do not use stack-protector to compile HYP code Marc Zyngier
2017-05-03 10:45   ` Marc Zyngier
2017-05-03 10:45 ` [PATCH 04/31] KVM: arm/arm64: vgic-v2: Do not use Active+Pending state for a HW interrupt Marc Zyngier
2017-05-03 10:45   ` Marc Zyngier
2017-05-03 10:45 ` [PATCH 05/31] KVM: arm/arm64: vgic-v3: " Marc Zyngier
2017-05-03 10:45   ` Marc Zyngier
2017-05-03 10:45 ` [PATCH 06/31] KVM: arm/arm64: vgic-v3: Use PREbits to infer the number of ICH_APxRn_EL2 registers Marc Zyngier
2017-05-03 10:45   ` Marc Zyngier
2017-05-03 10:45 ` [PATCH 07/31] KVM: arm/arm64: vgic-v3: Add accessors for the " Marc Zyngier
2017-05-03 10:45   ` Marc Zyngier
2017-05-03 15:32   ` Mark Rutland
2017-05-03 15:32     ` Mark Rutland
2017-05-03 15:58     ` Marc Zyngier
2017-05-03 15:58       ` Marc Zyngier
2017-05-30 16:17       ` Marc Zyngier
2017-05-30 16:17         ` Marc Zyngier
2017-05-30 16:42         ` Mark Rutland
2017-05-30 16:42           ` Mark Rutland
2017-05-17  9:54   ` Auger Eric
2017-05-17  9:54     ` Auger Eric
2017-05-22 18:52     ` Marc Zyngier
2017-05-22 18:52       ` Marc Zyngier
2017-05-22 18:52       ` Marc Zyngier
2017-05-03 10:45 ` [PATCH 08/31] arm64: Add a facility to turn an ESR syndrome into a sysreg encoding Marc Zyngier
2017-05-03 10:45   ` Marc Zyngier
2017-05-03 15:35   ` Mark Rutland
2017-05-03 15:35     ` Mark Rutland
2017-05-17  9:54   ` Auger Eric
2017-05-17  9:54     ` Auger Eric
2017-06-09 10:38   ` Catalin Marinas
2017-06-09 10:38     ` Catalin Marinas
2017-05-03 10:45 ` [PATCH 09/31] KVM: arm64: Make kvm_condition_valid32() accessible from EL2 Marc Zyngier
2017-05-03 10:45   ` Marc Zyngier
2017-05-17  9:54   ` Auger Eric
2017-05-17  9:54     ` Auger Eric
2017-05-03 10:45 ` [PATCH 10/31] KVM: arm64: vgic-v3: Add hook to handle guest GICv3 sysreg accesses at EL2 Marc Zyngier
2017-05-03 10:45   ` Marc Zyngier
2017-05-17  9:54   ` Auger Eric
2017-05-17  9:54     ` Auger Eric
2017-05-03 10:45 ` [PATCH 11/31] KVM: arm64: vgic-v3: Add ICV_BPR1_EL1 handler Marc Zyngier
2017-05-03 10:45   ` Marc Zyngier
2017-05-17 15:39   ` Auger Eric
2017-05-17 15:39     ` Auger Eric
2017-05-03 10:45 ` [PATCH 12/31] KVM: arm64: vgic-v3: Add ICV_IGRPEN1_EL1 handler Marc Zyngier
2017-05-03 10:45   ` Marc Zyngier
2017-05-17 15:39   ` Auger Eric
2017-05-17 15:39     ` Auger Eric
2017-05-03 10:45 ` [PATCH 13/31] KVM: arm64: vgic-v3: Add ICV_IAR1_EL1 handler Marc Zyngier
2017-05-03 10:45   ` Marc Zyngier
2017-05-18  7:41   ` Auger Eric
2017-05-18  7:41     ` Auger Eric
2017-05-22 17:52     ` Marc Zyngier
2017-05-22 17:52       ` Marc Zyngier
2017-05-23  7:22       ` Auger Eric
2017-05-23  7:22         ` Auger Eric
2017-05-23  9:26         ` Marc Zyngier
2017-05-23  9:26           ` Marc Zyngier
2017-05-03 10:45 ` [PATCH 14/31] KVM: arm64: vgic-v3: Add ICV_EOIR1_EL1 handler Marc Zyngier
2017-05-03 10:45   ` Marc Zyngier
2017-05-30  7:48   ` Auger Eric
2017-05-30  7:48     ` Auger Eric
2017-05-30 14:24     ` Marc Zyngier
2017-05-30 14:24       ` Marc Zyngier
2017-05-31  6:33       ` Auger Eric
2017-05-31  6:33         ` Auger Eric
2017-05-31  6:46         ` Marc Zyngier
2017-05-31  6:46           ` Marc Zyngier
2017-05-31  6:46           ` Marc Zyngier
2017-05-31  7:26           ` Auger Eric
2017-05-31  7:26             ` Auger Eric
2017-05-31  7:54             ` Marc Zyngier
2017-05-31  7:54               ` Marc Zyngier
2017-05-03 10:45 ` [PATCH 15/31] KVM: arm64: vgic-v3: Add ICV_AP1Rn_EL1 handler Marc Zyngier
2017-05-03 10:45   ` Marc Zyngier
2017-05-30  7:48   ` Auger Eric
2017-05-30  7:48     ` Auger Eric
2017-05-30  8:02     ` Auger Eric
2017-05-30  8:02       ` Auger Eric
2017-05-30 14:21       ` Marc Zyngier
2017-05-30 14:21         ` Marc Zyngier
2017-05-03 10:45 ` [PATCH 16/31] KVM: arm64: vgic-v3: Add ICV_HPPIR1_EL1 handler Marc Zyngier
2017-05-03 10:45   ` Marc Zyngier
2017-05-30  8:05   ` Auger Eric
2017-05-30  8:05     ` Auger Eric
2017-05-03 10:45 ` [PATCH 17/31] KVM: arm64: vgic-v3: Enable trapping of Group-1 system registers Marc Zyngier
2017-05-03 10:45   ` Marc Zyngier
2017-05-30  9:07   ` Auger Eric
2017-05-30  9:07     ` Auger Eric
2017-05-30 14:32     ` Marc Zyngier
2017-05-30 14:32       ` Marc Zyngier
2017-05-31  6:43       ` Auger Eric
2017-05-31  6:43         ` Auger Eric
2017-05-03 10:45 ` [PATCH 18/31] KVM: arm64: Enable GICv3 Group-1 sysreg trapping via command-line Marc Zyngier
2017-05-03 10:45   ` Marc Zyngier
2017-05-03 10:45 ` [PATCH 19/31] KVM: arm64: vgic-v3: Add ICV_BPR0_EL1 handler Marc Zyngier
2017-05-03 10:45   ` Marc Zyngier
2017-05-30  9:48   ` Auger Eric
2017-05-30  9:48     ` Auger Eric
2017-05-03 10:45 ` [PATCH 20/31] KVM: arm64: vgic-v3: Add ICV_IGNREN0_EL1 handler Marc Zyngier
2017-05-03 10:45   ` Marc Zyngier
2017-05-30  9:48   ` Auger Eric
2017-05-30  9:48     ` Auger Eric
2017-05-03 10:45 ` [PATCH 21/31] KVM: arm64: vgic-v3: Add misc Group-0 handlers Marc Zyngier
2017-05-03 10:45   ` Marc Zyngier
2017-05-30  9:48   ` Auger Eric
2017-05-30  9:48     ` Auger Eric
2017-05-03 10:45 ` [PATCH 22/31] KVM: arm64: vgic-v3: Enable trapping of Group-0 system registers Marc Zyngier
2017-05-03 10:45   ` Marc Zyngier
2017-05-30  9:48   ` Auger Eric
2017-05-30  9:48     ` Auger Eric
2017-05-03 10:45 ` [PATCH 23/31] KVM: arm64: Enable GICv3 Group-0 sysreg trapping via command-line Marc Zyngier
2017-05-03 10:45   ` Marc Zyngier
2017-05-03 10:45 ` [PATCH 24/31] arm64: Add MIDR values for Cavium cn83XX SoCs Marc Zyngier
2017-05-03 10:45   ` Marc Zyngier
2017-05-30  9:56   ` Auger Eric
2017-05-30  9:56     ` Auger Eric
2017-06-09 10:39   ` Catalin Marinas
2017-06-09 10:39     ` Catalin Marinas
2017-05-03 10:46 ` [PATCH 25/31] arm64: Add workaround for Cavium Thunder erratum 30115 Marc Zyngier
2017-05-03 10:46   ` Marc Zyngier
2017-05-30  9:56   ` Auger Eric
2017-05-30  9:56     ` Auger Eric
2017-06-09 10:43   ` Catalin Marinas
2017-06-09 10:43     ` Catalin Marinas
2017-05-03 10:46 ` [PATCH 26/31] KVM: arm64: vgic-v3: Add ICV_DIR_EL1 handler Marc Zyngier
2017-05-03 10:46   ` Marc Zyngier
2017-05-30 10:15   ` Auger Eric
2017-05-30 10:15     ` Auger Eric
2017-05-30 14:45     ` Marc Zyngier
2017-05-30 14:45       ` Marc Zyngier
2017-05-03 10:46 ` [PATCH 27/31] KVM: arm64: vgic-v3: Add ICV_RPR_EL1 handler Marc Zyngier
2017-05-03 10:46   ` Marc Zyngier
2017-05-30 10:16   ` Auger Eric
2017-05-30 10:16     ` Auger Eric
2017-05-03 10:46 ` [PATCH 28/31] KVM: arm64: vgic-v3: Add ICV_CTLR_EL1 handler Marc Zyngier
2017-05-03 10:46   ` Marc Zyngier
2017-05-30 10:27   ` Auger Eric
2017-05-30 10:27     ` Auger Eric
2017-05-03 10:46 ` [PATCH 29/31] KVM: arm64: vgic-v3: Add ICV_PMR_EL1 handler Marc Zyngier
2017-05-03 10:46   ` Marc Zyngier
2017-05-30 10:34   ` Auger Eric
2017-05-30 10:34     ` Auger Eric
2017-05-03 10:46 ` [PATCH 30/31] KVM: arm64: Enable GICv3 common sysreg trapping via command-line Marc Zyngier
2017-05-03 10:46   ` Marc Zyngier
2017-05-30  9:56   ` Auger Eric
2017-05-30  9:56     ` Auger Eric
2017-05-30 14:41     ` Marc Zyngier
2017-05-30 14:41       ` Marc Zyngier
2017-05-03 10:46 ` [PATCH 31/31] KVM: arm64: vgic-v3: Log which GICv3 system registers are trapped Marc Zyngier
2017-05-03 10:46   ` Marc Zyngier
2017-05-30  9:56   ` Auger Eric
2017-05-30  9:56     ` Auger Eric
2017-05-09  0:05 ` [PATCH 00/31] arm64: KVM: Mediate access to GICv3 sysregs at EL2 David Daney
2017-05-09  0:05   ` David Daney
2017-05-09 17:39   ` Marc Zyngier
2017-05-09 17:39     ` Marc Zyngier

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.