This is an automated email from the ASF dual-hosted git repository.

raiden00 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git


The following commit(s) were added to refs/heads/master by this push:
     new 985e539e02 i2c: Optimize access to private data
985e539e02 is described below

commit 985e539e028abbe2d9a85bb2677090173ad51aa1
Author: Shoukui Zhang <[email protected]>
AuthorDate: Fri Oct 27 19:22:16 2023 +0800

    i2c: Optimize access to private data
    
    Signed-off-by: Shoukui Zhang <[email protected]>
---
 drivers/i2c/i2c_driver.c | 36 ++++++++++++++++++++----------------
 1 file changed, 20 insertions(+), 16 deletions(-)

diff --git a/drivers/i2c/i2c_driver.c b/drivers/i2c/i2c_driver.c
index 888a323caf..b80981a49b 100644
--- a/drivers/i2c/i2c_driver.c
+++ b/drivers/i2c/i2c_driver.c
@@ -116,16 +116,16 @@ static const struct file_operations g_i2cdrvr_fops =
 #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS
 static int i2cdrvr_open(FAR struct file *filep)
 {
-  FAR struct inode *inode;
   FAR struct i2c_driver_s *priv;
   int ret;
 
-  /* Get our private data structure */
+  /* Sanity check */
 
-  inode = filep->f_inode;
+  DEBUGASSERT(filep->f_inode->i_private != NULL);
 
-  priv = inode->i_private;
-  DEBUGASSERT(priv);
+  /* Get our private data structure */
+
+  priv = filep->f_inode->i_private;
 
   /* Get exclusive access to the I2C driver state structure */
 
@@ -164,16 +164,16 @@ out:
 #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS
 static int i2cdrvr_close(FAR struct file *filep)
 {
-  FAR struct inode *inode;
   FAR struct i2c_driver_s *priv;
   int ret;
 
-  /* Get our private data structure */
+  /* Sanity check */
 
-  inode = filep->f_inode;
+  DEBUGASSERT(filep->f_inode->i_private != NULL);
 
-  priv = inode->i_private;
-  DEBUGASSERT(priv);
+  /* Get our private data structure */
+
+  priv = filep->f_inode->i_private;
 
   /* Get exclusive access to the I2C driver state structure */
 
@@ -207,6 +207,7 @@ static int i2cdrvr_close(FAR struct file *filep)
     {
       nxmutex_destroy(&priv->lock);
       kmm_free(priv);
+      filep->f_inode->i_private = NULL;
       return OK;
     }
 
@@ -242,19 +243,18 @@ static ssize_t i2cdrvr_write(FAR struct file *filep, FAR 
const char *buffer,
 
 static int i2cdrvr_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
 {
-  FAR struct inode *inode;
   FAR struct i2c_driver_s *priv;
   FAR struct i2c_transfer_s *transfer;
   int ret;
 
+  /* Sanity check */
+
+  DEBUGASSERT(filep->f_inode->i_private != NULL);
   i2cinfo("cmd=%x arg=%08lx\n", cmd, arg);
 
   /* Get our private data structure */
 
-  inode = filep->f_inode;
-
-  priv = inode->i_private;
-  DEBUGASSERT(priv);
+  priv = filep->f_inode->i_private;
 
 #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS
   /* Get exclusive access to the I2C driver state structure */
@@ -325,9 +325,12 @@ static int i2cdrvr_unlink(FAR struct inode *inode)
   FAR struct i2c_driver_s *priv;
   int ret;
 
-  /* Get our private data structure */
+  /* Sanity check */
 
   DEBUGASSERT(inode->i_private != NULL);
+
+  /* Get our private data structure */
+
   priv = inode->i_private;
 
   /* Get exclusive access to the I2C driver state structure */
@@ -344,6 +347,7 @@ static int i2cdrvr_unlink(FAR struct inode *inode)
     {
       nxmutex_destroy(&priv->lock);
       kmm_free(priv);
+      inode->i_private = NULL;
       return OK;
     }
 

Reply via email to