2012-11-21 19:33:59 -07:00
|
|
|
#
|
|
|
|
# KVM configuration
|
|
|
|
#
|
|
|
|
source "virt/kvm/Kconfig"
|
|
|
|
|
|
|
|
menuconfig VIRTUALIZATION
|
|
|
|
bool "Virtualization"
|
|
|
|
---help---
|
|
|
|
Say Y here to get to see options for using your Linux host to run
|
|
|
|
other operating systems inside virtual machines (guests).
|
|
|
|
This option alone does not add any kernel code.
|
|
|
|
|
|
|
|
If you say N, all options in this submenu will be skipped and disabled.
|
|
|
|
|
|
|
|
if VIRTUALIZATION
|
|
|
|
|
|
|
|
config KVM
|
|
|
|
tristate "Kernel-based Virtual Machine (KVM) support"
|
|
|
|
depends on HAVE_KVM
|
2016-06-23 10:34:39 -06:00
|
|
|
select EXPORT_UASM
|
2012-11-21 19:33:59 -07:00
|
|
|
select PREEMPT_NOTIFIERS
|
|
|
|
select ANON_INODES
|
2016-12-06 07:50:52 -07:00
|
|
|
select KVM_GENERIC_DIRTYLOG_READ_PROTECT
|
2012-11-21 19:33:59 -07:00
|
|
|
select KVM_MMIO
|
KVM: MIPS/MMU: Implement KVM_CAP_SYNC_MMU
Implement the SYNC_MMU capability for KVM MIPS, allowing changes in the
underlying user host virtual address (HVA) mappings to be promptly
reflected in the corresponding guest physical address (GPA) mappings.
This allows for several features to work with guest RAM which require
mappings to be altered or protected, such as copy-on-write, KSM (Kernel
Samepage Merging), idle page tracking, memory swapping, and guest memory
ballooning.
There are two main aspects of this change, described below.
The KVM MMU notifier architecture callbacks are implemented so we can be
notified of changes in the HVA mappings. These arrange for the guest
physical address (GPA) page tables to be modified and possibly for
derived mappings (GVA page tables and TLBs) to be flushed.
- kvm_unmap_hva[_range]() - These deal with HVA mappings being removed,
for example before a copy-on-write takes place, which requires the
corresponding GPA page table mappings to be removed too.
- kvm_set_spte_hva() - These update a GPA page table entry to match the
new HVA entry, but must be careful to respect KVM specific
configuration such as not dirtying a clean guest page which is dirty
to the host, and write protecting writable pages in read only
memslots (which will soon be supported).
- kvm[_test]_age_hva() - These update GPA page table entries to be old
(invalid) so that access can be tracked, making them young again.
The GPA page fault handling (kvm_mips_map_page) is updated to use
gfn_to_pfn_prot() (which may provide read-only pages), to handle
asynchronous page table invalidation from MMU notifier callbacks, and to
handle more cases in the fast path.
- mmu_notifier_seq is used to detect asynchronous page table
invalidations while we're holding a pfn from gfn_to_pfn_prot()
outside of kvm->mmu_lock, retrying if invalidations have taken place,
e.g. a COW or a KSM page merge.
- The fast path (_kvm_mips_map_page_fast) now handles marking old pages
as young / accessed, and disallowing dirtying of clean pages that
aren't actually writable (e.g. shared pages that should COW, and
read-only memory regions when they are enabled in a future patch).
- Due to the use of MMU notifications we no longer need to keep the
page references after we've updated the GPA page tables.
Signed-off-by: James Hogan <james.hogan@imgtec.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Radim Krčmář" <rkrcmar@redhat.com>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: linux-mips@linux-mips.org
Cc: kvm@vger.kernel.org
2016-12-13 09:32:39 -07:00
|
|
|
select MMU_NOTIFIER
|
2014-12-05 09:24:45 -07:00
|
|
|
select SRCU
|
2012-11-21 19:33:59 -07:00
|
|
|
---help---
|
|
|
|
Support for hosting Guest kernels.
|
2017-03-14 04:15:32 -06:00
|
|
|
|
|
|
|
choice
|
|
|
|
prompt "Virtualization mode"
|
|
|
|
depends on KVM
|
|
|
|
default KVM_MIPS_TE
|
|
|
|
|
|
|
|
config KVM_MIPS_TE
|
|
|
|
bool "Trap & Emulate"
|
|
|
|
---help---
|
|
|
|
Use trap and emulate to virtualize 32-bit guests in user mode. This
|
|
|
|
does not require any special hardware Virtualization support beyond
|
|
|
|
standard MIPS32/64 r2 or later, but it does require the guest kernel
|
|
|
|
to be configured with CONFIG_KVM_GUEST=y so that it resides in the
|
|
|
|
user address segment.
|
|
|
|
|
|
|
|
config KVM_MIPS_VZ
|
|
|
|
bool "MIPS Virtualization (VZ) ASE"
|
|
|
|
---help---
|
|
|
|
Use the MIPS Virtualization (VZ) ASE to virtualize guests. This
|
|
|
|
supports running unmodified guest kernels (with CONFIG_KVM_GUEST=n),
|
|
|
|
but requires hardware support.
|
|
|
|
|
|
|
|
endchoice
|
2012-11-21 19:33:59 -07:00
|
|
|
|
|
|
|
config KVM_MIPS_DYN_TRANS
|
|
|
|
bool "KVM/MIPS: Dynamic binary translation to reduce traps"
|
2017-03-14 04:15:32 -06:00
|
|
|
depends on KVM_MIPS_TE
|
|
|
|
default y
|
2012-11-21 19:33:59 -07:00
|
|
|
---help---
|
|
|
|
When running in Trap & Emulate mode patch privileged
|
|
|
|
instructions to reduce the number of traps.
|
|
|
|
|
|
|
|
If unsure, say Y.
|
|
|
|
|
|
|
|
config KVM_MIPS_DEBUG_COP0_COUNTERS
|
|
|
|
bool "Maintain counters for COP0 accesses"
|
|
|
|
depends on KVM
|
|
|
|
---help---
|
|
|
|
Maintain statistics for Guest COP0 accesses.
|
|
|
|
A histogram of COP0 accesses is printed when the VM is
|
|
|
|
shutdown.
|
|
|
|
|
|
|
|
If unsure, say N.
|
|
|
|
|
|
|
|
source drivers/vhost/Kconfig
|
|
|
|
|
|
|
|
endif # VIRTUALIZATION
|