xiaoxiang781216 commented on code in PR #17010:
URL: https://github.com/apache/nuttx/pull/17010#discussion_r2349729104
##########
drivers/usbdev/cdcacm.c:
##########
@@ -313,6 +313,10 @@ static const struct uart_ops_s g_uartops =
cdcuart_sendbuf /* sendbuf */
};
+/* Mutex to protect device initialization / uninitialization*****************/
+
+static mutex_t g_init_lock = NXMUTEX_INITIALIZER;
Review Comment:
but I don't suggest to add lock like this.
##########
include/nuttx/fs/fs.h:
##########
@@ -1369,6 +1369,22 @@ int fdlist_close(FAR struct fdlist *list, int fd);
int nx_close(int fd);
+/****************************************************************************
+ * Name: find_driver
+ *
+ * Description:
+ * Returns the pointer of a registered driver specified by 'pathname'
+ *
+ * Input Parameters:
+ * pathname - the full path to the driver's device node in file system
+ *
+ * Returned Value:
+ * Pointer to driver's registered private pointer or NULL if not found.
+ *
+ ****************************************************************************/
+
+FAR void *find_driver(FAR const char *pathname);
Review Comment:
it's better to return inode like find_blockdriver
```
int find_driver(FAR const char *pathname, FAR struct inode **ppinode);
```
##########
drivers/usbdev/cdcacm.c:
##########
@@ -3430,8 +3430,53 @@ void cdcacm_uninitialize(FAR struct usbdevclass_driver_s
*classdev)
{
FAR struct cdcacm_driver_s *drvr = (FAR struct cdcacm_driver_s *)classdev;
FAR struct cdcacm_dev_s *priv = drvr->dev;
- char devname[CDCACM_DEVNAME_SIZE];
+
+ cdcacm_uninitialize_instance(priv->minor, classdev);
+}
+
+/****************************************************************************
+ * Name: cdcacm_uninitialize_instance
+ *
+ * Description:
+ * Function to uninitialize specific cdcacm instance
+ *
+ * Input Parameters:
+ * minor - CDCACM node minor number
+ *
+ * Returned Value:
+ * OK when successful, -ENODEV if cdcacm is not initialized
+ *
+ ****************************************************************************/
+
+int cdcacm_uninitialize_instance(int minor,
+ FAR struct usbdevclass_driver_s *classdev)
+{
int ret;
+ FAR struct cdcacm_driver_s *drvr = (FAR struct cdcacm_driver_s *)classdev;
+ FAR struct cdcacm_dev_s *priv;
+ char devname[CDCACM_DEVNAME_SIZE];
+
+ /* Create device node path from minor number */
+
+ snprintf(devname, sizeof(devname), CDCACM_DEVNAME_FORMAT, minor);
+
+ /* If classdev is not provided, find it from the file system */
+
+ if (!classdev)
+ {
+ FAR struct cdcacm_alloc_s *cdcacm_alloc = find_driver(devname);
+ if (cdcacm_alloc)
+ {
+ drvr = &cdcacm_alloc->drvr;
Review Comment:
but find_driver should have the similar prototype as find_blockdriver anyway.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]