[libvirt] [PATCH 2/4] xen: Fix logic bug in xenDaemon*DeviceFlags

Eric Blake eblake at redhat.com
Wed Oct 6 14:17:51 UTC 2010


On 10/04/2010 06:01 AM, Jiri Denemark wrote:
>> It seems like we need a 12-way table (in fact, this is pretty much what
>> I ended up resorting to with my vcpus stuff).  Here's my shot at it,
>> from reading the comments (but not actually testing it); once we fix
>> this attempt to an actual table, then I can answer whether the code
>> matches the table.
>>
>>                     _LIVE     _CONFIG      _LIVE|_CONFIG
>> xen 2,running     good      unsupported  unsupported
>> xen 2,inactive    error     good         error or silently good
>> xen 3,running     good      good         good
>> xen 3,inactive    error     good         error or silently good
>
> Yeah, this is probably a good idea however we shouldn't forget about _CURRENT
> which is an equivalent of either _CONFIG or _LIVE depending on current state
> of the guest.

LI: _LIVE
CO: _CONFIG
CU: _CURRENT = active ? _LIVE : _CONFIG
g: good
i: OPERATION_INVALID (in the wrong state)
u: CONFIG_UNSUPPORTED (never possible)

                  LI  CO  LI|CO  CU  LI|CU  CO|CU  LI|CO|CU
xen 2,running    g   u   u      g   g      u      u
xen 2,inactive   i   u   u      i   i      u      u
xen 3,running    u   u   g      u   u      g      g
xen 3,inactive   u   u   i      u   i      u      i

The logic might be rendered easier by starting the function with:

if (!flags)
     return -1;
if (flags & _CURRENT)
     flags |= running ? _LIVE : _CONFIG;

so that the rest of the function need only operate on _LIVE and _CONFIG 
(reducing 2^3==8 flag combinations down to 3).

But, as written, and with your extra context explanations, ACK to patch 2.

-- 
Eric Blake   eblake at redhat.com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org




More information about the libvir-list mailing list