From nobody Wed May 14 18:24:07 2025 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 1518780177084760.5252846027147; Fri, 16 Feb 2018 03:22:57 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id C2A57550CC; Fri, 16 Feb 2018 11:22:55 +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 888FF60C1A; Fri, 16 Feb 2018 11:22:55 +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 4DD1918033F1; Fri, 16 Feb 2018 11:22:55 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w1GBMXHO012955 for ; Fri, 16 Feb 2018 06:22:33 -0500 Received: by smtp.corp.redhat.com (Postfix) id A08632026E04; Fri, 16 Feb 2018 11:22:33 +0000 (UTC) Received: from t460.redhat.com (unknown [10.33.36.60]) by smtp.corp.redhat.com (Postfix) with ESMTP id E31FA2024CA1; Fri, 16 Feb 2018 11:22:32 +0000 (UTC) From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: libvir-list@redhat.com Date: Fri, 16 Feb 2018 11:22:19 +0000 Message-Id: <20180216112222.26572-8-berrange@redhat.com> In-Reply-To: <20180216112222.26572-1-berrange@redhat.com> References: <20180216112222.26572-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v3 07/10] qemu: remove virConnectPtr from some more startup code paths 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: , Content-Type: text/plain; charset="utf-8" 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.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Fri, 16 Feb 2018 11:22:56 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 There's a few places in startup code paths which pass around a virConnectPtr which is no longer required. Specifically, the qemuProcessStart() method now only requires a non-NULL connection if autodestroy is requested. Reviewed-by: John Ferlan Signed-off-by: Daniel P. Berrang=C3=A9 --- src/qemu/qemu_driver.c | 39 +++++++-------------------------------- src/qemu/qemu_process.c | 26 ++++++++------------------ src/qemu/qemu_process.h | 2 +- 3 files changed, 16 insertions(+), 51 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 0a72102779..95c5043436 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -181,12 +181,6 @@ static virNWFilterCallbackDriver qemuCallbackDriver = =3D { }; =20 =20 -struct qemuAutostartData { - virQEMUDriverPtr driver; - virConnectPtr conn; -}; - - /** * qemuDomObjFromDomain: * @domain: Domain pointer that has to be looked up @@ -254,9 +248,9 @@ static int qemuAutostartDomain(virDomainObjPtr vm, void *opaque) { - struct qemuAutostartData *data =3D opaque; + virQEMUDriverPtr driver =3D opaque; int flags =3D 0; - virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(data->driver); + virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); int ret =3D -1; =20 if (cfg->autoStartBypassCache) @@ -267,7 +261,7 @@ qemuAutostartDomain(virDomainObjPtr vm, virResetLastError(); if (vm->autostart && !virDomainObjIsActive(vm)) { - if (qemuProcessBeginJob(data->driver, vm, + if (qemuProcessBeginJob(driver, vm, VIR_DOMAIN_JOB_OPERATION_START) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Failed to start job on VM '%s': %s"), @@ -275,14 +269,14 @@ qemuAutostartDomain(virDomainObjPtr vm, goto cleanup; } =20 - if (qemuDomainObjStart(data->conn, data->driver, vm, flags, + if (qemuDomainObjStart(NULL, driver, vm, flags, QEMU_ASYNC_JOB_START) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Failed to autostart VM '%s': %s"), vm->def->name, virGetLastErrorMessage()); } =20 - qemuProcessEndJob(data->driver, vm); + qemuProcessEndJob(driver, vm); } =20 ret =3D 0; @@ -296,20 +290,7 @@ qemuAutostartDomain(virDomainObjPtr vm, static void qemuAutostartDomains(virQEMUDriverPtr driver) { - virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); - /* XXX: Figure out a better way todo this. The domain - * startup code needs a connection handle in order - * to lookup the bridge associated with a virtual - * network - */ - virConnectPtr conn =3D virConnectOpen(cfg->uri); - /* Ignoring NULL conn which is mostly harmless here */ - struct qemuAutostartData data =3D { driver, conn }; - - virDomainObjListForEach(driver->domains, qemuAutostartDomain, &data); - - virObjectUnref(conn); - virObjectUnref(cfg); + virDomainObjListForEach(driver->domains, qemuAutostartDomain, driver); } =20 =20 @@ -623,7 +604,6 @@ qemuStateInitialize(bool privileged, void *opaque) { char *driverConf =3D NULL; - virConnectPtr conn =3D NULL; virQEMUDriverConfigPtr cfg; uid_t run_uid =3D -1; gid_t run_gid =3D -1; @@ -933,8 +913,6 @@ qemuStateInitialize(bool privileged, qemuDomainNetsRestart, NULL); =20 - conn =3D virConnectOpen(cfg->uri); - /* Then inactive persistent configs */ if (virDomainObjListLoadAllConfigs(qemu_driver->domains, cfg->configDir, @@ -952,19 +930,16 @@ qemuStateInitialize(bool privileged, qemuDomainManagedSaveLoad, qemu_driver); =20 - qemuProcessReconnectAll(conn, qemu_driver); + qemuProcessReconnectAll(qemu_driver); =20 qemu_driver->workerPool =3D virThreadPoolNew(0, 1, 0, qemuProcessEvent= Handler, qemu_driver); if (!qemu_driver->workerPool) goto error; =20 - virObjectUnref(conn); - virNWFilterRegisterCallbackDriver(&qemuCallbackDriver); return 0; =20 error: - virObjectUnref(conn); VIR_FREE(driverConf); VIR_FREE(hugepagePath); VIR_FREE(memoryBackingPath); diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 703d62d3e9..d0bab5d84e 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -2749,7 +2749,6 @@ qemuProcessUpdateVideoRamSize(virQEMUDriverPtr driver, =20 =20 struct qemuProcessHookData { - virConnectPtr conn; virDomainObjPtr vm; virQEMUDriverPtr driver; virQEMUDriverConfigPtr cfg; @@ -5937,7 +5936,12 @@ qemuProcessLaunch(virConnectPtr conn, =20 cfg =3D virQEMUDriverGetConfig(driver); =20 - hookData.conn =3D conn; + if ((flags & VIR_QEMU_PROCESS_START_AUTODESTROY) && !conn) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Domain autodestroy requires a connection handle"= )); + return -1; + } + hookData.vm =3D vm; hookData.driver =3D driver; /* We don't increase cfg's reference counter here. */ @@ -7246,7 +7250,6 @@ qemuProcessRefreshCPU(virQEMUDriverPtr driver, =20 =20 struct qemuProcessReconnectData { - virConnectPtr conn; virQEMUDriverPtr driver; virDomainObjPtr obj; }; @@ -7254,10 +7257,6 @@ struct qemuProcessReconnectData { * Open an existing VM's monitor, re-detect VCPU threads * and re-reserve the security labels in use * - * We own the virConnectPtr we are passed here - whoever started - * this thread function has increased the reference counter to it - * so that we now have to close it. - * * This function also inherits a locked and ref'd domain object. * * This function needs to: @@ -7279,7 +7278,6 @@ qemuProcessReconnect(void *opaque) virQEMUDriverPtr driver =3D data->driver; virDomainObjPtr obj =3D data->obj; qemuDomainObjPrivatePtr priv; - virConnectPtr conn =3D data->conn; struct qemuDomainJobObj oldjob; int state; int reason; @@ -7501,7 +7499,6 @@ qemuProcessReconnect(void *opaque) qemuDomainRemoveInactiveJob(driver, obj); } virDomainObjEndAPI(&obj); - virObjectUnref(conn); virObjectUnref(cfg); virObjectUnref(caps); virNWFilterUnlockFilterUpdates(); @@ -7557,12 +7554,6 @@ qemuProcessReconnectHelper(virDomainObjPtr obj, virObjectLock(obj); virObjectRef(obj); =20 - /* Since we close the connection later on, we have to make sure that t= he - * threads we start see a valid connection throughout their lifetime. = We - * simply increase the reference counter here. - */ - virObjectRef(data->conn); - if (virThreadCreate(&thread, false, qemuProcessReconnect, data) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Could not create thread. QEMU initialization " @@ -7578,7 +7569,6 @@ qemuProcessReconnectHelper(virDomainObjPtr obj, =20 virDomainObjEndAPI(&obj); virNWFilterUnlockFilterUpdates(); - virObjectUnref(data->conn); VIR_FREE(data); return -1; } @@ -7593,8 +7583,8 @@ qemuProcessReconnectHelper(virDomainObjPtr obj, * about. */ void -qemuProcessReconnectAll(virConnectPtr conn, virQEMUDriverPtr driver) +qemuProcessReconnectAll(virQEMUDriverPtr driver) { - struct qemuProcessReconnectData data =3D {.conn =3D conn, .driver =3D = driver}; + struct qemuProcessReconnectData data =3D {.driver =3D driver}; virDomainObjListForEach(driver->domains, qemuProcessReconnectHelper, &= data); } diff --git a/src/qemu/qemu_process.h b/src/qemu/qemu_process.h index 1bc1203c18..2741115673 100644 --- a/src/qemu/qemu_process.h +++ b/src/qemu/qemu_process.h @@ -47,7 +47,7 @@ int qemuProcessDestroyMemoryBackingPath(virQEMUDriverPtr = driver, virDomainMemoryDefPtr mem); =20 void qemuProcessAutostartAll(virQEMUDriverPtr driver); -void qemuProcessReconnectAll(virConnectPtr conn, virQEMUDriverPtr driver); +void qemuProcessReconnectAll(virQEMUDriverPtr driver); =20 typedef struct _qemuProcessIncomingDef qemuProcessIncomingDef; typedef qemuProcessIncomingDef *qemuProcessIncomingDefPtr; --=20 2.14.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list