[libvirt] [PATCH 1/8] Initialize the stubDriver of pci devices if bound to a valid one
Shivaprasad bhat
shivaprasadbhat at gmail.com
Fri Oct 30 15:04:14 UTC 2015
Thanks for the comments Andrea.
On Fri, Oct 30, 2015 at 8:27 PM, Andrea Bolognani <abologna at redhat.com> wrote:
> On Fri, 2015-10-30 at 04:56 +0530, Shivaprasad G Bhat wrote:
>> The stubDriver name can be used to make useful decisions if readily available.
>> Set it if bound to a valid one during initialisation.
>>
>> Signed-off-by: Shivaprasad G Bhat <sbhat at linux.vnet.ibm.com>
>> ---
>> src/util/virpci.c | 36 ++++++++++++++++++++++++++----------
>> 1 file changed, 26 insertions(+), 10 deletions(-)
>>
>> diff --git a/src/util/virpci.c b/src/util/virpci.c
>> index 35b1459..5acf486 100644
>> --- a/src/util/virpci.c
>> +++ b/src/util/virpci.c
>> @@ -1080,6 +1080,22 @@ static const char *virPCIKnownStubs[] = {
>> NULL
>> };
>>
>> +static bool virPCIIsAKnownStub(char *driver)
>
> Return type on a separate line, please.
>
>> +{
>> + const char **stubTest;
>> + bool ret = false;
>> +
>> + for (stubTest = virPCIKnownStubs; *stubTest != NULL; stubTest++) {
>> + if (STREQ_NULLABLE(driver, *stubTest)) {
>> + ret = true;
>> + VIR_DEBUG("Found stub driver %s", *stubTest);
>> + break;
>> + }
>> + }
>> +
>> + return ret;
>> +}
>> +
>> static int
>> virPCIDeviceUnbindFromStub(virPCIDevicePtr dev)
>> {
>> @@ -1087,8 +1103,6 @@ virPCIDeviceUnbindFromStub(virPCIDevicePtr dev)
>> char *drvdir = NULL;
>> char *path = NULL;
>> char *driver = NULL;
>> - const char **stubTest;
>> - bool isStub = false;
>>
>> /* If the device is currently bound to one of the "well known"
>> * stub drivers, then unbind it, otherwise ignore it.
>> @@ -1105,14 +1119,7 @@ virPCIDeviceUnbindFromStub(virPCIDevicePtr dev)
>> goto remove_slot;
>>
>> /* If the device isn't bound to a known stub, skip the unbind. */
>> - for (stubTest = virPCIKnownStubs; *stubTest != NULL; stubTest++) {
>> - if (STREQ(driver, *stubTest)) {
>> - isStub = true;
>> - VIR_DEBUG("Found stub driver %s", *stubTest);
>> - break;
>> - }
>> - }
>> - if (!isStub)
>> + if (!virPCIIsAKnownStub(driver))
>> goto remove_slot;
>>
>> if (virPCIDeviceUnbind(dev, dev->reprobe) < 0)
>
> I would split this patch in two: everything above is just moving
> an existing check into a separate function, without introducing
> any functional change.
>
Sure.. Will do that.
> The code below, on the other hand, is changing the behavior of
> virPCIDeviceNew() and as such should go in its own patch. But
> see below.
>
>> @@ -1556,6 +1563,8 @@ virPCIDeviceNew(unsigned int domain,
>> virPCIDevicePtr dev;
>> char *vendor = NULL;
>> char *product = NULL;
>> + char *drvpath = NULL;
>> + char *driver = NULL;
>>
>> if (VIR_ALLOC(dev) < 0)
>> return NULL;
>> @@ -1603,9 +1612,16 @@ virPCIDeviceNew(unsigned int domain,
>> goto error;
>> }
>>
>> + if (virPCIDeviceGetDriverPathAndName(dev, &drvpath, &driver) < 0)
>> + goto cleanup;
>> +
>> + if (virPCIIsAKnownStub(driver))
>> + dev->stubDriver = driver;
>> +
>> VIR_DEBUG("%s %s: initialized", dev->id, dev->name);
>>
>> cleanup:
>> + VIR_FREE(drvpath);
>> VIR_FREE(product);
>> VIR_FREE(vendor);
>> return dev;
>
> What are you doing this for? AFAICT you're using this so you
> can, in Patch 7, do
>
> pci = virPCIDeviceNew(...);
> if (STREQ_NULLABLE(pci->stubDriver, "vfio-pci"))
> ...
>
> Is that so, or is there another reason I'm missing?
>
Its used in P3 as well in virHostdevPCINodeDeviceReAttach().
I want to keep that function as simple as it is now.
And as you pointed out, i am using it in P7 too.Hope its okay now.
> If the former, I'd rather not overload the meaning of
> dev->stubDriver and call virPCIDeviceGetDriverPathAndName()
> explicitly in Patch 7, so that the intentions behind the
> code are abundantly clear.
>
> Cheers.
>
> --
> Andrea Bolognani
> Software Engineer - Virtualization Team
More information about the libvir-list
mailing list