[GIT PULL] KVM/ARM updates for v4.17

Marc Zyngier marc.zyngier at arm.com
Wed Mar 28 05:51:29 PDT 2018


Paolo, Radim,

This is the (rather big) set of updates for KVM/ARM for v4.17. The
main features are the set of VHE optimizations taking advantage of
CPUs implementing ARMv8.1, together with the EL2 randomization patches
that are the foundation for mitigating the so-called variant 3a
security issue (affecting Cortex-A57 and A72).

The rest is the usual mix of vgic fixes and minor improvements.

Note that the breakup below is slightly misleading, as it includes
fixes that have already landed in mainline (I've done a direct merge
of the fixes branch in order to spare everyone some horrible
conflicts).

Also, we've had to revert a pretty important patch for Qualcomm
servers due to some more conflicts with the arm64 tree). That patch
will be resent once both trees have been pulled into Linus' (the
sooner, the better).

Please pull.

	M.

The following changes since commit 4a3928c6f8a53fa1aed28ccba227742486e8ddcb:

  Linux 4.16-rc3 (2018-02-25 18:50:41 -0800)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm.git tags/kvm-arm-for-v4.17

for you to fetch changes up to dc6ed61d2f824a595033744fc1f3bf4cb98768b5:

  arm64: Add temporary ERRATA_MIDR_ALL_VERSIONS compatibility macro (2018-03-28 12:57:23 +0100)

----------------------------------------------------------------
KVM/ARM updates for v4.17

- VHE optimizations
- EL2 address space randomization
- Variant 3a mitigation for Cortex-A57 and A72
- The usual vgic fixes
- Various minor tidying-up

----------------------------------------------------------------
Andre Przywara (1):
      KVM: arm/arm64: vgic: Add missing irq_lock to vgic_mmio_read_pending

Ard Biesheuvel (1):
      KVM: arm/arm64: Reduce verbosity of KVM init log

Arnd Bergmann (1):
      ARM: kvm: fix building with gcc-8

Christoffer Dall (42):
      KVM: arm/arm64: Fix arch timers with userspace irqchips
      KVM: arm/arm64: Avoid vcpu_load for other vcpu ioctls than KVM_RUN
      KVM: arm/arm64: Reset mapped IRQs on VM reset
      KVM: arm/arm64: Avoid vcpu_load for other vcpu ioctls than KVM_RUN
      KVM: arm/arm64: Move vcpu_load call after kvm_vcpu_first_run_init
      KVM: arm64: Avoid storing the vcpu pointer on the stack
      KVM: arm64: Rework hyp_panic for VHE and non-VHE
      KVM: arm/arm64: Get rid of vcpu->arch.irq_lines
      KVM: arm/arm64: Add kvm_vcpu_load_sysregs and kvm_vcpu_put_sysregs
      KVM: arm/arm64: Introduce vcpu_el1_is_32bit
      KVM: arm64: Move debug dirty flag calculation out of world switch
      KVM: arm64: Slightly improve debug save/restore functions
      KVM: arm64: Improve debug register save/restore flow
      KVM: arm64: Factor out fault info population and gic workarounds
      KVM: arm64: Introduce VHE-specific kvm_vcpu_run
      KVM: arm64: Remove kern_hyp_va() use in VHE switch function
      KVM: arm64: Don't deactivate VM on VHE systems
      KVM: arm64: Remove noop calls to timer save/restore from VHE switch
      KVM: arm64: Move userspace system registers into separate function
      KVM: arm64: Rewrite sysreg alternatives to static keys
      KVM: arm64: Introduce separate VHE/non-VHE sysreg save/restore functions
      KVM: arm/arm64: Remove leftover comment from kvm_vcpu_run_vhe
      KVM: arm64: Unify non-VHE host/guest sysreg save and restore functions
      KVM: arm64: Don't save the host ELR_EL2 and SPSR_EL2 on VHE systems
      KVM: arm64: Change 32-bit handling of VM system registers
      KVM: arm64: Rewrite system register accessors to read/write functions
      KVM: arm64: Introduce framework for accessing deferred sysregs
      KVM: arm/arm64: Prepare to handle deferred save/restore of SPSR_EL1
      KVM: arm64: Prepare to handle deferred save/restore of ELR_EL1
      KVM: arm64: Defer saving/restoring 64-bit sysregs to vcpu load/put on VHE
      KVM: arm64: Prepare to handle deferred save/restore of 32-bit registers
      KVM: arm64: Defer saving/restoring 32-bit sysregs to vcpu load/put
      KVM: arm64: Move common VHE/non-VHE trap config in separate functions
      KVM: arm64: Directly call VHE and non-VHE FPSIMD enabled functions
      KVM: arm64: Configure c15, PMU, and debug register traps on cpu load/put for VHE
      KVM: arm64: Cleanup __activate_traps and __deactive_traps for VHE and non-VHE
      KVM: arm/arm64: Get rid of vgic_elrsr
      KVM: arm/arm64: Handle VGICv2 save/restore from the main VGIC code
      KVM: arm/arm64: Move arm64-only vgic-v2-sr.c file to arm64
      KVM: arm/arm64: Handle VGICv3 save/restore from the main VGIC code on VHE
      KVM: arm/arm64: Move VGIC APR save/restore to vgic put/load
      KVM: arm/arm64: Avoid VGICv3 save/restore on VHE with no IRQs

