KVM: MMU: simplify folding of dirty bit into accessed_dirty
PATCH 1/1 KVM: MMU: simplify folding of dirty bit into accessed_dirty
MMU code tries to avoid if()s HW is not able to predict reliably by using bitwise operation to streamline code execution, but in case of a dirty bit folding this gives us nothing since write_fault is checked right before the folding code. Lets just piggyback onto the if() to make code more clear.
Signed-off-by Gleb Natapov <[email protected]>
arch/x86/kvm/paging_tmpl.h +6 -10
@@ -249,16 +249,12 @@ retry_walk:if (!write_fault)protect_clean_gpte (&pte_access, pte); - -/* -* On a write fault, fold the dirty bit into accessed_dirty by shifting it one -* place right. -* -* On a read fault, do nothing. -*/ - shift = write_fault >>ilog2 (PFERR_WRITE_MASK ); - shift *=PT_DIRTY_SHIFT -PT_ACCESSED_SHIFT ; - accessed_dirty &= pte >> shift; +else +/* +* On a write fault, fold the dirty bit into accessed_dirty by +* shifting it one place right. +*/ + accessed_dirty &= pte >> (PT_DIRTY_SHIFT -PT_ACCESSED_SHIFT );if (unlikely (!accessed_dirty)) { ret =FNAME (update_accessed_dirty_bits)(vcpu, mmu, walker, write_fault);
--
Gleb.
Marcelo Tosatti
AppliedQuoted 6 lines · Gleb Natapov
MMU code tries to avoid if()s HW is not able to predict reliably by using bitwise operation to streamline code execution, but in case of a dirty bit folding this gives us nothing since
write_faultis checked right before the folding code. Lets just piggyback onto theif()to make code more clear.Signed-off-by Gleb Natapov <[email protected]>
Applied, thanks.