]> git.baikalelectronics.ru Git - kernel.git/commitdiff
mlxsw: i2c: Fix chunk size setting in output mailbox buffer
authorVadim Pasternak <vadimp@nvidia.com>
Thu, 24 Aug 2023 13:43:08 +0000 (15:43 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 13 Sep 2023 07:42:35 +0000 (09:42 +0200)
[ Upstream commit 146c7c330507c0384bf29d567186632bfe975927 ]

The driver reads commands output from the output mailbox. If the size
of the output mailbox is not a multiple of the transaction /
block size, then the driver will not issue enough read transactions
to read the entire output, which can result in driver initialization
errors.

Fix by determining the number of transactions using DIV_ROUND_UP().

Fixes: 3029a693beda ("mlxsw: i2c: Allow flexible setting of I2C transactions size")
Signed-off-by: Vadim Pasternak <vadimp@nvidia.com>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Signed-off-by: Petr Machata <petrm@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/ethernet/mellanox/mlxsw/i2c.c

index f5f5f8dc3d190c5298ce8b3c9272a8155062d4b3..26e05f129e35a8e4cec90c84bafc7a46c59b0928 100644 (file)
@@ -444,7 +444,7 @@ mlxsw_i2c_cmd(struct device *dev, u16 opcode, u32 in_mod, size_t in_mbox_size,
        } else {
                /* No input mailbox is case of initialization query command. */
                reg_size = MLXSW_I2C_MAX_DATA_SIZE;
-               num = reg_size / mlxsw_i2c->block_size;
+               num = DIV_ROUND_UP(reg_size, mlxsw_i2c->block_size);
 
                if (mutex_lock_interruptible(&mlxsw_i2c->cmd.lock) < 0) {
                        dev_err(&client->dev, "Could not acquire lock");