From nobody Thu May 2 00:15:13 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 152716049305489.40050365672084; Thu, 24 May 2018 04:14:53 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E09F516AB09; Thu, 24 May 2018 11:14:50 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 98DE99CDC; Thu, 24 May 2018 11:14:50 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id E7F684CA80; Thu, 24 May 2018 11:14:49 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w4OBElSh017396 for ; Thu, 24 May 2018 07:14:47 -0400 Received: by smtp.corp.redhat.com (Postfix) id 9045310AF9E9; Thu, 24 May 2018 11:14:47 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id 35F4610AF9E8 for ; Thu, 24 May 2018 11:14:45 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Thu, 24 May 2018 13:13:28 +0200 Message-Id: <5c80be6ae212a36b44a382f95d55b08f1eef2633.1527160292.git.mprivozn@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 01/12] Introduce virDomainDetachDeviceAlias API X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Thu, 24 May 2018 11:14:51 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" When detaching a device it can be uniquely identified by its alias. Instead of misusing virDomainDetachDeviceFlags which has the same signature introduce new function. Signed-off-by: Michal Privoznik Reviewed-by: J=EF=BF=BDn Tomko --- include/libvirt/libvirt-domain.h | 3 +++ src/driver-hypervisor.h | 6 +++++ src/libvirt-domain.c | 53 ++++++++++++++++++++++++++++++++++++= ++++ src/libvirt_public.syms | 5 ++++ 4 files changed, 67 insertions(+) diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-dom= ain.h index d7cbd18796..da773b76cb 100644 --- a/include/libvirt/libvirt-domain.h +++ b/include/libvirt/libvirt-domain.h @@ -2022,6 +2022,9 @@ int virDomainDetachDeviceFlags(virDomainPtr domain, int virDomainUpdateDeviceFlags(virDomainPtr domain, const char *xml, unsigned int flags); =20 +int virDomainDetachDeviceAlias(virDomainPtr domain, + const char *alias, unsigned int flags); + typedef struct _virDomainStatsRecord virDomainStatsRecord; typedef virDomainStatsRecord *virDomainStatsRecordPtr; struct _virDomainStatsRecord { diff --git a/src/driver-hypervisor.h b/src/driver-hypervisor.h index e71a72a441..9a224998fd 100644 --- a/src/driver-hypervisor.h +++ b/src/driver-hypervisor.h @@ -441,6 +441,11 @@ typedef int const char *xml, unsigned int flags); =20 +typedef int +(*virDrvDomainDetachDeviceAlias)(virDomainPtr domain, + const char *alias, + unsigned int flags); + typedef int (*virDrvDomainGetAutostart)(virDomainPtr domain, int *autostart); @@ -1392,6 +1397,7 @@ struct _virHypervisorDriver { virDrvDomainDetachDevice domainDetachDevice; virDrvDomainDetachDeviceFlags domainDetachDeviceFlags; virDrvDomainUpdateDeviceFlags domainUpdateDeviceFlags; + virDrvDomainDetachDeviceAlias domainDetachDeviceAlias; virDrvDomainGetAutostart domainGetAutostart; virDrvDomainSetAutostart domainSetAutostart; virDrvDomainGetSchedulerType domainGetSchedulerType; diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c index 2d86e48979..e536781e38 100644 --- a/src/libvirt-domain.c +++ b/src/libvirt-domain.c @@ -8349,6 +8349,59 @@ virDomainUpdateDeviceFlags(virDomainPtr domain, } =20 =20 +/** + * virDomainDetachDeviceAlias: + * @domain: pointer to domain object + * @alias: device alias + * @flags: bitwise-OR of virDomainDeviceModifyFlags + * + * Detach a virtual device from a domain, using the alias to + * specify device. The value of @flags should be either + * VIR_DOMAIN_AFFECT_CURRENT, or a bitwise-or of values from + * VIR_DOMAIN_AFFECT_LIVE and VIR_DOMAIN_AFFECT_CURRENT, although + * hypervisors vary in which flags are supported. + * + * In contrast to virDomainDetachDeviceFlags() this API only send + * request to the hypervisor and returns immediately. It's + * caller's responsibility to wait for + * VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED event to signal actual + * device removal. + * + * Returns 0 in case of success, -1 in case of failure. + */ +int +virDomainDetachDeviceAlias(virDomainPtr domain, + const char *alias, + unsigned int flags) +{ + virConnectPtr conn; + + VIR_DOMAIN_DEBUG(domain, "alias=3D%s, flags=3D0x%x", alias, flags); + + virResetLastError(); + + virCheckDomainReturn(domain, -1); + conn =3D domain->conn; + + virCheckNonNullArgGoto(alias, error); + virCheckReadOnlyGoto(conn->flags, error); + + if (conn->driver->domainDetachDeviceAlias) { + int ret; + ret =3D conn->driver->domainDetachDeviceAlias(domain, alias, flags= ); + if (ret < 0) + goto error; + return ret; + } + + virReportUnsupportedError(); + + error: + virDispatchError(domain->conn); + return -1; +} + + /** * virConnectDomainEventRegister: * @conn: pointer to the connection diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms index 95df3a0dbc..cd6b0c1fdc 100644 --- a/src/libvirt_public.syms +++ b/src/libvirt_public.syms @@ -785,4 +785,9 @@ LIBVIRT_4.1.0 { virStoragePoolLookupByTargetPath; } LIBVIRT_3.9.0; =20 +LIBVIRT_4.4.0 { + global: + virDomainDetachDeviceAlias; +} LIBVIRT_4.1.0; + # .... define new API here using predicted next version number .... --=20 2.16.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu May 2 00:15:13 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1527160493121122.2487683358155; Thu, 24 May 2018 04:14:53 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5BDC0C07225A; Thu, 24 May 2018 11:14:51 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 212955F90D; Thu, 24 May 2018 11:14:51 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id BC1C418033ED; Thu, 24 May 2018 11:14:50 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w4OBEmrU017403 for ; Thu, 24 May 2018 07:14:48 -0400 Received: by smtp.corp.redhat.com (Postfix) id 30C1810AF9E9; Thu, 24 May 2018 11:14:48 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id CA95810AF9E8 for ; Thu, 24 May 2018 11:14:47 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Thu, 24 May 2018 13:13:29 +0200 Message-Id: <016835bf3f64da0405466053982d82c29dad7aea.1527160292.git.mprivozn@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 02/12] remote: Implement virDomainDetachDeviceAlias X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Thu, 24 May 2018 11:14:51 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Michal Privoznik Reviewed-by: J=EF=BF=BDn Tomko --- src/remote/remote_driver.c | 1 + src/remote/remote_protocol.x | 16 +++++++++++++++- src/remote_protocol-structs | 6 ++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c index 95437b4365..8695046b71 100644 --- a/src/remote/remote_driver.c +++ b/src/remote/remote_driver.c @@ -8308,6 +8308,7 @@ static virHypervisorDriver hypervisor_driver =3D { .domainDetachDevice =3D remoteDomainDetachDevice, /* 0.3.0 */ .domainDetachDeviceFlags =3D remoteDomainDetachDeviceFlags, /* 0.7.7 */ .domainUpdateDeviceFlags =3D remoteDomainUpdateDeviceFlags, /* 0.8.0 */ + .domainDetachDeviceAlias =3D remoteDomainDetachDeviceAlias, /* 4.4.0 */ .domainGetAutostart =3D remoteDomainGetAutostart, /* 0.3.0 */ .domainSetAutostart =3D remoteDomainSetAutostart, /* 0.3.0 */ .domainGetSchedulerType =3D remoteDomainGetSchedulerType, /* 0.3.0 */ diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x index 296a087181..b23c93514a 100644 --- a/src/remote/remote_protocol.x +++ b/src/remote/remote_protocol.x @@ -1284,6 +1284,12 @@ struct remote_domain_update_device_flags_args { unsigned int flags; }; =20 +struct remote_domain_detach_device_alias_args { + remote_nonnull_domain dom; + remote_nonnull_string alias; + unsigned int flags; +}; + struct remote_domain_get_autostart_args { remote_nonnull_domain dom; }; @@ -6135,5 +6141,13 @@ enum remote_procedure { * @priority: high * @acl: storage_pool:getattr */ - REMOTE_PROC_STORAGE_POOL_LOOKUP_BY_TARGET_PATH =3D 391 + REMOTE_PROC_STORAGE_POOL_LOOKUP_BY_TARGET_PATH =3D 391, + + /** + * @generate: both + * @acl: domain:write + * @acl: domain:save:!VIR_DOMAIN_AFFECT_CONFIG|VIR_DOMAIN_AFFECT_LIVE + * @acl: domain:save:VIR_DOMAIN_AFFECT_CONFIG + */ + REMOTE_PROC_DOMAIN_DETACH_DEVICE_ALIAS =3D 392 }; diff --git a/src/remote_protocol-structs b/src/remote_protocol-structs index fe163db73f..1b4fbc5d4b 100644 --- a/src/remote_protocol-structs +++ b/src/remote_protocol-structs @@ -915,6 +915,11 @@ struct remote_domain_update_device_flags_args { remote_nonnull_string xml; u_int flags; }; +struct remote_domain_detach_device_alias_args { + remote_nonnull_domain dom; + remote_nonnull_string alias; + u_int flags; +}; struct remote_domain_get_autostart_args { remote_nonnull_domain dom; }; @@ -3269,4 +3274,5 @@ enum remote_procedure { REMOTE_PROC_DOMAIN_MANAGED_SAVE_DEFINE_XML =3D 389, REMOTE_PROC_DOMAIN_SET_LIFECYCLE_ACTION =3D 390, REMOTE_PROC_STORAGE_POOL_LOOKUP_BY_TARGET_PATH =3D 391, + REMOTE_PROC_DOMAIN_DETACH_DEVICE_ALIAS =3D 392, }; --=20 2.16.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu May 2 00:15:13 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1527160508580863.770711982022; Thu, 24 May 2018 04:15:08 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.24]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 61D3E31168F9; Thu, 24 May 2018 11:15:06 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 20BCF308BDA5; Thu, 24 May 2018 11:15:06 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id B0B854CA82; Thu, 24 May 2018 11:15:05 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w4OBEmSY017409 for ; Thu, 24 May 2018 07:14:49 -0400 Received: by smtp.corp.redhat.com (Postfix) id C52A310AF9E9; Thu, 24 May 2018 11:14:48 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6B00310AF9E8 for ; Thu, 24 May 2018 11:14:48 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Thu, 24 May 2018 13:13:30 +0200 Message-Id: <23e7bb2bd1d72df038d2fec1c70d214ec1b10e11.1527160292.git.mprivozn@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 03/12] virsh: Expose virDomainDetachDeviceAlias X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.24 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.47]); Thu, 24 May 2018 11:15:07 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Michal Privoznik Reviewed-by: J=EF=BF=BDn Tomko --- tools/virsh-domain.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++= ++++ tools/virsh.pod | 12 +++++++++ 2 files changed, 84 insertions(+) diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index cfbbf5a7bc..26f7983540 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -11878,6 +11878,72 @@ cmdDetachDevice(vshControl *ctl, const vshCmd *cmd) return funcRet; } =20 + +/* + * "detach-device-alias" command + */ +static const vshCmdInfo info_detach_device_alias[] =3D { + {.name =3D "help", + .data =3D N_("detach device from an alias") + }, + {.name =3D "desc", + .data =3D N_("Detach device from domain using given alias to identify= device") + }, + {.name =3D NULL} +}; + +static const vshCmdOptDef opts_detach_device_alias[] =3D { + VIRSH_COMMON_OPT_DOMAIN_FULL(0), + {.name =3D "alias", + .type =3D VSH_OT_DATA, + .flags =3D VSH_OFLAG_REQ, + .help =3D N_("device alias") + }, + VIRSH_COMMON_OPT_DOMAIN_CONFIG, + VIRSH_COMMON_OPT_DOMAIN_LIVE, + VIRSH_COMMON_OPT_DOMAIN_CURRENT, + {.name =3D NULL} +}; + +static bool +cmdDetachDeviceAlias(vshControl *ctl, const vshCmd *cmd) +{ + virDomainPtr dom =3D NULL; + const char *alias =3D NULL; + bool current =3D vshCommandOptBool(cmd, "current"); + bool config =3D vshCommandOptBool(cmd, "config"); + bool live =3D vshCommandOptBool(cmd, "live"); + unsigned int flags =3D VIR_DOMAIN_AFFECT_CURRENT; + bool ret =3D false; + + VSH_EXCLUSIVE_OPTIONS_VAR(current, live); + VSH_EXCLUSIVE_OPTIONS_VAR(current, config); + + if (config) + flags |=3D VIR_DOMAIN_AFFECT_CONFIG; + if (live) + flags |=3D VIR_DOMAIN_AFFECT_LIVE; + + if (!(dom =3D virshCommandOptDomain(ctl, cmd, NULL))) + return false; + + if (vshCommandOptStringReq(ctl, cmd, "alias", &alias) < 0) + goto cleanup; + + if (virDomainDetachDeviceAlias(dom, alias, flags) < 0) { + vshError(ctl, _("Failed to detach device with alias %s"), alias); + goto cleanup; + } + + vshPrintExtra(ctl, "%s", _("Device detached successfully\n")); + ret =3D true; + + cleanup: + virshDomainFree(dom); + return ret; +} + + /* * "update-device" command */ @@ -13999,6 +14065,12 @@ const vshCmdDef domManagementCmds[] =3D { .info =3D info_detach_device, .flags =3D 0 }, + {.name =3D "detach-device-alias", + .handler =3D cmdDetachDeviceAlias, + .opts =3D opts_detach_device_alias, + .info =3D info_detach_device_alias, + .flags =3D 0 + }, {.name =3D "detach-disk", .handler =3D cmdDetachDisk, .opts =3D opts_detach_disk, diff --git a/tools/virsh.pod b/tools/virsh.pod index 929958a953..45c1a3f271 100644 --- a/tools/virsh.pod +++ b/tools/virsh.pod @@ -3112,6 +3112,18 @@ an offline domain, and like I<--live> I<--config> fo= r a running domain. Note that older versions of virsh used I<--config> as an alias for I<--persistent>. =20 +=3Ditem B I I +[[[I<--live>] [I<--config>] | [I<--current>]] | [I<--persistent>]] + +Detach a device with given I from the I. + +If I<--live> is specified, affect a running domain. +If I<--config> is specified, affect the next startup of a persistent domai= n. +If I<--current> is specified, affect the current domain state. +Both I<--live> and I<--config> flags may be given, but I<--current> is +exclusive. When no flag is specified legacy API is used whose behavior dep= ends +on the hypervisor driver. + =3Ditem B I I [[[I<--live>] [I<--config>] | [I<--current>]] | [I<--persistent>]] [I<--print-xml>] --=20 2.16.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu May 2 00:15:13 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1527160513812699.8594855900171; Thu, 24 May 2018 04:15:13 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 0FA4E1907D0; Thu, 24 May 2018 11:15:12 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id D036645BC; Thu, 24 May 2018 11:15:11 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 7FE0B4CA80; Thu, 24 May 2018 11:15:11 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w4OBEnh0017414 for ; Thu, 24 May 2018 07:14:49 -0400 Received: by smtp.corp.redhat.com (Postfix) id 65C5B10AF9E9; Thu, 24 May 2018 11:14:49 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0B56210AF9E8 for ; Thu, 24 May 2018 11:14:48 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Thu, 24 May 2018 13:13:31 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 04/12] qemuDomainRemoveChrDevice: Release device address X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Thu, 24 May 2018 11:15:12 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Instead of releasing address only sometimes in qemuDomainDetachChrDevice() let's release it whenever the device is actually removed from the domain definition. Signed-off-by: Michal Privoznik Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_hotplug.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index b35594be5f..cddd700af8 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -4337,6 +4337,7 @@ qemuDomainRemoveChrDevice(virQEMUDriverPtr driver, event =3D virDomainEventDeviceRemovedNewFromObj(vm, chr->info.alias); qemuDomainEventQueue(driver, event); =20 + qemuDomainReleaseDeviceAddress(vm, &chr->info, NULL); qemuDomainChrRemove(vm->def, chr); virDomainChrDefFree(chr); ret =3D 0; @@ -5620,10 +5621,8 @@ int qemuDomainDetachChrDevice(virQEMUDriverPtr drive= r, if (qemuDomainObjExitMonitor(driver, vm) < 0) goto cleanup; =20 - if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) { - qemuDomainReleaseDeviceAddress(vm, &tmpChr->info, NULL); + if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) ret =3D qemuDomainRemoveChrDevice(driver, vm, tmpChr); - } =20 cleanup: qemuDomainResetDeviceRemoval(vm); --=20 2.16.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu May 2 00:15:13 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1527160787128895.5785603932862; Thu, 24 May 2018 04:19:47 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 98AAF73554; Thu, 24 May 2018 11:19:45 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 1A16610016DC; Thu, 24 May 2018 11:19:45 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id BDCBF18033EE; Thu, 24 May 2018 11:19:44 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w4OBEoG2017430 for ; Thu, 24 May 2018 07:14:50 -0400 Received: by smtp.corp.redhat.com (Postfix) id 06D9F10AF9E9; Thu, 24 May 2018 11:14:50 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id A01E510AF9E8 for ; Thu, 24 May 2018 11:14:49 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Thu, 24 May 2018 13:13:32 +0200 Message-Id: <4249dfe126430f79dfd0e4e387fd7d581b05a4b4.1527160292.git.mprivozn@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 05/12] qemuDomainDetachShmemDevice: Don't release shmem address twice X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Thu, 24 May 2018 11:19:46 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" On shmem unplug, when qemu doesn't support DEVICE_DELETED event (or couple of other reasons) we do two things: 1) release shmem device address, 2) call qemuDomainRemoveShmemDevice() which does 1) again. This is potentially dangerous. Signed-off-by: Michal Privoznik Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_hotplug.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index cddd700af8..dba4bc9a6e 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -5291,10 +5291,8 @@ qemuDomainDetachShmemDevice(virQEMUDriverPtr driver, ret =3D -1; =20 if (ret =3D=3D 0) { - if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) { - qemuDomainReleaseDeviceAddress(vm, &shmem->info, NULL); + if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) ret =3D qemuDomainRemoveShmemDevice(driver, vm, shmem); - } } qemuDomainResetDeviceRemoval(vm); =20 --=20 2.16.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu May 2 00:15:13 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1527160520191208.0981617322126; Thu, 24 May 2018 04:15:20 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E6242BC6C5; Thu, 24 May 2018 11:15:17 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id AAE1F10694D9; Thu, 24 May 2018 11:15:17 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 5DDFA18033EE; Thu, 24 May 2018 11:15:17 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w4OBEovS017433 for ; Thu, 24 May 2018 07:14:50 -0400 Received: by smtp.corp.redhat.com (Postfix) id 9B3DB10AF9E9; Thu, 24 May 2018 11:14:50 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id 410A410AF9E8 for ; Thu, 24 May 2018 11:14:50 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Thu, 24 May 2018 13:13:33 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 06/12] qemuDomainDetachWatchdog: Don't release watchdog address twice X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Thu, 24 May 2018 11:15:18 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" On watchdog unplug, when qemu doesn't support DEVICE_DELETED event (or couple of other reasons) we do two things: 1) release watchdog device address, 2) call qemuDomainRemoveWatchdog() which does 1) again. This is potentially dangerous. Signed-off-by: Michal Privoznik Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_hotplug.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index dba4bc9a6e..0062e27a3b 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -5344,10 +5344,8 @@ qemuDomainDetachWatchdog(virQEMUDriverPtr driver, ret =3D -1; =20 if (ret =3D=3D 0) { - if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) { - qemuDomainReleaseDeviceAddress(vm, &watchdog->info, NULL); + if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) ret =3D qemuDomainRemoveWatchdog(driver, vm, watchdog); - } } qemuDomainResetDeviceRemoval(vm); =20 --=20 2.16.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu May 2 00:15:13 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1527160793592844.176046387832; Thu, 24 May 2018 04:19:53 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id CA0E430A454A; Thu, 24 May 2018 11:19:51 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 365A860C4A; Thu, 24 May 2018 11:19:51 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 8D86D18033ED; Thu, 24 May 2018 11:19:50 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w4OBEpSn017442 for ; Thu, 24 May 2018 07:14:51 -0400 Received: by smtp.corp.redhat.com (Postfix) id 3C29B10AF9E9; Thu, 24 May 2018 11:14:51 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id D596310AF9E8 for ; Thu, 24 May 2018 11:14:50 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Thu, 24 May 2018 13:13:34 +0200 Message-Id: <80ec50cb826620db34f1960a837ea91b98193a86.1527160292.git.mprivozn@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 07/12] qemu_hotplug: Use more gotos in qemuDomainDetach*Device X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.46]); Thu, 24 May 2018 11:19:52 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" We are overwriting @ret a lot. It makes hard to see what is actually going on. Use more gotos. Two functions are fixed here: qemuDomainDetachShmemDevice() and qemuDomainDetachWatchdog(). Signed-off-by: Michal Privoznik Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_hotplug.c | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 0062e27a3b..e84dc909b9 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -5283,19 +5283,20 @@ qemuDomainDetachShmemDevice(virQEMUDriverPtr driver, } =20 qemuDomainMarkDeviceForRemoval(vm, &shmem->info); + qemuDomainObjEnterMonitor(driver, vm); - - ret =3D qemuMonitorDelDevice(priv->mon, shmem->info.alias); - - if (qemuDomainObjExitMonitor(driver, vm) < 0) - ret =3D -1; - - if (ret =3D=3D 0) { - if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) - ret =3D qemuDomainRemoveShmemDevice(driver, vm, shmem); + if (qemuMonitorDelDevice(priv->mon, shmem->info.alias) < 0) { + ignore_value(qemuDomainObjExitMonitor(driver, vm)); + goto cleanup; } + if (qemuDomainObjExitMonitor(driver, vm) < 0) + goto cleanup; + + if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) + ret =3D qemuDomainRemoveShmemDevice(driver, vm, shmem); + + cleanup: qemuDomainResetDeviceRemoval(vm); - return ret; } =20 @@ -5336,19 +5337,20 @@ qemuDomainDetachWatchdog(virQEMUDriverPtr driver, } =20 qemuDomainMarkDeviceForRemoval(vm, &watchdog->info); + qemuDomainObjEnterMonitor(driver, vm); - - ret =3D qemuMonitorDelDevice(priv->mon, watchdog->info.alias); - - if (qemuDomainObjExitMonitor(driver, vm) < 0) - ret =3D -1; - - if (ret =3D=3D 0) { - if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) - ret =3D qemuDomainRemoveWatchdog(driver, vm, watchdog); + if (qemuMonitorDelDevice(priv->mon, watchdog->info.alias) < 0) { + ignore_value(qemuDomainObjExitMonitor(driver, vm)); + goto cleanup; } + if (qemuDomainObjExitMonitor(driver, vm) < 0) + goto cleanup; + + if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) + ret =3D qemuDomainRemoveWatchdog(driver, vm, watchdog); + + cleanup: qemuDomainResetDeviceRemoval(vm); - return ret; } =20 --=20 2.16.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu May 2 00:15:13 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1527160798646263.09217702266005; Thu, 24 May 2018 04:19:58 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 3B9C93118EA9; Thu, 24 May 2018 11:19:57 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id F24265D6A8; Thu, 24 May 2018 11:19:56 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 866834CA80; Thu, 24 May 2018 11:19:56 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w4OBEpkR017447 for ; Thu, 24 May 2018 07:14:52 -0400 Received: by smtp.corp.redhat.com (Postfix) id D092910AF9E9; Thu, 24 May 2018 11:14:51 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id 764F410AF9E8 for ; Thu, 24 May 2018 11:14:51 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Thu, 24 May 2018 13:13:35 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 08/12] qemuDomainDetachDeviceLiveAndConfig: Don't use driver->caps directly X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.47]); Thu, 24 May 2018 11:19:57 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Funny, we obtain driver caps at the beginning of the function, but then for unknown reason access driver->caps directly. Signed-off-by: Michal Privoznik Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_driver.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 3a328e5d46..992f140b2b 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -8723,7 +8723,7 @@ qemuDomainDetachDeviceLiveAndConfig(virQEMUDriverPtr = driver, * changed even if we failed to attach the device. For example, * a new controller may be created. */ - if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver-= >caps) < 0) { + if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, caps) <= 0) { ret =3D -1; goto cleanup; } @@ -8731,7 +8731,7 @@ qemuDomainDetachDeviceLiveAndConfig(virQEMUDriverPtr = driver, =20 /* Finally, if no error until here, we can save config. */ if (flags & VIR_DOMAIN_AFFECT_CONFIG) { - ret =3D virDomainSaveConfig(cfg->configDir, driver->caps, vmdef); + ret =3D virDomainSaveConfig(cfg->configDir, caps, vmdef); if (!ret) { virDomainObjAssignDef(vm, vmdef, false, NULL); vmdef =3D NULL; --=20 2.16.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu May 2 00:15:13 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1527160584862787.0148750318372; Thu, 24 May 2018 04:16:24 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.26]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 09DB23001874; Thu, 24 May 2018 11:16:23 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C6FFA3001648; Thu, 24 May 2018 11:16:22 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 712CC4CA80; Thu, 24 May 2018 11:16:22 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w4OBEq31017452 for ; Thu, 24 May 2018 07:14:52 -0400 Received: by smtp.corp.redhat.com (Postfix) id 7116B10AF9E9; Thu, 24 May 2018 11:14:52 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id 16A8A10AF9E8 for ; Thu, 24 May 2018 11:14:51 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Thu, 24 May 2018 13:13:36 +0200 Message-Id: <14acfc6fad4cacd7b012fc902d694525bb37c6dd.1527160292.git.mprivozn@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 09/12] qemuDomainDetachDeviceLiveAndConfig: Avoid overwriting @ret X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.26 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.42]); Thu, 24 May 2018 11:16:23 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" The fact that we are overwriting @ret multiple times is very confusing to see what is actually happening here. Follow our traditional pattern where @ret is initialized to -1, and set to 0 only in case we know we succeeded. Signed-off-by: Michal Privoznik Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_driver.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 992f140b2b..2347e71cfb 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -8709,35 +8709,35 @@ qemuDomainDetachDeviceLiveAndConfig(virQEMUDriverPt= r driver, if (!vmdef) goto cleanup; =20 - if ((ret =3D qemuDomainDetachDeviceConfig(vmdef, dev, caps, - parse_flags, - driver->xmlopt)) < 0) + if (qemuDomainDetachDeviceConfig(vmdef, dev, caps, + parse_flags, + driver->xmlopt) < 0) goto cleanup; } =20 if (flags & VIR_DOMAIN_AFFECT_LIVE) { - if ((ret =3D qemuDomainDetachDeviceLive(vm, dev_copy, driver)) < 0) + if (qemuDomainDetachDeviceLive(vm, dev_copy, driver) < 0) goto cleanup; /* * update domain status forcibly because the domain status may be * changed even if we failed to attach the device. For example, * a new controller may be created. */ - if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, caps) <= 0) { - ret =3D -1; + if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, caps) <= 0) goto cleanup; - } } =20 /* Finally, if no error until here, we can save config. */ if (flags & VIR_DOMAIN_AFFECT_CONFIG) { - ret =3D virDomainSaveConfig(cfg->configDir, caps, vmdef); - if (!ret) { - virDomainObjAssignDef(vm, vmdef, false, NULL); - vmdef =3D NULL; - } + if (virDomainSaveConfig(cfg->configDir, caps, vmdef) < 0) + goto cleanup; + + virDomainObjAssignDef(vm, vmdef, false, NULL); + vmdef =3D NULL; } =20 + ret =3D 0; + cleanup: virObjectUnref(caps); virObjectUnref(cfg); --=20 2.16.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu May 2 00:15:13 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1527160591241196.98601623263858; Thu, 24 May 2018 04:16:31 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.24]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id ABEC730BBF8F; Thu, 24 May 2018 11:16:29 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 69E47308BDA3; Thu, 24 May 2018 11:16:29 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id E3B1B18033ED; Thu, 24 May 2018 11:16:28 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w4OBErG6017458 for ; Thu, 24 May 2018 07:14:53 -0400 Received: by smtp.corp.redhat.com (Postfix) id 2F09B10AF9E9; Thu, 24 May 2018 11:14:53 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id AB74E10AF9E8 for ; Thu, 24 May 2018 11:14:52 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Thu, 24 May 2018 13:13:37 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 10/12] qemu_hotplug: Allow asynchronous detach X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.24 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.48]); Thu, 24 May 2018 11:16:30 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" The virDomainDetachDeviceAlias API is designed so that it only sends detach request to qemu. It's user's responsibility to wait for DEVICE_DELETED event, not libvirt's. Add @async flag to qemuDomainDetach*Device() functions so that caller can chose if detach is semi-synchronous (old virDomainDetachDeviceFlags()) or fully asynchronous (new virDomainDetachDeviceFlags()). Signed-off-by: Michal Privoznik Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_driver.c | 32 +++---- src/qemu/qemu_hotplug.c | 231 ++++++++++++++++++++++++++++++++------------= ---- src/qemu/qemu_hotplug.h | 33 ++++--- tests/qemuhotplugtest.c | 13 +-- 4 files changed, 203 insertions(+), 106 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 2347e71cfb..81a9833b39 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -7726,14 +7726,15 @@ qemuDomainAttachDeviceLive(virDomainObjPtr vm, static int qemuDomainDetachDeviceControllerLive(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainDeviceDefPtr dev) + virDomainDeviceDefPtr dev, + bool async) { virDomainControllerDefPtr cont =3D dev->data.controller; int ret =3D -1; =20 switch (cont->type) { case VIR_DOMAIN_CONTROLLER_TYPE_SCSI: - ret =3D qemuDomainDetachControllerDevice(driver, vm, dev); + ret =3D qemuDomainDetachControllerDevice(driver, vm, dev, async); break; default : virReportError(VIR_ERR_OPERATION_UNSUPPORTED, @@ -7746,46 +7747,47 @@ qemuDomainDetachDeviceControllerLive(virQEMUDriverP= tr driver, static int qemuDomainDetachDeviceLive(virDomainObjPtr vm, virDomainDeviceDefPtr dev, - virQEMUDriverPtr driver) + virQEMUDriverPtr driver, + bool async) { int ret =3D -1; =20 switch ((virDomainDeviceType)dev->type) { case VIR_DOMAIN_DEVICE_DISK: - ret =3D qemuDomainDetachDeviceDiskLive(driver, vm, dev); + ret =3D qemuDomainDetachDeviceDiskLive(driver, vm, dev, async); break; case VIR_DOMAIN_DEVICE_CONTROLLER: - ret =3D qemuDomainDetachDeviceControllerLive(driver, vm, dev); + ret =3D qemuDomainDetachDeviceControllerLive(driver, vm, dev, asyn= c); break; case VIR_DOMAIN_DEVICE_LEASE: ret =3D qemuDomainDetachLease(driver, vm, dev->data.lease); break; case VIR_DOMAIN_DEVICE_NET: - ret =3D qemuDomainDetachNetDevice(driver, vm, dev); + ret =3D qemuDomainDetachNetDevice(driver, vm, dev, async); break; case VIR_DOMAIN_DEVICE_HOSTDEV: - ret =3D qemuDomainDetachHostDevice(driver, vm, dev); + ret =3D qemuDomainDetachHostDevice(driver, vm, dev, async); break; case VIR_DOMAIN_DEVICE_CHR: - ret =3D qemuDomainDetachChrDevice(driver, vm, dev->data.chr); + ret =3D qemuDomainDetachChrDevice(driver, vm, dev->data.chr, async= ); break; case VIR_DOMAIN_DEVICE_RNG: - ret =3D qemuDomainDetachRNGDevice(driver, vm, dev->data.rng); + ret =3D qemuDomainDetachRNGDevice(driver, vm, dev->data.rng, async= ); break; case VIR_DOMAIN_DEVICE_MEMORY: - ret =3D qemuDomainDetachMemoryDevice(driver, vm, dev->data.memory); + ret =3D qemuDomainDetachMemoryDevice(driver, vm, dev->data.memory,= async); break; case VIR_DOMAIN_DEVICE_SHMEM: - ret =3D qemuDomainDetachShmemDevice(driver, vm, dev->data.shmem); + ret =3D qemuDomainDetachShmemDevice(driver, vm, dev->data.shmem, a= sync); break; case VIR_DOMAIN_DEVICE_WATCHDOG: - ret =3D qemuDomainDetachWatchdog(driver, vm, dev->data.watchdog); + ret =3D qemuDomainDetachWatchdog(driver, vm, dev->data.watchdog, a= sync); break; case VIR_DOMAIN_DEVICE_INPUT: - ret =3D qemuDomainDetachInputDevice(vm, dev->data.input); + ret =3D qemuDomainDetachInputDevice(vm, dev->data.input, async); break; case VIR_DOMAIN_DEVICE_REDIRDEV: - ret =3D qemuDomainDetachRedirdevDevice(driver, vm, dev->data.redir= dev); + ret =3D qemuDomainDetachRedirdevDevice(driver, vm, dev->data.redir= dev, async); break; =20 case VIR_DOMAIN_DEVICE_FS: @@ -8716,7 +8718,7 @@ qemuDomainDetachDeviceLiveAndConfig(virQEMUDriverPtr = driver, } =20 if (flags & VIR_DOMAIN_AFFECT_LIVE) { - if (qemuDomainDetachDeviceLive(vm, dev_copy, driver) < 0) + if (qemuDomainDetachDeviceLive(vm, dev_copy, driver, false) < 0) goto cleanup; /* * update domain status forcibly because the domain status may be diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index e84dc909b9..5b5c27b011 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -4740,7 +4740,8 @@ qemuDomainSignalDeviceRemoval(virDomainObjPtr vm, static int qemuDomainDetachVirtioDiskDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainDiskDefPtr detach) + virDomainDiskDefPtr detach, + bool async) { int ret =3D -1; qemuDomainObjPrivatePtr priv =3D vm->privateData; @@ -4757,7 +4758,8 @@ qemuDomainDetachVirtioDiskDevice(virQEMUDriverPtr dri= ver, goto cleanup; } =20 - qemuDomainMarkDeviceForRemoval(vm, &detach->info); + if (!async) + qemuDomainMarkDeviceForRemoval(vm, &detach->info); =20 qemuDomainObjEnterMonitor(driver, vm); if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) { @@ -4769,18 +4771,24 @@ qemuDomainDetachVirtioDiskDevice(virQEMUDriverPtr d= river, if (qemuDomainObjExitMonitor(driver, vm) < 0) goto cleanup; =20 - if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) - ret =3D qemuDomainRemoveDiskDevice(driver, vm, detach); + if (async) { + ret =3D 0; + } else { + if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) + ret =3D qemuDomainRemoveDiskDevice(driver, vm, detach); + } =20 cleanup: - qemuDomainResetDeviceRemoval(vm); + if (!async) + qemuDomainResetDeviceRemoval(vm); return ret; } =20 static int qemuDomainDetachDiskDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainDiskDefPtr detach) + virDomainDiskDefPtr detach, + bool async) { int ret =3D -1; qemuDomainObjPrivatePtr priv =3D vm->privateData; @@ -4788,7 +4796,8 @@ qemuDomainDetachDiskDevice(virQEMUDriverPtr driver, if (qemuDomainDiskBlockJobIsActive(detach)) goto cleanup; =20 - qemuDomainMarkDeviceForRemoval(vm, &detach->info); + if (!async) + qemuDomainMarkDeviceForRemoval(vm, &detach->info); =20 qemuDomainObjEnterMonitor(driver, vm); if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) { @@ -4800,11 +4809,16 @@ qemuDomainDetachDiskDevice(virQEMUDriverPtr driver, if (qemuDomainObjExitMonitor(driver, vm) < 0) goto cleanup; =20 - if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) - ret =3D qemuDomainRemoveDiskDevice(driver, vm, detach); + if (async) { + ret =3D 0; + } else { + if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) + ret =3D qemuDomainRemoveDiskDevice(driver, vm, detach); + } =20 cleanup: - qemuDomainResetDeviceRemoval(vm); + if (!async) + qemuDomainResetDeviceRemoval(vm); return ret; } =20 @@ -4824,7 +4838,8 @@ qemuFindDisk(virDomainDefPtr def, const char *dst) int qemuDomainDetachDeviceDiskLive(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainDeviceDefPtr dev) + virDomainDeviceDefPtr dev, + bool async) { virDomainDiskDefPtr disk; int ret =3D -1; @@ -4841,10 +4856,10 @@ qemuDomainDetachDeviceDiskLive(virQEMUDriverPtr dri= ver, case VIR_DOMAIN_DISK_DEVICE_DISK: case VIR_DOMAIN_DISK_DEVICE_LUN: if (disk->bus =3D=3D VIR_DOMAIN_DISK_BUS_VIRTIO) - ret =3D qemuDomainDetachVirtioDiskDevice(driver, vm, disk); + ret =3D qemuDomainDetachVirtioDiskDevice(driver, vm, disk, asy= nc); else if (disk->bus =3D=3D VIR_DOMAIN_DISK_BUS_SCSI || disk->bus =3D=3D VIR_DOMAIN_DISK_BUS_USB) - ret =3D qemuDomainDetachDiskDevice(driver, vm, disk); + ret =3D qemuDomainDetachDiskDevice(driver, vm, disk, async); else virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", _("This type of disk cannot be hot unplugged")); @@ -4922,7 +4937,8 @@ static bool qemuDomainControllerIsBusy(virDomainObjPt= r vm, =20 int qemuDomainDetachControllerDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainDeviceDefPtr dev) + virDomainDeviceDefPtr dev, + bool async) { int idx, ret =3D -1; virDomainControllerDefPtr detach =3D NULL; @@ -4974,7 +4990,8 @@ int qemuDomainDetachControllerDevice(virQEMUDriverPtr= driver, goto cleanup; } =20 - qemuDomainMarkDeviceForRemoval(vm, &detach->info); + if (!async) + qemuDomainMarkDeviceForRemoval(vm, &detach->info); =20 qemuDomainObjEnterMonitor(driver, vm); if (qemuMonitorDelDevice(priv->mon, detach->info.alias)) { @@ -4984,18 +5001,24 @@ int qemuDomainDetachControllerDevice(virQEMUDriverP= tr driver, if (qemuDomainObjExitMonitor(driver, vm) < 0) goto cleanup; =20 - if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) - ret =3D qemuDomainRemoveControllerDevice(driver, vm, detach); + if (async) { + ret =3D 0; + } else { + if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) + ret =3D qemuDomainRemoveControllerDevice(driver, vm, detach); + } =20 cleanup: - qemuDomainResetDeviceRemoval(vm); + if (!async) + qemuDomainResetDeviceRemoval(vm); return ret; } =20 static int qemuDomainDetachHostPCIDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainHostdevDefPtr detach) + virDomainHostdevDefPtr detach, + bool async) { qemuDomainObjPrivatePtr priv =3D vm->privateData; virDomainHostdevSubsysPCIPtr pcisrc =3D &detach->source.subsys.u.pci; @@ -5009,7 +5032,8 @@ qemuDomainDetachHostPCIDevice(virQEMUDriverPtr driver, return -1; } =20 - qemuDomainMarkDeviceForRemoval(vm, detach->info); + if (!async) + qemuDomainMarkDeviceForRemoval(vm, detach->info); =20 qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorDelDevice(priv->mon, detach->info->alias); @@ -5022,7 +5046,8 @@ qemuDomainDetachHostPCIDevice(virQEMUDriverPtr driver, static int qemuDomainDetachHostUSBDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainHostdevDefPtr detach) + virDomainHostdevDefPtr detach, + bool async) { qemuDomainObjPrivatePtr priv =3D vm->privateData; int ret; @@ -5033,7 +5058,8 @@ qemuDomainDetachHostUSBDevice(virQEMUDriverPtr driver, return -1; } =20 - qemuDomainMarkDeviceForRemoval(vm, detach->info); + if (!async) + qemuDomainMarkDeviceForRemoval(vm, detach->info); =20 qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorDelDevice(priv->mon, detach->info->alias); @@ -5046,7 +5072,8 @@ qemuDomainDetachHostUSBDevice(virQEMUDriverPtr driver, static int qemuDomainDetachHostSCSIDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainHostdevDefPtr detach) + virDomainHostdevDefPtr detach, + bool async) { qemuDomainObjPrivatePtr priv =3D vm->privateData; int ret =3D -1; @@ -5057,7 +5084,8 @@ qemuDomainDetachHostSCSIDevice(virQEMUDriverPtr drive= r, return -1; } =20 - qemuDomainMarkDeviceForRemoval(vm, detach->info); + if (!async) + qemuDomainMarkDeviceForRemoval(vm, detach->info); =20 qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorDelDevice(priv->mon, detach->info->alias); @@ -5071,7 +5099,8 @@ qemuDomainDetachHostSCSIDevice(virQEMUDriverPtr drive= r, static int qemuDomainDetachSCSIVHostDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainHostdevDefPtr detach) + virDomainHostdevDefPtr detach, + bool async) { qemuDomainObjPrivatePtr priv =3D vm->privateData; int ret =3D -1; @@ -5082,7 +5111,8 @@ qemuDomainDetachSCSIVHostDevice(virQEMUDriverPtr driv= er, return -1; } =20 - qemuDomainMarkDeviceForRemoval(vm, detach->info); + if (!async) + qemuDomainMarkDeviceForRemoval(vm, detach->info); =20 qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorDelDevice(priv->mon, detach->info->alias); @@ -5097,7 +5127,8 @@ qemuDomainDetachSCSIVHostDevice(virQEMUDriverPtr driv= er, static int qemuDomainDetachMediatedDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainHostdevDefPtr detach) + virDomainHostdevDefPtr detach, + bool async) { int ret =3D -1; qemuDomainObjPrivatePtr priv =3D vm->privateData; @@ -5108,7 +5139,8 @@ qemuDomainDetachMediatedDevice(virQEMUDriverPtr drive= r, return -1; } =20 - qemuDomainMarkDeviceForRemoval(vm, detach->info); + if (!async) + qemuDomainMarkDeviceForRemoval(vm, detach->info); =20 qemuDomainObjEnterMonitor(driver, vm); ret =3D qemuMonitorDelDevice(priv->mon, detach->info->alias); @@ -5122,7 +5154,8 @@ qemuDomainDetachMediatedDevice(virQEMUDriverPtr drive= r, static int qemuDomainDetachThisHostDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainHostdevDefPtr detach) + virDomainHostdevDefPtr detach, + bool async) { int ret =3D -1; =20 @@ -5131,19 +5164,19 @@ qemuDomainDetachThisHostDevice(virQEMUDriverPtr dri= ver, =20 switch (detach->source.subsys.type) { case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI: - ret =3D qemuDomainDetachHostPCIDevice(driver, vm, detach); + ret =3D qemuDomainDetachHostPCIDevice(driver, vm, detach, async); break; case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB: - ret =3D qemuDomainDetachHostUSBDevice(driver, vm, detach); + ret =3D qemuDomainDetachHostUSBDevice(driver, vm, detach, async); break; case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: - ret =3D qemuDomainDetachHostSCSIDevice(driver, vm, detach); + ret =3D qemuDomainDetachHostSCSIDevice(driver, vm, detach, async); break; case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST: - ret =3D qemuDomainDetachSCSIVHostDevice(driver, vm, detach); + ret =3D qemuDomainDetachSCSIVHostDevice(driver, vm, detach, async); break; case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV: - ret =3D qemuDomainDetachMediatedDevice(driver, vm, detach); + ret =3D qemuDomainDetachMediatedDevice(driver, vm, detach, async); break; default: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, @@ -5155,11 +5188,13 @@ qemuDomainDetachThisHostDevice(virQEMUDriverPtr dri= ver, if (ret < 0) { if (virDomainObjIsActive(vm)) virDomainAuditHostdev(vm, detach, "detach", false); - } else if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) { + } else if (!async && + (ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) { ret =3D qemuDomainRemoveHostDevice(driver, vm, detach); } =20 - qemuDomainResetDeviceRemoval(vm); + if (!async) + qemuDomainResetDeviceRemoval(vm); =20 return ret; } @@ -5167,7 +5202,8 @@ qemuDomainDetachThisHostDevice(virQEMUDriverPtr drive= r, /* search for a hostdev matching dev and detach it */ int qemuDomainDetachHostDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainDeviceDefPtr dev) + virDomainDeviceDefPtr dev, + bool async) { virDomainHostdevDefPtr hostdev =3D dev->data.hostdev; virDomainHostdevSubsysPtr subsys =3D &hostdev->source.subsys; @@ -5242,16 +5278,17 @@ int qemuDomainDetachHostDevice(virQEMUDriverPtr dri= ver, * function so that mac address / virtualport are reset */ if (detach->parent.type =3D=3D VIR_DOMAIN_DEVICE_NET) - return qemuDomainDetachNetDevice(driver, vm, &detach->parent); + return qemuDomainDetachNetDevice(driver, vm, &detach->parent, asyn= c); else - return qemuDomainDetachThisHostDevice(driver, vm, detach); + return qemuDomainDetachThisHostDevice(driver, vm, detach, async); } =20 =20 int qemuDomainDetachShmemDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainShmemDefPtr dev) + virDomainShmemDefPtr dev, + bool async) { int ret =3D -1; ssize_t idx =3D -1; @@ -5282,7 +5319,8 @@ qemuDomainDetachShmemDevice(virQEMUDriverPtr driver, return -1; } =20 - qemuDomainMarkDeviceForRemoval(vm, &shmem->info); + if (!async) + qemuDomainMarkDeviceForRemoval(vm, &shmem->info); =20 qemuDomainObjEnterMonitor(driver, vm); if (qemuMonitorDelDevice(priv->mon, shmem->info.alias) < 0) { @@ -5304,7 +5342,8 @@ qemuDomainDetachShmemDevice(virQEMUDriverPtr driver, int qemuDomainDetachWatchdog(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainWatchdogDefPtr dev) + virDomainWatchdogDefPtr dev, + bool async) { int ret =3D -1; virDomainWatchdogDefPtr watchdog =3D vm->def->watchdog; @@ -5336,7 +5375,8 @@ qemuDomainDetachWatchdog(virQEMUDriverPtr driver, return -1; } =20 - qemuDomainMarkDeviceForRemoval(vm, &watchdog->info); + if (!async) + qemuDomainMarkDeviceForRemoval(vm, &watchdog->info); =20 qemuDomainObjEnterMonitor(driver, vm); if (qemuMonitorDelDevice(priv->mon, watchdog->info.alias) < 0) { @@ -5358,7 +5398,8 @@ qemuDomainDetachWatchdog(virQEMUDriverPtr driver, int qemuDomainDetachRedirdevDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainRedirdevDefPtr dev) + virDomainRedirdevDefPtr dev, + bool async) { int ret =3D -1; qemuDomainObjPrivatePtr priv =3D vm->privateData; @@ -5379,7 +5420,8 @@ qemuDomainDetachRedirdevDevice(virQEMUDriverPtr drive= r, return -1; } =20 - qemuDomainMarkDeviceForRemoval(vm, &tmpRedirdevDef->info); + if (!async) + qemuDomainMarkDeviceForRemoval(vm, &tmpRedirdevDef->info); =20 qemuDomainObjEnterMonitor(driver, vm); if (qemuMonitorDelDevice(priv->mon, tmpRedirdevDef->info.alias) < 0) { @@ -5389,11 +5431,16 @@ qemuDomainDetachRedirdevDevice(virQEMUDriverPtr dri= ver, if (qemuDomainObjExitMonitor(driver, vm) < 0) goto cleanup; =20 - if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) - ret =3D qemuDomainRemoveRedirdevDevice(driver, vm, tmpRedirdevDef); + if (async) { + ret =3D 0; + } else { + if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) + ret =3D qemuDomainRemoveRedirdevDevice(driver, vm, tmpRedirdev= Def); + } =20 cleanup: - qemuDomainResetDeviceRemoval(vm); + if (!async) + qemuDomainResetDeviceRemoval(vm); return ret; } =20 @@ -5401,7 +5448,8 @@ qemuDomainDetachRedirdevDevice(virQEMUDriverPtr drive= r, int qemuDomainDetachNetDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainDeviceDefPtr dev) + virDomainDeviceDefPtr dev, + bool async) { int detachidx, ret =3D -1; virDomainNetDefPtr detach =3D NULL; @@ -5414,7 +5462,8 @@ qemuDomainDetachNetDevice(virQEMUDriverPtr driver, =20 if (virDomainNetGetActualType(detach) =3D=3D VIR_DOMAIN_NET_TYPE_HOSTD= EV) { ret =3D qemuDomainDetachThisHostDevice(driver, vm, - virDomainNetGetActualHostdev(= detach)); + virDomainNetGetActualHostdev(= detach),\ + async); goto cleanup; } =20 @@ -5442,7 +5491,8 @@ qemuDomainDetachNetDevice(virQEMUDriverPtr driver, */ ignore_value(qemuInterfaceStopDevice(detach)); =20 - qemuDomainMarkDeviceForRemoval(vm, &detach->info); + if (!async) + qemuDomainMarkDeviceForRemoval(vm, &detach->info); =20 qemuDomainObjEnterMonitor(driver, vm); if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) { @@ -5454,11 +5504,16 @@ qemuDomainDetachNetDevice(virQEMUDriverPtr driver, if (qemuDomainObjExitMonitor(driver, vm) < 0) goto cleanup; =20 - if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) - ret =3D qemuDomainRemoveNetDevice(driver, vm, detach); + if (async) { + ret =3D 0; + } else { + if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) + ret =3D qemuDomainRemoveNetDevice(driver, vm, detach); + } =20 cleanup: - qemuDomainResetDeviceRemoval(vm); + if (!async) + qemuDomainResetDeviceRemoval(vm); return ret; } =20 @@ -5585,7 +5640,8 @@ int qemuDomainDetachLease(virQEMUDriverPtr driver, =20 int qemuDomainDetachChrDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainChrDefPtr chr) + virDomainChrDefPtr chr, + bool async) { int ret =3D -1; qemuDomainObjPrivatePtr priv =3D vm->privateData; @@ -5609,7 +5665,8 @@ int qemuDomainDetachChrDevice(virQEMUDriverPtr driver, if (qemuBuildChrDeviceStr(&devstr, vmdef, chr, priv->qemuCaps) < 0) goto cleanup; =20 - qemuDomainMarkDeviceForRemoval(vm, &tmpChr->info); + if (!async) + qemuDomainMarkDeviceForRemoval(vm, &tmpChr->info); =20 qemuDomainObjEnterMonitor(driver, vm); if (devstr && qemuMonitorDelDevice(priv->mon, tmpChr->info.alias) < 0)= { @@ -5619,11 +5676,16 @@ int qemuDomainDetachChrDevice(virQEMUDriverPtr driv= er, if (qemuDomainObjExitMonitor(driver, vm) < 0) goto cleanup; =20 - if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) - ret =3D qemuDomainRemoveChrDevice(driver, vm, tmpChr); + if (async) { + ret =3D 0; + } else { + if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) + ret =3D qemuDomainRemoveChrDevice(driver, vm, tmpChr); + } =20 cleanup: - qemuDomainResetDeviceRemoval(vm); + if (!async) + qemuDomainResetDeviceRemoval(vm); VIR_FREE(devstr); return ret; } @@ -5632,7 +5694,8 @@ int qemuDomainDetachChrDevice(virQEMUDriverPtr driver, int qemuDomainDetachRNGDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainRNGDefPtr rng) + virDomainRNGDefPtr rng, + bool async) { qemuDomainObjPrivatePtr priv =3D vm->privateData; ssize_t idx; @@ -5656,18 +5719,24 @@ qemuDomainDetachRNGDevice(virQEMUDriverPtr driver, return -1; } =20 - qemuDomainMarkDeviceForRemoval(vm, &tmpRNG->info); + if (!async) + qemuDomainMarkDeviceForRemoval(vm, &tmpRNG->info); =20 qemuDomainObjEnterMonitor(driver, vm); rc =3D qemuMonitorDelDevice(priv->mon, tmpRNG->info.alias); if (qemuDomainObjExitMonitor(driver, vm) || rc < 0) goto cleanup; =20 - if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) - ret =3D qemuDomainRemoveRNGDevice(driver, vm, tmpRNG); + if (async) { + ret =3D 0; + } else { + if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) + ret =3D qemuDomainRemoveRNGDevice(driver, vm, tmpRNG); + } =20 cleanup: - qemuDomainResetDeviceRemoval(vm); + if (!async) + qemuDomainResetDeviceRemoval(vm); return ret; } =20 @@ -5675,7 +5744,8 @@ qemuDomainDetachRNGDevice(virQEMUDriverPtr driver, int qemuDomainDetachMemoryDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainMemoryDefPtr memdef) + virDomainMemoryDefPtr memdef, + bool async) { qemuDomainObjPrivatePtr priv =3D vm->privateData; virDomainMemoryDefPtr mem; @@ -5701,18 +5771,24 @@ qemuDomainDetachMemoryDevice(virQEMUDriverPtr drive= r, return -1; } =20 - qemuDomainMarkDeviceForRemoval(vm, &mem->info); + if (!async) + qemuDomainMarkDeviceForRemoval(vm, &mem->info); =20 qemuDomainObjEnterMonitor(driver, vm); rc =3D qemuMonitorDelDevice(priv->mon, mem->info.alias); if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0) goto cleanup; =20 - if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) - ret =3D qemuDomainRemoveMemoryDevice(driver, vm, mem); + if (async) { + ret =3D 0; + } else { + if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) + ret =3D qemuDomainRemoveMemoryDevice(driver, vm, mem); + } =20 cleanup: - qemuDomainResetDeviceRemoval(vm); + if (!async) + qemuDomainResetDeviceRemoval(vm); return ret; } =20 @@ -6380,7 +6456,8 @@ qemuDomainSetVcpuInternal(virQEMUDriverPtr driver, =20 int qemuDomainDetachInputDevice(virDomainObjPtr vm, - virDomainInputDefPtr def) + virDomainInputDefPtr def, + bool async) { qemuDomainObjPrivatePtr priv =3D vm->privateData; virQEMUDriverPtr driver =3D priv->driver; @@ -6410,7 +6487,8 @@ qemuDomainDetachInputDevice(virDomainObjPtr vm, break; } =20 - qemuDomainMarkDeviceForRemoval(vm, &input->info); + if (!async) + qemuDomainMarkDeviceForRemoval(vm, &input->info); =20 qemuDomainObjEnterMonitor(driver, vm); if (qemuMonitorDelDevice(priv->mon, input->info.alias)) { @@ -6420,10 +6498,15 @@ qemuDomainDetachInputDevice(virDomainObjPtr vm, if (qemuDomainObjExitMonitor(driver, vm) < 0) goto cleanup; =20 - if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) - ret =3D qemuDomainRemoveInputDevice(vm, input); + if (async) { + ret =3D 0; + } else { + if ((ret =3D qemuDomainWaitForDeviceRemoval(vm)) =3D=3D 1) + ret =3D qemuDomainRemoveInputDevice(vm, input); + } =20 cleanup: - qemuDomainResetDeviceRemoval(vm); + if (!async) + qemuDomainResetDeviceRemoval(vm); return ret; } diff --git a/src/qemu/qemu_hotplug.h b/src/qemu/qemu_hotplug.h index b2f5fa688b..751cbf61d4 100644 --- a/src/qemu/qemu_hotplug.h +++ b/src/qemu/qemu_hotplug.h @@ -87,7 +87,8 @@ int qemuDomainAttachMemory(virQEMUDriverPtr driver, virDomainMemoryDefPtr mem); int qemuDomainDetachMemoryDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainMemoryDefPtr memdef); + virDomainMemoryDefPtr memdef, + bool async); int qemuDomainChangeGraphics(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainGraphicsDefPtr dev); @@ -106,26 +107,33 @@ int qemuDomainChangeNetLinkState(virQEMUDriverPtr dri= ver, int linkstate); int qemuDomainDetachDeviceDiskLive(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainDeviceDefPtr dev); + virDomainDeviceDefPtr dev, + bool async); int qemuDomainDetachControllerDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainDeviceDefPtr dev); + virDomainDeviceDefPtr dev, + bool async); int qemuDomainDetachNetDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainDeviceDefPtr dev); + virDomainDeviceDefPtr dev, + bool async); int qemuDomainDetachHostDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainDeviceDefPtr dev); + virDomainDeviceDefPtr dev, + bool async); int qemuDomainDetachShmemDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainShmemDefPtr dev); + virDomainShmemDefPtr dev, + bool async); int qemuDomainDetachWatchdog(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainWatchdogDefPtr watchdog); + virDomainWatchdogDefPtr watchdog, + bool async); =20 int qemuDomainDetachRedirdevDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainRedirdevDefPtr dev); + virDomainRedirdevDefPtr dev, + bool async); =20 int qemuDomainAttachInputDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, @@ -142,13 +150,15 @@ int qemuDomainAttachChrDevice(virQEMUDriverPtr driver, virDomainChrDefPtr chr); int qemuDomainDetachChrDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainChrDefPtr chr); + virDomainChrDefPtr chr, + bool async); int qemuDomainAttachRNGDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainRNGDefPtr rng); int qemuDomainDetachRNGDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainRNGDefPtr rng); + virDomainRNGDefPtr rng, + bool async); =20 void qemuDomainRemoveVcpuAlias(virQEMUDriverPtr driver, virDomainObjPtr vm, @@ -184,6 +194,7 @@ int qemuDomainSetVcpuInternal(virQEMUDriverPtr driver, bool state); =20 int qemuDomainDetachInputDevice(virDomainObjPtr vm, - virDomainInputDefPtr def); + virDomainInputDefPtr def, + bool async); =20 #endif /* __QEMU_HOTPLUG_H__ */ diff --git a/tests/qemuhotplugtest.c b/tests/qemuhotplugtest.c index e93503812a..663e33ed00 100644 --- a/tests/qemuhotplugtest.c +++ b/tests/qemuhotplugtest.c @@ -142,22 +142,23 @@ testQemuHotplugAttach(virDomainObjPtr vm, =20 static int testQemuHotplugDetach(virDomainObjPtr vm, - virDomainDeviceDefPtr dev) + virDomainDeviceDefPtr dev, + bool async) { int ret =3D -1; =20 switch (dev->type) { case VIR_DOMAIN_DEVICE_DISK: - ret =3D qemuDomainDetachDeviceDiskLive(&driver, vm, dev); + ret =3D qemuDomainDetachDeviceDiskLive(&driver, vm, dev, async); break; case VIR_DOMAIN_DEVICE_CHR: - ret =3D qemuDomainDetachChrDevice(&driver, vm, dev->data.chr); + ret =3D qemuDomainDetachChrDevice(&driver, vm, dev->data.chr, asyn= c); break; case VIR_DOMAIN_DEVICE_SHMEM: - ret =3D qemuDomainDetachShmemDevice(&driver, vm, dev->data.shmem); + ret =3D qemuDomainDetachShmemDevice(&driver, vm, dev->data.shmem, = async); break; case VIR_DOMAIN_DEVICE_WATCHDOG: - ret =3D qemuDomainDetachWatchdog(&driver, vm, dev->data.watchdog); + ret =3D qemuDomainDetachWatchdog(&driver, vm, dev->data.watchdog, = async); break; default: VIR_TEST_VERBOSE("device type '%s' cannot be detached\n", @@ -322,7 +323,7 @@ testQemuHotplug(const void *data) break; =20 case DETACH: - ret =3D testQemuHotplugDetach(vm, dev); + ret =3D testQemuHotplugDetach(vm, dev, false); if (ret =3D=3D 0 || fail) ret =3D testQemuHotplugCheckResult(vm, domain_xml, domain_filename, fail); --=20 2.16.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu May 2 00:15:13 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1527160809083250.5957104782941; Thu, 24 May 2018 04:20:09 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 73A3630BB44F; Thu, 24 May 2018 11:20:07 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2F02D10694D5; Thu, 24 May 2018 11:20:07 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id BC79D18033EE; Thu, 24 May 2018 11:20:06 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w4OBErLm017463 for ; Thu, 24 May 2018 07:14:54 -0400 Received: by smtp.corp.redhat.com (Postfix) id C3BE510AF9E9; Thu, 24 May 2018 11:14:53 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id 695E610AF9E8 for ; Thu, 24 May 2018 11:14:53 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Thu, 24 May 2018 13:13:38 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 11/12] qemu: Implement virDomainDetachDeviceAlias X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.43]); Thu, 24 May 2018 11:20:08 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Michal Privoznik Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_driver.c | 108 +++++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 108 insertions(+) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 81a9833b39..6f0a3d0cda 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -8750,6 +8750,77 @@ qemuDomainDetachDeviceLiveAndConfig(virQEMUDriverPtr= driver, return ret; } =20 + +static int +qemuDomainDetachDeviceAliasLiveAndConfig(virQEMUDriverPtr driver, + virDomainObjPtr vm, + const char *alias, + unsigned int flags) +{ + virCapsPtr caps =3D NULL; + virQEMUDriverConfigPtr cfg =3D NULL; + virDomainDefPtr def =3D NULL; + virDomainDefPtr persistentDef =3D NULL; + virDomainDefPtr vmdef =3D NULL; + unsigned int parse_flags =3D VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE; + int ret =3D -1; + + virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | + VIR_DOMAIN_AFFECT_CONFIG, -1); + + if (!(caps =3D virQEMUDriverGetCapabilities(driver, false))) + goto cleanup; + + cfg =3D virQEMUDriverGetConfig(driver); + + if ((flags & VIR_DOMAIN_AFFECT_CONFIG) && + !(flags & VIR_DOMAIN_AFFECT_LIVE)) + parse_flags |=3D VIR_DOMAIN_DEF_PARSE_INACTIVE; + + if (virDomainObjGetDefs(vm, flags, &def, &persistentDef) < 0) + goto cleanup; + + if (persistentDef) { + virDomainDeviceDef dev; + + vmdef =3D virDomainObjCopyPersistentDef(vm, caps, driver->xmlopt); + if (!vmdef) + goto cleanup; + + if (virDomainDefFindDevice(persistentDef, alias, &dev, true) < 0) + goto cleanup; + + if (qemuDomainDetachDeviceConfig(persistentDef, &dev, caps, + parse_flags, driver->xmlopt) < 0) + goto cleanup; + } + + if (def) { + virDomainDeviceDef dev; + + if (virDomainDefFindDevice(def, alias, &dev, true) < 0) + goto cleanup; + + if (qemuDomainDetachDeviceLive(vm, &dev, driver, true) < 0) + goto cleanup; + } + + if (vmdef) { + if (virDomainSaveConfig(cfg->configDir, caps, vmdef) < 0) + goto cleanup; + virDomainObjAssignDef(vm, vmdef, false, NULL); + vmdef =3D NULL; + } + + ret =3D 0; + cleanup: + virDomainDefFree(vmdef); + virObjectUnref(cfg); + virObjectUnref(caps); + return ret; +} + + static int qemuDomainDetachDeviceFlags(virDomainPtr dom, const char *xml, @@ -8784,6 +8855,42 @@ qemuDomainDetachDeviceFlags(virDomainPtr dom, return ret; } =20 + +static int +qemuDomainDetachDeviceAlias(virDomainPtr dom, + const char *alias, + unsigned int flags) +{ + virQEMUDriverPtr driver =3D dom->conn->privateData; + virDomainObjPtr vm =3D NULL; + int ret =3D -1; + + if (!(vm =3D qemuDomObjFromDomain(dom))) + goto cleanup; + + if (virDomainDetachDeviceAliasEnsureACL(dom->conn, vm->def, flags) < 0) + goto cleanup; + + if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0) + goto cleanup; + + if (virDomainObjUpdateModificationImpact(vm, &flags) < 0) + goto endjob; + + if (qemuDomainDetachDeviceAliasLiveAndConfig(driver, vm, alias, flags)= < 0) + goto endjob; + + ret =3D 0; + + endjob: + qemuDomainObjEndJob(driver, vm); + + cleanup: + virDomainObjEndAPI(&vm); + return ret; +} + + static int qemuDomainDetachDevice(virDomainPtr dom, const char *xml) { return qemuDomainDetachDeviceFlags(dom, xml, @@ -21279,6 +21386,7 @@ static virHypervisorDriver qemuHypervisorDriver =3D= { .domainDetachDevice =3D qemuDomainDetachDevice, /* 0.5.0 */ .domainDetachDeviceFlags =3D qemuDomainDetachDeviceFlags, /* 0.7.7 */ .domainUpdateDeviceFlags =3D qemuDomainUpdateDeviceFlags, /* 0.8.0 */ + .domainDetachDeviceAlias =3D qemuDomainDetachDeviceAlias, /* 4.4.0 */ .domainGetAutostart =3D qemuDomainGetAutostart, /* 0.2.1 */ .domainSetAutostart =3D qemuDomainSetAutostart, /* 0.2.1 */ .domainGetSchedulerType =3D qemuDomainGetSchedulerType, /* 0.7.0 */ --=20 2.16.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu May 2 00:15:13 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 152716081485355.4572389472188; Thu, 24 May 2018 04:20:14 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.25]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 65CF930D75A9; Thu, 24 May 2018 11:20:13 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 283F92007845; Thu, 24 May 2018 11:20:13 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id BC32F18033C1; Thu, 24 May 2018 11:20:12 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w4OBEsJa017475 for ; Thu, 24 May 2018 07:14:54 -0400 Received: by smtp.corp.redhat.com (Postfix) id 6467A10AF9E9; Thu, 24 May 2018 11:14:54 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id 09DF910AF9E8 for ; Thu, 24 May 2018 11:14:53 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Thu, 24 May 2018 13:13:39 +0200 Message-Id: <6d91231de3b31149cd346764777dff543b00fd38.1527160292.git.mprivozn@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 12/12] news: Document new API introduction X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.25 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.43]); Thu, 24 May 2018 11:20:13 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Michal Privoznik Reviewed-by: J=EF=BF=BDn Tomko --- docs/news.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/news.xml b/docs/news.xml index 76d1613d35..5eb5902945 100644 --- a/docs/news.xml +++ b/docs/news.xml @@ -64,6 +64,14 @@ TLS environment which is setup for the migration connection. + + + Introduce virDomainDetachDeviceAlias + + + This new API enables users to detach device using only its alias. + +
--=20 2.16.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list