[PATCH v2] nodedev: transient mdev update on nodeDeviceCreateXML

Boris Fiuczynski fiuczy at linux.ibm.com
Mon Jul 17 08:12:06 UTC 2023


Polite ping

On 7/7/23 11:17 AM, Boris Fiuczynski wrote:
> On 7/6/23 9:40 PM, Jonathon Jongsma wrote:
>> On 6/30/23 6:34 AM, Boris Fiuczynski wrote:
>>> Update the optional mdev attributes by running an mdevctl update on a
>>> new created nodedev object representing an mdev.
>>>
>>> Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2143158
>>> Signed-off-by: Boris Fiuczynski <fiuczy at linux.ibm.com>
>>> ---
>>>   src/node_device/node_device_udev.c | 12 ++++++++++--
>>>   1 file changed, 10 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/src/node_device/node_device_udev.c 
>>> b/src/node_device/node_device_udev.c
>>> index 4c37ec3189..fce4212728 100644
>>> --- a/src/node_device/node_device_udev.c
>>> +++ b/src/node_device/node_device_udev.c
>>> @@ -1757,12 +1757,20 @@ nodeStateCleanup(void)
>>>   static int
>>>   udevHandleOneDevice(struct udev_device *device)
>>>   {
>>> +    virNodeDevCapType dev_cap_type;
>>>       const char *action = udev_device_get_action(device);
>>>       VIR_DEBUG("udev action: '%s': %s", action, 
>>> udev_device_get_syspath(device));
>>> -    if (STREQ(action, "add") || STREQ(action, "change"))
>>> -        return udevAddOneDevice(device);
>>> +    if (STREQ(action, "add") || STREQ(action, "change")) {
>>> +        int ret = udevAddOneDevice(device);
>>> +        if (ret == 0 &&
>>> +            udevGetDeviceType(device, &dev_cap_type) == 0 &&
>>> +            dev_cap_type == VIR_NODE_DEV_CAP_MDEV)
>>> +            if (nodeDeviceUpdateMediatedDevices() < 0)
>>> +                VIR_WARN("mdevctl failed to update mediated devices");
>>> +        return ret;
>>> +    }
>>>       if (STREQ(action, "remove"))
>>>           return udevRemoveOneDevice(device);
>>
>>
>> So, this should work and roughly matches what we've done for other 
>> similar cases. But this is running from within the udev event handler 
>> thread, and theoretically there could already be an mdevctl thread 
>> running concurrently and updating the internal device list. The device 
>> list update functions are thread-safe so I don't think it'll corrupt 
>> anything, but it seems better to do all mdevctl updates from  mdevctl 
>> update thread rather than calling it directly here. The same actually 
>> applies to a couple other existing calls to 
>> nodeDeviceUpdateMediatedDevices(). I'll send a couple patches that 
>> apply on top of yours and refactor things a bit. Let me know what you 
>> think.
>>
>> Jonathon
>>
> 
> LGTM and testing was successful.
> See my direct replies on the patches.
> 
> 


-- 
Mit freundlichen Grüßen/Kind regards
    Boris Fiuczynski

IBM Deutschland Research & Development GmbH
Vorsitzender des Aufsichtsrats: Gregor Pillen
Geschäftsführung: David Faller
Sitz der Gesellschaft: Böblingen
Registergericht: Amtsgericht Stuttgart, HRB 243294



More information about the libvir-list mailing list