diff options
| author | Thomas Gleixner <tglx@linutronix.de> | 2018-07-06 12:35:56 +0200 |
|---|---|---|
| committer | Thomas Gleixner <tglx@linutronix.de> | 2018-07-06 12:35:56 +0200 |
| commit | 8f63e9230decb06ea9068feaf0845c0eb39ab890 (patch) | |
| tree | a45cee821404ab0c7f7164e20c2f40f5e34ac16b /drivers/i2c/i2c-core-smbus.c | |
| parent | 58ec5e9c9044bd7e1c0bcc6ad822b2e909f49732 (diff) | |
| parent | 1268ed0c474a5c8f165ef386f3310521b5e00e27 (diff) | |
Merge branch 'x86/urgent' into x86/hyperv
Integrate the upstream bug fix to resolve the resulting conflict in
__send_ipi_mask().
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'drivers/i2c/i2c-core-smbus.c')
| -rw-r--r-- | drivers/i2c/i2c-core-smbus.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/drivers/i2c/i2c-core-smbus.c b/drivers/i2c/i2c-core-smbus.c index f3f683041e7f..51970bae3c4a 100644 --- a/drivers/i2c/i2c-core-smbus.c +++ b/drivers/i2c/i2c-core-smbus.c @@ -465,15 +465,18 @@ static s32 i2c_smbus_xfer_emulated(struct i2c_adapter *adapter, u16 addr, status = i2c_transfer(adapter, msg, num); if (status < 0) - return status; - if (status != num) - return -EIO; + goto cleanup; + if (status != num) { + status = -EIO; + goto cleanup; + } + status = 0; /* Check PEC if last message is a read */ if (i && (msg[num-1].flags & I2C_M_RD)) { status = i2c_smbus_check_pec(partial_pec, &msg[num-1]); if (status < 0) - return status; + goto cleanup; } if (read_write == I2C_SMBUS_READ) @@ -499,12 +502,13 @@ static s32 i2c_smbus_xfer_emulated(struct i2c_adapter *adapter, u16 addr, break; } +cleanup: if (msg[0].flags & I2C_M_DMA_SAFE) kfree(msg[0].buf); if (msg[1].flags & I2C_M_DMA_SAFE) kfree(msg[1].buf); - return 0; + return status; } /** |