lkml.org 
[lkml]   [2022]   [Aug]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.19 0555/1157] net/mlx5: Fix driver use of uninitialized timeout
    Date
    From: Shay Drory <shayd@nvidia.com>

    [ Upstream commit 42b4f7f66a43cdb9216e76e595c8a9af154806da ]

    Currently, driver is setting default values to all timeouts during
    function setup. The offending commit is using a timeout before
    function setup, meaning: the timeout is 0 (or garbage), since no
    value have been set.
    This may result in failure to probe the driver:
    mlx5_function_setup:1034:(pid 69850): Firmware over 4294967296 MS in pre-initializing state, aborting
    probe_one:1591:(pid 69850): mlx5_init_one failed with error code -16

    Hence, set default values to timeouts during tout_init()

    Fixes: 37ca95e62ee2 ("net/mlx5: Increase FW pre-init timeout for health recovery")
    Signed-off-by: Shay Drory <shayd@nvidia.com>
    Reviewed-by: Moshe Shemesh <moshe@nvidia.com>
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/mellanox/mlx5/core/lib/tout.c | 11 ++++-------
    drivers/net/ethernet/mellanox/mlx5/core/lib/tout.h | 1 -
    drivers/net/ethernet/mellanox/mlx5/core/main.c | 2 --
    3 files changed, 4 insertions(+), 10 deletions(-)

    diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/tout.c b/drivers/net/ethernet/mellanox/mlx5/core/lib/tout.c
    index d758848d34d0..696e45e2bd06 100644
    --- a/drivers/net/ethernet/mellanox/mlx5/core/lib/tout.c
    +++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/tout.c
    @@ -32,20 +32,17 @@ static void tout_set(struct mlx5_core_dev *dev, u64 val, enum mlx5_timeouts_type
    dev->timeouts->to[type] = val;
    }

    -void mlx5_tout_set_def_val(struct mlx5_core_dev *dev)
    +int mlx5_tout_init(struct mlx5_core_dev *dev)
    {
    int i;

    - for (i = 0; i < MAX_TIMEOUT_TYPES; i++)
    - tout_set(dev, tout_def_sw_val[i], i);
    -}
    -
    -int mlx5_tout_init(struct mlx5_core_dev *dev)
    -{
    dev->timeouts = kmalloc(sizeof(*dev->timeouts), GFP_KERNEL);
    if (!dev->timeouts)
    return -ENOMEM;

    + for (i = 0; i < MAX_TIMEOUT_TYPES; i++)
    + tout_set(dev, tout_def_sw_val[i], i);
    +
    return 0;
    }

    diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/tout.h b/drivers/net/ethernet/mellanox/mlx5/core/lib/tout.h
    index 257c03eeab36..bc9e9aeda847 100644
    --- a/drivers/net/ethernet/mellanox/mlx5/core/lib/tout.h
    +++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/tout.h
    @@ -35,7 +35,6 @@ int mlx5_tout_init(struct mlx5_core_dev *dev);
    void mlx5_tout_cleanup(struct mlx5_core_dev *dev);
    void mlx5_tout_query_iseg(struct mlx5_core_dev *dev);
    int mlx5_tout_query_dtor(struct mlx5_core_dev *dev);
    -void mlx5_tout_set_def_val(struct mlx5_core_dev *dev);
    u64 _mlx5_tout_ms(struct mlx5_core_dev *dev, enum mlx5_timeouts_types type);

    #define mlx5_tout_ms(dev, type) _mlx5_tout_ms(dev, MLX5_TO_##type##_MS)
    diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c
    index 95f26624b57c..ba2e5232b90b 100644
    --- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
    +++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
    @@ -1023,8 +1023,6 @@ static int mlx5_function_setup(struct mlx5_core_dev *dev, u64 timeout)
    if (mlx5_core_is_pf(dev))
    pcie_print_link_status(dev->pdev);

    - mlx5_tout_set_def_val(dev);
    -
    /* wait for firmware to accept initialization segments configurations
    */
    err = wait_fw_init(dev, timeout,
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-08-16 02:09    [W:4.033 / U:0.068 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site