[libvirt] [PATCH v12 05/11] qemu_hostdev: add/remove share device outside
Cedric Bosdonnat
cbosdonnat at suse.com
Mon Feb 17 09:48:54 UTC 2014
On Mon, 2014-02-17 at 14:32 +0800, Chunyan Liu wrote:
> For extracting hostdev codes from qemu_hostdev.c to common library, move
> add/remove a shareable csi hostdev to/from shared device table outside hostdev
> functions.
Typo csi -> scsi
> Signed-off-by: Chunyan Liu <cyliu at suse.com>
> ---
> src/qemu/qemu_hostdev.c | 9 ---------
> src/qemu/qemu_hotplug.c | 14 ++++++++++++++
> src/qemu/qemu_process.c | 28 ++++++++++++++++++++++++++++
> 3 files changed, 42 insertions(+), 9 deletions(-)
>
> diff --git a/src/qemu/qemu_hostdev.c b/src/qemu/qemu_hostdev.c
> index 80552cd..cfdfb03 100644
> --- a/src/qemu/qemu_hostdev.c
> +++ b/src/qemu/qemu_hostdev.c
> @@ -1061,9 +1061,6 @@ qemuPrepareHostdevSCSIDevices(virQEMUDriverPtr driver,
> dev.type = VIR_DOMAIN_DEVICE_HOSTDEV;
> dev.data.hostdev = hostdevs[i];
>
> - if (qemuAddSharedDevice(driver, &dev, name) < 0)
> - return -1;
> -
> if (qemuSetUnprivSGIO(&dev) < 0)
> return -1;
> }
> @@ -1389,12 +1386,6 @@ qemuDomainReAttachHostScsiDevices(virQEMUDriverPtr driver,
> virDomainHostdevDefPtr hostdev = hostdevs[i];
> virSCSIDevicePtr scsi;
> virSCSIDevicePtr tmp;
> - virDomainDeviceDef dev;
> -
> - dev.type = VIR_DOMAIN_DEVICE_HOSTDEV;
> - dev.data.hostdev = hostdev;
> -
> - ignore_value(qemuRemoveSharedDevice(driver, &dev, name));
>
> if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS ||
> hostdev->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI)
> diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
> index 8486f25..afa92da 100644
> --- a/src/qemu/qemu_hotplug.c
> +++ b/src/qemu/qemu_hotplug.c
> @@ -1548,6 +1548,7 @@ qemuDomainAttachHostScsiDevice(virQEMUDriverPtr driver,
> char *drvstr = NULL;
> bool teardowncgroup = false;
> bool teardownlabel = false;
> + virDomainDeviceDef dev;
>
> if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DRIVE) ||
> !virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE) ||
> @@ -1561,6 +1562,12 @@ qemuDomainAttachHostScsiDevice(virQEMUDriverPtr driver,
> if (!cont)
> return -1;
>
> + /* check sharable scsi device */
> + dev.type = VIR_DOMAIN_DEVICE_HOSTDEV;
> + dev.data.hostdev = hostdev;
> + if (qemuAddSharedDevice(driver, &dev, vm->def->name) < 0)
> + return -1;
> +
> if (qemuPrepareHostdevSCSIDevices(driver, vm->def->name,
> &hostdev, 1)) {
> virReportError(VIR_ERR_INTERNAL_ERROR,
> @@ -1619,6 +1626,7 @@ qemuDomainAttachHostScsiDevice(virQEMUDriverPtr driver,
> ret = 0;
> cleanup:
> if (ret < 0) {
> + ignore_value(qemuRemoveSharedDevice(driver, &dev, vm->def->name));
> qemuDomainReAttachHostScsiDevices(driver, vm->def->name, &hostdev, 1);
> if (teardowncgroup && qemuTeardownHostdevCgroup(vm, hostdev) < 0)
> VIR_WARN("Unable to remove host device cgroup ACL on hotplug fail");
> @@ -2587,6 +2595,12 @@ qemuDomainRemoveSCSIHostDevice(virQEMUDriverPtr driver,
> virDomainObjPtr vm,
> virDomainHostdevDefPtr hostdev)
> {
> + virDomainDeviceDef dev;
> +
> + dev.type = VIR_DOMAIN_DEVICE_HOSTDEV;
> + dev.data.hostdev = hostdev;
> +
> + ignore_value(qemuRemoveSharedDevice(driver, &dev, vm->def->name));
> qemuDomainReAttachHostScsiDevices(driver, vm->def->name, &hostdev, 1);
> }
>
> diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
> index e938649..5ea42c7 100644
> --- a/src/qemu/qemu_process.c
> +++ b/src/qemu/qemu_process.c
> @@ -3158,6 +3158,16 @@ qemuProcessReconnect(void *opaque)
> priv->agentError = true;
> }
>
> + /* update hostdevs */
> + for (i = 0; i < obj->def->nhostdevs; i++) {
> + virDomainDeviceDef dev;
> + dev.type = VIR_DOMAIN_DEVICE_HOSTDEV;
> + dev.data.hostdev = obj->def->hostdevs[i];
> + /* handle sharable scsi hostdev */
> + if (qemuAddSharedDevice(driver, &dev, obj->def->name) < 0)
> + goto error;
> + }
> +
> if (qemuUpdateActivePciHostdevs(driver, obj->def) < 0) {
> goto error;
> }
> @@ -3686,6 +3696,15 @@ int qemuProcessStart(virConnectPtr conn,
>
> /* Must be run before security labelling */
> VIR_DEBUG("Preparing host devices");
> + for (i = 0; i < vm->def->nhostdevs; i++) {
> + virDomainDeviceDef dev;
> + dev.type = VIR_DOMAIN_DEVICE_HOSTDEV;
> + dev.data.hostdev = vm->def->hostdevs[i];
> + /* handle sharable scsi hostdev */
> + if (qemuAddSharedDevice(driver, &dev, vm->def->name) < 0)
> + goto cleanup;
> + }
> +
> if (!cfg->relaxedACS)
> hostdev_flags |= VIR_STRICT_ACS_CHECK;
> if (!migrateFrom)
> @@ -4372,6 +4391,15 @@ void qemuProcessStop(virQEMUDriverPtr driver,
> priv->ccwaddrs = NULL;
> }
>
> + /* handle shared scsi hostdev */
> + for (i = 0; i < vm->def->nhostdevs; i++) {
> + virDomainDeviceDef dev;
> +
> + dev.type = VIR_DOMAIN_DEVICE_HOSTDEV;
> + dev.data.hostdev = vm->def->hostdevs[i];
> + ignore_value(qemuRemoveSharedDevice(driver, &dev, vm->def->name));
> + }
> +
> qemuDomainReAttachHostDevices(driver, vm->def);
>
> def = vm->def;
ACK
--
Cedric
More information about the libvir-list
mailing list