View | Details | Raw Unified | Return to bug 203923
Collapse All | Expand All

(-)a/arch/x86/kvm/mmu.c (-9 / +22 lines)
Lines 5579-5591 slot_handle_leaf(struct kvm *kvm, struct kvm_memory_slot *memslot, Link Here
5579
				 PT_PAGE_TABLE_LEVEL, lock_flush_tlb);
5579
				 PT_PAGE_TABLE_LEVEL, lock_flush_tlb);
5580
}
5580
}
5581
5581
5582
static void free_mmu_pages(struct kvm_vcpu *vcpu)
5582
static void free_mmu_pages(struct kvm_mmu *mmu)
5583
{
5583
{
5584
	free_page((unsigned long)vcpu->arch.mmu->pae_root);
5584
	free_page((unsigned long)mmu->pae_root);
5585
	free_page((unsigned long)vcpu->arch.mmu->lm_root);
5585
	free_page((unsigned long)mmu->lm_root);
5586
}
5586
}
5587
5587
5588
static int alloc_mmu_pages(struct kvm_vcpu *vcpu)
5588
static int alloc_mmu_pages(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu)
5589
{
5589
{
5590
	struct page *page;
5590
	struct page *page;
5591
	int i;
5591
	int i;
Lines 5602-5610 static int alloc_mmu_pages(struct kvm_vcpu *vcpu) Link Here
5602
	if (!page)
5602
	if (!page)
5603
		return -ENOMEM;
5603
		return -ENOMEM;
5604
5604
5605
	vcpu->arch.mmu->pae_root = page_address(page);
5605
	mmu->pae_root = page_address(page);
5606
	for (i = 0; i < 4; ++i)
5606
	for (i = 0; i < 4; ++i)
5607
		vcpu->arch.mmu->pae_root[i] = INVALID_PAGE;
5607
		mmu->pae_root[i] = INVALID_PAGE;
5608
5608
5609
	return 0;
5609
	return 0;
5610
}
5610
}
Lines 5612-5617 static int alloc_mmu_pages(struct kvm_vcpu *vcpu) Link Here
5612
int kvm_mmu_create(struct kvm_vcpu *vcpu)
5612
int kvm_mmu_create(struct kvm_vcpu *vcpu)
5613
{
5613
{
5614
	uint i;
5614
	uint i;
5615
	int ret;
5615
5616
5616
	vcpu->arch.mmu = &vcpu->arch.root_mmu;
5617
	vcpu->arch.mmu = &vcpu->arch.root_mmu;
5617
	vcpu->arch.walk_mmu = &vcpu->arch.root_mmu;
5618
	vcpu->arch.walk_mmu = &vcpu->arch.root_mmu;
Lines 5629-5635 int kvm_mmu_create(struct kvm_vcpu *vcpu) Link Here
5629
		vcpu->arch.guest_mmu.prev_roots[i] = KVM_MMU_ROOT_INFO_INVALID;
5630
		vcpu->arch.guest_mmu.prev_roots[i] = KVM_MMU_ROOT_INFO_INVALID;
5630
5631
5631
	vcpu->arch.nested_mmu.translate_gpa = translate_nested_gpa;
5632
	vcpu->arch.nested_mmu.translate_gpa = translate_nested_gpa;
5632
	return alloc_mmu_pages(vcpu);
5633
5634
	ret = alloc_mmu_pages(vcpu, &vcpu->arch.guest_mmu);
5635
	if (ret)
5636
		return ret;
5637
5638
	ret = alloc_mmu_pages(vcpu, &vcpu->arch.root_mmu);
5639
	if (ret)
5640
		goto fail_allocate_root;
5641
5642
	return ret;
5643
 fail_allocate_root:
5644
	free_mmu_pages(&vcpu->arch.guest_mmu);
5645
	return ret;
5633
}
5646
}
5634
5647
5635
static void kvm_mmu_invalidate_zap_pages_in_memslot(struct kvm *kvm,
5648
static void kvm_mmu_invalidate_zap_pages_in_memslot(struct kvm *kvm,
Lines 6056-6062 unsigned int kvm_mmu_calculate_default_mmu_pages(struct kvm *kvm) Link Here
6056
void kvm_mmu_destroy(struct kvm_vcpu *vcpu)
6069
void kvm_mmu_destroy(struct kvm_vcpu *vcpu)
6057
{
6070
{
6058
	kvm_mmu_unload(vcpu);
6071
	kvm_mmu_unload(vcpu);
6059
	free_mmu_pages(vcpu);
6072
	free_mmu_pages(&vcpu->arch.root_mmu);
6073
	free_mmu_pages(&vcpu->arch.guest_mmu);
6060
	mmu_free_memory_caches(vcpu);
6074
	mmu_free_memory_caches(vcpu);
6061
}
6075
}
6062
6076
6063
- 

Return to bug 203923