Dave Martin (1):
      arm64: KVM: Move CPU ID reg trap setup off the world switch path

Jérémy Fanguède (2):
      KVM: arm64: Enable the EL1 physical timer for AArch32 guests
      KVM: arm: Enable emulation of the physical timer

Marc Zyngier (33):
      KVM: arm/arm64: vgic: Don't populate multiple LRs with the same vintid
      kvm: arm/arm64: vgic-v3: Tighten synchronization for guests using v2 on v3
      arm64: alternatives: Add dynamic patching feature
      arm64: insn: Add N immediate encoding
      arm64: insn: Add encoder for bitwise operations using literals
      arm64: KVM: Dynamically patch the kernel/hyp VA mask
      arm64: cpufeatures: Drop the ARM64_HYP_OFFSET_LOW feature flag
      KVM: arm/arm64: Do not use kern_hyp_va() with kvm_vgic_global_state
      KVM: arm/arm64: Demote HYP VA range display to being a debug feature
      KVM: arm/arm64: Move ioremap calls to create_hyp_io_mappings
      KVM: arm/arm64: Keep GICv2 HYP VAs in kvm_vgic_global_state
      KVM: arm/arm64: Fix idmap size and alignment
      KVM: arm64: Fix HYP idmap unmap when using 52bit PA
      KVM: arm/arm64: Move HYP IO VAs to the "idmap" range
      arm64; insn: Add encoder for the EXTR instruction
      arm64: insn: Allow ADD/SUB (immediate) with LSL #12
      arm64: KVM: Dynamically compute the HYP VA mask
      arm64: KVM: Introduce EL2 VA randomisation
      arm64: Update the KVM memory map documentation
      arm64: KVM: Move vector offsetting from hyp-init.S to kvm_get_hyp_vector
      arm64: KVM: Move stashing of x0/x1 into the vector code itself
      arm64: KVM: Move BP hardening vectors into .hyp.text section
      arm64: KVM: Reserve 4 additional instructions in the BPI template
      arm64: KVM: Allow far branches from vector slots to the main vectors
      arm/arm64: KVM: Introduce EL2-specific executable mappings
      arm64: Make BP hardening slot counter available
      arm64: KVM: Allow mapping of vectors outside of the RAM region
      arm64: Enable ARM64_HARDEN_EL2_VECTORS on Cortex-A57 and A72
      Merge tag 'kvm-arm-fixes-for-v4.16-2' into HEAD
      KVM: arm/arm64: vgic: Disallow Active+Pending for level interrupts
      KVM: arm/arm64: vgic-its: Fix potential overrun in vgic_copy_lpi_list
      Revert "arm64: KVM: Use SMCCC_ARCH_WORKAROUND_1 for Falkor BP hardening"
      arm64: Add temporary ERRATA_MIDR_ALL_VERSIONS compatibility macro

Mark Rutland (1):
      arm64/kvm: Prohibit guest LOR accesses

Peter Maydell (1):
      KVM: arm: Reserve bit in KVM_REG_ARM encoding for secure/nonsecure

Shanker Donthineni (2):
      KVM: arm/arm64: No need to zero CNTVOFF in kvm_timer_vcpu_put() for VHE
      arm64: KVM: Use SMCCC_ARCH_WORKAROUND_1 for Falkor BP hardening

