提交 6a966aac 编写于 作者: M Michal Privoznik

virpcimock: Create PCI devices under /sys/devices/pci*

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: NMichal Privoznik <mprivozn@redhat.com>
Tested-by: NDaniel Henrique Barboza <danielhb413@gmail.com>
Reviewed-by: NDaniel Henrique Barboza <danielhb413@gmail.com>
上级 76b42294
...@@ -384,12 +384,17 @@ pci_device_get_path(const struct pciDevice *dev, ...@@ -384,12 +384,17 @@ pci_device_get_path(const struct pciDevice *dev,
if (!(devid = pci_address_format(&dev->addr))) if (!(devid = pci_address_format(&dev->addr)))
return NULL; 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) { if (file) {
ignore_value(virAsprintfQuiet(&ret, "%s" SYSFS_PCI_PREFIX "devices/%s/%s", ignore_value(virAsprintfQuiet(&ret, "%s/sys/devices/pci%04x:%02x/%s/%s",
prefix, devid, file)); prefix, dev->addr.domain, dev->addr.bus,
devid, file));
} else { } else {
ignore_value(virAsprintfQuiet(&ret, "%s" SYSFS_PCI_PREFIX "devices/%s", ignore_value(virAsprintfQuiet(&ret, "%s/sys/devices/pci%04x:%02x/%s",
prefix, devid)); prefix, dev->addr.domain, dev->addr.bus,
devid));
} }
return ret; return ret;
...@@ -401,6 +406,7 @@ pci_device_new_from_stub(const struct pciDevice *data) ...@@ -401,6 +406,7 @@ pci_device_new_from_stub(const struct pciDevice *data)
{ {
struct pciDevice *dev; struct pciDevice *dev;
VIR_AUTOFREE(char *) devpath = NULL; VIR_AUTOFREE(char *) devpath = NULL;
VIR_AUTOFREE(char *) devsympath = NULL;
VIR_AUTOFREE(char *) id = NULL; VIR_AUTOFREE(char *) id = NULL;
VIR_AUTOFREE(char *) devid = NULL; VIR_AUTOFREE(char *) devid = NULL;
char *c; char *c;
...@@ -489,6 +495,17 @@ pci_device_new_from_stub(const struct pciDevice *data) ...@@ -489,6 +495,17 @@ pci_device_new_from_stub(const struct pciDevice *data)
} }
make_symlink(devpath, "iommu_group", tmp); 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) if (pci_device_autobind(dev) < 0)
ABORT("Unable to bind: %s", devid); ABORT("Unable to bind: %s", devid);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册