2017-04-06 09:27+0100, James Hogan: > Hi Paolo, Radim, > > Here are the main KVM MIPS changes for 4.12, mainly to add VZ support. > Please consider pulling. Pulled, thanks. The capability numbers 137-139 are now set in stone. > Thanks > James > > 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/jhogan/kvm-mips.git tags/kvm_mips_4.12_1 > > for you to fetch changes up to dc44abd6aad22411f7f9890e39fd4753dabf0d03: > > KVM: MIPS/Emulate: Properly implement TLBR for T&E (2017-03-28 16:31:37 +0100) > > ---------------------------------------------------------------- > KVM: MIPS: VZ support, Octeon III, and TLBR > > Add basic support for the MIPS Virtualization Module (generally known as > MIPS VZ) in KVM. We primarily support the ImgTec P5600, P6600, I6400, > and Cavium Octeon III cores so far. Support is included for the > following VZ / guest hardware features: > - MIPS32 and MIPS64, r5 (VZ requires r5 or later) and r6 > - TLBs with GuestID (IMG cores) or Root ASID Dealias (Octeon III) > - Shared physical root/guest TLB (IMG cores) > - FPU / MSA > - Cop0 timer (up to 1GHz for now due to soft timer limit) > - Segmentation control (EVA) > - Hardware page table walker (HTW) both for root and guest TLB > > Also included is a proper implementation of the TLBR instruction for the > trap & emulate MIPS KVM implementation. > > Preliminary MIPS architecture changes are applied directly with Ralf's > ack. > > ---------------------------------------------------------------- > James Hogan (42): > MIPS: Add defs & probing of UFR > MIPS: Separate MAAR V bit into VL and VH for XPA > MIPS: Probe guest CP0_UserLocal > MIPS: Probe guest MVH > MIPS: Add some missing guest CP0 accessors & defs > MIPS: asm/tlb.h: Add UNIQUE_GUEST_ENTRYHI() macro > KVM: MIPS: Implement HYPCALL emulation > KVM: MIPS/Emulate: De-duplicate MMIO emulation > KVM: MIPS/Emulate: Implement 64-bit MMIO emulation > KVM: MIPS: Update kvm_lose_fpu() for VZ > KVM: MIPS: Extend counters & events for VZ GExcCodes > KVM: MIPS: Add VZ & TE capabilities > KVM: MIPS: Add 64BIT capability > KVM: MIPS: Init timer frequency from callback > KVM: MIPS: Add callback to check extension > KVM: MIPS: Add hardware_{enable,disable} callback > KVM: MIPS: Add guest exit exception callback > KVM: MIPS: Abstract guest CP0 register access for VZ > KVM: MIPS/Entry: Update entry code to support VZ > KVM: MIPS/TLB: Add VZ TLB management > KVM: MIPS/Emulate: Update CP0_Compare emulation for VZ > KVM: MIPS/Emulate: Drop CACHE emulation for VZ > KVM: MIPS: Update exit handler for VZ > KVM: MIPS: Implement VZ support > KVM: MIPS: Add VZ support to build system > KVM: MIPS/VZ: Support guest CP0_BadInstr[P] > KVM: MIPS/VZ: Support guest CP0_[X]ContextConfig > KVM: MIPS/VZ: Support guest segmentation control > KVM: MIPS/VZ: Support guest hardware page table walker > KVM: MIPS/VZ: Support guest load-linked bit > KVM: MIPS/VZ: Emulate MAARs when necessary > KVM: MIPS/VZ: Support hardware guest timer > KVM: MIPS/VZ: Trace guest mode changes > MIPS: Add Octeon III register accessors & definitions > KVM: MIPS/Emulate: Adapt T&E CACHE emulation for Octeon > KVM: MIPS/TLB: Handle virtually tagged icaches > KVM: MIPS/T&E: Report correct dcache line size > KVM: MIPS/VZ: VZ hardware setup for Octeon III > KVM: MIPS/VZ: Emulate hit CACHE ops for Octeon III > KVM: MIPS/VZ: Handle Octeon III guest.PRid register > MIPS: Allow KVM to be enabled on Octeon CPUs > KVM: MIPS/Emulate: Properly implement TLBR for T&E > > Documentation/virtual/kvm/api.txt | 90 +- > Documentation/virtual/kvm/hypercalls.txt | 5 + > arch/mips/Kconfig | 1 + > arch/mips/include/asm/cpu-features.h | 10 + > arch/mips/include/asm/cpu-info.h | 2 + > arch/mips/include/asm/cpu.h | 1 + > arch/mips/include/asm/kvm_host.h | 467 ++++- > arch/mips/include/asm/maar.h | 10 +- > arch/mips/include/asm/mipsregs.h | 62 +- > arch/mips/include/asm/tlb.h | 6 +- > arch/mips/include/uapi/asm/inst.h | 2 +- > arch/mips/include/uapi/asm/kvm.h | 20 +- > arch/mips/kernel/cpu-probe.c | 13 +- > arch/mips/kernel/time.c | 1 + > arch/mips/kvm/Kconfig | 27 +- > arch/mips/kvm/Makefile | 9 +- > arch/mips/kvm/emulate.c | 500 +++-- > arch/mips/kvm/entry.c | 132 +- > arch/mips/kvm/hypcall.c | 53 + > arch/mips/kvm/interrupt.h | 5 + > arch/mips/kvm/mips.c | 120 +- > arch/mips/kvm/mmu.c | 20 + > arch/mips/kvm/tlb.c | 441 ++++ > arch/mips/kvm/trace.h | 74 +- > arch/mips/kvm/trap_emul.c | 73 +- > arch/mips/kvm/vz.c | 3223 ++++++++++++++++++++++++++++++ > arch/mips/mm/cache.c | 1 + > arch/mips/mm/init.c | 2 +- > include/uapi/linux/kvm.h | 7 + > 29 files changed, 5010 insertions(+), 367 deletions(-) > create mode 100644 arch/mips/kvm/hypcall.c > create mode 100644 arch/mips/kvm/vz.c