|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] Re: [PATCH] EPT: Flush running cpus, add mask to flush when scheduled in
>--- a/xen/arch/x86/hvm/vmx/vmx.c Tue Sep 15 10:08:12 2009 +0100
>+++ b/xen/arch/x86/hvm/vmx/vmx.c Mon Sep 21 18:52:26 2009 +0100
>...
>@@ -1219,7 +1226,11 @@
> if ( d->arch.hvm_domain.hap_enabled && d->vcpu && d->vcpu[0] )
> {
> ASSERT(local_irq_is_enabled());
>- on_each_cpu(__ept_sync_domain, d, 1);
>+ /* Mark cpus that may need flushing on next schedule */
>+ cpus_complement(d->arch.hvm_domain.vmx.ept_needs_flush,
>+ d->domain_dirty_cpumask);
>+ /* And flush on actively-running processors */
>+ on_selected_cpus(&d->domain_dirty_cpumask, __ept_sync_domain, d, 1);
> }
> }
>
Passing a pointer to the global cpu mask looks racy here: What if a CPU
disappears from domain_dirty_cpumask under your feet?
Also, merely using cpus_complement() here seem inefficient: It should be
possible to accumulate the flush activity, and avoid re-flushing on a CPU
which e.g. got flushed on the second from the last run through this code
(and not dirtied afterwards). I.e. I'd think there should be cpus_andnot()
here, and setting of the bits as CPUs get dirtied.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |