Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 908e7d79 authored by Gleb Natapov's avatar Gleb Natapov Committed by Marcelo Tosatti
Browse files

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: default avatarGleb Natapov <gleb@redhat.com>
Signed-off-by: default avatarMarcelo Tosatti <mtosatti@redhat.com>
parent ee04e0ce
Loading
Loading
Loading
Loading
+6 −10
Original line number Diff line number Diff line
@@ -249,16 +249,12 @@ static int FNAME(walk_addr_generic)(struct guest_walker *walker,

	if (!write_fault)
		protect_clean_gpte(&pte_access, pte);

	else
		/*
	 * On a write fault, fold the dirty bit into accessed_dirty by shifting it one
	 * place right.
	 *
	 * On a read fault, do nothing.
		 * On a write fault, fold the dirty bit into accessed_dirty by
		 * shifting it one place right.
		 */
	shift = write_fault >> ilog2(PFERR_WRITE_MASK);
	shift *= PT_DIRTY_SHIFT - PT_ACCESSED_SHIFT;
	accessed_dirty &= pte >> shift;
		accessed_dirty &= pte >> (PT_DIRTY_SHIFT - PT_ACCESSED_SHIFT);

	if (unlikely(!accessed_dirty)) {
		ret = FNAME(update_accessed_dirty_bits)(vcpu, mmu, walker, write_fault);