[libvirt] [PATCH 3/4] qemu: hotplug: Introduce hot unplug for mediated devices
Peter Krempa
pkrempa at redhat.com
Tue Mar 27 09:41:45 UTC 2018
On Tue, Mar 27, 2018 at 10:57:15 +0200, Erik Skultety wrote:
> Mediated devices support hot-{plug,unplug} since their introduction in
> kernel 4.10, however this feature has been missing in libvirt since
> commit ec783d7c introduced a hostdev type for mdevs.
>
> Signed-off-by: Erik Skultety <eskultet at redhat.com>
> ---
> src/qemu/qemu_hotplug.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 47 insertions(+)
>
> diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
> index 4abc7393b..ff77b47bc 100644
> --- a/src/qemu/qemu_hotplug.c
> +++ b/src/qemu/qemu_hotplug.c
> @@ -4030,6 +4030,17 @@ qemuDomainRemoveSCSIVHostDevice(virQEMUDriverPtr driver,
> qemuHostdevReAttachSCSIVHostDevices(driver, vm->def->name, &hostdev, 1);
> }
>
> +
> +static void
> +qemuDomainRemoveMediatedDevice(virQEMUDriverPtr driver,
> + virDomainObjPtr vm,
> + virDomainHostdevDefPtr hostdev)
> +{
> + qemuHostdevReAttachMediatedDevices(driver, vm->def->name, &hostdev, 1);
> + qemuDomainReleaseDeviceAddress(vm, hostdev->info, NULL);
Looks like you are missing teardown of the cgroups, and namespace
membership here.
> +}
> +
> +
> static int
> qemuDomainRemoveHostDevice(virQEMUDriverPtr driver,
> virDomainObjPtr vm,
> @@ -4132,6 +4143,7 @@ qemuDomainRemoveHostDevice(virQEMUDriverPtr driver,
> qemuDomainRemoveSCSIVHostDevice(driver, vm, hostdev);
> break;
> case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV:
> + qemuDomainRemoveMediatedDevice(driver, vm, hostdev);
> break;
> case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST:
> break;
> @@ -5059,6 +5071,32 @@ qemuDomainDetachSCSIVHostDevice(virQEMUDriverPtr driver,
> return ret;
> }
>
> +
> +static int
> +qemuDomainDetachMediatedDevice(virQEMUDriverPtr driver,
> + virDomainObjPtr vm,
> + virDomainHostdevDefPtr detach)
> +{
> + int ret = -1;
> + qemuDomainObjPrivatePtr priv = vm->privateData;
> +
> + if (!detach->info->alias) {
> + virReportError(VIR_ERR_OPERATION_FAILED,
> + "%s", _("device cannot be detached without a device alias"));
> + return -1;
> + }
> +
> + qemuDomainMarkDeviceForRemoval(vm, detach->info);
> +
> + qemuDomainObjEnterMonitor(driver, vm);
> + ret = qemuMonitorDelDevice(priv->mon, detach->info->alias);
> + if (qemuDomainObjExitMonitor(driver, vm) < 0)
> + ret = -1;
You need to wait for removal here and delete it inplace if the call
returns soon enough.. Also call to qemuDomainResetDeviceRemoval is
missing.
> +
> + return ret;
> +}
> +
> +
> static int
> qemuDomainDetachThisHostDevice(virQEMUDriverPtr driver,
> virDomainObjPtr vm,
> @@ -5082,6 +5120,9 @@ qemuDomainDetachThisHostDevice(virQEMUDriverPtr driver,
> case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST:
> ret = qemuDomainDetachSCSIVHostDevice(driver, vm, detach);
> break;
> + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV:
> + ret = qemuDomainDetachMediatedDevice(driver, vm, detach);
> + break;
> default:
> virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> _("hot unplug is not supported for hostdev subsys type '%s'"),
> @@ -5111,6 +5152,7 @@ int qemuDomainDetachHostDevice(virQEMUDriverPtr driver,
> virDomainHostdevSubsysUSBPtr usbsrc = &subsys->u.usb;
> virDomainHostdevSubsysPCIPtr pcisrc = &subsys->u.pci;
> virDomainHostdevSubsysSCSIPtr scsisrc = &subsys->u.scsi;
> + virDomainHostdevSubsysMediatedDevPtr mdevsrc = &subsys->u.mdev;
> virDomainHostdevDefPtr detach = NULL;
> int idx;
>
> @@ -5159,6 +5201,11 @@ int qemuDomainDetachHostDevice(virQEMUDriverPtr driver,
> }
> break;
> }
> + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV:
> + virReportError(VIR_ERR_DEVICE_MISSING,
> + _("mediated device '%s' not found"),
> + mdevsrc->uuidstr);
> + break;
> case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST:
> break;
> default:
> --
> 2.14.3
>
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20180327/aeb23ee9/attachment-0001.sig>
More information about the libvir-list
mailing list