diff options
author | Jack Morgenstein <jackm@dev.mellanox.co.il> | 2014-05-04 10:07:22 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-05-05 15:48:21 -0400 |
commit | 531d9014d5c870fdf493e626c4b4e448273cb616 (patch) | |
tree | b239278ffe1ffbab63e3b115381393deaaf361db | |
parent | 9becd707841207652449a8dfd90fe9c476d88546 (diff) |
net/mlx4_core: Adjust port number in qp_attach wrapper when detaching
When using single ported VFs and the VF is using port 2, we need
to adjust the port accordingly (change it from 1 to 2).
Fixes: 449fc48 ('net/mlx4: Adapt code for N-Port VF')
Signed-off-by: Matan Barak <matanb@mellanox.com>
Signed-off-by: Jack Morgenstein <jackm@mellanox.com>
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/resource_tracker.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c index 3b5f53ef29b2..1c3fdd4a1f7d 100644 --- a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c +++ b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c | |||
@@ -3733,6 +3733,25 @@ static int qp_detach(struct mlx4_dev *dev, struct mlx4_qp *qp, | |||
3733 | } | 3733 | } |
3734 | } | 3734 | } |
3735 | 3735 | ||
3736 | static int mlx4_adjust_port(struct mlx4_dev *dev, int slave, | ||
3737 | u8 *gid, enum mlx4_protocol prot) | ||
3738 | { | ||
3739 | int real_port; | ||
3740 | |||
3741 | if (prot != MLX4_PROT_ETH) | ||
3742 | return 0; | ||
3743 | |||
3744 | if (dev->caps.steering_mode == MLX4_STEERING_MODE_B0 || | ||
3745 | dev->caps.steering_mode == MLX4_STEERING_MODE_DEVICE_MANAGED) { | ||
3746 | real_port = mlx4_slave_convert_port(dev, slave, gid[5]); | ||
3747 | if (real_port < 0) | ||
3748 | return -EINVAL; | ||
3749 | gid[5] = real_port; | ||
3750 | } | ||
3751 | |||
3752 | return 0; | ||
3753 | } | ||
3754 | |||
3736 | int mlx4_QP_ATTACH_wrapper(struct mlx4_dev *dev, int slave, | 3755 | int mlx4_QP_ATTACH_wrapper(struct mlx4_dev *dev, int slave, |
3737 | struct mlx4_vhcr *vhcr, | 3756 | struct mlx4_vhcr *vhcr, |
3738 | struct mlx4_cmd_mailbox *inbox, | 3757 | struct mlx4_cmd_mailbox *inbox, |
@@ -3768,6 +3787,10 @@ int mlx4_QP_ATTACH_wrapper(struct mlx4_dev *dev, int slave, | |||
3768 | if (err) | 3787 | if (err) |
3769 | goto ex_detach; | 3788 | goto ex_detach; |
3770 | } else { | 3789 | } else { |
3790 | err = mlx4_adjust_port(dev, slave, gid, prot); | ||
3791 | if (err) | ||
3792 | goto ex_put; | ||
3793 | |||
3771 | err = rem_mcg_res(dev, slave, rqp, gid, prot, type, ®_id); | 3794 | err = rem_mcg_res(dev, slave, rqp, gid, prot, type, ®_id); |
3772 | if (err) | 3795 | if (err) |
3773 | goto ex_put; | 3796 | goto ex_put; |