[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Xen-devel] [PATCH] EPT: Flush running cpus, add mask to flush when scheduled in
- To: Keir Fraser <keir.fraser@xxxxxxxxxxxxx>
- From: George Dunlap <George.Dunlap@xxxxxxxxxxxxx>
- Date: Mon, 21 Sep 2009 19:04:02 +0100
- Cc: Xiaohui Xin <Xiaohui.xin@xxxxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>, Tim Deegan <Tim.Deegan@xxxxxxxxxxxxx>, Paul Durrant <Paul.Durrant@xxxxxxxxxx>, Xin Li <xin.b.li@xxxxxxxxx>, Jun Nakajima <jun.nakajima@xxxxxxxxx>
- Delivery-date: Mon, 21 Sep 2009 11:04:30 -0700
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:sender:received:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type; bh=IZwGM8DthUOUhM4EOUUo1M6hhl7Ul+Jz6xdOPaU5lZ4=; b=tk56rCC6U/Gc/5HPWhKdzP70d6aO7OR2RGGGrZ/4FeJRdBahz1fTJcFke6jVWZXwxX 5WQLb70BxXIDrMg6u58iE3cWYSNMOgDcEPyA90t/apWW2SlJafZTdBUOL1G9gX9r1ySm SsUdv8m7KoiOcHzV/O5PfrVnIRlvxYQwuzKaM=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:date:x-google-sender-auth:message-id:subject :from:to:cc:content-type; b=IZGzpDjgQbtr5vasmb2y623a0trCaZ2iWlXEXOPHTo2c6Dkg15ir/dTqHK3+l5YMaq XABtFJDtLN5uKzywL8++WnD5mk8WSkmdFtJfyP3ZN1oG27ErxVEEjWhI4yXx7aWoqoH2 a3AvWxGFGRs6e4YCBqexlKSm7PBYvW4oWAImg=
- List-id: Xen developer discussion <xen-devel.lists.xensource.com>
The attached patch modifies ept_sync_domain() to make it more
efficient wrt flushing ept translations.
Specifically:
* It synchronously flushes only cpus on which the domain is currently
running (d->domain_dirty_cpumask)
* It introduces a new vmx-specific mask, "ept_needs_flush", set to the
complement of d->domain_dirty_cpumask
* In vmx_ctxt_switch_to(), if the cpu is set in ept_needs_flush, it
flushes ept before running.
Main change I'd like reviewed: in order to avoid a potential race
condition described below, I had to re-order the setting of
domain_dirty_cpumask and the calling of arch.ctxt_switch_to() in
__context_switch().
Potential race without the re-ordering:
p1: change ept
p2: check ept_needs_flush, finds it false, doesn't flush
p1: sets ept_needs_flush
p1: checks domain_dirty, finds p2 not in it
p2: sets domain_dirty
Thus the vcpu on p2 is scheduled without its ept translations being flushed.
I've tested this with a 2-vcpu VM doing a parallel compile and
ballooning, no problems.
Signed-off-by: George Dunlap <george.dunlap@xxxxxxxxxxxxx>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel