i2c: cadence: cdns_i2c_master_xfer(): Fix runtime PM leak on error path
authorLars-Peter Clausen <lars@metafoo.de>
Fri, 14 Apr 2023 02:10:21 +0000 (19:10 -0700)
committerWolfram Sang <wsa@kernel.org>
Tue, 18 Apr 2023 16:43:45 +0000 (18:43 +0200)
The cdns_i2c_master_xfer() function gets a runtime PM reference when the
function is entered. This reference is released when the function is
exited. There is currently one error path where the function exits
directly, which leads to a leak of the runtime PM reference.

Make sure that this error path also releases the runtime PM reference.

Fixes: 1a351b10b967 ("i2c: cadence: Added slave support")
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Reviewed-by: Michal Simek <michal.simek@amd.com>
Signed-off-by: Wolfram Sang <wsa@kernel.org>
drivers/i2c/busses/i2c-cadence.c

index b5d22e7282c227a1fb29d8dc43dc2bc3aacf8779..982c207d473b777512443de33877c0fc102f9f17 100644 (file)
@@ -827,8 +827,10 @@ static int cdns_i2c_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs,
 #if IS_ENABLED(CONFIG_I2C_SLAVE)
        /* Check i2c operating mode and switch if possible */
        if (id->dev_mode == CDNS_I2C_MODE_SLAVE) {
-               if (id->slave_state != CDNS_I2C_SLAVE_STATE_IDLE)
-                       return -EAGAIN;
+               if (id->slave_state != CDNS_I2C_SLAVE_STATE_IDLE) {
+                       ret = -EAGAIN;
+                       goto out;
+               }
 
                /* Set mode to master */
                cdns_i2c_set_mode(CDNS_I2C_MODE_MASTER, id);