Last active
February 9, 2023 14:27
-
-
Save Tptogiar/4f2b48e101507599115f794d153ef87e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
static bool __kvm_mmu_prepare_zap_page(struct kvm *kvm, | |
struct kvm_mmu_page *sp, | |
struct list_head *invalid_list, | |
int *nr_zapped) | |
{ | |
bool list_unstable; | |
lockdep_assert_held_write(&kvm->mmu_lock); | |
trace_kvm_mmu_prepare_zap_page(sp); | |
++kvm->stat.mmu_shadow_zapped; | |
*nr_zapped = mmu_zap_unsync_children(kvm, sp, invalid_list); | |
*nr_zapped += kvm_mmu_page_unlink_children(kvm, sp, invalid_list); | |
kvm_mmu_unlink_parents(kvm, sp); | |
/* Zapping children means active_mmu_pages has become unstable. */ | |
list_unstable = *nr_zapped; | |
if (!sp->role.invalid && !sp->role.direct) | |
unaccount_shadowed(kvm, sp); | |
if (sp->unsync) | |
kvm_unlink_unsync_page(kvm, sp); | |
if (!sp->root_count) { | |
/* Count self */ | |
(*nr_zapped)++; | |
/* | |
* Already invalid pages (previously active roots) are not on | |
* the active page list. See list_del() in the "else" case of | |
* !sp->root_count. | |
*/ | |
if (sp->role.invalid) | |
list_add(&sp->link, invalid_list); | |
else | |
list_move(&sp->link, invalid_list); | |
kvm_mod_used_mmu_pages(kvm, -1); | |
} else { | |
/* | |
* Remove the active root from the active page list, the root | |
* will be explicitly freed when the root_count hits zero. | |
*/ | |
list_del(&sp->link); | |
/* | |
* Obsolete pages cannot be used on any vCPUs, see the comment | |
* in kvm_mmu_zap_all_fast(). Note, is_obsolete_sp() also | |
* treats invalid shadow pages as being obsolete. | |
*/ | |
if (!is_obsolete_sp(kvm, sp)) | |
kvm_reload_remote_mmus(kvm); | |
} | |
if (sp->lpage_disallowed) | |
unaccount_huge_nx_page(kvm, sp); | |
sp->role.invalid = 1; | |
return list_unstable; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment