mlx4_core: Fix setting VL_cap in mlx4_SET_PORT wrapper flow
authorJack Morgenstein <jackm@dev.mellanox.co.il>
Thu, 24 May 2012 13:08:09 +0000 (16:08 +0300)
committerRoland Dreier <roland@purestorage.com>
Wed, 6 Jun 2012 17:07:54 +0000 (10:07 -0700)
commitedc4a67e15e34d2b3a2ab968625fd157751125d8
tree2bb6ad73c6ea9df2a0c30cda3d57931095654c00
parent3aac6ff16a2097be668975fd51084df2e27e4999
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>
drivers/net/ethernet/mellanox/mlx4/port.c