[libvirt] [PATCH 1/8] Re-factor hostdev hotplug
Daniel P. Berrange
berrange at redhat.com
Thu Aug 13 18:38:59 UTC 2009
On Thu, Aug 13, 2009 at 05:44:30PM +0100, Mark McLoughlin wrote:
> 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
> ---
> src/libvirt_private.syms | 2 ++
> src/qemu_driver.c | 43 +++++++++++++++++++++++++++++++++----------
> 2 files changed, 35 insertions(+), 10 deletions(-)
>
> diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
> index f20e5ce..642c2bc 100644
> --- a/src/libvirt_private.syms
> +++ b/src/libvirt_private.syms
> @@ -88,6 +88,8 @@ virDomainGetRootFilesystem;
> virDomainGraphicsTypeFromString;
> virDomainGraphicsDefFree;
> virDomainHostdevDefFree;
> +virDomainHostdevModeTypeToString;
> +virDomainHostdevSubsysTypeToString;
> virDomainInputDefFree;
> virDomainLifecycleTypeFromString;
> virDomainLifecycleTypeToString;
> diff --git a/src/qemu_driver.c b/src/qemu_driver.c
> index 3ec8451..f181f27 100644
> --- a/src/qemu_driver.c
> +++ b/src/qemu_driver.c
> @@ -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"),
ACK
Danel
--
|: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
More information about the libvir-list
mailing list