> On 28 May 2020, at 20:12, Julien Grall <jul...@xen.org> wrote:
> 
> Hi,
> 
> On 28/05/2020 18:19, Bertrand Marquis wrote:
>>>> +
>>>> +    return 0;
>>>> +}
>>>> +
>>>> int domain_kill(struct domain *d)
>>>> {
>>>>     int rc = 0;
>>>> @@ -727,7 +788,10 @@ int domain_kill(struct domain *d)
>>>>         if ( cpupool_move_domain(d, cpupool0) )
>>>>             return -ERESTART;
>>>>         for_each_vcpu ( d, v )
>>>> +        {
>>>> +            unmap_runstate_area(v, 0);
>>> 
>>> Why is it not appropriate here to hold the lock? It might not be
>>> technically needed, but still should work?
>> In a killing scenario you might stop a core while it was rescheduling.
>> Couldn’t a core be killed using a cross core interrupt ?
> 
> You can't stop a vCPU in the middle of the context switch. The vCPU can only 
> be scheduled out at specific point in Xen.

Ok

> 
>> If this is the case then I would need to do masked interrupt locking 
>> sections to prevent that case ?
> 
> At the beginning of the function domain_kill() the domain will be paused (see 
> domain_pause()). After this steps none of the vCPUs will be running or be 
> scheduled.
> 
> You should technically use the lock everywhere to avoid static analyzer 
> throwing a warning because you access variable with and without the lock. A 
> comment would at least be useful in the code if we go ahead with this.
> 
> As an aside, I think you want the lock to always disable the interrupts 
> otherwise check_lock() (this can be enabled with CONFIG_DEBUG_LOCKS only on 
> x86 though) will shout at you because your lock can be taken in both IRQ-safe 
> and IRQ-unsafe context.

Ok I understand that.
I will take the lock here.

Cheers
Bertrand

Reply via email to