[libvirt] [PATCH v2 2/5] virpcitest: Test virPCIDeviceDetach

John Ferlan jferlan at redhat.com
Tue Nov 5 11:46:35 UTC 2013


On 10/31/2013 07:23 AM, Michal Privoznik wrote:
> This commit introduces yet another test under virpcitest:
> virPCIDeviceDetach. However, in order to be able to do this, the
> virpcimock needs to be extended to model the kernel behavior on PCI
> device binding and unbinding (create 'driver' symlinks under the device
> tree, check for device ID in driver's ID table, etc.)
> 
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
>  cfg.mk             |   2 +-
>  tests/Makefile.am  |  10 +-
>  tests/virpcimock.c | 603 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
>  tests/virpcitest.c |  42 ++++
>  4 files changed, 652 insertions(+), 5 deletions(-)
> 

Coverity has found a problem...


<...snip...>
> diff --git a/tests/virpcimock.c b/tests/virpcimock.c
> index d545361..2adc337 100644
> --- a/tests/virpcimock.c
> +++ b/tests/virpcimock.c

<...snip...>
> +/*
> + * PCI Driver functions
> + */
> +static void
> +pci_driver_new(const char *name, ...)
> +{
> +    struct pciDriver *driver;
> +    va_list args;
> +    int vendor, device;
> +    char *driverpath;
> +
> +    if (VIR_ALLOC_QUIET(driver) < 0 ||
> +        VIR_STRDUP_QUIET(driver->name, name) < 0 ||
> +        virAsprintfQuiet(&driverpath, "%s/drivers/%s", fakesysfsdir, name) < 0)
> +        ABORT_OOM();
> +
> +    if (virFileMakePath(driverpath) < 0)
> +        ABORT("Unable to create: %s", driverpath);
> +

391  	        ABORT("Unable to create: %s", driverpath);
392  	

(5) Event va_init: 	Initializing va_list "args".
Also see events: 	[missing_va_end]

393  	    va_start(args, name);


> +    va_start(args, name);
> +
> +    while ((vendor = va_arg(args, int)) != -1) {
> +        if ((device = va_arg(args, int)) == -1)
> +            ABORT("Invalid vendor device pair for driver %s", name);
> +
> +        if (VIR_REALLOC_N_QUIET(driver->vendor, driver->len + 1) < 0 ||
> +            VIR_REALLOC_N_QUIET(driver->device, driver->len + 1) < 0)
> +            ABORT_OOM();
> +
> +        driver->vendor[driver->len] = vendor;
> +        driver->device[driver->len] = device;
> +        driver->len++;
> +    }
> +
> +    make_file(driverpath, "bind", NULL);
> +    make_file(driverpath, "unbind", NULL);
> +    make_file(driverpath, "new_id", NULL);
> +    make_file(driverpath, "remove_id", NULL);
> +
> +    if (VIR_APPEND_ELEMENT_QUIET(pciDrivers, pciDrivers_size, driver) < 0)
> +        ABORT_OOM();

413  	    if (VIR_APPEND_ELEMENT_QUIET(pciDrivers, nPciDrivers, driver) < 0)
414  	        ABORT_OOM();

(15) Event missing_va_end: 	va_end was not called for "args".
Also see events: 	[va_init]

415  	}
416  	






More information about the libvir-list mailing list