From nobody Thu May 15 22:39:53 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 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1500559985354245.41565713900434; Thu, 20 Jul 2017 07:13:05 -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 6042BC005748; Thu, 20 Jul 2017 14:13:00 +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 9ECDD7FEB9; Thu, 20 Jul 2017 14:12:59 +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 1C0FC1800C8B; Thu, 20 Jul 2017 14:12:57 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v6KE8KeC023844 for ; Thu, 20 Jul 2017 10:08:20 -0400 Received: by smtp.corp.redhat.com (Postfix) id 5E1DC17F23; Thu, 20 Jul 2017 14:08:20 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-117-46.phx2.redhat.com [10.3.117.46]) by smtp.corp.redhat.com (Postfix) with ESMTP id 251696BF6D for ; Thu, 20 Jul 2017 14:08:20 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 6042BC005748 Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 6042BC005748 From: John Ferlan To: libvir-list@redhat.com Date: Thu, 20 Jul 2017 10:08:15 -0400 Message-Id: <20170720140815.16411-5-jferlan@redhat.com> In-Reply-To: <20170720140815.16411-1-jferlan@redhat.com> References: <20170720140815.16411-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v6 4/4] nodedev: Remove driver locks around object list mgmt code 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.32]); Thu, 20 Jul 2017 14:13:01 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Since virnodedeviceobj now has a self-lockable hash table, there's no need to lock the table from the driver for processing. Thus remove the locks from the driver for NodeDeviceObjList mgmt. This includes the test driver as well. Signed-off-by: John Ferlan --- src/node_device/node_device_driver.c | 61 +++++++-------------------------= ---- src/node_device/node_device_hal.c | 16 ++-------- src/node_device/node_device_udev.c | 13 +++----- src/test/test_driver.c | 25 +++------------ 4 files changed, 22 insertions(+), 93 deletions(-) diff --git a/src/node_device/node_device_driver.c b/src/node_device/node_de= vice_driver.c index 920d877..facfeb6 100644 --- a/src/node_device/node_device_driver.c +++ b/src/node_device/node_device_driver.c @@ -174,19 +174,13 @@ nodeNumOfDevices(virConnectPtr conn, const char *cap, unsigned int flags) { - int ndevs =3D 0; - if (virNodeNumOfDevicesEnsureACL(conn) < 0) return -1; =20 virCheckFlags(0, -1); =20 - nodeDeviceLock(); - ndevs =3D virNodeDeviceObjListNumOfDevices(driver->devs, conn, cap, - virNodeNumOfDevicesCheckACL); - nodeDeviceUnlock(); - - return ndevs; + return virNodeDeviceObjListNumOfDevices(driver->devs, conn, cap, + virNodeNumOfDevicesCheckACL); } =20 =20 @@ -197,20 +191,14 @@ nodeListDevices(virConnectPtr conn, int maxnames, unsigned int flags) { - int nnames; - if (virNodeListDevicesEnsureACL(conn) < 0) return -1; =20 virCheckFlags(0, -1); =20 - nodeDeviceLock(); - nnames =3D virNodeDeviceObjListGetNames(driver->devs, conn, - virNodeListDevicesCheckACL, - cap, names, maxnames); - nodeDeviceUnlock(); - - return nnames; + return virNodeDeviceObjListGetNames(driver->devs, conn, + virNodeListDevicesCheckACL, + cap, names, maxnames); } =20 =20 @@ -219,19 +207,14 @@ nodeConnectListAllNodeDevices(virConnectPtr conn, virNodeDevicePtr **devices, unsigned int flags) { - int ret =3D -1; - virCheckFlags(VIR_CONNECT_LIST_NODE_DEVICES_FILTERS_CAP, -1); =20 if (virConnectListAllNodeDevicesEnsureACL(conn) < 0) return -1; =20 - nodeDeviceLock(); - ret =3D virNodeDeviceObjListExport(conn, driver->devs, devices, - virConnectListAllNodeDevicesCheckACL, - flags); - nodeDeviceUnlock(); - return ret; + return virNodeDeviceObjListExport(conn, driver->devs, devices, + virConnectListAllNodeDevicesCheckACL, + flags); } =20 =20 @@ -240,11 +223,7 @@ nodeDeviceObjFindByName(const char *name) { virNodeDeviceObjPtr obj; =20 - nodeDeviceLock(); - obj =3D virNodeDeviceObjListFindByName(driver->devs, name); - nodeDeviceUnlock(); - - if (!obj) { + if (!(obj =3D virNodeDeviceObjListFindByName(driver->devs, name))) { virReportError(VIR_ERR_NO_NODE_DEVICE, _("no node device with matching name '%s'"), name); @@ -294,11 +273,8 @@ nodeDeviceLookupSCSIHostByWWN(virConnectPtr conn, =20 virCheckFlags(0, NULL); =20 - nodeDeviceLock(); - obj =3D virNodeDeviceObjListFindSCSIHostByWWNs(driver->devs, wwnn, wwp= n); - nodeDeviceUnlock(); - - if (!obj) + if (!(obj =3D virNodeDeviceObjListFindSCSIHostByWWNs(driver->devs, + wwnn, wwpn))) return NULL; =20 def =3D virNodeDeviceObjGetDef(obj); @@ -509,13 +485,6 @@ nodeDeviceFindNewDevice(virConnectPtr conn, virNodeDevicePtr device =3D NULL; time_t start =3D 0, now =3D 0; =20 - /* The thread that creates the device takes the driver lock, so we - * must release it in order to allow the device to be created. - * We're not doing anything with the driver pointer at this point, - * so it's safe to release it, assuming that the pointer itself - * doesn't become invalid. */ - nodeDeviceUnlock(); - nodeDeviceGetTime(&start); =20 while ((now - start) < LINUX_NEW_DEVICE_WAIT_TIME) { @@ -532,8 +501,6 @@ nodeDeviceFindNewDevice(virConnectPtr conn, break; } =20 - nodeDeviceLock(); - return device; } =20 @@ -552,8 +519,6 @@ nodeDeviceCreateXML(virConnectPtr conn, virCheckFlags(0, NULL); virt_type =3D virConnectGetType(conn); =20 - nodeDeviceLock(); - if (!(def =3D virNodeDeviceDefParseString(xmlDesc, CREATE_DEVICE, virt= _type))) goto cleanup; =20 @@ -579,7 +544,6 @@ nodeDeviceCreateXML(virConnectPtr conn, "wwnn '%s' and wwpn '%s'"), def->name, wwnn, wwpn); cleanup: - nodeDeviceUnlock(); virNodeDeviceDefFree(def); VIR_FREE(wwnn); VIR_FREE(wwpn); @@ -601,8 +565,6 @@ nodeDeviceDestroy(virNodeDevicePtr device) return -1; def =3D virNodeDeviceObjGetDef(obj); =20 - nodeDeviceLock(); - if (virNodeDeviceDestroyEnsureACL(device->conn, def) < 0) goto cleanup; =20 @@ -634,7 +596,6 @@ nodeDeviceDestroy(virNodeDevicePtr device) ret =3D 0; =20 cleanup: - nodeDeviceUnlock(); virNodeDeviceObjEndAPI(&obj); VIR_FREE(parent); VIR_FREE(wwnn); diff --git a/src/node_device/node_device_hal.c b/src/node_device/node_devic= e_hal.c index 7f246f0..c19e327 100644 --- a/src/node_device/node_device_hal.c +++ b/src/node_device/node_device_hal.c @@ -508,20 +508,15 @@ dev_refresh(const char *udi) const char *name =3D hal_name(udi); virNodeDeviceObjPtr obj; =20 - nodeDeviceLock(); if ((obj =3D virNodeDeviceObjListFindByName(driver->devs, name))) { /* Simply "rediscover" device -- incrementally handling changes * to sub-capabilities (like net.80203) is nasty ... so avoid it. */ virNodeDeviceObjListRemove(driver->devs, obj); - } else { - VIR_DEBUG("no device named %s", name); - } - nodeDeviceUnlock(); - - if (obj) { virObjectUnref(obj); dev_create(udi); + } else { + VIR_DEBUG("no device named %s", name); } } =20 @@ -541,14 +536,12 @@ device_removed(LibHalContext *ctx ATTRIBUTE_UNUSED, const char *name =3D hal_name(udi); virNodeDeviceObjPtr obj; =20 - nodeDeviceLock(); obj =3D virNodeDeviceObjListFindByName(driver->devs, name); VIR_DEBUG("%s", name); if (obj) virNodeDeviceObjListRemove(driver->devs, obj); else VIR_DEBUG("no device named %s", name); - nodeDeviceUnlock(); virObjectUnref(obj); } =20 @@ -561,11 +554,8 @@ device_cap_added(LibHalContext *ctx, virNodeDeviceObjPtr obj; virNodeDeviceDefPtr def; =20 - nodeDeviceLock(); - obj =3D virNodeDeviceObjListFindByName(driver->devs, name); - nodeDeviceUnlock(); VIR_DEBUG("%s %s", cap, name); - if (obj) { + if ((obj =3D virNodeDeviceObjListFindByName(driver->devs, name))) { def =3D virNodeDeviceObjGetDef(obj); (void)gather_capability(ctx, udi, cap, &def->caps); virNodeDeviceObjEndAPI(&obj); diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_devi= ce_udev.c index 1b10c16..434efd7 100644 --- a/src/node_device/node_device_udev.c +++ b/src/node_device/node_device_udev.c @@ -1607,7 +1607,6 @@ udevEventHandleCallback(int watch ATTRIBUTE_UNUSED, const char *action =3D NULL; int udev_fd =3D -1; =20 - nodeDeviceLock(); udev_fd =3D udev_monitor_get_fd(udev_monitor); if (fd !=3D udev_fd) { virReportError(VIR_ERR_INTERNAL_ERROR, @@ -1639,7 +1638,6 @@ udevEventHandleCallback(int watch ATTRIBUTE_UNUSED, =20 cleanup: udev_device_unref(device); - nodeDeviceUnlock(); return; } =20 @@ -1767,7 +1765,6 @@ nodeStateInitialize(bool privileged, { udevPrivate *priv =3D NULL; struct udev *udev =3D NULL; - int ret =3D -1; =20 if (VIR_ALLOC(priv) < 0) return -1; @@ -1847,18 +1844,16 @@ nodeStateInitialize(bool privileged, goto cleanup; =20 /* Populate with known devices */ - + nodeDeviceUnlock(); if (udevEnumerateDevices(udev) !=3D 0) goto cleanup; =20 - ret =3D 0; + return 0; =20 cleanup: nodeDeviceUnlock(); - - if (ret =3D=3D -1) - nodeStateCleanup(); - return ret; + nodeStateCleanup(); + return -1; } =20 =20 diff --git a/src/test/test_driver.c b/src/test/test_driver.c index bb2e7ba..4702690 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -5303,11 +5303,7 @@ testNodeDeviceObjFindByName(testDriverPtr driver, { virNodeDeviceObjPtr obj; =20 - testDriverLock(driver); - obj =3D virNodeDeviceObjListFindByName(driver->devs, name); - testDriverUnlock(driver); - - if (!obj) + if (!(obj =3D virNodeDeviceObjListFindByName(driver->devs, name))) virReportError(VIR_ERR_NO_NODE_DEVICE, _("no node device with matching name '%s'"), name); @@ -5322,15 +5318,10 @@ testNodeNumOfDevices(virConnectPtr conn, unsigned int flags) { testDriverPtr driver =3D conn->privateData; - int ndevs =3D 0; =20 virCheckFlags(0, -1); =20 - testDriverLock(driver); - ndevs =3D virNodeDeviceObjListNumOfDevices(driver->devs, conn, cap, NU= LL); - testDriverUnlock(driver); - - return ndevs; + return virNodeDeviceObjListNumOfDevices(driver->devs, conn, cap, NULL); } =20 =20 @@ -5342,16 +5333,11 @@ testNodeListDevices(virConnectPtr conn, unsigned int flags) { testDriverPtr driver =3D conn->privateData; - int nnames =3D 0; =20 virCheckFlags(0, -1); =20 - testDriverLock(driver); - nnames =3D virNodeDeviceObjListGetNames(driver->devs, conn, NULL, - cap, names, maxnames); - testDriverUnlock(driver); - - return nnames; + return virNodeDeviceObjListGetNames(driver->devs, conn, NULL, + cap, names, maxnames); } =20 =20 @@ -5566,8 +5552,6 @@ testNodeDeviceCreateXML(virConnectPtr conn, =20 virCheckFlags(0, NULL); =20 - testDriverLock(driver); - if (!(def =3D virNodeDeviceDefParseString(xmlDesc, CREATE_DEVICE, NULL= ))) goto cleanup; =20 @@ -5604,7 +5588,6 @@ testNodeDeviceCreateXML(virConnectPtr conn, =20 cleanup: virNodeDeviceObjEndAPI(&obj); - testDriverUnlock(driver); virNodeDeviceDefFree(def); virObjectUnref(dev); VIR_FREE(wwnn); --=20 2.9.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list