diff options
Diffstat (limited to 'arch/x86/kvm/mmu.c')
-rw-r--r-- | arch/x86/kvm/mmu.c | 21 |
1 files changed, 3 insertions, 18 deletions
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c index 42ba85c62fcb..0242a8a1b2e2 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c | |||
@@ -1461,28 +1461,14 @@ static inline void kvm_mod_used_mmu_pages(struct kvm *kvm, int nr) | |||
1461 | percpu_counter_add(&kvm_total_used_mmu_pages, nr); | 1461 | percpu_counter_add(&kvm_total_used_mmu_pages, nr); |
1462 | } | 1462 | } |
1463 | 1463 | ||
1464 | /* | 1464 | static void kvm_mmu_free_page(struct kvm_mmu_page *sp) |
1465 | * Remove the sp from shadow page cache, after call it, | ||
1466 | * we can not find this sp from the cache, and the shadow | ||
1467 | * page table is still valid. | ||
1468 | * It should be under the protection of mmu lock. | ||
1469 | */ | ||
1470 | static void kvm_mmu_isolate_page(struct kvm_mmu_page *sp) | ||
1471 | { | 1465 | { |
1472 | ASSERT(is_empty_shadow_page(sp->spt)); | 1466 | ASSERT(is_empty_shadow_page(sp->spt)); |
1473 | hlist_del(&sp->hash_link); | 1467 | hlist_del(&sp->hash_link); |
1474 | if (!sp->role.direct) | ||
1475 | free_page((unsigned long)sp->gfns); | ||
1476 | } | ||
1477 | |||
1478 | /* | ||
1479 | * Free the shadow page table and the sp, we can do it | ||
1480 | * out of the protection of mmu lock. | ||
1481 | */ | ||
1482 | static void kvm_mmu_free_page(struct kvm_mmu_page *sp) | ||
1483 | { | ||
1484 | list_del(&sp->link); | 1468 | list_del(&sp->link); |
1485 | free_page((unsigned long)sp->spt); | 1469 | free_page((unsigned long)sp->spt); |
1470 | if (!sp->role.direct) | ||
1471 | free_page((unsigned long)sp->gfns); | ||
1486 | kmem_cache_free(mmu_page_header_cache, sp); | 1472 | kmem_cache_free(mmu_page_header_cache, sp); |
1487 | } | 1473 | } |
1488 | 1474 | ||
@@ -2126,7 +2112,6 @@ static void kvm_mmu_commit_zap_page(struct kvm *kvm, | |||
2126 | do { | 2112 | do { |
2127 | sp = list_first_entry(invalid_list, struct kvm_mmu_page, link); | 2113 | sp = list_first_entry(invalid_list, struct kvm_mmu_page, link); |
2128 | WARN_ON(!sp->role.invalid || sp->root_count); | 2114 | WARN_ON(!sp->role.invalid || sp->root_count); |
2129 | kvm_mmu_isolate_page(sp); | ||
2130 | kvm_mmu_free_page(sp); | 2115 | kvm_mmu_free_page(sp); |
2131 | } while (!list_empty(invalid_list)); | 2116 | } while (!list_empty(invalid_list)); |
2132 | } | 2117 | } |