[PULL] KVM/ARM updates for 4.6

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Paolo,

Please find below the KVM/ARM updates for 4.6. As you can tell by the
explosion of your mailbox, we've been fairly busy lately.

Most notable things are PMU support for guests, as well as the v8.1
VHE support. Other than that, the 32bit port went under the knife just
like we did for the 64bit port in 4.5, rewriting most of the assembly
code in C for ease of maintenance as well as code sharing. Finally, a
handful of optimizations that do speed up the world switch.

Please note that:
- the series is on top of 4.5-rc6 in order to avoid ugly conflicts
with the fixes that went in during the 4.5 cycle
- there is still quite a few conflicts with the arm64 tree that should
be resolved just like it has been done in linux-next

Thanks!

	M.

The following changes since commit fc77dbd34c5c99bce46d40a2491937c3bcbd10af:

  Linux 4.5-rc6 (2016-02-28 08:41:20 -0800)

are available in the git repository at:

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

for you to fetch changes up to b40c4892d175874d118860c8282a85ee7b64bcbb:

  arm64: KVM: vgic-v3: Only wipe LRs on vcpu exit (2016-03-09 04:24:16 +0000)

----------------------------------------------------------------
KVM/ARM updates for 4.6

- VHE support so that we can run the kernel at EL2 on ARMv8.1 systems
- PMU support for guests
- 32bit world switch rewritten in C
- Various optimizations to the vgic save/restore code

----------------------------------------------------------------
Marc Zyngier (76):
      arm/arm64: KVM: Add hook for C-based stage2 init
      ARM: KVM: Move the  HYP code to its own section
      ARM: KVM: Remove __kvm_hyp_code_start/__kvm_hyp_code_end
      ARM: KVM: Move VFP registers to a CPU context structure
      ARM: KVM: Move CP15 array into the CPU context structure
      ARM: KVM: Move GP registers into the CPU context structure
      ARM: KVM: Add a HYP-specific header file
      ARM: KVM: Add system register accessor macros
      ARM: KVM: Add TLB invalidation code
      ARM: KVM: Add CP15 save/restore code
      ARM: KVM: Add timer save/restore
      ARM: KVM: Add vgic v2 save/restore
      ARM: KVM: Add VFP save/restore
      ARM: KVM: Add banked registers save/restore
      ARM: KVM: Add guest entry code
      ARM: KVM: Add VFP lazy save/restore handler
      ARM: KVM: Add the new world switch implementation
      ARM: KVM: Add populating of fault data structure
      ARM: KVM: Add HYP mode entry code
      ARM: KVM: Add panic handling code
      ARM: KVM: Change kvm_call_hyp return type to unsigned long
      ARM: KVM: Remove the old world switch
      ARM: KVM: Switch to C-based stage2 init
      ARM: KVM: Remove __weak attributes
      ARM: KVM: Turn CP15 defines to an enum
      ARM: KVM: Cleanup asm-offsets.c
      ARM: KVM: Remove unused hyp_pc field
      ARM: KVM: Remove handling of ARM_EXCEPTION_DATA/PREF_ABORT
      ARM: KVM: Remove __kvm_hyp_exit/__kvm_hyp_exit_end
      arm/arm64: KVM: Handle out-of-RAM cache maintenance as a NOP
      arm64: KVM: Switch to C-based stage2 init
      arm/arm64: Add new is_kernel_in_hyp_mode predicate
      arm64: Allow the arch timer to use the HYP timer
      arm64: Add ARM64_HAS_VIRT_HOST_EXTN feature
      arm64: KVM: Skip HYP setup when already running in HYP
      arm64: KVM: VHE: Patch out use of HVC
      arm64: KVM: VHE: Patch out kern_hyp_va
      arm64: KVM: VHE: Introduce unified system register accessors
      arm64: KVM: VHE: Differenciate host/guest sysreg save/restore
      arm64: KVM: VHE: Split save/restore of registers shared between guest and host
      arm64: KVM: VHE: Use unified system register accessors
      arm64: KVM: VHE: Enable minimal sysreg save/restore
      arm64: KVM: VHE: Make __fpsimd_enabled VHE aware
      arm64: KVM: VHE: Implement VHE activate/deactivate_traps
      arm64: KVM: VHE: Use unified sysreg accessors for timer
      arm64: KVM: VHE: Add fpsimd enabling on guest access
      arm64: KVM: VHE: Add alternative panic handling
      arm64: KVM: Move most of the fault decoding to C
      arm64: perf: Count EL2 events if the kernel is running in HYP
      arm64: hw_breakpoint: Allow EL2 breakpoints if running in HYP
      arm64: VHE: Add support for running Linux in EL2 mode
      arm64: KVM: Move kvm/hyp/hyp.h to include/asm/kvm_hyp.h
      arm64: KVM: Move vgic-v2 and timer save/restore to virt/kvm/arm/hyp
      ARM: KVM: Move kvm/hyp/hyp.h to include/asm/kvm_hyp.h
      ARM: KVM: Use common version of vgic-v2-sr.c
      ARM: KVM: Use common version of timer-sr.c
      arm64: KVM: Move __cpu_init_stage2 after kvm_call_hyp
      arm64: KVM: Add temporary kvm_perf_event.h
      arm64: KVM: Switch the sys_reg search to be a binary search
      ARM: KVM: Properly sort the invariant table
      ARM: KVM: Enforce sorting of all CP tables
      ARM: KVM: Rename struct coproc_reg::is_64 to is_64bit
      ARM: KVM: Switch the CP reg search to be a binary search
      KVM: arm/arm64: timer: Add active state caching
      KVM: arm/arm64: vgic-v2: Avoid accessing GICH registers
      KVM: arm/arm64: vgic-v2: Save maintenance interrupt state only if required
      KVM: arm/arm64: vgic-v2: Move GICH_ELRSR saving to its own function
      KVM: arm/arm64: vgic-v2: Do not save an LR known to be empty
      KVM: arm/arm64: vgic-v2: Reset LRs at boot time
      KVM: arm/arm64: vgic-v2: Only wipe LRs on vcpu exit
      KVM: arm/arm64: vgic-v2: Make GICD_SGIR quicker to hit
      arm64: KVM: vgic-v3: Avoid accessing ICH registers
      arm64: KVM: vgic-v3: Save maintenance interrupt state only if required
      arm64: KVM: vgic-v3: Do not save an LR known to be empty
      arm64: KVM: vgic-v3: Reset LRs at boot time
      arm64: KVM: vgic-v3: Only wipe LRs on vcpu exit

