|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 2/3] xen: add hypercall option to temporarily pin a vcpu
>>> On 01.03.16 at 16:55, <george.dunlap@xxxxxxxxxx> wrote:
> On 01/03/16 15:52, George Dunlap wrote:
>> On 01/03/16 09:02, Juergen Gross wrote:
>>> --- a/xen/common/schedule.c
>>> +++ b/xen/common/schedule.c
>>> @@ -271,6 +271,12 @@ int sched_move_domain(struct domain *d, struct cpupool
>>> *c)
>>> struct scheduler *old_ops;
>>> void *old_domdata;
>>>
>>> + for_each_vcpu ( d, v )
>>> + {
>>> + if ( v->affinity_broken )
>>> + return -EBUSY;
>>> + }
>>> +
>>> domdata = SCHED_OP(c->sched, alloc_domdata, d);
>>> if ( domdata == NULL )
>>> return -ENOMEM;
>>> @@ -669,6 +675,14 @@ int cpu_disable_scheduler(unsigned int cpu)
>>> if ( cpumask_empty(&online_affinity) &&
>>> cpumask_test_cpu(cpu, v->cpu_hard_affinity) )
>>> {
>>> + if ( v->affinity_broken )
>>> + {
>>> + /* The vcpu is temporarily pinned, can't move it. */
>>> + vcpu_schedule_unlock_irqrestore(lock, flags, v);
>>> + ret = -EBUSY;
>>> + break;
>>> + }
>>
>> Does this mean that if the user closes the laptop lid while one of these
>> drivers has vcpu0 pinned, that Xen will crash (see
>> xen/arch/x86/smpboot.c:__cpu_disable())? Or is it the OS's job to make
>> sure that all temporary pins are removed before suspending?
>>
>> Also -- have you actually tested the "cpupool move while pinned"
>> functionality to make sure it actually works? There's a weird bit in
>> cpupool_unassign_cpu_helper() where after calling
>> cpu_disable_scheduler(cpu), it unconditionally sets the cpu bit in the
>> cpupool_free_cpus mask, even if it returns an error. That can't be
>> right, even for the existing -EAGAIN case, can it?
>>
>> I see that you have a loop to retry this call several times in the next
>> patch; but what if it fails every time -- what state is the system in?
>>
>> And, in general, what happens if the device driver gets mixed up and
>> forgets to unpin the vcpu? Is the only recourse to reboot your host (or
>> deal with the fact that you can't reconfigure your cpupools)?
>
> (I should say, I think this probably is the best solution to this
> problem; I just want to make sure we think about the error cases carefully.)
I guess in the worst case there could be a utility or xl command
doing the missing unpin in such an emergency?
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |