History

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.

Jack Morgenstein committed 14 years ago

Commit edc4a671 parent 3aac6ff1 file · +2 −2Browse files

Unified · Split

drivers/net/ethernet/mellanox/mlx4/port.c+2−2
@@ -697,10 +697,10 @@ static int mlx4_common_set_port(struct mlx4_dev *dev, int slave, u32 in_mod, · 696 unmodified lines
697697 if (slave != dev->caps.function)
698698 memset(inbox->buf, 0, 256);
699699 if (dev->flags & MLX4_FLAG_OLD_PORT_CMDS) {
700− *(u8 *) inbox->buf = !!reset_qkey_viols << 6;
700+ *(u8 *) inbox->buf |= !!reset_qkey_viols << 6;
701701 ((__be32 *) inbox->buf)[2] = agg_cap_mask;
702702 } else {
703− ((u8 *) inbox->buf)[3] = !!reset_qkey_viols;
703+ ((u8 *) inbox->buf)[3] |= !!reset_qkey_viols;
704704 ((__be32 *) inbox->buf)[1] = agg_cap_mask;
705705 }
706706

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t