mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 10:41:38 -04:00
kvm: Fix page ageing bugs
1. We were calling clear_flush_young_notify in unmap_one, but we are within an mmu notifier invalidate range scope. The spte exists no more (due to range_start) and the accessed bit info has already been propagated (due to kvm_pfn_set_accessed). Simply call clear_flush_young. 2. We clear_flush_young on a primary MMU PMD, but this may be mapped as a collection of PTEs by the secondary MMU (e.g. during log-dirty). This required expanding the interface of the clear_flush_young mmu notifier, so a lot of code has been trivially touched. 3. In the absence of shadow_accessed_mask (e.g. EPT A bit), we emulate the access bit by blowing the spte. This requires proper synchronizing with MMU notifier consumers, like every other removal of spte's does. Signed-off-by: Andres Lagar-Cavilla <[email protected]> Acked-by: Rik van Riel <[email protected]> Signed-off-by: Paolo Bonzini <[email protected]>
This commit is contained in:
parent
8a9522d2fe
commit
5712846808
16 changed files with 71 additions and 41 deletions
|
|
@ -1355,7 +1355,11 @@ static int try_to_unmap_cluster(unsigned long cursor, unsigned int *mapcount,
|
|||
continue; /* don't unmap */
|
||||
}
|
||||
|
||||
if (ptep_clear_flush_young_notify(vma, address, pte))
|
||||
/*
|
||||
* No need for _notify because we're within an
|
||||
* mmu_notifier_invalidate_range_ {start|end} scope.
|
||||
*/
|
||||
if (ptep_clear_flush_young(vma, address, pte))
|
||||
continue;
|
||||
|
||||
/* Nuke the page table entry. */
|
||||
|
|
|
|||
Loading…
Reference in a new issue