|
@@ -877,7 +877,7 @@ static int mlx4_MAD_IFC_wrapper(struct mlx4_dev *dev, int slave,
|
|
|
{
|
|
|
struct ib_smp *smp = inbox->buf;
|
|
|
u32 index;
|
|
|
- u8 port;
|
|
|
+ u8 port, slave_port;
|
|
|
u8 opcode_modifier;
|
|
|
u16 *table;
|
|
|
int err;
|
|
@@ -889,7 +889,8 @@ static int mlx4_MAD_IFC_wrapper(struct mlx4_dev *dev, int slave,
|
|
|
__be32 slave_cap_mask;
|
|
|
__be64 slave_node_guid;
|
|
|
|
|
|
- port = vhcr->in_modifier;
|
|
|
+ slave_port = vhcr->in_modifier;
|
|
|
+ port = mlx4_slave_convert_port(dev, slave, slave_port);
|
|
|
|
|
|
/* network-view bit is for driver use only, and should not be passed to FW */
|
|
|
opcode_modifier = vhcr->op_modifier & ~0x8; /* clear netw view bit */
|
|
@@ -925,8 +926,9 @@ static int mlx4_MAD_IFC_wrapper(struct mlx4_dev *dev, int slave,
|
|
|
if (smp->attr_id == IB_SMP_ATTR_PORT_INFO) {
|
|
|
/*get the slave specific caps:*/
|
|
|
/*do the command */
|
|
|
+ smp->attr_mod = cpu_to_be32(port);
|
|
|
err = mlx4_cmd_box(dev, inbox->dma, outbox->dma,
|
|
|
- vhcr->in_modifier, opcode_modifier,
|
|
|
+ port, opcode_modifier,
|
|
|
vhcr->op, MLX4_CMD_TIME_CLASS_C, MLX4_CMD_NATIVE);
|
|
|
/* modify the response for slaves */
|
|
|
if (!err && slave != mlx4_master_func_num(dev)) {
|
|
@@ -970,7 +972,7 @@ static int mlx4_MAD_IFC_wrapper(struct mlx4_dev *dev, int slave,
|
|
|
}
|
|
|
if (smp->attr_id == IB_SMP_ATTR_NODE_INFO) {
|
|
|
err = mlx4_cmd_box(dev, inbox->dma, outbox->dma,
|
|
|
- vhcr->in_modifier, opcode_modifier,
|
|
|
+ port, opcode_modifier,
|
|
|
vhcr->op, MLX4_CMD_TIME_CLASS_C, MLX4_CMD_NATIVE);
|
|
|
if (!err) {
|
|
|
slave_node_guid = mlx4_get_slave_node_guid(dev, slave);
|