mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-25 07:05:28 +00:00
Re-factor hostdev hotplug
Re-factor the hostdev hotplug code so that we can easily add PCI hostdev hotplug to qemudDomainAttachHostDevice(). * src/qemu_driver.c: rename qemudDomainAttachHostDevice() to qemudDomainAttachHostUsbDevice(); make qemudDomainAttachHostDevice() handle all hostdev types * src/libvirt_private.syms: export a couple of hostdev related ToString() functions
This commit is contained in:
parent
19bac57b26
commit
7636ef4630
@ -88,6 +88,8 @@ virDomainGetRootFilesystem;
|
||||
virDomainGraphicsTypeFromString;
|
||||
virDomainGraphicsDefFree;
|
||||
virDomainHostdevDefFree;
|
||||
virDomainHostdevModeTypeToString;
|
||||
virDomainHostdevSubsysTypeToString;
|
||||
virDomainInputDefFree;
|
||||
virDomainLifecycleTypeFromString;
|
||||
virDomainLifecycleTypeToString;
|
||||
|
@ -5148,9 +5148,9 @@ cleanup:
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int qemudDomainAttachHostDevice(virConnectPtr conn,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDeviceDefPtr dev)
|
||||
static int qemudDomainAttachHostUsbDevice(virConnectPtr conn,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDeviceDefPtr dev)
|
||||
{
|
||||
int ret;
|
||||
char *cmd, *reply;
|
||||
@ -5200,6 +5200,34 @@ static int qemudDomainAttachHostDevice(virConnectPtr conn,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int qemudDomainAttachHostDevice(virConnectPtr conn,
|
||||
struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDeviceDefPtr dev)
|
||||
{
|
||||
virDomainHostdevDefPtr hostdev = dev->data.hostdev;
|
||||
|
||||
if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS) {
|
||||
qemudReportError(conn, dom, NULL, VIR_ERR_NO_SUPPORT,
|
||||
_("hostdev mode '%s' not supported"),
|
||||
virDomainHostdevModeTypeToString(hostdev->mode));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (qemuDomainSetDeviceOwnership(conn, driver, dev, 0) < 0)
|
||||
return -1;
|
||||
|
||||
switch (hostdev->source.subsys.type) {
|
||||
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB:
|
||||
return qemudDomainAttachHostUsbDevice(conn, vm, dev);
|
||||
default:
|
||||
qemudReportError(conn, dom, NULL, VIR_ERR_NO_SUPPORT,
|
||||
_("hostdev subsys type '%s' not supported"),
|
||||
virDomainHostdevSubsysTypeToString(hostdev->source.subsys.type));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
static int qemudDomainAttachDevice(virDomainPtr dom,
|
||||
const char *xml) {
|
||||
struct qemud_driver *driver = dom->conn->privateData;
|
||||
@ -5301,13 +5329,8 @@ static int qemudDomainAttachDevice(virDomainPtr dom,
|
||||
}
|
||||
} else if (dev->type == VIR_DOMAIN_DEVICE_NET) {
|
||||
ret = qemudDomainAttachNetDevice(dom->conn, driver, vm, dev, qemuCmdFlags);
|
||||
} else if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV &&
|
||||
dev->data.hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS &&
|
||||
dev->data.hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB) {
|
||||
if (qemuDomainSetDeviceOwnership(dom->conn, driver, dev, 0) < 0)
|
||||
goto cleanup;
|
||||
|
||||
ret = qemudDomainAttachHostDevice(dom->conn, vm, dev);
|
||||
} else if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV) {
|
||||
ret = qemudDomainAttachHostDevice(dom->conn, driver, vm, dev);
|
||||
} else {
|
||||
qemudReportError(dom->conn, dom, NULL, VIR_ERR_NO_SUPPORT,
|
||||
_("device type '%s' cannot be attached"),
|
||||
|
Loading…
Reference in New Issue
Block a user