[libvirt] [PATCH 12/18] virpcimock: Create PCI devices under /sys/devices/pci*
Daniel Henrique Barboza
danielhb413 at gmail.com
Fri Aug 16 21:10:21 UTC 2019
Reviewed-by: Daniel Henrique Barboza <danielhb413 at gmail.com>
On 8/14/19 8:57 AM, Michal Privoznik wrote:
> So far, we are creating devices directly under
> /sys/bus/pci/devices/*. There is not much problem with it, but if
> we really want to model kernel behaviour we need to create them
> under /sys/devices/pciDDDD:BB and then only symlink them from the
> old location.
>
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
> tests/virpcimock.c | 25 +++++++++++++++++++++----
> 1 file changed, 21 insertions(+), 4 deletions(-)
>
> diff --git a/tests/virpcimock.c b/tests/virpcimock.c
> index c10764dcdd..0774bf62d9 100644
> --- a/tests/virpcimock.c
> +++ b/tests/virpcimock.c
> @@ -383,12 +383,17 @@ pci_device_get_path(const struct pciDevice *dev,
> if (!(devid = pci_address_format(&dev->addr)))
> return NULL;
>
> + /* PCI devices really do live under /sys/devices/pciDDDD:BB
> + * and then they are just symlinked to /sys/bus/pci/devices/
> + */
> if (file) {
> - ignore_value(virAsprintfQuiet(&ret, "%s" SYSFS_PCI_PREFIX "devices/%s/%s",
> - prefix, devid, file));
> + ignore_value(virAsprintfQuiet(&ret, "%s/sys/devices/pci%04x:%02x/%s/%s",
> + prefix, dev->addr.domain, dev->addr.bus,
> + devid, file));
> } else {
> - ignore_value(virAsprintfQuiet(&ret, "%s" SYSFS_PCI_PREFIX "devices/%s",
> - prefix, devid));
> + ignore_value(virAsprintfQuiet(&ret, "%s/sys/devices/pci%04x:%02x/%s",
> + prefix, dev->addr.domain, dev->addr.bus,
> + devid));
> }
>
> return ret;
> @@ -400,6 +405,7 @@ pci_device_new_from_stub(const struct pciDevice *data)
> {
> struct pciDevice *dev;
> VIR_AUTOFREE(char *) devpath = NULL;
> + VIR_AUTOFREE(char *) devsympath = NULL;
> VIR_AUTOFREE(char *) id = NULL;
> VIR_AUTOFREE(char *) devid = NULL;
> char *c;
> @@ -488,6 +494,17 @@ pci_device_new_from_stub(const struct pciDevice *data)
> }
> make_symlink(devpath, "iommu_group", tmp);
>
> + if (snprintf(tmp, sizeof(tmp),
> + "../../../devices/pci%04x:%02x/%s",
> + dev->addr.domain, dev->addr.bus, devid) < 0) {
> + ABORT("@tmp overflow");
> + }
> +
> + if (virAsprintfQuiet(&devsympath, "%s" SYSFS_PCI_PREFIX "devices", fakerootdir) < 0)
> + ABORT_OOM();
> +
> + make_symlink(devsympath, devid, tmp);
> +
> if (pci_device_autobind(dev) < 0)
> ABORT("Unable to bind: %s", devid);
>
More information about the libvir-list
mailing list