media: vimc: keep the error value when adding an entity fails
authorDafna Hirschfeld <dafna.hirschfeld@collabora.com>
Sat, 28 Mar 2020 07:52:52 +0000 (08:52 +0100)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Tue, 14 Apr 2020 10:02:46 +0000 (12:02 +0200)
Currently when the 'add' callback of an entity fails, a
NULL is returned. This hides the error code of the failure
and always returns -EINVAL.

Replace return NULL with return ERR_PTR(ret) to improve debugging.

Signed-off-by: Dafna Hirschfeld <dafna.hirschfeld@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/media/test_drivers/vimc/vimc-capture.c
drivers/media/test_drivers/vimc/vimc-core.c
drivers/media/test_drivers/vimc/vimc-debayer.c
drivers/media/test_drivers/vimc/vimc-scaler.c
drivers/media/test_drivers/vimc/vimc-sensor.c

index 23e740c..8bafbf9 100644 (file)
@@ -395,7 +395,7 @@ struct vimc_ent_device *vimc_cap_add(struct vimc_device *vimc,
        /* Allocate the vimc_cap_device struct */
        vcap = kzalloc(sizeof(*vcap), GFP_KERNEL);
        if (!vcap)
-               return NULL;
+               return ERR_PTR(-ENOMEM);
 
        /* Initialize the media entity */
        vcap->vdev.entity.name = vcfg_name;
@@ -476,5 +476,5 @@ err_clean_m_ent:
 err_free_vcap:
        kfree(vcap);
 
-       return NULL;
+       return ERR_PTR(ret);
 }
index dab01cb..edac998 100644 (file)
@@ -187,12 +187,15 @@ static int vimc_add_subdevs(struct vimc_device *vimc)
                        vimc->pipe_cfg->ents[i].name);
                vimc->ent_devs[i] = vimc->pipe_cfg->ents[i].add(vimc,
                                        vimc->pipe_cfg->ents[i].name);
-               if (!vimc->ent_devs[i]) {
-                       dev_err(vimc->mdev.dev, "add new entity for %s\n",
-                               vimc->pipe_cfg->ents[i].name);
+               if (IS_ERR(vimc->ent_devs[i])) {
+                       int err = PTR_ERR(vimc->ent_devs[i]);
+
+                       dev_err(vimc->mdev.dev, "adding entity %s failed (%d)\n",
+                               vimc->pipe_cfg->ents[i].name, err);
+                       vimc->ent_devs[i] = NULL;
                        vimc_unregister_subdevs(vimc);
                        vimc_release_subdevs(vimc);
-                       return -EINVAL;
+                       return err;
                }
        }
        return 0;
index baf6bf9..d591b6a 100644 (file)
@@ -532,7 +532,7 @@ struct vimc_ent_device *vimc_deb_add(struct vimc_device *vimc,
        /* Allocate the vdeb struct */
        vdeb = kzalloc(sizeof(*vdeb), GFP_KERNEL);
        if (!vdeb)
-               return NULL;
+               return ERR_PTR(-ENOMEM);
 
        /* Create controls: */
        v4l2_ctrl_handler_init(&vdeb->hdl, 2);
@@ -577,5 +577,5 @@ err_free_hdl:
 err_free_vdeb:
        kfree(vdeb);
 
-       return NULL;
+       return ERR_PTR(ret);
 }
index 7521439..6ea05dc 100644 (file)
@@ -483,7 +483,7 @@ struct vimc_ent_device *vimc_sca_add(struct vimc_device *vimc,
        /* Allocate the vsca struct */
        vsca = kzalloc(sizeof(*vsca), GFP_KERNEL);
        if (!vsca)
-               return NULL;
+               return ERR_PTR(-ENOMEM);
 
        /* Initialize ved and sd */
        vsca->pads[0].flags = MEDIA_PAD_FL_SINK;
@@ -495,7 +495,7 @@ struct vimc_ent_device *vimc_sca_add(struct vimc_device *vimc,
                                   vsca->pads, &vimc_sca_ops);
        if (ret) {
                kfree(vsca);
-               return NULL;
+               return ERR_PTR(ret);
        }
 
        vsca->ved.process_frame = vimc_sca_process_frame;
index 92daee5..24ce5b7 100644 (file)
@@ -317,7 +317,7 @@ struct vimc_ent_device *vimc_sen_add(struct vimc_device *vimc,
        /* Allocate the vsen struct */
        vsen = kzalloc(sizeof(*vsen), GFP_KERNEL);
        if (!vsen)
-               return NULL;
+               return ERR_PTR(-ENOMEM);
 
        v4l2_ctrl_handler_init(&vsen->hdl, 4);
 
@@ -372,5 +372,5 @@ err_free_hdl:
 err_free_vsen:
        kfree(vsen);
 
-       return NULL;
+       return ERR_PTR(ret);
 }