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