From nobody Tue Feb 10 00:57:56 2026 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=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1549612408358962.8398423022521; Thu, 7 Feb 2019 23:53:28 -0800 (PST) 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 43F8E90C99; Fri, 8 Feb 2019 07:53:25 +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 DF41F1055009; Fri, 8 Feb 2019 07:53:24 +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 877513F7D5; Fri, 8 Feb 2019 07:53:24 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x187rGRs024959 for ; Fri, 8 Feb 2019 02:53:16 -0500 Received: by smtp.corp.redhat.com (Postfix) id 128FE5C1B4; Fri, 8 Feb 2019 07:53:16 +0000 (UTC) Received: from mx1.redhat.com (ext-mx06.extmail.prod.ext.phx2.redhat.com [10.5.110.30]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0C3915C557 for ; Fri, 8 Feb 2019 07:53:13 +0000 (UTC) Received: from relay.sw.ru (relay.sw.ru [185.231.240.75]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 797A52D7EE for ; Fri, 8 Feb 2019 07:53:11 +0000 (UTC) Received: from [10.94.3.220] (helo=dim-vz7.qa.sw.ru) by relay.sw.ru with esmtp (Exim 4.91) (envelope-from ) id 1gs0yC-0002C3-Ex for libvir-list@redhat.com; Fri, 08 Feb 2019 10:53:08 +0300 From: Nikolay Shirokovskiy To: libvir-list@redhat.com Date: Fri, 8 Feb 2019 10:53:00 +0300 Message-Id: <1549612380-898556-4-git-send-email-nshirokovskiy@virtuozzo.com> In-Reply-To: <1549612380-898556-1-git-send-email-nshirokovskiy@virtuozzo.com> References: <1549612380-898556-1-git-send-email-nshirokovskiy@virtuozzo.com> X-Greylist: Sender passed SPF test, ACL 242 matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Fri, 08 Feb 2019 07:53:12 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Fri, 08 Feb 2019 07:53:12 +0000 (UTC) for IP:'185.231.240.75' DOMAIN:'relay.sw.ru' HELO:'relay.sw.ru' FROM:'nshirokovskiy@virtuozzo.com' RCPT:'' X-RedHat-Spam-Score: -0.001 (SPF_PASS) 185.231.240.75 relay.sw.ru 185.231.240.75 relay.sw.ru X-Scanned-By: MIMEDefang 2.78 on 10.5.110.30 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 3/3] qemu: Don't duplicate suspend events and state changes 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.29]); Fri, 08 Feb 2019 07:53:26 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Since the STOP event handler can use the pausedReason as sent to qemuProcessStopCPUs, we no longer need to send duplicate suspended lifecycle events because we know what caused the stop along with extra details. This processing allows us to also remove the duplicated state change from qemuProcessStopCPUs. Signed-off-by: Nikolay Shirokovskiy --- src/qemu/qemu_driver.c | 26 +++----------------------- src/qemu/qemu_migration.c | 42 ++++++------------------------------------ src/qemu/qemu_migration.h | 4 ---- src/qemu/qemu_process.c | 6 +++++- 4 files changed, 14 insertions(+), 64 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 427c1d0..78079ef 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -1790,10 +1790,8 @@ static int qemuDomainSuspend(virDomainPtr dom) virQEMUDriverPtr driver =3D dom->conn->privateData; virDomainObjPtr vm; int ret =3D -1; - virObjectEventPtr event =3D NULL; qemuDomainObjPrivatePtr priv; virDomainPausedReason reason; - int eventDetail; int state; virQEMUDriverConfigPtr cfg =3D NULL; =20 @@ -1812,16 +1810,12 @@ static int qemuDomainSuspend(virDomainPtr dom) if (virDomainObjCheckActive(vm) < 0) goto endjob; =20 - if (priv->job.asyncJob =3D=3D QEMU_ASYNC_JOB_MIGRATION_OUT) { + if (priv->job.asyncJob =3D=3D QEMU_ASYNC_JOB_MIGRATION_OUT) reason =3D VIR_DOMAIN_PAUSED_MIGRATION; - eventDetail =3D VIR_DOMAIN_EVENT_SUSPENDED_MIGRATED; - } else if (priv->job.asyncJob =3D=3D QEMU_ASYNC_JOB_SNAPSHOT) { + else if (priv->job.asyncJob =3D=3D QEMU_ASYNC_JOB_SNAPSHOT) reason =3D VIR_DOMAIN_PAUSED_SNAPSHOT; - eventDetail =3D -1; /* don't create lifecycle events when doing sn= apshot */ - } else { + else reason =3D VIR_DOMAIN_PAUSED_USER; - eventDetail =3D VIR_DOMAIN_EVENT_SUSPENDED_PAUSED; - } =20 state =3D virDomainObjGetState(vm, NULL); if (state =3D=3D VIR_DOMAIN_PMSUSPENDED) { @@ -1831,12 +1825,6 @@ static int qemuDomainSuspend(virDomainPtr dom) } else if (state !=3D VIR_DOMAIN_PAUSED) { if (qemuProcessStopCPUs(driver, vm, reason, QEMU_ASYNC_JOB_NONE) <= 0) goto endjob; - - if (eventDetail >=3D 0) { - event =3D virDomainEventLifecycleNewFromObj(vm, - VIR_DOMAIN_EVENT_SUSPENDED, - eventDetail); - } } if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->cap= s) < 0) goto endjob; @@ -1848,7 +1836,6 @@ static int qemuDomainSuspend(virDomainPtr dom) cleanup: virDomainObjEndAPI(&vm); =20 - virObjectEventStateQueue(driver->domainEventState, event); virObjectUnref(cfg); return ret; } @@ -16467,13 +16454,6 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr sn= apshot, VIR_DOMAIN_PAUSED_FROM_SNAPSHOT, QEMU_ASYNC_JOB_START) < 0) goto endjob; - /* Create an event now in case the restore fails, so - * that user will be alerted that they are now paused. - * If restore later succeeds, we might replace this. */ - detail =3D VIR_DOMAIN_EVENT_SUSPENDED_FROM_SNAPSHOT; - event =3D virDomainEventLifecycleNewFromObj(vm, - VIR_DOMAIN_EVENT_SUSPENDE= D, - detail); if (!virDomainObjIsActive(vm)) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("guest unexpectedly quit")); diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 1433b2c..2e7e356 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -1269,29 +1269,6 @@ qemuMigrationSrcIsSafe(virDomainDefPtr def, return true; } =20 -/** qemuMigrationSrcSetOffline - * Pause domain for non-live migration. - */ -int -qemuMigrationSrcSetOffline(virQEMUDriverPtr driver, - virDomainObjPtr vm) -{ - int ret; - VIR_DEBUG("driver=3D%p vm=3D%p", driver, vm); - ret =3D qemuProcessStopCPUs(driver, vm, VIR_DOMAIN_PAUSED_MIGRATION, - QEMU_ASYNC_JOB_MIGRATION_OUT); - if (ret =3D=3D 0) { - virObjectEventPtr event; - - event =3D virDomainEventLifecycleNewFromObj(vm, - VIR_DOMAIN_EVENT_SUSPENDED, - VIR_DOMAIN_EVENT_SUSPENDED_MIGRAT= ED); - virObjectEventStateQueue(driver->domainEventState, event); - } - - return ret; -} - =20 void qemuMigrationAnyPostcopyFailed(virQEMUDriverPtr driver, @@ -1314,19 +1291,10 @@ qemuMigrationAnyPostcopyFailed(virQEMUDriverPtr dri= ver, "leaving the domain paused", vm->def->name); =20 if (state =3D=3D VIR_DOMAIN_RUNNING) { - virObjectEventPtr event; - if (qemuProcessStopCPUs(driver, vm, VIR_DOMAIN_PAUSED_POSTCOPY_FAILED, - QEMU_ASYNC_JOB_MIGRATION_IN) < 0) { + QEMU_ASYNC_JOB_MIGRATION_IN) < 0) VIR_WARN("Unable to pause guest CPUs for %s", vm->def->name); - return; - } - - event =3D virDomainEventLifecycleNewFromObj(vm, - VIR_DOMAIN_EVENT_SUSPENDED, - VIR_DOMAIN_EVENT_SUSPENDED_POSTCOPY_FAILED= ); - virObjectEventStateQueue(driver->domainEventState, event); } else { virDomainObjSetState(vm, VIR_DOMAIN_PAUSED, VIR_DOMAIN_PAUSED_POSTCOPY_FAILED); @@ -3544,10 +3512,11 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, } } =20 - /* Before EnterMonitor, since qemuMigrationSetOffline already does tha= t */ + /* Before EnterMonitor, since already qemuProcessStopCPUs does that */ if (!(flags & VIR_MIGRATE_LIVE) && virDomainObjGetState(vm, NULL) =3D=3D VIR_DOMAIN_RUNNING) { - if (qemuMigrationSrcSetOffline(driver, vm) < 0) + if (qemuProcessStopCPUs(driver, vm, VIR_DOMAIN_PAUSED_MIGRATION, + QEMU_ASYNC_JOB_MIGRATION_OUT) < 0) goto error; } =20 @@ -3657,7 +3626,8 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, goto error; } } else if (virDomainObjGetState(vm, NULL) =3D=3D VIR_DOMAIN_RUNNING && - qemuMigrationSrcSetOffline(driver, vm) < 0) { + qemuProcessStopCPUs(driver, vm, VIR_DOMAIN_PAUSED_MIGRATION, + QEMU_ASYNC_JOB_MIGRATION_OUT) < 0) { goto error; } =20 diff --git a/src/qemu/qemu_migration.h b/src/qemu/qemu_migration.h index 976a723..1439ccf 100644 --- a/src/qemu/qemu_migration.h +++ b/src/qemu/qemu_migration.h @@ -98,10 +98,6 @@ typedef enum { } qemuMigrationJobPhase; VIR_ENUM_DECL(qemuMigrationJobPhase); =20 -int -qemuMigrationSrcSetOffline(virQEMUDriverPtr driver, - virDomainObjPtr vm); - char * qemuMigrationSrcBegin(virConnectPtr conn, virDomainObjPtr vm, diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index e0d5320..a11f071 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -3251,7 +3251,11 @@ int qemuProcessStopCPUs(virQEMUDriverPtr driver, if (priv->job.current) ignore_value(virTimeMillisNow(&priv->job.current->stopped)); =20 - virDomainObjSetState(vm, VIR_DOMAIN_PAUSED, reason); + /* The STOP event handler will change the domain state with the reason + * saved in priv->pausedReason and it will also emit corresponding dom= ain + * lifecycle event. + */ + if (virDomainLockProcessPause(driver->lockManager, vm, &priv->lockStat= e) < 0) VIR_WARN("Unable to release lease on %s", vm->def->name); VIR_DEBUG("Preserving lock state '%s'", NULLSTR(priv->lockState)); --=20 1.8.3.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list