lkml.org 
[lkml]   [2018]   [Mar]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL for 4.4 124/167] net/mlx4: Check if Granular QoS per VF has been enabled before updating QP qos_vport
    Date
    From: Ido Shamay <idos@mellanox.com>

    [ Upstream commit 269f9883fe254d109afdfc657875c456d6fabb08 ]

    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: 08068cd5683f ("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>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    ---
    drivers/net/ethernet/mellanox/mlx4/qp.c | 6 ++++++
    drivers/net/ethernet/mellanox/mlx4/resource_tracker.c | 16 +++++++++++-----
    2 files changed, 17 insertions(+), 5 deletions(-)

    diff --git a/drivers/net/ethernet/mellanox/mlx4/qp.c b/drivers/net/ethernet/mellanox/mlx4/qp.c
    index d73370541e92..62f1a3433a62 100644
    --- a/drivers/net/ethernet/mellanox/mlx4/qp.c
    +++ b/drivers/net/ethernet/mellanox/mlx4/qp.c
    @@ -481,6 +481,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;
    }
    diff --git a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
    index d1fc7fa87b05..e3080fbd9d00 100644
    --- a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
    +++ b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
    @@ -5040,6 +5040,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 =
    @@ -5144,11 +5151,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,
    --
    2.14.1
    \
     
     \ /
      Last update: 2018-03-19 18:12    [W:4.053 / U:0.184 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site