Shih-Wei Li (1):
      KVM: arm64: Move HCR_INT_OVERRIDE to default HCR_EL2 guest flag

 Documentation/arm64/memory.txt           |   9 +-
 arch/arm/include/asm/kvm_asm.h           |   5 +-
 arch/arm/include/asm/kvm_emulate.h       |  21 +-
 arch/arm/include/asm/kvm_host.h          |   6 +-
 arch/arm/include/asm/kvm_hyp.h           |   4 +
 arch/arm/include/asm/kvm_mmu.h           |  16 +-
 arch/arm/include/uapi/asm/kvm.h          |   9 +
 arch/arm/kvm/coproc.c                    |  61 +++++
 arch/arm/kvm/emulate.c                   |   4 +-
 arch/arm/kvm/hyp/Makefile                |   6 +-
 arch/arm/kvm/hyp/banked-sr.c             |   4 +
 arch/arm/kvm/hyp/switch.c                |  16 +-
 arch/arm64/Kconfig                       |  16 ++
 arch/arm64/include/asm/alternative.h     |  41 +++-
 arch/arm64/include/asm/cpucaps.h         |   2 +-
 arch/arm64/include/asm/insn.h            |  16 ++
 arch/arm64/include/asm/kvm_arm.h         |   6 +-
 arch/arm64/include/asm/kvm_asm.h         |  19 +-
 arch/arm64/include/asm/kvm_emulate.h     |  78 +++++--
 arch/arm64/include/asm/kvm_host.h        |  53 ++++-
 arch/arm64/include/asm/kvm_hyp.h         |  29 +--
 arch/arm64/include/asm/kvm_mmu.h         | 165 +++++++++----
 arch/arm64/include/asm/mmu.h             |   8 +-
 arch/arm64/include/asm/sysreg.h          |   6 +
 arch/arm64/kernel/Makefile               |   4 +-
 arch/arm64/kernel/alternative.c          |  43 +++-
 arch/arm64/kernel/asm-offsets.c          |   1 +
 arch/arm64/kernel/bpi.S                  |  67 ++++--
 arch/arm64/kernel/cpu_errata.c           |  25 +-
 arch/arm64/kernel/cpufeature.c           |  19 --
 arch/arm64/kernel/head.S                 |   7 +
 arch/arm64/kernel/insn.c                 | 190 ++++++++++++++-
 arch/arm64/kvm/Kconfig                   |   3 +
 arch/arm64/kvm/Makefile                  |   2 +-
 arch/arm64/kvm/debug.c                   |  29 ++-
 arch/arm64/kvm/guest.c                   |   3 -
 arch/arm64/kvm/hyp-init.S                |   1 -
 arch/arm64/kvm/hyp/Makefile              |   2 +-
 arch/arm64/kvm/hyp/debug-sr.c            |  88 ++++---
 arch/arm64/kvm/hyp/entry.S               |   6 +-
 arch/arm64/kvm/hyp/hyp-entry.S           |  86 +++----
 arch/arm64/kvm/hyp/switch.c              | 382 ++++++++++++++++++-------------
 arch/arm64/kvm/hyp/sysreg-sr.c           | 172 +++++++++++---
 arch/arm64/kvm/hyp/vgic-v2-cpuif-proxy.c |  78 +++++++
 arch/arm64/kvm/inject_fault.c            |  24 +-
 arch/arm64/kvm/regmap.c                  |  67 ++++--
 arch/arm64/kvm/sys_regs.c                | 199 +++++++++++++---
 arch/arm64/kvm/sys_regs.h                |   4 +-
 arch/arm64/kvm/sys_regs_generic_v8.c     |   4 +-
 arch/arm64/kvm/va_layout.c               | 227 ++++++++++++++++++
 include/kvm/arm_vgic.h                   |  15 +-
 include/linux/irqchip/arm-gic-v3.h       |   1 +
 include/linux/irqchip/arm-gic.h          |   1 +
 virt/kvm/arm/aarch32.c                   |   2 +-
 virt/kvm/arm/arch_timer.c                | 132 ++++++-----
 virt/kvm/arm/arm.c                       |  57 ++---
 virt/kvm/arm/hyp/timer-sr.c              |  44 ++--
 virt/kvm/arm/hyp/vgic-v2-sr.c            | 159 -------------
 virt/kvm/arm/hyp/vgic-v3-sr.c            | 246 ++++++++++++--------
 virt/kvm/arm/mmu.c                       | 180 ++++++++++++---
 virt/kvm/arm/pmu.c                       |  36 +--
 virt/kvm/arm/vgic/vgic-init.c            |  17 --
 virt/kvm/arm/vgic/vgic-its.c             |  15 +-
 virt/kvm/arm/vgic/vgic-mmio.c            |   3 +
 virt/kvm/arm/vgic/vgic-v2.c              | 163 ++++++++-----
 virt/kvm/arm/vgic/vgic-v3.c              |  75 +++---
 virt/kvm/arm/vgic/vgic.c                 | 120 ++++++++--
 virt/kvm/arm/vgic/vgic.h                 |   6 +
 68 files changed, 2508 insertions(+), 1097 deletions(-)
 create mode 100644 arch/arm64/kvm/hyp/vgic-v2-cpuif-proxy.c
 create mode 100644 arch/arm64/kvm/va_layout.c
 delete mode 100644 virt/kvm/arm/hyp/vgic-v2-sr.c



More information about the linux-arm-kernel mailing list