Shannon Zhao (19):
      arm64: KVM: Define PMU data structure for each vcpu
      arm64: KVM: Add access handler for PMCR register
      arm64: KVM: Add access handler for PMSELR register
      arm64: KVM: Add access handler for PMCEID0 and PMCEID1 register
      arm64: KVM: Add access handler for event counter register
      arm64: KVM: Add access handler for PMCNTENSET and PMCNTENCLR register
      arm64: KVM: PMU: Add perf event map and introduce perf event creating function
      arm64: KVM: Add access handler for event type register
      arm64: KVM: Add access handler for PMINTENSET and PMINTENCLR register
      arm64: KVM: Add access handler for PMOVSSET and PMOVSCLR register
      arm64: KVM: Add access handler for PMSWINC register
      arm64: KVM: Add helper to handle PMCR register bits
      arm64: KVM: Add access handler for PMUSERENR register
      arm64: KVM: Add PMU overflow interrupt routing
      arm64: KVM: Reset PMU state when resetting vcpu
      arm64: KVM: Free perf event of PMU when destroying vcpu
      arm64: KVM: Add a new feature bit for PMUv3
      arm64: KVM: Introduce per-vcpu kvm device controls
      arm64: KVM: Add a new vcpu device control group for PMUv3

 Documentation/virtual/kvm/api.txt               |  12 +-
 Documentation/virtual/kvm/devices/vcpu.txt      |  33 ++
 arch/arm/include/asm/kvm_asm.h                  |  41 +-
 arch/arm/include/asm/kvm_emulate.h              |  20 +-
 arch/arm/include/asm/kvm_host.h                 |  80 ++-
 arch/arm/include/asm/kvm_hyp.h                  | 139 +++++
 arch/arm/include/asm/kvm_mmu.h                  |   2 +-
 arch/arm/include/asm/virt.h                     |   9 +
 arch/arm/kernel/asm-offsets.c                   |  40 +-
 arch/arm/kernel/vmlinux.lds.S                   |   6 +
 arch/arm/kvm/Makefile                           |   1 +
 arch/arm/kvm/arm.c                              | 244 ++++++---
 arch/arm/kvm/coproc.c                           | 126 +++--
 arch/arm/kvm/coproc.h                           |  24 +-
 arch/arm/kvm/emulate.c                          |  34 +-
 arch/arm/kvm/guest.c                            |   5 +-
 arch/arm/kvm/handle_exit.c                      |   7 -
 arch/arm/kvm/hyp/Makefile                       |  17 +
 arch/arm/kvm/hyp/banked-sr.c                    |  77 +++
 arch/arm/kvm/hyp/cp15-sr.c                      |  84 +++
 arch/arm/kvm/hyp/entry.S                        | 101 ++++
 arch/arm/kvm/hyp/hyp-entry.S                    | 169 ++++++
 arch/arm/kvm/hyp/s2-setup.c                     |  33 ++
 arch/arm/kvm/hyp/switch.c                       | 232 +++++++++
 arch/arm/kvm/hyp/tlb.c                          |  70 +++
 arch/arm/kvm/hyp/vfp.S                          |  68 +++
 arch/arm/kvm/init.S                             |   8 -
 arch/arm/kvm/interrupts.S                       | 480 +-----------------
 arch/arm/kvm/interrupts_head.S                  | 648 ------------------------
 arch/arm/kvm/mmu.c                              |  23 +
 arch/arm/kvm/reset.c                            |   2 +-
 arch/arm64/Kconfig                              |  13 +
 arch/arm64/include/asm/cpufeature.h             |   6 +-
 arch/arm64/include/asm/hw_breakpoint.h          |  18 +-
 arch/arm64/include/asm/kvm_arm.h                |   6 +-
 arch/arm64/include/asm/kvm_asm.h                |   6 +-
 arch/arm64/include/asm/kvm_emulate.h            |   8 +
 arch/arm64/include/asm/kvm_host.h               |  34 +-
 arch/arm64/include/asm/kvm_hyp.h                | 181 +++++++
 arch/arm64/include/asm/kvm_mmu.h                |  12 +-
 arch/arm64/include/asm/kvm_perf_event.h         |  68 +++
 arch/arm64/include/asm/virt.h                   |  10 +
 arch/arm64/include/uapi/asm/kvm.h               |   6 +
 arch/arm64/kernel/asm-offsets.c                 |   3 -
 arch/arm64/kernel/cpufeature.c                  |  11 +
 arch/arm64/kernel/head.S                        |  28 +-
 arch/arm64/kernel/perf_event.c                  |   6 +-
 arch/arm64/kvm/Kconfig                          |   7 +
 arch/arm64/kvm/Makefile                         |   1 +
 arch/arm64/kvm/guest.c                          |  51 ++
 arch/arm64/kvm/hyp-init.S                       |  15 +-
 arch/arm64/kvm/hyp.S                            |   7 +
 arch/arm64/kvm/hyp/Makefile                     |   8 +-
 arch/arm64/kvm/hyp/debug-sr.c                   |   4 +-
 arch/arm64/kvm/hyp/entry.S                      |   6 +
 arch/arm64/kvm/hyp/hyp-entry.S                  | 109 ++--
 arch/arm64/kvm/hyp/hyp.h                        |  90 ----
 arch/arm64/kvm/hyp/s2-setup.c                   |  43 ++
 arch/arm64/kvm/hyp/switch.c                     | 206 +++++++-
 arch/arm64/kvm/hyp/sysreg-sr.c                  | 149 ++++--
 arch/arm64/kvm/hyp/tlb.c                        |   2 +-
 arch/arm64/kvm/hyp/vgic-v2-sr.c                 |  84 ---
 arch/arm64/kvm/hyp/vgic-v3-sr.c                 | 341 ++++++++-----
 arch/arm64/kvm/reset.c                          |   7 +
 arch/arm64/kvm/sys_regs.c                       | 609 ++++++++++++++++++++--
 drivers/clocksource/arm_arch_timer.c            |  96 ++--
 include/kvm/arm_arch_timer.h                    |   5 +
 include/kvm/arm_pmu.h                           | 110 ++++
 include/kvm/arm_vgic.h                          |   8 +-
 include/uapi/linux/kvm.h                        |   2 +
 virt/kvm/arm/arch_timer.c                       |  31 ++
 {arch/arm64/kvm => virt/kvm/arm}/hyp/timer-sr.c |  14 +-
 virt/kvm/arm/hyp/vgic-v2-sr.c                   | 170 +++++++
 virt/kvm/arm/pmu.c                              | 529 +++++++++++++++++++
 virt/kvm/arm/vgic-v2-emul.c                     |  10 +-
 virt/kvm/arm/vgic-v2.c                          |  12 +
 virt/kvm/arm/vgic-v3.c                          |  11 +-
 77 files changed, 4023 insertions(+), 1965 deletions(-)
 create mode 100644 Documentation/virtual/kvm/devices/vcpu.txt
 create mode 100644 arch/arm/include/asm/kvm_hyp.h
 create mode 100644 arch/arm/kvm/hyp/Makefile
 create mode 100644 arch/arm/kvm/hyp/banked-sr.c
 create mode 100644 arch/arm/kvm/hyp/cp15-sr.c
 create mode 100644 arch/arm/kvm/hyp/entry.S
 create mode 100644 arch/arm/kvm/hyp/hyp-entry.S
 create mode 100644 arch/arm/kvm/hyp/s2-setup.c
 create mode 100644 arch/arm/kvm/hyp/switch.c
 create mode 100644 arch/arm/kvm/hyp/tlb.c
 create mode 100644 arch/arm/kvm/hyp/vfp.S
 delete mode 100644 arch/arm/kvm/interrupts_head.S
 create mode 100644 arch/arm64/include/asm/kvm_hyp.h
 create mode 100644 arch/arm64/include/asm/kvm_perf_event.h
 delete mode 100644 arch/arm64/kvm/hyp/hyp.h
 create mode 100644 arch/arm64/kvm/hyp/s2-setup.c
 delete mode 100644 arch/arm64/kvm/hyp/vgic-v2-sr.c
 create mode 100644 include/kvm/arm_pmu.h
 rename {arch/arm64/kvm => virt/kvm/arm}/hyp/timer-sr.c (86%)
 create mode 100644 virt/kvm/arm/hyp/vgic-v2-sr.c
 create mode 100644 virt/kvm/arm/pmu.c
_______________________________________________
kvmarm mailing list
kvmarm@xxxxxxxxxxxxxxxxxxxxx
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm



[Index of Archives]     [Linux KVM]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux