From nobody Sat Feb 7 09:35:07 2026 Delivered-To: importer@patchew.org Received-SPF: none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; spf=none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=reject dis=none) header.from=linux.ibm.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1713539127580362.9778160188416; Fri, 19 Apr 2024 08:05:27 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 6C133172C; Fri, 19 Apr 2024 11:05:26 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 794E51E5E; Fri, 19 Apr 2024 10:51:07 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 28EDA1D8E; Fri, 19 Apr 2024 10:50:17 -0400 (EDT) Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id D9D811D8E for ; Fri, 19 Apr 2024 10:49:56 -0400 (EDT) Received: from pps.filterd (m0360083.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 43JEmik7004526 for ; Fri, 19 Apr 2024 14:49:56 GMT Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3xktpsr050-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Fri, 19 Apr 2024 14:49:55 +0000 Received: from m0360083.ppops.net (m0360083.ppops.net [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 43JEntVP006221 for ; Fri, 19 Apr 2024 14:49:55 GMT Received: from ppma13.dal12v.mail.ibm.com (dd.9e.1632.ip4.static.sl-reverse.com [50.22.158.221]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3xktpsr04x-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 19 Apr 2024 14:49:55 +0000 Received: from pps.filterd (ppma13.dal12v.mail.ibm.com [127.0.0.1]) by ppma13.dal12v.mail.ibm.com (8.17.1.19/8.17.1.19) with ESMTP id 43JCTjG8027875; Fri, 19 Apr 2024 14:49:54 GMT Received: from smtprelay05.fra02v.mail.ibm.com ([9.218.2.225]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 3xkbmpc6q5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 19 Apr 2024 14:49:54 +0000 Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay05.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 43JEnmAJ50463208 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 19 Apr 2024 14:49:50 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D17D62004F; Fri, 19 Apr 2024 14:49:48 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 773CB2004E; Fri, 19 Apr 2024 14:49:48 +0000 (GMT) Received: from li-1de7cd4c-3205-11b2-a85c-d27f97db1fe1.fritz.box (unknown [9.171.43.6]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Fri, 19 Apr 2024 14:49:48 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.7 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 From: Marc Hartmayer To: Subject: [PATCH v1 15/20] node_device_udev: Pass the driver state as parameter in preparation for the next commit Date: Fri, 19 Apr 2024 16:49:34 +0200 Message-ID: <20240419144939.107773-16-mhartmay@linux.ibm.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240419144939.107773-1-mhartmay@linux.ibm.com> References: <20240419144939.107773-1-mhartmay@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: cZNeJ-rcmWC9JGT6TYtmDoydHXXtq7C- X-Proofpoint-GUID: BFR3WjiWBDu3-bBjCf-bIRMuK82CVOQp X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-04-19_10,2024-04-19_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 suspectscore=0 adultscore=0 impostorscore=0 malwarescore=0 spamscore=0 priorityscore=1501 phishscore=0 clxscore=1015 bulkscore=0 lowpriorityscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2404010000 definitions=main-2404190111 Message-ID-Hash: WN7SGZ4JKJ5EUSV3XILNNF4VCQZDRNV5 X-Message-ID-Hash: WN7SGZ4JKJ5EUSV3XILNNF4VCQZDRNV5 X-MailFrom: mhartmay@linux.ibm.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: Boris Fiuczynski , Jonathon Jongsma X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZM-MESSAGEID: 1713539128942100001 It's better practice for all functions called by the threads to pass the dr= iver via parameter and not global variables. Easier to test and cleaner. Signed-off-by: Marc Hartmayer Reviewed-by: Boris Fiuczynski Reviewed-by: Jonathon Jongsma --- src/node_device/node_device_driver.h | 2 +- src/node_device/node_device_driver.c | 6 +-- src/node_device/node_device_udev.c | 72 ++++++++++++++-------------- 3 files changed, 41 insertions(+), 39 deletions(-) diff --git a/src/node_device/node_device_driver.h b/src/node_device/node_de= vice_driver.h index f195cfef9d49..2781ad136d68 100644 --- a/src/node_device/node_device_driver.h +++ b/src/node_device/node_device_driver.h @@ -147,7 +147,7 @@ nodeDeviceParseMdevctlJSON(const char *jsonstring, bool defined); =20 int -nodeDeviceUpdateMediatedDevices(void); +nodeDeviceUpdateMediatedDevices(virNodeDeviceDriverState *driver); =20 void nodeDeviceGenerateName(virNodeDeviceDef *def, diff --git a/src/node_device/node_device_driver.c b/src/node_device/node_de= vice_driver.c index f623339dc973..59c5f9b417a4 100644 --- a/src/node_device/node_device_driver.c +++ b/src/node_device/node_device_driver.c @@ -1887,7 +1887,7 @@ removeMissingPersistentMdev(virNodeDeviceObj *obj, =20 =20 int -nodeDeviceUpdateMediatedDevices(void) +nodeDeviceUpdateMediatedDevices(virNodeDeviceDriverState *node_driver) { g_autofree virNodeDeviceDef **defs =3D NULL; g_autofree virNodeDeviceDef **act_defs =3D NULL; @@ -1911,7 +1911,7 @@ nodeDeviceUpdateMediatedDevices(void) /* Any mdevs that were previously defined but were not returned in the * latest mdevctl query should be removed from the device list */ data.defs =3D defs; - virNodeDeviceObjListForEachRemove(driver->devs, + virNodeDeviceObjListForEachRemove(node_driver->devs, removeMissingPersistentMdev, &data); =20 for (i =3D 0; i < data.ndefs; i++) @@ -2374,7 +2374,7 @@ nodeDeviceUpdate(virNodeDevice *device, cleanup: virNodeDeviceObjEndAPI(&obj); if (updated) - nodeDeviceUpdateMediatedDevices(); + nodeDeviceUpdateMediatedDevices(driver); =20 return ret; } diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_devi= ce_udev.c index 38740033a66e..e4b1532dc385 100644 --- a/src/node_device/node_device_udev.c +++ b/src/node_device/node_device_udev.c @@ -361,7 +361,7 @@ udevTranslatePCIIds(unsigned int vendor, =20 =20 static int -udevProcessPCI(struct udev_device *device, +udevProcessPCI(virNodeDeviceDriverState *driver_state, struct udev_device = *device, virNodeDeviceDef *def) { virNodeDevCapPCIDev *pci_dev =3D &def->caps->data.pci_dev; @@ -372,8 +372,8 @@ udevProcessPCI(struct udev_device *device, char *p; bool privileged =3D false; =20 - VIR_WITH_MUTEX_LOCK_GUARD(&driver->lock) { - privileged =3D driver->privileged; + VIR_WITH_MUTEX_LOCK_GUARD(&driver_state->lock) { + privileged =3D driver_state->privileged; } =20 pci_dev->klass =3D -1; @@ -1391,12 +1391,12 @@ udevGetDeviceType(struct udev_device *device, =20 =20 static int -udevGetDeviceDetails(struct udev_device *device, +udevGetDeviceDetails(virNodeDeviceDriverState *driver_state, struct udev_d= evice *device, virNodeDeviceDef *def) { switch (def->caps->data.type) { case VIR_NODE_DEV_CAP_PCI_DEV: - return udevProcessPCI(device, def); + return udevProcessPCI(driver_state, device, def); case VIR_NODE_DEV_CAP_USB_DEV: return udevProcessUSBDevice(device, def); case VIR_NODE_DEV_CAP_USB_INTERFACE: @@ -1447,13 +1447,13 @@ static void scheduleMdevctlUpdate(udevEventData *da= ta, bool force); =20 =20 static int -udevRemoveOneDeviceSysPath(const char *path) +udevRemoveOneDeviceSysPath(virNodeDeviceDriverState *driver_state, const c= har *path) { virNodeDeviceObj *obj =3D NULL; virNodeDeviceDef *def; virObjectEvent *event =3D NULL; =20 - if (!(obj =3D virNodeDeviceObjListFindBySysfsPath(driver->devs, path))= ) { + if (!(obj =3D virNodeDeviceObjListFindBySysfsPath(driver_state->devs, = path))) { VIR_DEBUG("Failed to find device to remove that has udev path '%s'= ", path); return -1; @@ -1474,21 +1474,21 @@ udevRemoveOneDeviceSysPath(const char *path) } else { VIR_DEBUG("Removing device '%s' with sysfs path '%s'", def->name, path); - virNodeDeviceObjListRemove(driver->devs, obj); + virNodeDeviceObjListRemove(driver_state->devs, obj); } virNodeDeviceObjEndAPI(&obj); =20 /* cannot check for mdev_types since they have already been removed */ VIR_WITH_OBJECT_LOCK_GUARD(driver->privateData) { - scheduleMdevctlUpdate(driver->privateData, false); + scheduleMdevctlUpdate(driver_state->privateData, false); } =20 - virObjectEventStateQueue(driver->nodeDeviceEventState, event); + virObjectEventStateQueue(driver_state->nodeDeviceEventState, event); return 0; } =20 static int -udevSetParent(struct udev_device *device, +udevSetParent(virNodeDeviceDriverState *driver_state, struct udev_device *= device, virNodeDeviceDef *def) { struct udev_device *parent_device =3D NULL; @@ -1511,7 +1511,7 @@ udevSetParent(struct udev_device *device, return -1; } =20 - if ((obj =3D virNodeDeviceObjListFindBySysfsPath(driver->devs, + if ((obj =3D virNodeDeviceObjListFindBySysfsPath(driver_state->dev= s, parent_sysfs_path))= ) { objdef =3D virNodeDeviceObjGetDef(obj); def->parent =3D g_strdup(objdef->name); @@ -1529,7 +1529,7 @@ udevSetParent(struct udev_device *device, } =20 static int -udevAddOneDevice(struct udev_device *device) +udevAddOneDevice(virNodeDeviceDriverState *driver_state, struct udev_devic= e *device) { g_autofree char *sysfs_path =3D NULL; virNodeDeviceDef *def =3D NULL; @@ -1560,15 +1560,15 @@ udevAddOneDevice(struct udev_device *device) if (udevGetDeviceNodes(device, def) !=3D 0) goto cleanup; =20 - if (udevGetDeviceDetails(device, def) !=3D 0) + if (udevGetDeviceDetails(driver_state, device, def) !=3D 0) goto cleanup; =20 - if (udevSetParent(device, def) !=3D 0) + if (udevSetParent(driver_state, device, def) !=3D 0) goto cleanup; =20 is_mdev =3D def->caps->data.type =3D=3D VIR_NODE_DEV_CAP_MDEV; =20 - if ((obj =3D virNodeDeviceObjListFindByName(driver->devs, def->name)))= { + if ((obj =3D virNodeDeviceObjListFindByName(driver_state->devs, def->n= ame))) { objdef =3D virNodeDeviceObjGetDef(obj); =20 if (is_mdev) @@ -1586,7 +1586,7 @@ udevAddOneDevice(struct udev_device *device) =20 /* If this is a device change, the old definition will be freed * and the current definition will take its place. */ - if (!(obj =3D virNodeDeviceObjListAssignDef(driver->devs, def))) + if (!(obj =3D virNodeDeviceObjListAssignDef(driver_state->devs, def))) goto cleanup; /* @def is now owned by @obj */ def =3D NULL; @@ -1606,15 +1606,15 @@ udevAddOneDevice(struct udev_device *device) virNodeDeviceObjEndAPI(&obj); =20 if (has_mdev_types) { - VIR_WITH_OBJECT_LOCK_GUARD(driver->privateData) { - scheduleMdevctlUpdate(driver->privateData, false); + VIR_WITH_OBJECT_LOCK_GUARD(driver_state->privateData) { + scheduleMdevctlUpdate(driver_state->privateData, false); } } =20 /* The added mdev needs an immediate active config update before the e= vent * is issued so that full device information is available at the time = that * the 'created' event is emitted. */ - if (is_mdev && (nodeDeviceUpdateMediatedDevices() < 0)) { + if (is_mdev && (nodeDeviceUpdateMediatedDevices(driver_state) < 0)) { VIR_WARN("Update of mediated device %s failed", NULLSTR_EMPTY(sysfs_path)); } @@ -1622,7 +1622,7 @@ udevAddOneDevice(struct udev_device *device) ret =3D 0; =20 cleanup: - virObjectEventStateQueue(driver->nodeDeviceEventState, event); + virObjectEventStateQueue(driver_state->nodeDeviceEventState, event); =20 if (ret !=3D 0) { VIR_DEBUG("Discarding device %d %p %s", ret, def, @@ -1635,7 +1635,7 @@ udevAddOneDevice(struct udev_device *device) =20 =20 static int -udevProcessDeviceListEntry(struct udev *udev, +udevProcessDeviceListEntry(virNodeDeviceDriverState *driver_state, struct = udev *udev, struct udev_list_entry *list_entry) { struct udev_device *device; @@ -1647,7 +1647,7 @@ udevProcessDeviceListEntry(struct udev *udev, device =3D udev_device_new_from_syspath(udev, name); =20 if (device !=3D NULL) { - if (udevAddOneDevice(device) !=3D 0) { + if (udevAddOneDevice(driver_state, device) !=3D 0) { VIR_DEBUG("Failed to create node device for udev device '%s'", name); } @@ -1685,7 +1685,7 @@ udevEnumerateAddMatches(struct udev_enumerate *udev_e= numerate) =20 =20 static int -udevEnumerateDevices(struct udev *udev) +udevEnumerateDevices(virNodeDeviceDriverState *driver_state, struct udev *= udev) { struct udev_enumerate *udev_enumerate =3D NULL; struct udev_list_entry *list_entry =3D NULL; @@ -1701,7 +1701,7 @@ udevEnumerateDevices(struct udev *udev) udev_list_entry_foreach(list_entry, udev_enumerate_get_list_entry(udev_enumerate))= { =20 - udevProcessDeviceListEntry(udev, list_entry); + udevProcessDeviceListEntry(driver_state, udev, list_entry); } =20 ret =3D 0; @@ -1756,12 +1756,12 @@ udevHandleOneDevice(struct udev_device *device) VIR_DEBUG("udev action: '%s': %s", action, udev_device_get_syspath(dev= ice)); =20 if (STREQ(action, "add") || STREQ(action, "change")) - return udevAddOneDevice(device); + return udevAddOneDevice(driver, device); =20 if (STREQ(action, "remove")) { const char *path =3D udev_device_get_syspath(device); =20 - return udevRemoveOneDeviceSysPath(path); + return udevRemoveOneDeviceSysPath(driver, path); } =20 if (STREQ(action, "move")) { @@ -1770,10 +1770,10 @@ udevHandleOneDevice(struct udev_device *device) if (devpath_old) { g_autofree char *devpath_old_fixed =3D g_strdup_printf("/sys%s= ", devpath_old); =20 - udevRemoveOneDeviceSysPath(devpath_old_fixed); + udevRemoveOneDeviceSysPath(driver, devpath_old_fixed); } =20 - return udevAddOneDevice(device); + return udevAddOneDevice(driver, device); } =20 return 0; @@ -1995,15 +1995,15 @@ udevSetupSystemDev(void) static void nodeStateInitializeEnumerate(void *opaque) { - struct udev *udev =3D opaque; udevEventData *priv =3D driver->privateData; + struct udev *udev =3D opaque; =20 /* Populate with known devices */ - if (udevEnumerateDevices(udev) !=3D 0) + if (udevEnumerateDevices(driver, udev) !=3D 0) goto error; /* Load persistent mdevs (which might not be activated yet) and additi= onal * information about active mediated devices from mdevctl */ - if (nodeDeviceUpdateMediatedDevices() !=3D 0) + if (nodeDeviceUpdateMediatedDevices(driver) !=3D 0) goto error; =20 cleanup: @@ -2051,9 +2051,11 @@ udevPCITranslateInit(bool privileged G_GNUC_UNUSED) =20 =20 static void -mdevctlUpdateThreadFunc(void *opaque G_GNUC_UNUSED) +mdevctlUpdateThreadFunc(void *opaque) { - if (nodeDeviceUpdateMediatedDevices() < 0) + virNodeDeviceDriverState *driver_state =3D opaque; + + if (nodeDeviceUpdateMediatedDevices(driver_state) < 0) VIR_WARN("mdevctl failed to update mediated devices"); } =20 @@ -2070,7 +2072,7 @@ launchMdevctlUpdateThread(int timer G_GNUC_UNUSED, vo= id *opaque) } =20 if (virThreadCreateFull(&thread, false, mdevctlUpdateThreadFunc, - "mdevctl-thread", false, NULL) < 0) { + "mdevctl-thread", false, driver) < 0) { virReportSystemError(errno, "%s", _("failed to create mdevctl thread")); } --=20 2.34.1 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org