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;
}