[libvirt] [PATCH v4 4/6] nodedev: Introduce the mdev capability to a PCI parent device
John Ferlan
jferlan at redhat.com
Thu May 18 10:48:48 UTC 2017
[...]
>>> +static int
>>> +udevFillMdevType(struct udev_device *device,
>>> + const char *dir,
>>> + virNodeDevCapMdevTypePtr type)
>>> +{
>>> + int ret = -1;
>>> + char *attrpath = NULL;
>>> +
>>> +#define MDEV_GET_SYSFS_ATTR(attr_name, cb, ...) \
>>> + do { \
>>> + if (virAsprintf(&attrpath, "%s/%s", dir, #attr_name) < 0) \
>>> + goto cleanup; \
>>> + \
>>> + if (cb(device, attrpath, __VA_ARGS__) < 0) \
>>> + goto cleanup; \
>>> + \
>>> + VIR_FREE(attrpath); \
>>> + } while (0) \
>>> +
>>> + if (VIR_STRDUP(type->id, last_component(dir)) < 0)
>>> + goto cleanup;
>>> +
>>> + /* query udev for the attributes under subdirectories using the relative
>>> + * path stored in @dir, i.e. 'mdev_supported_types/<type_id>'
>>> + */
>>> + MDEV_GET_SYSFS_ATTR(name, udevGetStringSysfsAttr, &type->name);
>>
>> Does this imply that name isn't necessarily optional as defined in RNG?
>> Can '@name' not exist and if it is optional how does that adjust the macro?
>
> There's no need for the macro to be changed - type->name == NULL in that case
> which means it won't be formatted to the XML, there's no issue in that the
> NULL's going to be handled gracefully all the way down from
> udevGetStringSysfsAttr.
>
O
>>
>>> + MDEV_GET_SYSFS_ATTR(device_api, udevGetStringSysfsAttr, &type->device_api);
>>> + MDEV_GET_SYSFS_ATTR(available_instances, udevGetUintSysfsAttr,
>>> + &type->available_instances, 10);
>>> +
>>> +#undef MDEV_GET_SYSFS_ATTR
>>> +
>>> + ret = 0;
>>> + cleanup:
>>> + VIR_FREE(attrpath);
>>> + return ret;
>>> +}
>>> +
>>
>>
>> With changes to
>>
>> 1. fix the Coverity issues
>> 2. determine whether the virNodeDeviceObjHasCap change is needed
>> 3. address the optional name
> ^ see my comment above
>
>>
>> You have my:
>>
>> Reviewed-by: John Ferlan <jferlan at redhat.com>
>>
>> While I'm not a fan of 'deviceAPI'
>
> Why so? I'm open to any suggestions, choosing the right name for basically
> anything is a gift I unfortunately do not possess, but truly desire to.
>
Hmm... Looks like I got distracted whilst writing and didn't finish my
though.... I too have the gift of choosing names that cause angst for
reviewers. Anyway - it's just a strange name for something that I think
ends up being (what I call) the adapter or controller, e.g. in an .args
file:
-device vfio-pci,id=hostdev0,\
sysfsdev=/sys/bus/mdev/devices/53764d0e-85a0-42b4-af5c-2046b460b1dc,bus=pci.0,\
addr=0x3
the "vfio-pci" is less a "deviceAPI" to me and more the "device
mechanism or name" to handle the traffic. But I see that "device_api" is
what the file name ends up being and that I assume was agreed upon by
the consortium of those who have been arguing about the vGPU/mdev sysfs
layout for far longer than I wanted to pay close attention, so we just
get to deal with it.
Now as for availableInstances - thankfully there's cut-n-paste to deal
with that long name. Ironically the name is far longer than the value
as opposed to something like uuid/wwnn/wwpn where the name is far
shorter than what the value turns out to be. Glad I don't have to type a
uuid/wwnn/wwpn value too often and even happier I have cut-n-paste
John
More information about the libvir-list
mailing list