KVM: MMU: Separate the code for unlinking a shadow page from its parents
Place into own function, in preparation for further cleanups. Signed-off-by: Avi Kivity <avi@qumranet.com>
This commit is contained in:
parent
867767a365
commit
31aa2b44af
@ -991,11 +991,10 @@ static void kvm_mmu_reset_last_pte_updated(struct kvm *kvm)
|
|||||||
kvm->vcpus[i]->arch.last_pte_updated = NULL;
|
kvm->vcpus[i]->arch.last_pte_updated = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void kvm_mmu_zap_page(struct kvm *kvm, struct kvm_mmu_page *sp)
|
static void kvm_mmu_unlink_parents(struct kvm *kvm, struct kvm_mmu_page *sp)
|
||||||
{
|
{
|
||||||
u64 *parent_pte;
|
u64 *parent_pte;
|
||||||
|
|
||||||
++kvm->stat.mmu_shadow_zapped;
|
|
||||||
while (sp->multimapped || sp->parent_pte) {
|
while (sp->multimapped || sp->parent_pte) {
|
||||||
if (!sp->multimapped)
|
if (!sp->multimapped)
|
||||||
parent_pte = sp->parent_pte;
|
parent_pte = sp->parent_pte;
|
||||||
@ -1010,7 +1009,13 @@ static void kvm_mmu_zap_page(struct kvm *kvm, struct kvm_mmu_page *sp)
|
|||||||
kvm_mmu_put_page(sp, parent_pte);
|
kvm_mmu_put_page(sp, parent_pte);
|
||||||
set_shadow_pte(parent_pte, shadow_trap_nonpresent_pte);
|
set_shadow_pte(parent_pte, shadow_trap_nonpresent_pte);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void kvm_mmu_zap_page(struct kvm *kvm, struct kvm_mmu_page *sp)
|
||||||
|
{
|
||||||
|
++kvm->stat.mmu_shadow_zapped;
|
||||||
kvm_mmu_page_unlink_children(kvm, sp);
|
kvm_mmu_page_unlink_children(kvm, sp);
|
||||||
|
kvm_mmu_unlink_parents(kvm, sp);
|
||||||
if (!sp->root_count) {
|
if (!sp->root_count) {
|
||||||
if (!sp->role.metaphysical && !sp->role.invalid)
|
if (!sp->role.metaphysical && !sp->role.invalid)
|
||||||
unaccount_shadowed(kvm, sp->gfn);
|
unaccount_shadowed(kvm, sp->gfn);
|
||||||
|
Loading…
Reference in New Issue
Block a user