summaryrefslogtreecommitdiffstats
path: root/drivers/staging/media/atomisp
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2022-06-15 21:50:31 +0100
committerMauro Carvalho Chehab <mchehab@kernel.org>2022-07-08 16:38:10 +0100
commit798d2ad739da5343122eff386578f259278f2594 (patch)
tree325c0a46f73a940ec6fa4ba80b0465ca6a4670b3 /drivers/staging/media/atomisp
parent3bde235bf6780e741d602deb570a8bd7e10a685d (diff)
downloadlinux-798d2ad739da5343122eff386578f259278f2594.tar.bz2
media: atomisp: add error checking to atomisp_create_pipes_stream()
The functions called by atomisp_create_pipes_stream() can fail, add error checking for them. Link: https://lore.kernel.org/linux-media/20220615205037.16549-35-hdegoede@redhat.com Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Diffstat (limited to 'drivers/staging/media/atomisp')
-rw-r--r--drivers/staging/media/atomisp/pci/atomisp_compat.h2
-rw-r--r--drivers/staging/media/atomisp/pci/atomisp_compat_css20.c20
-rw-r--r--drivers/staging/media/atomisp/pci/atomisp_ioctl.c13
3 files changed, 29 insertions, 6 deletions
diff --git a/drivers/staging/media/atomisp/pci/atomisp_compat.h b/drivers/staging/media/atomisp/pci/atomisp_compat.h
index 809f1a8c9974..3393ae6824f0 100644
--- a/drivers/staging/media/atomisp/pci/atomisp_compat.h
+++ b/drivers/staging/media/atomisp/pci/atomisp_compat.h
@@ -240,7 +240,7 @@ int atomisp_css_input_configure_port(struct atomisp_sub_device *asd,
unsigned int metadata_width,
unsigned int metadata_height);
-void atomisp_create_pipes_stream(struct atomisp_sub_device *asd);
+int atomisp_create_pipes_stream(struct atomisp_sub_device *asd);
void atomisp_destroy_pipes_stream_force(struct atomisp_sub_device *asd);
void atomisp_css_stop(struct atomisp_sub_device *asd,
diff --git a/drivers/staging/media/atomisp/pci/atomisp_compat_css20.c b/drivers/staging/media/atomisp/pci/atomisp_compat_css20.c
index d03b29add5c3..6375cfb839d4 100644
--- a/drivers/staging/media/atomisp/pci/atomisp_compat_css20.c
+++ b/drivers/staging/media/atomisp/pci/atomisp_compat_css20.c
@@ -785,10 +785,24 @@ pipe_err:
return -EINVAL;
}
-void atomisp_create_pipes_stream(struct atomisp_sub_device *asd)
+int atomisp_create_pipes_stream(struct atomisp_sub_device *asd)
{
- __create_pipes(asd);
- __create_streams(asd);
+ int ret;
+
+ ret = __create_pipes(asd);
+ if (ret) {
+ dev_err(asd->isp->dev, "create pipe failed %d.\n", ret);
+ return ret;
+ }
+
+ ret = __create_streams(asd);
+ if (ret) {
+ dev_warn(asd->isp->dev, "create stream failed %d.\n", ret);
+ __destroy_pipes(asd, true);
+ return ret;
+ }
+
+ return 0;
}
int atomisp_css_update_stream(struct atomisp_sub_device *asd)
diff --git a/drivers/staging/media/atomisp/pci/atomisp_ioctl.c b/drivers/staging/media/atomisp/pci/atomisp_ioctl.c
index 73906902600c..459645c2e2a7 100644
--- a/drivers/staging/media/atomisp/pci/atomisp_ioctl.c
+++ b/drivers/staging/media/atomisp/pci/atomisp_ioctl.c
@@ -2267,8 +2267,17 @@ stopsensor:
dev_err(isp->dev, "atomisp_reset");
atomisp_reset(isp);
for (i = 0; i < isp->num_of_streams; i++) {
- if (recreate_streams[i])
- atomisp_create_pipes_stream(&isp->asd[i]);
+ if (recreate_streams[i]) {
+ int ret2;
+
+ ret2 = atomisp_create_pipes_stream(&isp->asd[i]);
+ if (ret2) {
+ dev_err(isp->dev, "%s error re-creating streams: %d\n",
+ __func__, ret2);
+ if (!ret)
+ ret = ret2;
+ }
+ }
}
isp->isp_timeout = false;
}