[PULL 00/79] KVM/ARM Changes for v4.12

Christoffer Dall cdall at linaro.org
Sun Apr 23 13:08:10 EDT 2017


Hi Paolo and Radim,

Here are the changes for KVM/ARM for v4.12 so far.  I may send another
pull request next week with the ITS save/restore patches if we feel they
are ready.  The ABI part of the ITS save/restore patches has matured for
a while so we just need to make sure on the implementation bits.

Note that this pull request shares a common base branch with the arm64
tree which has already been pulled by the arm64 folks into their
for-next/core branch.

As for these changes, they include:
 - Using the common sysreg definitions between KVM and arm64
 - Improved hyp-stub implementation with support for kexec and kdump on the 32-bit side
 - Proper PMU exception handling
 - Performance improvements of our GIC handling
 - Support for irqchip in userspace with in-kernel arch-timers and PMU support
 - A fix for a race condition in our PSCI code


The following changes since commit 97da3854c526d3a6ee05c849c96e48d21527606c:

  Linux 4.11-rc3 (2017-03-19 19:09:39 -0700)

are available in the git repository at:

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

for you to fetch changes up to 1edb632133efb6226b6bef3e7d9fa8c7134ac4e2:

  ARM: KVM: Fix idmap stub entry when running Thumb-2 code (2017-04-20 20:17:57 +0200)

Thanks,
-Christoffer

---

Alexander Graf (2):
  KVM: arm/arm64: Add ARM user space interrupt signaling ABI
  KVM: arm/arm64: Support arch timers with a userspace gic

Andrew Jones (1):
  KVM: arm/arm64: fix races in kvm_psci_vcpu_on

Christoffer Dall (12):
  KVM: arm/arm64: vgic: Defer touching GICH_VMCR to vcpu_load/put
  KVM: arm/arm64: vgic: Get rid of live_lrs
  KVM: arm/arm64: vgic: Only set underflow when actually out of LRs
  KVM: arm/arm64: vgic: Get rid of unnecessary process_maintenance
    operation
  KVM: arm/arm64: vgic: Get rid of unnecessary save_maint_int_state
  KVM: arm/arm64: vgic: Get rid of MISR and EISR fields
  KVM: arm/arm64: vgic: Implement early VGIC init functionality
  KVM: arm/arm64: vgic: Don't check vgic_initialized in sync/flush
  KVM: arm/arm64: vgic: Improve sync_hwstate performance
  KVM: arm/arm64: Cleanup the arch timer code's irqchip checking
  KVM: arm/arm64: Report PMU overflow interrupts to userspace irqchip
  KVM: arm/arm64: Advertise support for KVM_CAP_ARM_USER_IRQ

Marc Zyngier (45):
  arm64: KVM: PMU: Refactor pmu_*_el0_disabled
  arm64: KVM: PMU: Inject UNDEF exception on illegal register access
  arm64: KVM: PMU: Inject UNDEF on non-privileged accesses
  arm64: KVM: Make unexpected reads from WO registers inject an undef
  arm64: KVM: PMU: Inject UNDEF on read access to PMSWINC_EL0
  arm64: KVM: Treat sysreg accessors returning false as successful
  arm64: KVM: Do not corrupt registers on failed 64bit CP read
  arm: KVM: Make unexpected register accesses inject an undef
  arm: KVM: Treat CP15 accessors returning false as successful
  arm64: hyp-stub: Stop pointlessly clobbering lr
  arm64: KVM: Move lr save/restore to do_el2_call
  arm64: hyp-stub: Don't save lr in the EL1 code
  arm64: hyp-stub: Define a return value for failed stub calls
  arm64: hyp-stub: Update documentation in asm/virt.h
  arm64: hyp-stub: Implement HVC_RESET_VECTORS stub hypercall
  arm64: KVM: Implement HVC_RESET_VECTORS stub hypercall in the init
    code
  arm64: KVM: Implement HVC_GET_VECTORS in the init code
  arm64: KVM: Allow the main HYP code to use the init hyp stub
    implementation
  arm64: KVM: Convert __cpu_reset_hyp_mode to using __hyp_reset_vectors
  arm64: KVM: Implement HVC_SOFT_RESTART in the init code
  ARM: KVM: Convert KVM to use HVC_GET_VECTORS
  ARM: Update cpu_v7_reset documentation
  ARM: hyp-stub: Use r1 for the soft-restart address
  ARM: Expose the VA/IDMAP offset
  ARM: hyp-stub: Define a return value for failed stub calls
  ARM: hyp-stub: Implement HVC_RESET_VECTORS stub hypercall
  ARM: KVM: Implement HVC_RESET_VECTORS stub hypercall in the init code
  ARM: KVM: Implement HVC_GET_VECTORS in the init code
  ARM: KVM: Allow the main HYP code to use the init hyp stub
    implementation
  ARM: KVM: Convert __cpu_reset_hyp_mode to using __hyp_reset_vectors
  ARM: KVM: Implement HVC_SOFT_RESTART in the init code
  ARM: KVM: Gracefully handle hyp-stubs being restored from under our
    feet
  arm/arm64: KVM: Use __hyp_reset_vectors() directly
  arm/arm64: KVM: Remove kvm_get_idmap_start
  arm/arm64: KVM: Use HVC_RESET_VECTORS to reinit HYP mode
  ARM: decompressor: Remove __hyp_get_vectors usage
  ARM: hyp-stub/KVM: Kill __hyp_get_vectors
  arm64: hyp-stub/KVM: Kill __hyp_get_vectors
  arm64: hyp-stub: Zero x0 on successful stub handling
  ARM: hyp-stub: Zero r0 on successful stub handling
  arm/arm64: Add hyp-stub API documentation
  KVM: arm/arm64: vgic-v3: De-optimize VMCR save/restore when emulating
    a GICv2
  KVM: arm/arm64: vgic-v3: Fix off-by-one LR access
  ARM: hyp-stub: Fix Thumb-2 compilation
  ARM: KVM: Fix idmap stub entry when running Thumb-2 code

