@@ -834,13 +834,12 @@ static int qemu_pci_add_xenstore(libxl__gc *gc, uint32_t domid,
}
libxl__qemu_traditional_cmd(gc, domid, "pci-ins");
- rc = libxl__wait_for_device_model(gc, domid, NULL, NULL,
+ rc = libxl__wait_for_device_model(gc, domid, 0, NULL, NULL,
pci_ins_check, state);
path = libxl__sprintf(gc, "/local/domain/0/device-model/%d/parameter",
domid);
vdevfn = libxl__xs_read(gc, XBT_NULL, path);
- path = libxl__sprintf(gc, "/local/domain/0/device-model/%d/state",
- domid);
+ path = libxl__sprintf(gc, "/local/domain/0/dms/%d/state", domid);
if ( rc < 0 )
LIBXL__LOG(ctx, LIBXL__LOG_ERROR,
"qemu refused to add device: %s", vdevfn);
@@ -858,11 +857,13 @@ static int do_pci_add(libxl__gc *gc, uint32_t domid, libxl_device_pci *pcidev, i
{
libxl_ctx *ctx = libxl__gc_owner(gc);
int rc, hvm = 0;
+ /* FIXME: handle multiple device model */
+ libxl_dmid dmid = 0;
switch (libxl__domain_type(gc, domid)) {
case LIBXL_DOMAIN_TYPE_HVM:
hvm = 1;
- if (libxl__wait_for_device_model(gc, domid, "running",
+ if (libxl__wait_for_device_model(gc, domid, dmid, "running",
NULL, NULL, NULL) < 0) {
return ERROR_FAIL;
}
@@ -871,7 +872,7 @@ static int do_pci_add(libxl__gc *gc, uint32_t domid, libxl_device_pci *pcidev, i
rc = qemu_pci_add_xenstore(gc, domid, pcidev);
break;
case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN:
- rc = libxl__qmp_pci_add(gc, domid, pcidev);
+ rc = libxl__qmp_pci_add(gc, domid, dmid, pcidev);
break;
default:
return ERROR_INVAL;
@@ -1136,7 +1137,7 @@ static int qemu_pci_remove_xenstore(libxl__gc *gc, uint32_t domid,
* device-model for function 0 */
if ( !force && (pcidev->vdevfn & 0x7) == 0 ) {
libxl__qemu_traditional_cmd(gc, domid, "pci-rem");
- if (libxl__wait_for_device_model(gc, domid, "pci-removed",
+ if (libxl__wait_for_device_model(gc, domid, 0, "pci-removed",
NULL, NULL, NULL) < 0) {
LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "Device Model didn't respond in time");
/* This depends on guest operating system acknowledging the
@@ -1162,6 +1163,8 @@ static int do_pci_remove(libxl__gc *gc, uint32_t domid,
libxl_device_pci *assigned;
int hvm = 0, rc, num;
int stubdomid = 0;
+ /* FIXME: Handle multiple device model */
+ libxl_dmid dmid = 0;
assigned = libxl_device_pci_list(ctx, domid, &num);
if ( assigned == NULL )
@@ -1178,7 +1181,7 @@ static int do_pci_remove(libxl__gc *gc, uint32_t domid,
switch (libxl__domain_type(gc, domid)) {
case LIBXL_DOMAIN_TYPE_HVM:
hvm = 1;
- if (libxl__wait_for_device_model(gc, domid, "running",
+ if (libxl__wait_for_device_model(gc, domid, dmid, "running",
NULL, NULL, NULL) < 0)
goto out_fail;
@@ -1187,7 +1190,7 @@ static int do_pci_remove(libxl__gc *gc, uint32_t domid,
rc = qemu_pci_remove_xenstore(gc, domid, pcidev, force);
break;
case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN:
- rc = libxl__qmp_pci_del(gc, domid, pcidev);
+ rc = libxl__qmp_pci_del(gc, domid, dmid, pcidev);
break;
default:
rc = ERROR_INVAL;
Quickly fix for PCI library. For the moment each hotplug PCI are add to QEMU 0. We need to find a best way to specify which qemu handle the PCI. Signed-off-by: Julien Grall <julien.grall@citrix.com> --- tools/libxl/libxl_pci.c | 19 +++++++++++-------- 1 files changed, 11 insertions(+), 8 deletions(-)