aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/kvm/mmu.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/kvm/mmu.c')
-rw-r--r--drivers/kvm/mmu.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/kvm/mmu.c b/drivers/kvm/mmu.c
index 2930d7cc7c06..c738fb1cea30 100644
--- a/drivers/kvm/mmu.c
+++ b/drivers/kvm/mmu.c
@@ -568,6 +568,7 @@ static struct kvm_mmu_page *kvm_mmu_get_page(struct kvm_vcpu *vcpu,
568 gva_t gaddr, 568 gva_t gaddr,
569 unsigned level, 569 unsigned level,
570 int metaphysical, 570 int metaphysical,
571 unsigned hugepage_access,
571 u64 *parent_pte) 572 u64 *parent_pte)
572{ 573{
573 union kvm_mmu_page_role role; 574 union kvm_mmu_page_role role;
@@ -581,6 +582,7 @@ static struct kvm_mmu_page *kvm_mmu_get_page(struct kvm_vcpu *vcpu,
581 role.glevels = vcpu->mmu.root_level; 582 role.glevels = vcpu->mmu.root_level;
582 role.level = level; 583 role.level = level;
583 role.metaphysical = metaphysical; 584 role.metaphysical = metaphysical;
585 role.hugepage_access = hugepage_access;
584 if (vcpu->mmu.root_level <= PT32_ROOT_LEVEL) { 586 if (vcpu->mmu.root_level <= PT32_ROOT_LEVEL) {
585 quadrant = gaddr >> (PAGE_SHIFT + (PT64_PT_BITS * level)); 587 quadrant = gaddr >> (PAGE_SHIFT + (PT64_PT_BITS * level));
586 quadrant &= (1 << ((PT32_PT_BITS - PT64_PT_BITS) * level)) - 1; 588 quadrant &= (1 << ((PT32_PT_BITS - PT64_PT_BITS) * level)) - 1;
@@ -780,7 +782,7 @@ static int nonpaging_map(struct kvm_vcpu *vcpu, gva_t v, hpa_t p)
780 >> PAGE_SHIFT; 782 >> PAGE_SHIFT;
781 new_table = kvm_mmu_get_page(vcpu, pseudo_gfn, 783 new_table = kvm_mmu_get_page(vcpu, pseudo_gfn,
782 v, level - 1, 784 v, level - 1,
783 1, &table[index]); 785 1, 0, &table[index]);
784 if (!new_table) { 786 if (!new_table) {
785 pgprintk("nonpaging_map: ENOMEM\n"); 787 pgprintk("nonpaging_map: ENOMEM\n");
786 return -ENOMEM; 788 return -ENOMEM;
@@ -835,7 +837,7 @@ static void mmu_alloc_roots(struct kvm_vcpu *vcpu)
835 837
836 ASSERT(!VALID_PAGE(root)); 838 ASSERT(!VALID_PAGE(root));
837 page = kvm_mmu_get_page(vcpu, root_gfn, 0, 839 page = kvm_mmu_get_page(vcpu, root_gfn, 0,
838 PT64_ROOT_LEVEL, 0, NULL); 840 PT64_ROOT_LEVEL, 0, 0, NULL);
839 root = page->page_hpa; 841 root = page->page_hpa;
840 ++page->root_count; 842 ++page->root_count;
841 vcpu->mmu.root_hpa = root; 843 vcpu->mmu.root_hpa = root;
@@ -852,7 +854,7 @@ static void mmu_alloc_roots(struct kvm_vcpu *vcpu)
852 root_gfn = 0; 854 root_gfn = 0;
853 page = kvm_mmu_get_page(vcpu, root_gfn, i << 30, 855 page = kvm_mmu_get_page(vcpu, root_gfn, i << 30,
854 PT32_ROOT_LEVEL, !is_paging(vcpu), 856 PT32_ROOT_LEVEL, !is_paging(vcpu),
855 NULL); 857 0, NULL);
856 root = page->page_hpa; 858 root = page->page_hpa;
857 ++page->root_count; 859 ++page->root_count;
858 vcpu->mmu.pae_root[i] = root | PT_PRESENT_MASK; 860 vcpu->mmu.pae_root[i] = root | PT_PRESENT_MASK;