mirror of https://gitee.com/openkylin/linux.git
net/mlx4: Check if Granular QoS per VF has been enabled before updating QP qos_vport
The Granular QoS per VF feature must be enabled in FW before it can be
used.
Thus, the driver cannot modify a QP's qos_vport value (via the UPDATE_QP FW
command) if the feature has not been enabled -- the FW returns an error if
this is attempted.
Fixes: 08068cd568
("net/mlx4: Added qos_vport QP configuration in VST mode")
Signed-off-by: Ido Shamay <idos@mellanox.com>
Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il>
Signed-off-by: Tariq Toukan <tariqt@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
6c6ab3e73b
commit
269f9883fe
|
@ -484,6 +484,12 @@ int mlx4_update_qp(struct mlx4_dev *dev, u32 qpn,
|
|||
}
|
||||
|
||||
if (attr & MLX4_UPDATE_QP_QOS_VPORT) {
|
||||
if (!(dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_QOS_VPP)) {
|
||||
mlx4_warn(dev, "Granular QoS per VF is not enabled\n");
|
||||
err = -EOPNOTSUPP;
|
||||
goto out;
|
||||
}
|
||||
|
||||
qp_mask |= 1ULL << MLX4_UPD_QP_MASK_QOS_VPP;
|
||||
cmd->qp_context.qos_vport = params->qos_vport;
|
||||
}
|
||||
|
|
|
@ -5255,6 +5255,13 @@ void mlx4_delete_all_resources_for_slave(struct mlx4_dev *dev, int slave)
|
|||
mutex_unlock(&priv->mfunc.master.res_tracker.slave_list[slave].mutex);
|
||||
}
|
||||
|
||||
static void update_qos_vpp(struct mlx4_update_qp_context *ctx,
|
||||
struct mlx4_vf_immed_vlan_work *work)
|
||||
{
|
||||
ctx->qp_mask |= cpu_to_be64(1ULL << MLX4_UPD_QP_MASK_QOS_VPP);
|
||||
ctx->qp_context.qos_vport = work->qos_vport;
|
||||
}
|
||||
|
||||
void mlx4_vf_immed_vlan_work_handler(struct work_struct *_work)
|
||||
{
|
||||
struct mlx4_vf_immed_vlan_work *work =
|
||||
|
@ -5369,11 +5376,10 @@ void mlx4_vf_immed_vlan_work_handler(struct work_struct *_work)
|
|||
qp->sched_queue & 0xC7;
|
||||
upd_context->qp_context.pri_path.sched_queue |=
|
||||
((work->qos & 0x7) << 3);
|
||||
upd_context->qp_mask |=
|
||||
cpu_to_be64(1ULL <<
|
||||
MLX4_UPD_QP_MASK_QOS_VPP);
|
||||
upd_context->qp_context.qos_vport =
|
||||
work->qos_vport;
|
||||
|
||||
if (dev->caps.flags2 &
|
||||
MLX4_DEV_CAP_FLAG2_QOS_VPP)
|
||||
update_qos_vpp(upd_context, work);
|
||||
}
|
||||
|
||||
err = mlx4_cmd(dev, mailbox->dma,
|
||||
|
|
Loading…
Reference in New Issue