On 10/03/2017 04:21 PM, Sergey Dyasli wrote: > Flush IPIs are sent to all cpus in an np2m's dirty_cpumask when > updated. This mask however is far too broad. A pcpu's bit is set in > the cpumask when a vcpu runs on that pcpu, but is only cleared when a > flush happens. This means that the IPI includes the current pcpu of > vcpus that are not currently running, and also includes any pcpu that > has ever had a vcpu use this p2m since the last flush (which in turn > will cause spurious invalidations if a different vcpu is using an np2m). > > Avoid these IPIs by keeping closer track of where an np2m is being used, > and when a vcpu needs to be flushed: > > - On schedule-out, clear v->processor in p2m->dirty_cpumask > - Add a 'generation' counter to the p2m and nestedvcpu structs to > detect changes that would require re-loads on re-entry > - On schedule-in or p2m change: > - Set v->processor in p2m->dirty_cpumask > - flush the vcpu's nested p2m pointer (and update nv->generation) if > the generation changed > > Signed-off-by: Sergey Dyasli <sergey.dya...@citrix.com> > Signed-off-by: George Dunlap <george.dun...@citrix.com> > --- > v2 --> v3: > - current pointer is now calculated only once in np2m_schedule() > - Replaced "shadow p2m" with "np2m" for consistency in commit message
Looks good, thanks! -George _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org https://lists.xen.org/xen-devel