diff options
| author | David S. Miller <davem@davemloft.net> | 2015-05-05 19:39:13 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2015-05-05 19:39:13 -0400 |
| commit | bc321ed2db8ee03b2f2ba809286d3bf4eef1e5e0 (patch) | |
| tree | 525962c2f147a22285a41dcc9edaeb6fe63398e4 | |
| parent | 7aab5159fa0100ee3f80d1b0f55cd7e9b5823270 (diff) | |
| parent | 2d3c739739e64619f4846746a06ff0a6adf8a155 (diff) | |
Merge branch 'mlx4'
Or Gerlitz says:
====================
mlx4 fixes for 4.1-rc2
Eran's fix is for a small off-by-one introduces on 4.1-rc1.
Yisahi fixes an issue with comes into play only on VMs with
many (> 256) vCPUs.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/en_port.c | 2 | ||||
| -rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/resource_tracker.c | 14 |
2 files changed, 8 insertions, 8 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_port.c b/drivers/net/ethernet/mellanox/mlx4/en_port.c index 54f0e5ab2e55..0a56f010c846 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_port.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_port.c | |||
| @@ -139,7 +139,7 @@ static unsigned long en_stats_adder(__be64 *start, __be64 *next, int num) | |||
| 139 | int i; | 139 | int i; |
| 140 | int offset = next - start; | 140 | int offset = next - start; |
| 141 | 141 | ||
| 142 | for (i = 0; i <= num; i++) { | 142 | for (i = 0; i < num; i++) { |
| 143 | ret += be64_to_cpu(*curr); | 143 | ret += be64_to_cpu(*curr); |
| 144 | curr += offset; | 144 | curr += offset; |
| 145 | } | 145 | } |
diff --git a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c index c7f28bf4b8e2..92fce1b98558 100644 --- a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c +++ b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c | |||
| @@ -2845,7 +2845,7 @@ int mlx4_SW2HW_EQ_wrapper(struct mlx4_dev *dev, int slave, | |||
| 2845 | { | 2845 | { |
| 2846 | int err; | 2846 | int err; |
| 2847 | int eqn = vhcr->in_modifier; | 2847 | int eqn = vhcr->in_modifier; |
| 2848 | int res_id = (slave << 8) | eqn; | 2848 | int res_id = (slave << 10) | eqn; |
| 2849 | struct mlx4_eq_context *eqc = inbox->buf; | 2849 | struct mlx4_eq_context *eqc = inbox->buf; |
| 2850 | int mtt_base = eq_get_mtt_addr(eqc) / dev->caps.mtt_entry_sz; | 2850 | int mtt_base = eq_get_mtt_addr(eqc) / dev->caps.mtt_entry_sz; |
| 2851 | int mtt_size = eq_get_mtt_size(eqc); | 2851 | int mtt_size = eq_get_mtt_size(eqc); |
| @@ -3051,7 +3051,7 @@ int mlx4_HW2SW_EQ_wrapper(struct mlx4_dev *dev, int slave, | |||
| 3051 | struct mlx4_cmd_info *cmd) | 3051 | struct mlx4_cmd_info *cmd) |
| 3052 | { | 3052 | { |
| 3053 | int eqn = vhcr->in_modifier; | 3053 | int eqn = vhcr->in_modifier; |
| 3054 | int res_id = eqn | (slave << 8); | 3054 | int res_id = eqn | (slave << 10); |
| 3055 | struct res_eq *eq; | 3055 | struct res_eq *eq; |
| 3056 | int err; | 3056 | int err; |
| 3057 | 3057 | ||
| @@ -3108,7 +3108,7 @@ int mlx4_GEN_EQE(struct mlx4_dev *dev, int slave, struct mlx4_eqe *eqe) | |||
| 3108 | return 0; | 3108 | return 0; |
| 3109 | 3109 | ||
| 3110 | mutex_lock(&priv->mfunc.master.gen_eqe_mutex[slave]); | 3110 | mutex_lock(&priv->mfunc.master.gen_eqe_mutex[slave]); |
| 3111 | res_id = (slave << 8) | event_eq->eqn; | 3111 | res_id = (slave << 10) | event_eq->eqn; |
| 3112 | err = get_res(dev, slave, res_id, RES_EQ, &req); | 3112 | err = get_res(dev, slave, res_id, RES_EQ, &req); |
| 3113 | if (err) | 3113 | if (err) |
| 3114 | goto unlock; | 3114 | goto unlock; |
| @@ -3131,7 +3131,7 @@ int mlx4_GEN_EQE(struct mlx4_dev *dev, int slave, struct mlx4_eqe *eqe) | |||
| 3131 | 3131 | ||
| 3132 | memcpy(mailbox->buf, (u8 *) eqe, 28); | 3132 | memcpy(mailbox->buf, (u8 *) eqe, 28); |
| 3133 | 3133 | ||
| 3134 | in_modifier = (slave & 0xff) | ((event_eq->eqn & 0xff) << 16); | 3134 | in_modifier = (slave & 0xff) | ((event_eq->eqn & 0x3ff) << 16); |
| 3135 | 3135 | ||
| 3136 | err = mlx4_cmd(dev, mailbox->dma, in_modifier, 0, | 3136 | err = mlx4_cmd(dev, mailbox->dma, in_modifier, 0, |
| 3137 | MLX4_CMD_GEN_EQE, MLX4_CMD_TIME_CLASS_B, | 3137 | MLX4_CMD_GEN_EQE, MLX4_CMD_TIME_CLASS_B, |
| @@ -3157,7 +3157,7 @@ int mlx4_QUERY_EQ_wrapper(struct mlx4_dev *dev, int slave, | |||
| 3157 | struct mlx4_cmd_info *cmd) | 3157 | struct mlx4_cmd_info *cmd) |
| 3158 | { | 3158 | { |
| 3159 | int eqn = vhcr->in_modifier; | 3159 | int eqn = vhcr->in_modifier; |
| 3160 | int res_id = eqn | (slave << 8); | 3160 | int res_id = eqn | (slave << 10); |
| 3161 | struct res_eq *eq; | 3161 | struct res_eq *eq; |
| 3162 | int err; | 3162 | int err; |
| 3163 | 3163 | ||
| @@ -4714,13 +4714,13 @@ static void rem_slave_eqs(struct mlx4_dev *dev, int slave) | |||
| 4714 | break; | 4714 | break; |
| 4715 | 4715 | ||
| 4716 | case RES_EQ_HW: | 4716 | case RES_EQ_HW: |
| 4717 | err = mlx4_cmd(dev, slave, eqn & 0xff, | 4717 | err = mlx4_cmd(dev, slave, eqn & 0x3ff, |
| 4718 | 1, MLX4_CMD_HW2SW_EQ, | 4718 | 1, MLX4_CMD_HW2SW_EQ, |
| 4719 | MLX4_CMD_TIME_CLASS_A, | 4719 | MLX4_CMD_TIME_CLASS_A, |
| 4720 | MLX4_CMD_NATIVE); | 4720 | MLX4_CMD_NATIVE); |
| 4721 | if (err) | 4721 | if (err) |
| 4722 | mlx4_dbg(dev, "rem_slave_eqs: failed to move slave %d eqs %d to SW ownership\n", | 4722 | mlx4_dbg(dev, "rem_slave_eqs: failed to move slave %d eqs %d to SW ownership\n", |
| 4723 | slave, eqn); | 4723 | slave, eqn & 0x3ff); |
| 4724 | atomic_dec(&eq->mtt->ref_count); | 4724 | atomic_dec(&eq->mtt->ref_count); |
| 4725 | state = RES_EQ_RESERVED; | 4725 | state = RES_EQ_RESERVED; |
| 4726 | break; | 4726 | break; |