Mark Rutland (15):
  arm64: sysreg: sort by encoding
  arm64: sysreg: add debug system registers
  arm64: sysreg: add performance monitor registers
  arm64: sysreg: subsume GICv3 sysreg definitions
  arm64: sysreg: add physical timer registers
  arm64: sysreg: add register encodings used by KVM
  arm64: sysreg: add Set/Way sys encodings
  KVM: arm64: add SYS_DESC()
  KVM: arm64: Use common debug sysreg definitions
  KVM: arm64: Use common performance monitor sysreg definitions
  KVM: arm64: Use common GICv3 sysreg definitions
  KVM: arm64: Use common physical timer sysreg definitions
  KVM: arm64: use common invariant sysreg definitions
  KVM: arm64: Use common sysreg definitions
  KVM: arm64: Use common Set/Way sys definitions

Russell King (2):
  ARM: hyp-stub: improve ABI
  ARM: soft-reboot into same mode that we entered the kernel

Shih-Wei Li (1):
  KVM: arm/arm64: vgic: Avoid flushing vgic state when there's no
    pending IRQ

Suzuki K Poulose (1):
  kvm: arm/arm64: Rework gpa callback handlers


 Documentation/virtual/kvm/api.txt         |  42 +++
 Documentation/virtual/kvm/arm/hyp-abi.txt |  53 ++++
 arch/arm/boot/compressed/head.S           |  12 +-
 arch/arm/include/asm/kvm_asm.h            |   7 +-
 arch/arm/include/asm/kvm_host.h           |   6 -
 arch/arm/include/asm/kvm_mmu.h            |   1 -
 arch/arm/include/asm/proc-fns.h           |   4 +-
 arch/arm/include/asm/virt.h               |  14 +-
 arch/arm/include/uapi/asm/kvm.h           |   2 +
 arch/arm/kernel/hyp-stub.S                |  43 ++-
 arch/arm/kernel/reboot.c                  |   7 +-
 arch/arm/kvm/arm.c                        |  66 ++--
 arch/arm/kvm/coproc.c                     |  24 +-
 arch/arm/kvm/coproc.h                     |  18 --
 arch/arm/kvm/handle_exit.c                |   8 +
 arch/arm/kvm/hyp/hyp-entry.S              |  28 +-
 arch/arm/kvm/init.S                       |  51 ++-
 arch/arm/kvm/interrupts.S                 |   4 -
 arch/arm/kvm/mmu.c                        |  36 +--
 arch/arm/kvm/psci.c                       |   8 +-
 arch/arm/mm/mmu.c                         |   5 +
 arch/arm/mm/proc-v7.S                     |  15 +-
 arch/arm64/include/asm/arch_gicv3.h       |  81 +----
 arch/arm64/include/asm/kvm_asm.h          |   5 +-
 arch/arm64/include/asm/kvm_host.h         |   7 -
 arch/arm64/include/asm/kvm_mmu.h          |   1 -
 arch/arm64/include/asm/sysreg.h           | 162 +++++++++-
 arch/arm64/include/asm/virt.h             |  31 +-
 arch/arm64/include/uapi/asm/kvm.h         |   2 +
 arch/arm64/kernel/head.S                  |   8 +-
 arch/arm64/kernel/hyp-stub.S              |  38 +--
 arch/arm64/kvm/hyp-init.S                 |  46 ++-
 arch/arm64/kvm/hyp.S                      |   5 +-
 arch/arm64/kvm/hyp/hyp-entry.S            |  43 ++-
 arch/arm64/kvm/sys_regs.c                 | 496 +++++++++++-------------------
 arch/arm64/kvm/sys_regs.h                 |  23 +-
 arch/arm64/kvm/sys_regs_generic_v8.c      |   4 +-
 include/kvm/arm_arch_timer.h              |   2 +
 include/kvm/arm_pmu.h                     |   7 +
 include/kvm/arm_vgic.h                    |   9 +-
 include/uapi/linux/kvm.h                  |   8 +
 virt/kvm/arm/arch_timer.c                 | 124 ++++++--
 virt/kvm/arm/hyp/vgic-v2-sr.c             |  78 +----
 virt/kvm/arm/hyp/vgic-v3-sr.c             |  87 ++----
 virt/kvm/arm/pmu.c                        |  39 ++-
 virt/kvm/arm/vgic/vgic-init.c             | 108 ++++---
 virt/kvm/arm/vgic/vgic-v2.c               |  90 +++---
 virt/kvm/arm/vgic/vgic-v3.c               |  87 +++---
 virt/kvm/arm/vgic/vgic.c                  |  60 +++-
 virt/kvm/arm/vgic/vgic.h                  |   8 +-
 50 files changed, 1175 insertions(+), 938 deletions(-)
 create mode 100644 Documentation/virtual/kvm/arm/hyp-abi.txt



More information about the linux-arm-kernel mailing list