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 |
- |
|
|