Re: [PATCH 1/4] KVM: MMU: Introduce drop_spte()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 06/06/2010 04:06 PM, Avi Kivity wrote:
When we call rmap_remove(), we (almost) always immediately follow it by
an __set_spte() to a nonpresent pte.  Since we need to perform the two
operations atomically, to avoid losing the dirty and accessed bits, introduce
a helper drop_spte() and convert all call sites.

The operation is still nonatomic at this point.


@@ -1498,13 +1502,14 @@ static void kvm_mmu_page_unlink_children(struct kvm *kvm,
  				ent&= PT64_BASE_ADDR_MASK;
  				mmu_page_remove_parent_pte(page_header(ent),
  							&pt[i]);
+				pt[i] = shadow_trap_nonpresent_pte;
  			} else {
  				if (is_large_pte(ent))
  					--kvm->stat.lpages;
-				rmap_remove(kvm,&pt[i]);
+				drop_spte(kvm,&pt[i],
+					  shadow_trap_nonpresent_pte);
  			}
  		}
-		pt[i] = shadow_trap_nonpresent_pte;
  	}
  }

Autotest points out that this transformation (and an identical one in zap_pte) does not preserve the semantics; if the outer if () fails, the new code does not update pt[i].

With the original line after the if () retained, autotest is happier.

--
error compiling committee.c: too many arguments to function

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux