mlx4_core: Fix setting VL_cap in mlx4_SET_PORT wrapper flow
Commit 096335b3f983 ("mlx4_core: Allow dynamic MTU configuration for IB ports") modifies the port VL setting. This exposes a bug in mlx4_common_set_port(), where the VL cap value passed in (inside the command mailbox) is incorrectly zeroed-out: mlx4_SET_PORT modifies the VL_cap field (byte 3 of the mailbox). Since the SET_PORT command is paravirtualized on the master as well as on the slaves, mlx4_SET_PORT_wrapper() is invoked on the master. This calls mlx4_common_set_port() where mailbox byte 3 gets overwritten by code which should only set a single bit in that byte (for the reset qkey counter flag) -- but instead overwrites the entire byte. The result is that when running in SR-IOV mode, the VL_cap will be set to zero -- fix this. Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il> Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
This commit is contained in:
parent
3aac6ff16a
commit
edc4a67e15
@ -697,10 +697,10 @@ static int mlx4_common_set_port(struct mlx4_dev *dev, int slave, u32 in_mod,
|
||||
if (slave != dev->caps.function)
|
||||
memset(inbox->buf, 0, 256);
|
||||
if (dev->flags & MLX4_FLAG_OLD_PORT_CMDS) {
|
||||
*(u8 *) inbox->buf = !!reset_qkey_viols << 6;
|
||||
*(u8 *) inbox->buf |= !!reset_qkey_viols << 6;
|
||||
((__be32 *) inbox->buf)[2] = agg_cap_mask;
|
||||
} else {
|
||||
((u8 *) inbox->buf)[3] = !!reset_qkey_viols;
|
||||
((u8 *) inbox->buf)[3] |= !!reset_qkey_viols;
|
||||
((__be32 *) inbox->buf)[1] = agg_cap_mask;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user