summaryrefslogtreecommitdiffstats
path: root/arch/arm/kvm/Kconfig
diff options
context:
space:
mode:
authorChristoffer Dall <c.dall@virtualopensystems.com>2013-01-20 18:28:07 -0500
committerChristoffer Dall <c.dall@virtualopensystems.com>2013-01-23 13:29:11 -0500
commitd5d8184d35c990b1324d9b30bcd0e4e8aa08f56d (patch)
tree7559fbc98d2b347f89f926b39715d3bf3cfbb719 /arch/arm/kvm/Kconfig
parent342cd0ab0e6ca3fe7c88a78890352748b8e894a9 (diff)
downloadlinux-d5d8184d35c990b1324d9b30bcd0e4e8aa08f56d.tar.gz
linux-d5d8184d35c990b1324d9b30bcd0e4e8aa08f56d.tar.bz2
linux-d5d8184d35c990b1324d9b30bcd0e4e8aa08f56d.zip
KVM: ARM: Memory virtualization setup
This commit introduces the framework for guest memory management through the use of 2nd stage translation. Each VM has a pointer to a level-1 table (the pgd field in struct kvm_arch) which is used for the 2nd stage translations. Entries are added when handling guest faults (later patch) and the table itself can be allocated and freed through the following functions implemented in arch/arm/kvm/arm_mmu.c: - kvm_alloc_stage2_pgd(struct kvm *kvm); - kvm_free_stage2_pgd(struct kvm *kvm); Each entry in TLBs and caches are tagged with a VMID identifier in addition to ASIDs. The VMIDs are assigned consecutively to VMs in the order that VMs are executed, and caches and tlbs are invalidated when the VMID space has been used to allow for more than 255 simultaenously running guests. The 2nd stage pgd is allocated in kvm_arch_init_vm(). The table is freed in kvm_arch_destroy_vm(). Both functions are called from the main KVM code. We pre-allocate page table memory to be able to synchronize using a spinlock and be called under rcu_read_lock from the MMU notifiers. We steal the mmu_memory_cache implementation from x86 and adapt for our specific usage. We support MMU notifiers (thanks to Marc Zyngier) through kvm_unmap_hva and kvm_set_spte_hva. Finally, define kvm_phys_addr_ioremap() to map a device at a guest IPA, which is used by VGIC support to map the virtual CPU interface registers to the guest. This support is added by Marc Zyngier. Reviewed-by: Will Deacon <will.deacon@arm.com> Reviewed-by: Marcelo Tosatti <mtosatti@redhat.com> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com> Signed-off-by: Christoffer Dall <c.dall@virtualopensystems.com>
Diffstat (limited to 'arch/arm/kvm/Kconfig')
-rw-r--r--arch/arm/kvm/Kconfig1
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/arm/kvm/Kconfig b/arch/arm/kvm/Kconfig
index 4a01b6fbf380..05227cb57a7b 100644
--- a/arch/arm/kvm/Kconfig
+++ b/arch/arm/kvm/Kconfig
@@ -36,6 +36,7 @@ config KVM_ARM_HOST
bool "KVM host support for ARM cpus."
depends on KVM
depends on MMU
+ select MMU_NOTIFIER
---help---
Provides host support for ARM processors.