>>> On 20.11.15 at 14:41, <paul.durr...@citrix.com> wrote:
>> From: Jan Beulich [mailto:jbeul...@suse.com]
>> Sent: 20 November 2015 12:27
>> While you can't "and" that mask into input_params.vcpu_mask,
>> wouldn't using it allow you to avoid the scratch pCPU mask
>> variable?
> 
> I'm not sure. After flushing the ASIDs I guess I could start with the 
> domain_dirty_cpumask and, remove non-running vcpus from it, and then use it 
> as 
> the flush mask. If I do that, I suppose I ought to reset the 
> vcpu_dirty_vcpumask values too. Something like...
> 
>         for_each_vcpu ( currd, v )
>         {
>             if ( v->vcpu_id >= (sizeof(input_params.vcpu_mask) * 8) )
>                 break;
> 
>             if ( !((input_params.vcpu_mask >> v->vcpu_id) & 1) )
>                 continue;
> 
>             hvm_asid_flush_vcpu(v);
>             cpumask_clear(v->vcpu_dirty_vcpumask);
>             
>             if ( v->is_running )
>                 cpumask_set_cpu(v->processor, v->vcpu_dirty_vcpumask);
>             else
>                 cpumask_clear_cpu(v->processor, d->domain_dirty_vcpumask);
>         }
> 
>         if ( !cpumask_empty(d->domain_dirty_vcpumask) )
>             flush_tlb_mask(d->domain_dirty_vcpumask);

For one I don't think you should be modifying either of the two
dirty masks here - nothing outside of context switch code does or
should: Both really ought to be redundant with what context
switch code already does, plus the "clear" would even have the
potential of suppressing further flushes if you race with context
sitch code. And if you wanted to subtract the vCPU-s you did the
ASID flush for from d->domain_dirty_cpumask, you'd again need
a temporary mask, i.e. not much (if anything) won compared to v5.

Jan


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

Reply via email to