Re: [GIT PULL] KVM: MIPS: GVA/GPA page tables, dirty logging, SYNC_MMU etc

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

 




On 03/02/2017 17:06, James Hogan wrote:
> Hi Paolo, Radim,
> 
> The following changes since commit 0b4c208d443ba2af82b4c70f99ca8df31e9a0020:
> 
>   Revert "KVM: nested VMX: disable perf cpuid reporting" (2017-01-20 22:18:55 +0100)
> 
> are available in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/jhogan/kvm-mips.git tags/kvm_mips_4.11_1
> 
> for you to fetch changes up to 12ed1faece3f141c2604b5b3a8377ba71d23ec9d:
> 
>   KVM: MIPS: Allow multiple VCPUs to be created (2017-02-03 15:21:34 +0000)
> 
> It is already included in linux-next (though I did tweak one of the
> commit messages just now to remove a patch changelog I had accidentally
> left in, with no changes to the code).
> 
> It includes a merge of my mips branch in the same repo, which is based
> on v4.10-rc2 and contains the general MIPS changes in the GVA/GPA page
> tables series, for Ralf to also merge if he likes.
> 
> Cheers
> James
> 
> ----------------------------------------------------------------
> KVM: MIPS: GVA/GPA page tables, dirty logging, SYNC_MMU etc
> 
> Numerous MIPS KVM fixes, improvements, and features for 4.11, many of
> which continue to pave the way for VZ support, the most interesting of
> which are:
> 
>  - Add GVA->HPA page tables for T&E, to cache GVA mappings.
>  - Generate fast-path TLB refill exception handler which loads host TLB
>    entries from GVA page table, avoiding repeated guest memory
>    translation and guest TLB lookups.
>  - Use uaccess macros when T&E needs to access guest memory, which with
>    GVA page tables and the Linux TLB refill handler improves robustness
>    against TLB faults and fixes EVA hosts.
>  - Use BadInstr/BadInstrP registers when available to obtain instruction
>    encodings after a synchronous trap.
>  - Add GPA->HPA page tables to replace the inflexible linear array,
>    allowing for multiple sparsely arranged memory regions.
>  - Properly implement dirty page logging.
>  - Add KVM_CAP_SYNC_MMU support so that changes in GPA mappings become
>    effective in guests even if they are already running, allowing for
>    copy-on-write, KSM, idle page tracking, swapping, and guest memory
>    ballooning.
>  - Add KVM_CAP_READONLY_MEM support, so writes to specified memory
>    regions are treated as MMIO.
>  - Implement proper CP0_EBase support in T&E.
>  - Expose a few more missing CP0 registers to userland.
>  - Add KVM_CAP_NR_VCPUS and KVM_CAP_MAX_VCPUS support, and allow up to 8
>    VCPUs to be created in a VM.
>  - Various cleanups and dropping of dead and duplicated code.
> 
> ----------------------------------------------------------------
> James Hogan (63):
>       MIPS: Move pgd_alloc() out of header
>       MIPS: Export pgd/pmd symbols for KVM
>       MIPS: uasm: Add include guards in asm/uasm.h
>       MIPS: Export some tlbex internals for KVM to use
>       MIPS: Add return errors to protected cache ops
>       Merge MIPS prerequisites
>       KVM: MIPS: Drop partial KVM_NMI implementation
>       KVM: MIPS/MMU: Simplify ASID restoration
>       KVM: MIPS: Convert get/set_regs -> vcpu_load/put
>       KVM: MIPS/MMU: Move preempt/ASID handling to implementation
>       KVM: MIPS: Remove duplicated ASIDs from vcpu
>       KVM: MIPS: Add vcpu_run() & vcpu_reenter() callbacks
>       KVM: MIPS/T&E: Restore host asid on return to host
>       KVM: MIPS/T&E: active_mm = init_mm in guest context
>       KVM: MIPS: Wire up vcpu uninit
>       KVM: MIPS/T&E: Allocate GVA -> HPA page tables
>       KVM: MIPS/T&E: Activate GVA page tables in guest context
>       KVM: MIPS: Support NetLogic KScratch registers
>       KVM: MIPS: Add fast path TLB refill handler
>       KVM: MIPS/TLB: Fix off-by-one in TLB invalidate
>       KVM: MIPS/TLB: Generalise host TLB invalidate to kernel ASID
>       KVM: MIPS/MMU: Invalidate GVA PTs on ASID changes
>       KVM: MIPS/MMU: Invalidate stale GVA PTEs on TLBW
>       KVM: MIPS/MMU: Convert KSeg0 faults to page tables
>       KVM: MIPS/MMU: Convert TLB mapped faults to page tables
>       KVM: MIPS/MMU: Convert commpage fault handling to page tables
>       KVM: MIPS: Drop vm_init() callback
>       KVM: MIPS: Use uaccess to read/modify guest instructions
>       KVM: MIPS/Emulate: Fix CACHE emulation for EVA hosts
>       KVM: MIPS/TLB: Drop kvm_local_flush_tlb_all()
>       KVM: MIPS/Emulate: Drop redundant TLB flushes on exceptions
>       KVM: MIPS/MMU: Drop kvm_get_new_mmu_context()
>       KVM: MIPS/T&E: Don't treat code fetch faults as MMIO
>       KVM: MIPS: Improve kvm_get_inst() error return
>       KVM: MIPS: Use CP0_BadInstr[P] for emulation
>       KVM: MIPS/MMU: Convert guest physical map to page table
>       KVM: MIPS: Update vcpu->mode and vcpu->cpu
>       KVM: MIPS/T&E: Handle TLB invalidation requests
>       KVM: MIPS/T&E: Reduce stale ASID checks
>       KVM: MIPS/T&E: Add lockless GVA access helpers
>       KVM: MIPS/T&E: Use lockless GVA helpers for dyntrans
>       KVM: MIPS/MMU: Use lockless GVA helpers for get_inst()
>       KVM: MIPS/Emulate: Use lockless GVA helpers for cache emulation
>       KVM: MIPS: Implement kvm_arch_flush_shadow_all/memslot
>       KVM: MIPS/T&E: Ignore user writes to CP0_Config7
>       KVM: MIPS: Pass type of fault down to kvm_mips_map_page()
>       KVM: MIPS/T&E: Abstract bad access handling
>       KVM: MIPS/T&E: Treat unhandled guest KSeg0 as MMIO
>       KVM: MIPS/T&E: Handle read only GPA in TLB mod
>       KVM: MIPS/MMU: Add GPA PT mkclean helper
>       KVM: MIPS/MMU: Use generic dirty log & protect helper
>       KVM: MIPS: Clean & flush on dirty page logging enable
>       KVM: MIPS/MMU: Handle dirty logging on GPA faults
>       KVM: MIPS/MMU: Pass GPA PTE bits to KSeg0 GVA PTEs
>       KVM: MIPS/MMU: Pass GPA PTE bits to mapped GVA PTEs
>       KVM: MIPS/MMU: Implement KVM_CAP_SYNC_MMU
>       KVM: MIPS: Claim KVM_CAP_READONLY_MEM support
>       KVM: MIPS/T&E: Move CP0 register access into T&E
>       KVM: MIPS/T&E: Implement CP0_EBase register
>       KVM: MIPS/T&E: Default to reset vector
>       KVM: MIPS/T&E: Expose CP0_EntryLo0/1 registers
>       KVM: MIPS/T&E: Expose read-only CP0_IntCtl register
>       KVM: MIPS: Allow multiple VCPUs to be created
> 
> Markus Elfring (1):
>       MIPS: KVM: Return directly after a failed copy_from_user() in kvm_arch_vcpu_ioctl()
> 
>  Documentation/virtual/kvm/api.txt   |   10 +
>  arch/mips/include/asm/kvm_host.h    |  183 +++--
>  arch/mips/include/asm/mmu_context.h |    9 +-
>  arch/mips/include/asm/pgalloc.h     |   16 +-
>  arch/mips/include/asm/r4kcache.h    |   55 +-
>  arch/mips/include/asm/tlbex.h       |   26 +
>  arch/mips/include/asm/uasm.h        |    5 +
>  arch/mips/include/uapi/asm/kvm.h    |    2 +
>  arch/mips/kvm/Kconfig               |    2 +
>  arch/mips/kvm/dyntrans.c            |   50 +-
>  arch/mips/kvm/emulate.c             |  432 ++++++------
>  arch/mips/kvm/entry.c               |  155 +++-
>  arch/mips/kvm/interrupt.c           |    5 +-
>  arch/mips/kvm/mips.c                |  496 ++++---------
>  arch/mips/kvm/mmu.c                 | 1335 ++++++++++++++++++++++++++++-------
>  arch/mips/kvm/tlb.c                 |  299 ++------
>  arch/mips/kvm/trap_emul.c           |  740 ++++++++++++++++---
>  arch/mips/mm/Makefile               |    2 +-
>  arch/mips/mm/init.c                 |    1 +
>  arch/mips/mm/pgtable-64.c           |    2 +
>  arch/mips/mm/pgtable.c              |   25 +
>  arch/mips/mm/tlbex.c                |   38 +-
>  22 files changed, 2611 insertions(+), 1277 deletions(-)
>  create mode 100644 arch/mips/include/asm/tlbex.h
>  create mode 100644 arch/mips/mm/pgtable.c
> 

Pulled, thanks.

Paolo

Attachment: signature.asc
Description: OpenPGP digital signature


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux