lkml.org 
[lkml]   [2019]   [Feb]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 07/23] mlxsw: __mlxsw_sp_port_headroom_set(): Fix a use of local variable
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Petr Machata <petrm@mellanox.com>

    [ Upstream commit 289460404f6947ef1c38e67d680be9a84161250b ]

    The function-local variable "delay" enters the loop interpreted as delay
    in bits. However, inside the loop it gets overwritten by the result of
    mlxsw_sp_pg_buf_delay_get(), and thus leaves the loop as quantity in
    cells. Thus on second and further loop iterations, the headroom for a
    given priority is configured with a wrong size.

    Fix by introducing a loop-local variable, delay_cells. Rename thres to
    thres_cells for consistency.

    Fixes: f417f04da589 ("mlxsw: spectrum: Refactor port buffer configuration")
    Signed-off-by: Petr Machata <petrm@mellanox.com>
    Acked-by: Jiri Pirko <jiri@mellanox.com>
    Signed-off-by: Ido Schimmel <idosch@mellanox.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/ethernet/mellanox/mlxsw/spectrum.c | 12 +++++++-----
    1 file changed, 7 insertions(+), 5 deletions(-)

    --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
    +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
    @@ -1161,8 +1161,9 @@ int __mlxsw_sp_port_headroom_set(struct
    for (i = 0; i < IEEE_8021QAZ_MAX_TCS; i++) {
    bool configure = false;
    bool pfc = false;
    + u16 thres_cells;
    + u16 delay_cells;
    bool lossy;
    - u16 thres;

    for (j = 0; j < IEEE_8021QAZ_MAX_TCS; j++) {
    if (prio_tc[j] == i) {
    @@ -1176,10 +1177,11 @@ int __mlxsw_sp_port_headroom_set(struct
    continue;

    lossy = !(pfc || pause_en);
    - thres = mlxsw_sp_pg_buf_threshold_get(mlxsw_sp, mtu);
    - delay = mlxsw_sp_pg_buf_delay_get(mlxsw_sp, mtu, delay, pfc,
    - pause_en);
    - mlxsw_sp_pg_buf_pack(pbmc_pl, i, thres + delay, thres, lossy);
    + thres_cells = mlxsw_sp_pg_buf_threshold_get(mlxsw_sp, mtu);
    + delay_cells = mlxsw_sp_pg_buf_delay_get(mlxsw_sp, mtu, delay,
    + pfc, pause_en);
    + mlxsw_sp_pg_buf_pack(pbmc_pl, i, thres_cells + delay_cells,
    + thres_cells, lossy);
    }

    return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(pbmc), pbmc_pl);

    \
     
     \ /
      Last update: 2019-02-21 15:48    [W:3.761 / U:0.072 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site