net/mlx5: SD, Handle possible devcom ERR_PTR
authorTariq Toukan <tariqt@nvidia.com>
Thu, 11 Apr 2024 11:54:40 +0000 (14:54 +0300)
committerJakub Kicinski <kuba@kernel.org>
Sat, 13 Apr 2024 02:13:53 +0000 (19:13 -0700)
Check if devcom holds an error pointer and return immediately.

This fixes Smatch static checker warning:
drivers/net/ethernet/mellanox/mlx5/core/lib/sd.c:221 sd_register()
error: 'devcom' dereferencing possible ERR_PTR()

Enhance mlx5_devcom_register_component() so it stops returning NULL,
making it easier for its callers.

Fixes: d3d057666090 ("net/mlx5: SD, Implement devcom communication and primary election")
Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
Link: https://lore.kernel.org/all/f09666c8-e604-41f6-958b-4cc55c73faf9@gmail.com/T/
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
Reviewed-by: Gal Pressman <gal@nvidia.com>
Link: https://lore.kernel.org/r/20240411115444.374475-3-tariqt@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/mellanox/mlx5/core/en_main.c
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.c
drivers/net/ethernet/mellanox/mlx5/core/lib/sd.c
drivers/net/ethernet/mellanox/mlx5/core/main.c

index b375ef268671ab01215e370149d1a3b9cb86b756..319930c04093ba2d15d498006ad9b3d060a883b7 100644 (file)
@@ -209,8 +209,8 @@ static int mlx5e_devcom_init_mpv(struct mlx5e_priv *priv, u64 *data)
                                                      *data,
                                                      mlx5e_devcom_event_mpv,
                                                      priv);
-       if (IS_ERR_OR_NULL(priv->devcom))
-               return -EOPNOTSUPP;
+       if (IS_ERR(priv->devcom))
+               return PTR_ERR(priv->devcom);
 
        if (mlx5_core_is_mp_master(priv->mdev)) {
                mlx5_devcom_send_event(priv->devcom, MPV_DEVCOM_MASTER_UP,
index 1f60954c12f7257cacf0c7e46539c949ac6eaf7b..844d3e3a65ddf04c6e326127b1b1c05ed351b3a7 100644 (file)
@@ -3060,7 +3060,7 @@ void mlx5_esw_offloads_devcom_init(struct mlx5_eswitch *esw, u64 key)
                                                     key,
                                                     mlx5_esw_offloads_devcom_event,
                                                     esw);
-       if (IS_ERR_OR_NULL(esw->devcom))
+       if (IS_ERR(esw->devcom))
                return;
 
        mlx5_devcom_send_event(esw->devcom,
index e7d59cfa8708e1617f78b28974977a9588026d1f..7b0766c89f4cf0aac5560e9eb041e564d6531e65 100644 (file)
@@ -220,7 +220,7 @@ mlx5_devcom_register_component(struct mlx5_devcom_dev *devc,
        struct mlx5_devcom_comp *comp;
 
        if (IS_ERR_OR_NULL(devc))
-               return NULL;
+               return ERR_PTR(-EINVAL);
 
        mutex_lock(&comp_list_lock);
        comp = devcom_component_get(devc, id, key, handler);
index 5b28084e8a03c77936e180a06246f9ef0a8dc4bd..dd5d186dc6148f065b986ee5d2363940314816db 100644 (file)
@@ -213,8 +213,8 @@ static int sd_register(struct mlx5_core_dev *dev)
        sd = mlx5_get_sd(dev);
        devcom = mlx5_devcom_register_component(dev->priv.devc, MLX5_DEVCOM_SD_GROUP,
                                                sd->group_id, NULL, dev);
-       if (!devcom)
-               return -ENOMEM;
+       if (IS_ERR(devcom))
+               return PTR_ERR(devcom);
 
        sd->devcom = devcom;
 
index 59806553889e907f7ff2938af2063b1e3b73ca1e..a39c4b25ba28049f47f659417dbd2d71d7fb7750 100644 (file)
@@ -956,7 +956,7 @@ static void mlx5_register_hca_devcom_comp(struct mlx5_core_dev *dev)
                mlx5_devcom_register_component(dev->priv.devc, MLX5_DEVCOM_HCA_PORTS,
                                               mlx5_query_nic_system_image_guid(dev),
                                               NULL, dev);
-       if (IS_ERR_OR_NULL(dev->priv.hca_devcom_comp))
+       if (IS_ERR(dev->priv.hca_devcom_comp))
                mlx5_core_err(dev, "Failed to register devcom HCA component\n");
 }