[libvirt] [PATCH v5 02/10] qemu: Use domain iothreadids to IOThread's 'thread_id'

John Ferlan jferlan at redhat.com
Mon Apr 27 15:25:15 UTC 2015


...

>>>> --- a/src/qemu/qemu_process.c
>>>> +++ b/src/qemu/qemu_process.c
>>>> @@ -2267,12 +2267,16 @@ qemuProcessDetectIOThreadPIDs(virQEMUDriverPtr driver,
>>>>          goto cleanup;
>>>>      }
>>>
>>> A few lines prior here is the check that the expected thread count
>>> equals to the actual thread count. For some reason a few lines before
>>> returns success if 0 threads are returned by the monitor. The two checks
>>> should be inverted so that it makes sense.
>>>
>>
>> If there are no threads, then it's not a failure, thus change ret to be
>> 0. Again, this is something that's not within the scope of this set of
>> changes and I believe if necessary could be a followup patch.
>>
>> I'm not clear on the value of changing the order of the checks.
> 
> The problem is that if there are no iothreads reported by qemu, but we
> did request some then it IS failure.
> 

But that's an issue not related to iothreadid's per se - it's a more
common general issue that should be a follow-up patch then I think.
That is not introduced by this set of changes.

Other issues were addressed changed - do you need to see the diffs or an
updated patch with the diffs already squashed in?

John

>>
>> Check failure first - return failure
>>
>> Check possible successes next.
>>
>>>>  
>>>> -    if (VIR_ALLOC_N(priv->iothreadpids, niothreads) < 0)
>>>> -        goto cleanup;
>>>> -    priv->niothreadpids = niothreads;
>>>> +    for (i = 0; i < vm->def->niothreadids; i++) {
>>>> +        unsigned int iothread_id;
>>>>  
>>>> -    for (i = 0; i < priv->niothreadpids; i++)
>>>> -        priv->iothreadpids[i] = iothreads[i]->thread_id;
>>>> +        if (qemuDomainParseIOThreadAlias(iothreads[i]->name,
>>>> +                                         &iothread_id) < 0)
>>>> +            goto cleanup;
>>>> +
>>>> +        vm->def->iothreadids[i]->thread_id = iothreads[i]->thread_id;
>>>> +        vm->def->iothreadids[i]->iothread_id = iothread_id;
>>>
>>> This construct is wrong since it expects that the order the devices are
>>> stored in libvirt is the same as in the qemu monitor reply. You need to
>>> iterate the list of threads from the monitor and lookup the
>>> corresponding info for it.
>>
>> Ahh... Right, but we are getting the iothread_id's here from the monitor
>> and filling in an array - the call to virDomainIOThreadIDFind had better
>> not fail ;-) - if does though the domain disappears, so which is worse?
>>
>> So ...
>>
>>     virDomainIOThreadIDDefPtr iothrid;
>> ...
>>
>>     if (!(iothrid = virDomainIOThreadIDFind(vm->def, iothread_id))) {
>>         virReportError(VIR_ERR_INVALID_ARG,
>>                        _("iothread %d not found"), iothread_id);
>>     }
>>     iothrid->thread_id = iothreads[i]->thread_id;
> 
> Yep.
> 
>>
>>>
>>> Btw, it would be much easier if the monitor code would parse the IDs
>>> since you wouldn't need to parse them here (I've already suggested this
>>> once).
>>>
>>
>> Again, design/structure change - can we let this be a followup patch?
> 
> Yes this can be a separate change. I only find it less wasteful since
> every single caller needs to parse the IDs anyways.
> 
>>
>>>> +    }
>>>>  
>>>>      ret = 0;
>>>>  
>>>
>>> ...
>>>
> 
> Peter
> 




More information about the libvir-list mailing list