* [PATCH v4 07/79] media: exynos-gsc: don't resume at remove time
[not found] <cover.1619621413.git.mchehab+huawei@kernel.org>
@ 2021-04-28 14:51 ` Mauro Carvalho Chehab
2021-04-28 15:25 ` Sylwester Nawrocki
` (2 more replies)
2021-04-28 14:51 ` [PATCH v4 08/79] media: atmel: properly get pm_runtime Mauro Carvalho Chehab
` (14 subsequent siblings)
15 siblings, 3 replies; 28+ messages in thread
From: Mauro Carvalho Chehab @ 2021-04-28 14:51 UTC (permalink / raw)
Cc: linuxarm, mauro.chehab, Mauro Carvalho Chehab, Ezequiel Garcia,
Hans Verkuil, Krzysztof Kozlowski, Mauro Carvalho Chehab,
linux-arm-kernel, linux-kernel, linux-media, linux-samsung-soc
Calling pm_runtime_get_sync() at driver's removal time is not
needed, as this will resume PM runtime. Also, the PM runtime
code at pm_runtime_disable() already calls it, if it detects
the need.
So, change the logic in order to disable PM runtime earlier.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
drivers/media/platform/exynos-gsc/gsc-core.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/drivers/media/platform/exynos-gsc/gsc-core.c b/drivers/media/platform/exynos-gsc/gsc-core.c
index 9f41c2e7097a..8b943075c503 100644
--- a/drivers/media/platform/exynos-gsc/gsc-core.c
+++ b/drivers/media/platform/exynos-gsc/gsc-core.c
@@ -1210,18 +1210,19 @@ static int gsc_remove(struct platform_device *pdev)
struct gsc_dev *gsc = platform_get_drvdata(pdev);
int i;
- pm_runtime_get_sync(&pdev->dev);
-
gsc_unregister_m2m_device(gsc);
v4l2_device_unregister(&gsc->v4l2_dev);
vb2_dma_contig_clear_max_seg_size(&pdev->dev);
- for (i = 0; i < gsc->num_clocks; i++)
- clk_disable_unprepare(gsc->clock[i]);
- pm_runtime_put_noidle(&pdev->dev);
pm_runtime_disable(&pdev->dev);
+ if (!pm_runtime_status_suspended(dev))
+ for (i = 0; i < gsc->num_clocks; i++)
+ clk_disable_unprepare(gsc->clock[i]);
+
+ pm_runtime_set_suspended(dev);
+
dev_dbg(&pdev->dev, "%s driver unloaded\n", pdev->name);
return 0;
}
--
2.30.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH v4 08/79] media: atmel: properly get pm_runtime
[not found] <cover.1619621413.git.mchehab+huawei@kernel.org>
2021-04-28 14:51 ` [PATCH v4 07/79] media: exynos-gsc: don't resume at remove time Mauro Carvalho Chehab
@ 2021-04-28 14:51 ` Mauro Carvalho Chehab
2021-04-30 16:13 ` Jonathan Cameron
2021-04-28 14:51 ` [PATCH v4 10/79] media: mdk-mdp: fix pm_runtime_get_sync() usage count Mauro Carvalho Chehab
` (13 subsequent siblings)
15 siblings, 1 reply; 28+ messages in thread
From: Mauro Carvalho Chehab @ 2021-04-28 14:51 UTC (permalink / raw)
Cc: Alexandre Belloni, Mauro Carvalho Chehab, linux-kernel, linuxarm,
Ludovic Desroches, mauro.chehab, Eugen Hristev,
Mauro Carvalho Chehab, linux-arm-kernel, linux-media
There are several issues in the way the atmel driver handles
pm_runtime_get_sync():
- it doesn't check return codes;
- it doesn't properly decrement the usage_count on all places;
- it starts streaming even if pm_runtime_get_sync() fails.
- while it tries to get pm_runtime at the clock enable logic,
it doesn't check if the operation was suceeded.
Replace all occurrences of it to use the new kAPI:
pm_runtime_resume_and_get(), which ensures that, if the
return code is not negative, the usage_count was incremented.
With that, add additional checks when this is called, in order
to ensure that errors will be properly addressed.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
drivers/media/platform/atmel/atmel-isc-base.c | 27 ++++++++++++++-----
drivers/media/platform/atmel/atmel-isi.c | 19 ++++++++++---
2 files changed, 35 insertions(+), 11 deletions(-)
diff --git a/drivers/media/platform/atmel/atmel-isc-base.c b/drivers/media/platform/atmel/atmel-isc-base.c
index fe3ec8d0eaee..02543fe42e9d 100644
--- a/drivers/media/platform/atmel/atmel-isc-base.c
+++ b/drivers/media/platform/atmel/atmel-isc-base.c
@@ -294,9 +294,13 @@ static int isc_wait_clk_stable(struct clk_hw *hw)
static int isc_clk_prepare(struct clk_hw *hw)
{
struct isc_clk *isc_clk = to_isc_clk(hw);
+ int ret;
- if (isc_clk->id == ISC_ISPCK)
- pm_runtime_get_sync(isc_clk->dev);
+ if (isc_clk->id == ISC_ISPCK) {
+ ret = pm_runtime_resume_and_get(isc_clk->dev);
+ if (ret < 0)
+ return 0;
+ }
return isc_wait_clk_stable(hw);
}
@@ -353,9 +357,13 @@ static int isc_clk_is_enabled(struct clk_hw *hw)
{
struct isc_clk *isc_clk = to_isc_clk(hw);
u32 status;
+ int ret;
- if (isc_clk->id == ISC_ISPCK)
- pm_runtime_get_sync(isc_clk->dev);
+ if (isc_clk->id == ISC_ISPCK) {
+ ret = pm_runtime_resume_and_get(isc_clk->dev);
+ if (ret < 0)
+ return 0;
+ }
regmap_read(isc_clk->regmap, ISC_CLKSR, &status);
@@ -807,7 +815,9 @@ static int isc_start_streaming(struct vb2_queue *vq, unsigned int count)
goto err_start_stream;
}
- pm_runtime_get_sync(isc->dev);
+ ret = pm_runtime_resume_and_get(isc->dev);
+ if (ret < 0)
+ goto err_pm_get;
ret = isc_configure(isc);
if (unlikely(ret))
@@ -838,7 +848,7 @@ static int isc_start_streaming(struct vb2_queue *vq, unsigned int count)
err_configure:
pm_runtime_put_sync(isc->dev);
-
+err_pm_get:
v4l2_subdev_call(isc->current_subdev->sd, video, s_stream, 0);
err_start_stream:
@@ -1809,6 +1819,7 @@ static void isc_awb_work(struct work_struct *w)
u32 baysel;
unsigned long flags;
u32 min, max;
+ int ret;
/* streaming is not active anymore */
if (isc->stop)
@@ -1831,7 +1842,9 @@ static void isc_awb_work(struct work_struct *w)
ctrls->hist_id = hist_id;
baysel = isc->config.sd_format->cfa_baycfg << ISC_HIS_CFG_BAYSEL_SHIFT;
- pm_runtime_get_sync(isc->dev);
+ ret = pm_runtime_resume_and_get(isc->dev);
+ if (ret < 0)
+ return;
/*
* only update if we have all the required histograms and controls
diff --git a/drivers/media/platform/atmel/atmel-isi.c b/drivers/media/platform/atmel/atmel-isi.c
index 0514be6153df..6a433926726d 100644
--- a/drivers/media/platform/atmel/atmel-isi.c
+++ b/drivers/media/platform/atmel/atmel-isi.c
@@ -422,7 +422,9 @@ static int start_streaming(struct vb2_queue *vq, unsigned int count)
struct frame_buffer *buf, *node;
int ret;
- pm_runtime_get_sync(isi->dev);
+ ret = pm_runtime_resume_and_get(isi->dev);
+ if (ret < 0)
+ return ret;
/* Enable stream on the sub device */
ret = v4l2_subdev_call(isi->entity.subdev, video, s_stream, 1);
@@ -782,9 +784,10 @@ static int isi_enum_frameintervals(struct file *file, void *fh,
return 0;
}
-static void isi_camera_set_bus_param(struct atmel_isi *isi)
+static int isi_camera_set_bus_param(struct atmel_isi *isi)
{
u32 cfg1 = 0;
+ int ret;
/* set bus param for ISI */
if (isi->pdata.hsync_act_low)
@@ -801,12 +804,16 @@ static void isi_camera_set_bus_param(struct atmel_isi *isi)
cfg1 |= ISI_CFG1_THMASK_BEATS_16;
/* Enable PM and peripheral clock before operate isi registers */
- pm_runtime_get_sync(isi->dev);
+ ret = pm_runtime_resume_and_get(isi->dev);
+ if (ret < 0)
+ return ret;
isi_writel(isi, ISI_CTRL, ISI_CTRL_DIS);
isi_writel(isi, ISI_CFG1, cfg1);
pm_runtime_put(isi->dev);
+
+ return 0;
}
/* -----------------------------------------------------------------------*/
@@ -1085,7 +1092,11 @@ static int isi_graph_notify_complete(struct v4l2_async_notifier *notifier)
dev_err(isi->dev, "No supported mediabus format found\n");
return ret;
}
- isi_camera_set_bus_param(isi);
+ ret = isi_camera_set_bus_param(isi);
+ if (ret) {
+ dev_err(isi->dev, "Can't wake up device\n");
+ return ret;
+ }
ret = isi_set_default_fmt(isi);
if (ret) {
--
2.30.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH v4 10/79] media: mdk-mdp: fix pm_runtime_get_sync() usage count
[not found] <cover.1619621413.git.mchehab+huawei@kernel.org>
2021-04-28 14:51 ` [PATCH v4 07/79] media: exynos-gsc: don't resume at remove time Mauro Carvalho Chehab
2021-04-28 14:51 ` [PATCH v4 08/79] media: atmel: properly get pm_runtime Mauro Carvalho Chehab
@ 2021-04-28 14:51 ` Mauro Carvalho Chehab
2021-04-30 16:30 ` Jonathan Cameron
2021-04-28 14:51 ` [PATCH v4 16/79] media: mtk-vcodec: " Mauro Carvalho Chehab
` (12 subsequent siblings)
15 siblings, 1 reply; 28+ messages in thread
From: Mauro Carvalho Chehab @ 2021-04-28 14:51 UTC (permalink / raw)
Cc: linuxarm, mauro.chehab, Mauro Carvalho Chehab, Andrew-CT Chen,
Houlong Wei, Matthias Brugger, Mauro Carvalho Chehab,
Minghsiu Tsai, linux-arm-kernel, linux-kernel, linux-media,
linux-mediatek
The pm_runtime_get_sync() internally increments the
dev->power.usage_count without decrementing it, even on errors.
Replace it by the new pm_runtime_resume_and_get(), introduced by:
commit dd8088d5a896 ("PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter")
in order to properly decrement the usage counter and avoid memory
leaks.
While here, fix the return contition of mtk_mdp_m2m_start_streaming(),
as it doesn't make any sense to return 0 if the PM runtime failed
to resume.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
drivers/media/platform/mtk-mdp/mtk_mdp_m2m.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/media/platform/mtk-mdp/mtk_mdp_m2m.c b/drivers/media/platform/mtk-mdp/mtk_mdp_m2m.c
index ace4528cdc5e..f14779e7596e 100644
--- a/drivers/media/platform/mtk-mdp/mtk_mdp_m2m.c
+++ b/drivers/media/platform/mtk-mdp/mtk_mdp_m2m.c
@@ -391,12 +391,12 @@ static int mtk_mdp_m2m_start_streaming(struct vb2_queue *q, unsigned int count)
struct mtk_mdp_ctx *ctx = q->drv_priv;
int ret;
- ret = pm_runtime_get_sync(&ctx->mdp_dev->pdev->dev);
+ ret = pm_runtime_resume_and_get(&ctx->mdp_dev->pdev->dev);
if (ret < 0)
- mtk_mdp_dbg(1, "[%d] pm_runtime_get_sync failed:%d",
+ mtk_mdp_dbg(1, "[%d] pm_runtime_resume_and_get failed:%d",
ctx->id, ret);
- return 0;
+ return ret;
}
static void *mtk_mdp_m2m_buf_remove(struct mtk_mdp_ctx *ctx,
--
2.30.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH v4 16/79] media: mtk-vcodec: fix pm_runtime_get_sync() usage count
[not found] <cover.1619621413.git.mchehab+huawei@kernel.org>
` (2 preceding siblings ...)
2021-04-28 14:51 ` [PATCH v4 10/79] media: mdk-mdp: fix pm_runtime_get_sync() usage count Mauro Carvalho Chehab
@ 2021-04-28 14:51 ` Mauro Carvalho Chehab
2021-04-30 16:44 ` Jonathan Cameron
2021-04-28 14:51 ` [PATCH v4 17/79] media: s5p-jpeg: " Mauro Carvalho Chehab
` (11 subsequent siblings)
15 siblings, 1 reply; 28+ messages in thread
From: Mauro Carvalho Chehab @ 2021-04-28 14:51 UTC (permalink / raw)
Cc: linuxarm, mauro.chehab, Mauro Carvalho Chehab, Andrew-CT Chen,
Matthias Brugger, Mauro Carvalho Chehab, Tiffany Lin,
linux-arm-kernel, linux-kernel, linux-media, linux-mediatek
The pm_runtime_get_sync() internally increments the
dev->power.usage_count without decrementing it, even on errors.
Replace it by the new pm_runtime_resume_and_get(), introduced by:
commit dd8088d5a896 ("PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter")
in order to properly decrement the usage counter and avoid memory
leaks.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_pm.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_pm.c b/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_pm.c
index ddee7046ce42..fe096fe61c9d 100644
--- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_pm.c
+++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_pm.c
@@ -92,9 +92,9 @@ void mtk_vcodec_dec_pw_on(struct mtk_vcodec_pm *pm)
{
int ret;
- ret = pm_runtime_get_sync(pm->dev);
+ ret = pm_runtime_resume_and_get(pm->dev);
if (ret)
- mtk_v4l2_err("pm_runtime_get_sync fail %d", ret);
+ mtk_v4l2_err("pm_runtime_resume_and_get fail %d", ret);
}
void mtk_vcodec_dec_pw_off(struct mtk_vcodec_pm *pm)
--
2.30.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH v4 17/79] media: s5p-jpeg: fix pm_runtime_get_sync() usage count
[not found] <cover.1619621413.git.mchehab+huawei@kernel.org>
` (3 preceding siblings ...)
2021-04-28 14:51 ` [PATCH v4 16/79] media: mtk-vcodec: " Mauro Carvalho Chehab
@ 2021-04-28 14:51 ` Mauro Carvalho Chehab
2021-04-28 14:51 ` [PATCH v4 19/79] media: sunxi: " Mauro Carvalho Chehab
` (10 subsequent siblings)
15 siblings, 0 replies; 28+ messages in thread
From: Mauro Carvalho Chehab @ 2021-04-28 14:51 UTC (permalink / raw)
Cc: linuxarm, mauro.chehab, Mauro Carvalho Chehab,
Andrzej Pietrasiewicz, Jacek Anaszewski, Mauro Carvalho Chehab,
Sylwester Nawrocki, linux-arm-kernel, linux-kernel, linux-media
The pm_runtime_get_sync() internally increments the
dev->power.usage_count without decrementing it, even on errors.
Replace it by the new pm_runtime_resume_and_get(), introduced by:
commit dd8088d5a896 ("PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter")
in order to properly decrement the usage counter and avoid memory
leaks.
Reviewed-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Acked-by: Andrzej Pietrasiewicz <andrzejtp2010@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
drivers/media/platform/s5p-jpeg/jpeg-core.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/media/platform/s5p-jpeg/jpeg-core.c b/drivers/media/platform/s5p-jpeg/jpeg-core.c
index 026111505f5a..c4f19418a460 100644
--- a/drivers/media/platform/s5p-jpeg/jpeg-core.c
+++ b/drivers/media/platform/s5p-jpeg/jpeg-core.c
@@ -2568,7 +2568,7 @@ static int s5p_jpeg_start_streaming(struct vb2_queue *q, unsigned int count)
struct s5p_jpeg_ctx *ctx = vb2_get_drv_priv(q);
int ret;
- ret = pm_runtime_get_sync(ctx->jpeg->dev);
+ ret = pm_runtime_resume_and_get(ctx->jpeg->dev);
return ret > 0 ? 0 : ret;
}
--
2.30.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH v4 19/79] media: sunxi: fix pm_runtime_get_sync() usage count
[not found] <cover.1619621413.git.mchehab+huawei@kernel.org>
` (4 preceding siblings ...)
2021-04-28 14:51 ` [PATCH v4 17/79] media: s5p-jpeg: " Mauro Carvalho Chehab
@ 2021-04-28 14:51 ` Mauro Carvalho Chehab
2021-04-30 16:48 ` Jonathan Cameron
2021-04-28 14:51 ` [PATCH v4 22/79] staging: media: imx7-mipi-csis: use pm_runtime_resume_and_get() Mauro Carvalho Chehab
` (9 subsequent siblings)
15 siblings, 1 reply; 28+ messages in thread
From: Mauro Carvalho Chehab @ 2021-04-28 14:51 UTC (permalink / raw)
Cc: linuxarm, mauro.chehab, Mauro Carvalho Chehab, Chen-Yu Tsai,
Jernej Skrabec, Mauro Carvalho Chehab, Maxime Ripard,
linux-arm-kernel, linux-kernel, linux-media
The pm_runtime_get_sync() internally increments the
dev->power.usage_count without decrementing it, even on errors.
Replace it by the new pm_runtime_resume_and_get(), introduced by:
commit dd8088d5a896 ("PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter")
in order to properly decrement the usage counter and avoid memory
leaks.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
drivers/media/platform/sunxi/sun8i-rotate/sun8i_rotate.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/media/platform/sunxi/sun8i-rotate/sun8i_rotate.c b/drivers/media/platform/sunxi/sun8i-rotate/sun8i_rotate.c
index 3f81dd17755c..fbcca59a0517 100644
--- a/drivers/media/platform/sunxi/sun8i-rotate/sun8i_rotate.c
+++ b/drivers/media/platform/sunxi/sun8i-rotate/sun8i_rotate.c
@@ -494,7 +494,7 @@ static int rotate_start_streaming(struct vb2_queue *vq, unsigned int count)
struct device *dev = ctx->dev->dev;
int ret;
- ret = pm_runtime_get_sync(dev);
+ ret = pm_runtime_resume_and_get(dev);
if (ret < 0) {
dev_err(dev, "Failed to enable module\n");
--
2.30.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH v4 22/79] staging: media: imx7-mipi-csis: use pm_runtime_resume_and_get()
[not found] <cover.1619621413.git.mchehab+huawei@kernel.org>
` (5 preceding siblings ...)
2021-04-28 14:51 ` [PATCH v4 19/79] media: sunxi: " Mauro Carvalho Chehab
@ 2021-04-28 14:51 ` Mauro Carvalho Chehab
2021-04-28 14:51 ` [PATCH v4 24/79] staging: media: cedrus_video: " Mauro Carvalho Chehab
` (8 subsequent siblings)
15 siblings, 0 replies; 28+ messages in thread
From: Mauro Carvalho Chehab @ 2021-04-28 14:51 UTC (permalink / raw)
Cc: linuxarm, mauro.chehab, Mauro Carvalho Chehab, Fabio Estevam,
Greg Kroah-Hartman, Mauro Carvalho Chehab, NXP Linux Team,
Pengutronix Kernel Team, Philipp Zabel, Rui Miguel Silva,
Sascha Hauer, Shawn Guo, Steve Longerbeam, devel,
linux-arm-kernel, linux-kernel, linux-media
Commit dd8088d5a896 ("PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter")
added pm_runtime_resume_and_get() in order to automatically handle
dev->power.usage_count decrement on errors.
Use the new API, in order to cleanup the error check logic.
Acked-by: Rui Miguel Silva <rmfrfs@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
drivers/staging/media/imx/imx7-mipi-csis.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/staging/media/imx/imx7-mipi-csis.c b/drivers/staging/media/imx/imx7-mipi-csis.c
index 025fdc488bd6..1dc680d94a46 100644
--- a/drivers/staging/media/imx/imx7-mipi-csis.c
+++ b/drivers/staging/media/imx/imx7-mipi-csis.c
@@ -695,11 +695,10 @@ static int mipi_csis_s_stream(struct v4l2_subdev *mipi_sd, int enable)
mipi_csis_clear_counters(state);
- ret = pm_runtime_get_sync(&state->pdev->dev);
- if (ret < 0) {
- pm_runtime_put_noidle(&state->pdev->dev);
+ ret = pm_runtime_resume_and_get(&state->pdev->dev);
+ if (ret < 0)
return ret;
- }
+
ret = v4l2_subdev_call(state->src_sd, core, s_power, 1);
if (ret < 0 && ret != -ENOIOCTLCMD)
goto done;
--
2.30.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH v4 24/79] staging: media: cedrus_video: use pm_runtime_resume_and_get()
[not found] <cover.1619621413.git.mchehab+huawei@kernel.org>
` (6 preceding siblings ...)
2021-04-28 14:51 ` [PATCH v4 22/79] staging: media: imx7-mipi-csis: use pm_runtime_resume_and_get() Mauro Carvalho Chehab
@ 2021-04-28 14:51 ` Mauro Carvalho Chehab
2021-04-30 17:05 ` Jonathan Cameron
2021-04-28 14:52 ` [PATCH v4 57/79] media: rockchip/rga: " Mauro Carvalho Chehab
` (7 subsequent siblings)
15 siblings, 1 reply; 28+ messages in thread
From: Mauro Carvalho Chehab @ 2021-04-28 14:51 UTC (permalink / raw)
Cc: linuxarm, mauro.chehab, Mauro Carvalho Chehab, Chen-Yu Tsai,
Greg Kroah-Hartman, Jernej Skrabec, Mauro Carvalho Chehab,
Maxime Ripard, Paul Kocialkowski, devel, linux-arm-kernel,
linux-kernel, linux-media
Commit dd8088d5a896 ("PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter")
added pm_runtime_resume_and_get() in order to automatically handle
dev->power.usage_count decrement on errors.
Use the new API, in order to cleanup the error check logic.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
drivers/staging/media/sunxi/cedrus/cedrus_video.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/staging/media/sunxi/cedrus/cedrus_video.c b/drivers/staging/media/sunxi/cedrus/cedrus_video.c
index b62eb8e84057..9ddd789d0b1f 100644
--- a/drivers/staging/media/sunxi/cedrus/cedrus_video.c
+++ b/drivers/staging/media/sunxi/cedrus/cedrus_video.c
@@ -490,11 +490,9 @@ static int cedrus_start_streaming(struct vb2_queue *vq, unsigned int count)
}
if (V4L2_TYPE_IS_OUTPUT(vq->type)) {
- ret = pm_runtime_get_sync(dev->dev);
- if (ret < 0) {
- pm_runtime_put_noidle(dev->dev);
+ ret = pm_runtime_resume_and_get(dev->dev);
+ if (ret < 0)
goto err_cleanup;
- }
if (dev->dec_ops[ctx->current_codec]->start) {
ret = dev->dec_ops[ctx->current_codec]->start(ctx);
--
2.30.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH v4 57/79] media: rockchip/rga: use pm_runtime_resume_and_get()
[not found] <cover.1619621413.git.mchehab+huawei@kernel.org>
` (7 preceding siblings ...)
2021-04-28 14:51 ` [PATCH v4 24/79] staging: media: cedrus_video: " Mauro Carvalho Chehab
@ 2021-04-28 14:52 ` Mauro Carvalho Chehab
2021-04-28 17:11 ` Ezequiel Garcia
2021-04-28 14:52 ` [PATCH v4 62/79] media: exynos4-is: " Mauro Carvalho Chehab
` (6 subsequent siblings)
15 siblings, 1 reply; 28+ messages in thread
From: Mauro Carvalho Chehab @ 2021-04-28 14:52 UTC (permalink / raw)
Cc: linuxarm, mauro.chehab, Mauro Carvalho Chehab, Ezequiel Garcia,
Heiko Stuebner, Jacob Chen, Mauro Carvalho Chehab,
linux-arm-kernel, linux-kernel, linux-media, linux-rockchip
Commit dd8088d5a896 ("PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter")
added pm_runtime_resume_and_get() in order to automatically handle
dev->power.usage_count decrement on errors.
Use the new API, in order to cleanup the error check logic.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
drivers/media/platform/rockchip/rga/rga-buf.c | 3 +--
drivers/media/platform/rockchip/rga/rga.c | 4 +++-
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/media/platform/rockchip/rga/rga-buf.c b/drivers/media/platform/rockchip/rga/rga-buf.c
index bf9a75b75083..81508ed5abf3 100644
--- a/drivers/media/platform/rockchip/rga/rga-buf.c
+++ b/drivers/media/platform/rockchip/rga/rga-buf.c
@@ -79,9 +79,8 @@ static int rga_buf_start_streaming(struct vb2_queue *q, unsigned int count)
struct rockchip_rga *rga = ctx->rga;
int ret;
- ret = pm_runtime_get_sync(rga->dev);
+ ret = pm_runtime_resume_and_get(rga->dev);
if (ret < 0) {
- pm_runtime_put_noidle(rga->dev);
rga_buf_return_buffers(q, VB2_BUF_STATE_QUEUED);
return ret;
}
diff --git a/drivers/media/platform/rockchip/rga/rga.c b/drivers/media/platform/rockchip/rga/rga.c
index 9d122429706e..bf3fd71ec3af 100644
--- a/drivers/media/platform/rockchip/rga/rga.c
+++ b/drivers/media/platform/rockchip/rga/rga.c
@@ -866,7 +866,9 @@ static int rga_probe(struct platform_device *pdev)
goto unreg_video_dev;
}
- pm_runtime_get_sync(rga->dev);
+ ret = pm_runtime_resume_and_get(rga->dev);
+ if (ret < 0)
+ goto unreg_video_dev;
rga->version.major = (rga_read(rga, RGA_VERSION_INFO) >> 24) & 0xFF;
rga->version.minor = (rga_read(rga, RGA_VERSION_INFO) >> 20) & 0x0F;
--
2.30.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH v4 62/79] media: exynos4-is: use pm_runtime_resume_and_get()
[not found] <cover.1619621413.git.mchehab+huawei@kernel.org>
` (8 preceding siblings ...)
2021-04-28 14:52 ` [PATCH v4 57/79] media: rockchip/rga: " Mauro Carvalho Chehab
@ 2021-04-28 14:52 ` Mauro Carvalho Chehab
2021-04-30 17:49 ` Jonathan Cameron
2021-04-28 14:52 ` [PATCH v4 63/79] media: exynos-gsc: " Mauro Carvalho Chehab
` (5 subsequent siblings)
15 siblings, 1 reply; 28+ messages in thread
From: Mauro Carvalho Chehab @ 2021-04-28 14:52 UTC (permalink / raw)
Cc: linuxarm, mauro.chehab, Mauro Carvalho Chehab,
Krzysztof Kozlowski, Mauro Carvalho Chehab, Sylwester Nawrocki,
linux-arm-kernel, linux-kernel, linux-media, linux-samsung-soc
Commit dd8088d5a896 ("PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter")
added pm_runtime_resume_and_get() in order to automatically handle
dev->power.usage_count decrement on errors.
Use the new API, in order to cleanup the error check logic.
Reviewed-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
drivers/media/platform/exynos4-is/fimc-capture.c | 6 ++----
drivers/media/platform/exynos4-is/fimc-is.c | 4 ++--
drivers/media/platform/exynos4-is/fimc-isp-video.c | 3 +--
drivers/media/platform/exynos4-is/fimc-isp.c | 7 +++----
drivers/media/platform/exynos4-is/fimc-lite.c | 5 +++--
drivers/media/platform/exynos4-is/fimc-m2m.c | 2 +-
drivers/media/platform/exynos4-is/media-dev.c | 8 +++-----
drivers/media/platform/exynos4-is/mipi-csis.c | 8 +++-----
8 files changed, 18 insertions(+), 25 deletions(-)
diff --git a/drivers/media/platform/exynos4-is/fimc-capture.c b/drivers/media/platform/exynos4-is/fimc-capture.c
index 13c838d3f947..0da36443173c 100644
--- a/drivers/media/platform/exynos4-is/fimc-capture.c
+++ b/drivers/media/platform/exynos4-is/fimc-capture.c
@@ -478,11 +478,9 @@ static int fimc_capture_open(struct file *file)
goto unlock;
set_bit(ST_CAPT_BUSY, &fimc->state);
- ret = pm_runtime_get_sync(&fimc->pdev->dev);
- if (ret < 0) {
- pm_runtime_put_sync(&fimc->pdev->dev);
+ ret = pm_runtime_resume_and_get(&fimc->pdev->dev);
+ if (ret < 0)
goto unlock;
- }
ret = v4l2_fh_open(file);
if (ret) {
diff --git a/drivers/media/platform/exynos4-is/fimc-is.c b/drivers/media/platform/exynos4-is/fimc-is.c
index 972d9601d236..1b24f5bfc4af 100644
--- a/drivers/media/platform/exynos4-is/fimc-is.c
+++ b/drivers/media/platform/exynos4-is/fimc-is.c
@@ -828,9 +828,9 @@ static int fimc_is_probe(struct platform_device *pdev)
goto err_irq;
}
- ret = pm_runtime_get_sync(dev);
+ ret = pm_runtime_resume_and_get(dev);
if (ret < 0)
- goto err_pm;
+ goto err_irq;
vb2_dma_contig_set_max_seg_size(dev, DMA_BIT_MASK(32));
diff --git a/drivers/media/platform/exynos4-is/fimc-isp-video.c b/drivers/media/platform/exynos4-is/fimc-isp-video.c
index 612b9872afc8..8d9dc597deaa 100644
--- a/drivers/media/platform/exynos4-is/fimc-isp-video.c
+++ b/drivers/media/platform/exynos4-is/fimc-isp-video.c
@@ -275,7 +275,7 @@ static int isp_video_open(struct file *file)
if (ret < 0)
goto unlock;
- ret = pm_runtime_get_sync(&isp->pdev->dev);
+ ret = pm_runtime_resume_and_get(&isp->pdev->dev);
if (ret < 0)
goto rel_fh;
@@ -293,7 +293,6 @@ static int isp_video_open(struct file *file)
if (!ret)
goto unlock;
rel_fh:
- pm_runtime_put_noidle(&isp->pdev->dev);
v4l2_fh_release(file);
unlock:
mutex_unlock(&isp->video_lock);
diff --git a/drivers/media/platform/exynos4-is/fimc-isp.c b/drivers/media/platform/exynos4-is/fimc-isp.c
index a77c49b18511..74b49d30901e 100644
--- a/drivers/media/platform/exynos4-is/fimc-isp.c
+++ b/drivers/media/platform/exynos4-is/fimc-isp.c
@@ -304,11 +304,10 @@ static int fimc_isp_subdev_s_power(struct v4l2_subdev *sd, int on)
pr_debug("on: %d\n", on);
if (on) {
- ret = pm_runtime_get_sync(&is->pdev->dev);
- if (ret < 0) {
- pm_runtime_put(&is->pdev->dev);
+ ret = pm_runtime_resume_and_get(&is->pdev->dev);
+ if (ret < 0)
return ret;
- }
+
set_bit(IS_ST_PWR_ON, &is->state);
ret = fimc_is_start_firmware(is);
diff --git a/drivers/media/platform/exynos4-is/fimc-lite.c b/drivers/media/platform/exynos4-is/fimc-lite.c
index fe20af3a7178..4d8b18078ff3 100644
--- a/drivers/media/platform/exynos4-is/fimc-lite.c
+++ b/drivers/media/platform/exynos4-is/fimc-lite.c
@@ -469,9 +469,9 @@ static int fimc_lite_open(struct file *file)
}
set_bit(ST_FLITE_IN_USE, &fimc->state);
- ret = pm_runtime_get_sync(&fimc->pdev->dev);
+ ret = pm_runtime_resume_and_get(&fimc->pdev->dev);
if (ret < 0)
- goto err_pm;
+ goto err_in_use;
ret = v4l2_fh_open(file);
if (ret < 0)
@@ -499,6 +499,7 @@ static int fimc_lite_open(struct file *file)
v4l2_fh_release(file);
err_pm:
pm_runtime_put_sync(&fimc->pdev->dev);
+err_in_use:
clear_bit(ST_FLITE_IN_USE, &fimc->state);
unlock:
mutex_unlock(&fimc->lock);
diff --git a/drivers/media/platform/exynos4-is/fimc-m2m.c b/drivers/media/platform/exynos4-is/fimc-m2m.c
index c9704a147e5c..7c1eb05c508f 100644
--- a/drivers/media/platform/exynos4-is/fimc-m2m.c
+++ b/drivers/media/platform/exynos4-is/fimc-m2m.c
@@ -75,7 +75,7 @@ static int start_streaming(struct vb2_queue *q, unsigned int count)
struct fimc_ctx *ctx = q->drv_priv;
int ret;
- ret = pm_runtime_get_sync(&ctx->fimc_dev->pdev->dev);
+ ret = pm_runtime_resume_and_get(&ctx->fimc_dev->pdev->dev);
return ret > 0 ? 0 : ret;
}
diff --git a/drivers/media/platform/exynos4-is/media-dev.c b/drivers/media/platform/exynos4-is/media-dev.c
index 13d192ba4aa6..9346d44a06c2 100644
--- a/drivers/media/platform/exynos4-is/media-dev.c
+++ b/drivers/media/platform/exynos4-is/media-dev.c
@@ -512,11 +512,9 @@ static int fimc_md_register_sensor_entities(struct fimc_md *fmd)
if (!fmd->pmf)
return -ENXIO;
- ret = pm_runtime_get_sync(fmd->pmf);
- if (ret < 0) {
- pm_runtime_put(fmd->pmf);
+ ret = pm_runtime_resume_and_get(fmd->pmf);
+ if (ret < 0)
return ret;
- }
fmd->num_sensors = 0;
@@ -1291,7 +1289,7 @@ static int cam_clk_prepare(struct clk_hw *hw)
if (camclk->fmd->pmf == NULL)
return -ENODEV;
- ret = pm_runtime_get_sync(camclk->fmd->pmf);
+ ret = pm_runtime_resume_and_get(camclk->fmd->pmf);
return ret < 0 ? ret : 0;
}
diff --git a/drivers/media/platform/exynos4-is/mipi-csis.c b/drivers/media/platform/exynos4-is/mipi-csis.c
index 1aac167abb17..2a6afb78a049 100644
--- a/drivers/media/platform/exynos4-is/mipi-csis.c
+++ b/drivers/media/platform/exynos4-is/mipi-csis.c
@@ -494,7 +494,7 @@ static int s5pcsis_s_power(struct v4l2_subdev *sd, int on)
struct device *dev = &state->pdev->dev;
if (on)
- return pm_runtime_get_sync(dev);
+ return pm_runtime_resume_and_get(dev);
return pm_runtime_put_sync(dev);
}
@@ -509,11 +509,9 @@ static int s5pcsis_s_stream(struct v4l2_subdev *sd, int enable)
if (enable) {
s5pcsis_clear_counters(state);
- ret = pm_runtime_get_sync(&state->pdev->dev);
- if (ret && ret != 1) {
- pm_runtime_put_noidle(&state->pdev->dev);
+ ret = pm_runtime_resume_and_get(&state->pdev->dev);
+ if (ret && ret != 1)
return ret;
- }
}
mutex_lock(&state->lock);
--
2.30.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH v4 63/79] media: exynos-gsc: use pm_runtime_resume_and_get()
[not found] <cover.1619621413.git.mchehab+huawei@kernel.org>
` (9 preceding siblings ...)
2021-04-28 14:52 ` [PATCH v4 62/79] media: exynos4-is: " Mauro Carvalho Chehab
@ 2021-04-28 14:52 ` Mauro Carvalho Chehab
2021-04-30 17:50 ` Jonathan Cameron
2021-04-28 14:52 ` [PATCH v4 64/79] media: mtk-jpeg: " Mauro Carvalho Chehab
` (4 subsequent siblings)
15 siblings, 1 reply; 28+ messages in thread
From: Mauro Carvalho Chehab @ 2021-04-28 14:52 UTC (permalink / raw)
Cc: linuxarm, mauro.chehab, Mauro Carvalho Chehab, Ezequiel Garcia,
Hans Verkuil, Krzysztof Kozlowski, Mauro Carvalho Chehab,
Sylwester Nawrocki, linux-arm-kernel, linux-kernel, linux-media,
linux-samsung-soc
Commit dd8088d5a896 ("PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter")
added pm_runtime_resume_and_get() in order to automatically handle
dev->power.usage_count decrement on errors.
Use the new API, in order to cleanup the error check logic.
Reviewed-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
drivers/media/platform/exynos-gsc/gsc-m2m.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/media/platform/exynos-gsc/gsc-m2m.c b/drivers/media/platform/exynos-gsc/gsc-m2m.c
index 27a3c92c73bc..09551e96ac15 100644
--- a/drivers/media/platform/exynos-gsc/gsc-m2m.c
+++ b/drivers/media/platform/exynos-gsc/gsc-m2m.c
@@ -58,7 +58,7 @@ static int gsc_m2m_start_streaming(struct vb2_queue *q, unsigned int count)
struct gsc_ctx *ctx = q->drv_priv;
int ret;
- ret = pm_runtime_get_sync(&ctx->gsc_dev->pdev->dev);
+ ret = pm_runtime_resume_and_get(&ctx->gsc_dev->pdev->dev);
return ret > 0 ? 0 : ret;
}
--
2.30.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH v4 64/79] media: mtk-jpeg: use pm_runtime_resume_and_get()
[not found] <cover.1619621413.git.mchehab+huawei@kernel.org>
` (10 preceding siblings ...)
2021-04-28 14:52 ` [PATCH v4 63/79] media: exynos-gsc: " Mauro Carvalho Chehab
@ 2021-04-28 14:52 ` Mauro Carvalho Chehab
2021-04-28 14:52 ` [PATCH v4 70/79] media: rkisp1: " Mauro Carvalho Chehab
` (3 subsequent siblings)
15 siblings, 0 replies; 28+ messages in thread
From: Mauro Carvalho Chehab @ 2021-04-28 14:52 UTC (permalink / raw)
Cc: linuxarm, mauro.chehab, Mauro Carvalho Chehab, Bin Liu,
Matthias Brugger, Mauro Carvalho Chehab, Rick Chang,
linux-arm-kernel, linux-kernel, linux-media, linux-mediatek
Commit dd8088d5a896 ("PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter")
added pm_runtime_resume_and_get() in order to automatically handle
dev->power.usage_count decrement on errors.
Use the new API, in order to cleanup the error check logic.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c b/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c
index 88a23bce569d..a89c7b206eef 100644
--- a/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c
+++ b/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c
@@ -920,7 +920,7 @@ static void mtk_jpeg_enc_device_run(void *priv)
src_buf = v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx);
dst_buf = v4l2_m2m_next_dst_buf(ctx->fh.m2m_ctx);
- ret = pm_runtime_get_sync(jpeg->dev);
+ ret = pm_runtime_resume_and_get(jpeg->dev);
if (ret < 0)
goto enc_end;
@@ -973,7 +973,7 @@ static void mtk_jpeg_dec_device_run(void *priv)
return;
}
- ret = pm_runtime_get_sync(jpeg->dev);
+ ret = pm_runtime_resume_and_get(jpeg->dev);
if (ret < 0)
goto dec_end;
--
2.30.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH v4 70/79] media: rkisp1: use pm_runtime_resume_and_get()
[not found] <cover.1619621413.git.mchehab+huawei@kernel.org>
` (11 preceding siblings ...)
2021-04-28 14:52 ` [PATCH v4 64/79] media: mtk-jpeg: " Mauro Carvalho Chehab
@ 2021-04-28 14:52 ` Mauro Carvalho Chehab
2021-04-28 14:52 ` [PATCH v4 72/79] media: s5p-mfc: " Mauro Carvalho Chehab
` (2 subsequent siblings)
15 siblings, 0 replies; 28+ messages in thread
From: Mauro Carvalho Chehab @ 2021-04-28 14:52 UTC (permalink / raw)
Cc: linuxarm, mauro.chehab, Mauro Carvalho Chehab, Dafna Hirschfeld,
Heiko Stuebner, Helen Koike, Mauro Carvalho Chehab,
linux-arm-kernel, linux-kernel, linux-media, linux-rockchip
Commit dd8088d5a896 ("PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter")
added pm_runtime_resume_and_get() in order to automatically handle
dev->power.usage_count decrement on errors.
Use the new API, in order to cleanup the error check logic.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
index 5f6c9d1623e4..3730376897d9 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
@@ -1003,9 +1003,8 @@ rkisp1_vb2_start_streaming(struct vb2_queue *queue, unsigned int count)
if (ret)
goto err_pipeline_stop;
- ret = pm_runtime_get_sync(cap->rkisp1->dev);
+ ret = pm_runtime_resume_and_get(cap->rkisp1->dev);
if (ret < 0) {
- pm_runtime_put_noidle(cap->rkisp1->dev);
dev_err(cap->rkisp1->dev, "power up failed %d\n", ret);
goto err_destroy_dummy;
}
--
2.30.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH v4 72/79] media: s5p-mfc: use pm_runtime_resume_and_get()
[not found] <cover.1619621413.git.mchehab+huawei@kernel.org>
` (12 preceding siblings ...)
2021-04-28 14:52 ` [PATCH v4 70/79] media: rkisp1: " Mauro Carvalho Chehab
@ 2021-04-28 14:52 ` Mauro Carvalho Chehab
2021-04-28 14:52 ` [PATCH v4 73/79] media: stm32: " Mauro Carvalho Chehab
2021-04-28 14:52 ` [PATCH v4 74/79] media: sunxi: " Mauro Carvalho Chehab
15 siblings, 0 replies; 28+ messages in thread
From: Mauro Carvalho Chehab @ 2021-04-28 14:52 UTC (permalink / raw)
Cc: linuxarm, mauro.chehab, Mauro Carvalho Chehab, Andrzej Hajda,
Mauro Carvalho Chehab, linux-arm-kernel, linux-kernel,
linux-media, Sylwester Nawrocki
Commit dd8088d5a896 ("PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter")
added pm_runtime_resume_and_get() in order to automatically handle
dev->power.usage_count decrement on errors.
Use the new API, in order to cleanup the error check logic.
Reviewed-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
drivers/media/platform/s5p-mfc/s5p_mfc_pm.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc_pm.c b/drivers/media/platform/s5p-mfc/s5p_mfc_pm.c
index 62d2320a7218..88b7d33c9197 100644
--- a/drivers/media/platform/s5p-mfc/s5p_mfc_pm.c
+++ b/drivers/media/platform/s5p-mfc/s5p_mfc_pm.c
@@ -78,11 +78,9 @@ int s5p_mfc_power_on(void)
{
int i, ret = 0;
- ret = pm_runtime_get_sync(pm->device);
- if (ret < 0) {
- pm_runtime_put_noidle(pm->device);
+ ret = pm_runtime_resume_and_get(pm->device);
+ if (ret < 0)
return ret;
- }
/* clock control */
for (i = 0; i < pm->num_clocks; i++) {
--
2.30.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH v4 73/79] media: stm32: use pm_runtime_resume_and_get()
[not found] <cover.1619621413.git.mchehab+huawei@kernel.org>
` (13 preceding siblings ...)
2021-04-28 14:52 ` [PATCH v4 72/79] media: s5p-mfc: " Mauro Carvalho Chehab
@ 2021-04-28 14:52 ` Mauro Carvalho Chehab
2021-04-30 17:58 ` Jonathan Cameron
2021-04-28 14:52 ` [PATCH v4 74/79] media: sunxi: " Mauro Carvalho Chehab
15 siblings, 1 reply; 28+ messages in thread
From: Mauro Carvalho Chehab @ 2021-04-28 14:52 UTC (permalink / raw)
Cc: linuxarm, mauro.chehab, Mauro Carvalho Chehab, Alexandre Torgue,
Hugues Fruchet, Mauro Carvalho Chehab, Maxime Coquelin,
linux-arm-kernel, linux-kernel, linux-media, linux-stm32
Commit dd8088d5a896 ("PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter")
added pm_runtime_resume_and_get() in order to automatically handle
dev->power.usage_count decrement on errors.
Use the new API, in order to cleanup the error check logic.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
drivers/media/platform/stm32/stm32-dcmi.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/media/platform/stm32/stm32-dcmi.c b/drivers/media/platform/stm32/stm32-dcmi.c
index bbcc2254fa2e..5f4e1db8cfcd 100644
--- a/drivers/media/platform/stm32/stm32-dcmi.c
+++ b/drivers/media/platform/stm32/stm32-dcmi.c
@@ -723,11 +723,11 @@ static int dcmi_start_streaming(struct vb2_queue *vq, unsigned int count)
u32 val = 0;
int ret;
- ret = pm_runtime_get_sync(dcmi->dev);
+ ret = pm_runtime_resume_and_get(dcmi->dev);
if (ret < 0) {
dev_err(dcmi->dev, "%s: Failed to start streaming, cannot get sync (%d)\n",
__func__, ret);
- goto err_pm_put;
+ goto err_unlock;
}
ret = media_pipeline_start(&dcmi->vdev->entity, &dcmi->pipeline);
@@ -848,6 +848,7 @@ static int dcmi_start_streaming(struct vb2_queue *vq, unsigned int count)
err_pm_put:
pm_runtime_put(dcmi->dev);
+err_unlock:
spin_lock_irq(&dcmi->irqlock);
/*
* Return all buffers to vb2 in QUEUED state.
--
2.30.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH v4 74/79] media: sunxi: use pm_runtime_resume_and_get()
[not found] <cover.1619621413.git.mchehab+huawei@kernel.org>
` (14 preceding siblings ...)
2021-04-28 14:52 ` [PATCH v4 73/79] media: stm32: " Mauro Carvalho Chehab
@ 2021-04-28 14:52 ` Mauro Carvalho Chehab
15 siblings, 0 replies; 28+ messages in thread
From: Mauro Carvalho Chehab @ 2021-04-28 14:52 UTC (permalink / raw)
Cc: linuxarm, mauro.chehab, Mauro Carvalho Chehab, Chen-Yu Tsai,
Jernej Skrabec, Mauro Carvalho Chehab, Maxime Ripard,
linux-arm-kernel, linux-kernel, linux-media
Commit dd8088d5a896 ("PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter")
added pm_runtime_resume_and_get() in order to automatically handle
dev->power.usage_count decrement on errors.
Use the new API, in order to cleanup the error check logic.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
drivers/media/platform/sunxi/sun4i-csi/sun4i_v4l2.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/media/platform/sunxi/sun4i-csi/sun4i_v4l2.c b/drivers/media/platform/sunxi/sun4i-csi/sun4i_v4l2.c
index 4785faddf630..54b909987caa 100644
--- a/drivers/media/platform/sunxi/sun4i-csi/sun4i_v4l2.c
+++ b/drivers/media/platform/sunxi/sun4i-csi/sun4i_v4l2.c
@@ -206,9 +206,9 @@ static int sun4i_csi_open(struct file *file)
if (ret)
return ret;
- ret = pm_runtime_get_sync(csi->dev);
+ ret = pm_runtime_resume_and_get(csi->dev);
if (ret < 0)
- goto err_pm_put;
+ goto err_unlock;
ret = v4l2_pipeline_pm_get(&csi->vdev.entity);
if (ret)
@@ -227,6 +227,8 @@ static int sun4i_csi_open(struct file *file)
err_pm_put:
pm_runtime_put(csi->dev);
+
+err_unlock:
mutex_unlock(&csi->lock);
return ret;
--
2.30.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 28+ messages in thread
* Re: [PATCH v4 07/79] media: exynos-gsc: don't resume at remove time
2021-04-28 14:51 ` [PATCH v4 07/79] media: exynos-gsc: don't resume at remove time Mauro Carvalho Chehab
@ 2021-04-28 15:25 ` Sylwester Nawrocki
2021-04-28 19:44 ` kernel test robot
2021-04-28 19:56 ` kernel test robot
2 siblings, 0 replies; 28+ messages in thread
From: Sylwester Nawrocki @ 2021-04-28 15:25 UTC (permalink / raw)
To: Mauro Carvalho Chehab
Cc: linuxarm, mauro.chehab, Ezequiel Garcia, Hans Verkuil,
Krzysztof Kozlowski, Mauro Carvalho Chehab, linux-arm-kernel,
linux-kernel, linux-media, linux-samsung-soc
On 28.04.2021 16:51, Mauro Carvalho Chehab wrote:
> Calling pm_runtime_get_sync() at driver's removal time is not
> needed, as this will resume PM runtime. Also, the PM runtime
> code at pm_runtime_disable() already calls it, if it detects
> the need.
>
> So, change the logic in order to disable PM runtime earlier.
>
> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Thank you for correcting that.
> ---
> drivers/media/platform/exynos-gsc/gsc-core.c | 11 ++++++-----
> 1 file changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/media/platform/exynos-gsc/gsc-core.c b/drivers/media/platform/exynos-gsc/gsc-core.c
> index 9f41c2e7097a..8b943075c503 100644
> --- a/drivers/media/platform/exynos-gsc/gsc-core.c
> +++ b/drivers/media/platform/exynos-gsc/gsc-core.c
> @@ -1210,18 +1210,19 @@ static int gsc_remove(struct platform_device *pdev)
> struct gsc_dev *gsc = platform_get_drvdata(pdev);
> int i;
>
> - pm_runtime_get_sync(&pdev->dev);
> -
> gsc_unregister_m2m_device(gsc);
> v4l2_device_unregister(&gsc->v4l2_dev);
>
> vb2_dma_contig_clear_max_seg_size(&pdev->dev);
> - for (i = 0; i < gsc->num_clocks; i++)
> - clk_disable_unprepare(gsc->clock[i]);
>
> - pm_runtime_put_noidle(&pdev->dev);
> pm_runtime_disable(&pdev->dev);
> + if (!pm_runtime_status_suspended(dev)) {
It should be &pdev->dev here rather than dev...
> + for (i = 0; i < gsc->num_clocks; i++)
> + clk_disable_unprepare(gsc->clock[i]);
> + }
> + pm_runtime_set_suspended(dev);
and here s/dev/&pdev->dev.
With above issues fixed,
Reviewed-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
> dev_dbg(&pdev->dev, "%s driver unloaded\n", pdev->name);
> return 0;
> }
Thanks,
Sylwester
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v4 57/79] media: rockchip/rga: use pm_runtime_resume_and_get()
2021-04-28 14:52 ` [PATCH v4 57/79] media: rockchip/rga: " Mauro Carvalho Chehab
@ 2021-04-28 17:11 ` Ezequiel Garcia
0 siblings, 0 replies; 28+ messages in thread
From: Ezequiel Garcia @ 2021-04-28 17:11 UTC (permalink / raw)
To: Mauro Carvalho Chehab
Cc: linuxarm, mauro.chehab, Heiko Stuebner, Jacob Chen,
Mauro Carvalho Chehab, linux-arm-kernel, linux-kernel,
linux-media, linux-rockchip
On Wed, 2021-04-28 at 16:52 +0200, Mauro Carvalho Chehab wrote:
> Commit dd8088d5a896 ("PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter")
> added pm_runtime_resume_and_get() in order to automatically handle
> dev->power.usage_count decrement on errors.
>
> Use the new API, in order to cleanup the error check logic.
>
> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Ugh, sigh... OK, there was a v4. Sorry for the noise!
Reviewed-by: Ezequiel Garcia <ezequiel@collabora.com>
> ---
> drivers/media/platform/rockchip/rga/rga-buf.c | 3 +--
> drivers/media/platform/rockchip/rga/rga.c | 4 +++-
> 2 files changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/media/platform/rockchip/rga/rga-buf.c b/drivers/media/platform/rockchip/rga/rga-buf.c
> index bf9a75b75083..81508ed5abf3 100644
> --- a/drivers/media/platform/rockchip/rga/rga-buf.c
> +++ b/drivers/media/platform/rockchip/rga/rga-buf.c
> @@ -79,9 +79,8 @@ static int rga_buf_start_streaming(struct vb2_queue *q, unsigned int count)
> struct rockchip_rga *rga = ctx->rga;
> int ret;
>
> - ret = pm_runtime_get_sync(rga->dev);
> + ret = pm_runtime_resume_and_get(rga->dev);
> if (ret < 0) {
> - pm_runtime_put_noidle(rga->dev);
> rga_buf_return_buffers(q, VB2_BUF_STATE_QUEUED);
> return ret;
> }
> diff --git a/drivers/media/platform/rockchip/rga/rga.c b/drivers/media/platform/rockchip/rga/rga.c
> index 9d122429706e..bf3fd71ec3af 100644
> --- a/drivers/media/platform/rockchip/rga/rga.c
> +++ b/drivers/media/platform/rockchip/rga/rga.c
> @@ -866,7 +866,9 @@ static int rga_probe(struct platform_device *pdev)
> goto unreg_video_dev;
> }
>
> - pm_runtime_get_sync(rga->dev);
> + ret = pm_runtime_resume_and_get(rga->dev);
> + if (ret < 0)
> + goto unreg_video_dev;
>
> rga->version.major = (rga_read(rga, RGA_VERSION_INFO) >> 24) & 0xFF;
> rga->version.minor = (rga_read(rga, RGA_VERSION_INFO) >> 20) & 0x0F;
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v4 07/79] media: exynos-gsc: don't resume at remove time
2021-04-28 14:51 ` [PATCH v4 07/79] media: exynos-gsc: don't resume at remove time Mauro Carvalho Chehab
2021-04-28 15:25 ` Sylwester Nawrocki
@ 2021-04-28 19:44 ` kernel test robot
2021-04-28 19:56 ` kernel test robot
2 siblings, 0 replies; 28+ messages in thread
From: kernel test robot @ 2021-04-28 19:44 UTC (permalink / raw)
To: Mauro Carvalho Chehab
Cc: kbuild-all, linux-media, linuxarm, mauro.chehab,
Mauro Carvalho Chehab, Ezequiel Garcia, Hans Verkuil,
Krzysztof Kozlowski, linux-arm-kernel, linux-kernel,
linux-samsung-soc
[-- Attachment #1: Type: text/plain, Size: 2819 bytes --]
Hi Mauro,
I love your patch! Yet something to improve:
[auto build test ERROR on linuxtv-media/master]
[also build test ERROR on rockchip/for-next tegra/for-next v5.12 next-20210428]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Mauro-Carvalho-Chehab/Address-some-issues-with-PM-runtime-at-media-subsystem/20210428-225742
base: git://linuxtv.org/media_tree.git master
config: nds32-randconfig-r035-20210428 (attached as .config)
compiler: nds32le-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/b6dba4aea621c15b0aa6f92e548c74cd6994eb20
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Mauro-Carvalho-Chehab/Address-some-issues-with-PM-runtime-at-media-subsystem/20210428-225742
git checkout b6dba4aea621c15b0aa6f92e548c74cd6994eb20
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross W=1 ARCH=nds32
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
drivers/media/platform/exynos-gsc/gsc-core.c: In function 'gsc_remove':
>> drivers/media/platform/exynos-gsc/gsc-core.c:1220:35: error: 'dev' undeclared (first use in this function); did you mean 'pdev'?
1220 | if (!pm_runtime_status_suspended(dev))
| ^~~
| pdev
drivers/media/platform/exynos-gsc/gsc-core.c:1220:35: note: each undeclared identifier is reported only once for each function it appears in
vim +1220 drivers/media/platform/exynos-gsc/gsc-core.c
1207
1208 static int gsc_remove(struct platform_device *pdev)
1209 {
1210 struct gsc_dev *gsc = platform_get_drvdata(pdev);
1211 int i;
1212
1213 gsc_unregister_m2m_device(gsc);
1214 v4l2_device_unregister(&gsc->v4l2_dev);
1215
1216 vb2_dma_contig_clear_max_seg_size(&pdev->dev);
1217
1218 pm_runtime_disable(&pdev->dev);
1219
> 1220 if (!pm_runtime_status_suspended(dev))
1221 for (i = 0; i < gsc->num_clocks; i++)
1222 clk_disable_unprepare(gsc->clock[i]);
1223
1224 pm_runtime_set_suspended(dev);
1225
1226 dev_dbg(&pdev->dev, "%s driver unloaded\n", pdev->name);
1227 return 0;
1228 }
1229
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 37801 bytes --]
[-- Attachment #3: Type: text/plain, Size: 176 bytes --]
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v4 07/79] media: exynos-gsc: don't resume at remove time
2021-04-28 14:51 ` [PATCH v4 07/79] media: exynos-gsc: don't resume at remove time Mauro Carvalho Chehab
2021-04-28 15:25 ` Sylwester Nawrocki
2021-04-28 19:44 ` kernel test robot
@ 2021-04-28 19:56 ` kernel test robot
2 siblings, 0 replies; 28+ messages in thread
From: kernel test robot @ 2021-04-28 19:56 UTC (permalink / raw)
To: Mauro Carvalho Chehab
Cc: kbuild-all, linux-media, linuxarm, mauro.chehab,
Mauro Carvalho Chehab, Ezequiel Garcia, Hans Verkuil,
Krzysztof Kozlowski, linux-arm-kernel, linux-kernel,
linux-samsung-soc
[-- Attachment #1: Type: text/plain, Size: 2802 bytes --]
Hi Mauro,
I love your patch! Yet something to improve:
[auto build test ERROR on linuxtv-media/master]
[also build test ERROR on rockchip/for-next tegra/for-next v5.12 next-20210428]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Mauro-Carvalho-Chehab/Address-some-issues-with-PM-runtime-at-media-subsystem/20210428-225742
base: git://linuxtv.org/media_tree.git master
config: ia64-allmodconfig (attached as .config)
compiler: ia64-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/b6dba4aea621c15b0aa6f92e548c74cd6994eb20
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Mauro-Carvalho-Chehab/Address-some-issues-with-PM-runtime-at-media-subsystem/20210428-225742
git checkout b6dba4aea621c15b0aa6f92e548c74cd6994eb20
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross W=1 ARCH=ia64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
drivers/media/platform/exynos-gsc/gsc-core.c: In function 'gsc_remove':
>> drivers/media/platform/exynos-gsc/gsc-core.c:1220:35: error: 'dev' undeclared (first use in this function); did you mean 'pdev'?
1220 | if (!pm_runtime_status_suspended(dev))
| ^~~
| pdev
drivers/media/platform/exynos-gsc/gsc-core.c:1220:35: note: each undeclared identifier is reported only once for each function it appears in
vim +1220 drivers/media/platform/exynos-gsc/gsc-core.c
1207
1208 static int gsc_remove(struct platform_device *pdev)
1209 {
1210 struct gsc_dev *gsc = platform_get_drvdata(pdev);
1211 int i;
1212
1213 gsc_unregister_m2m_device(gsc);
1214 v4l2_device_unregister(&gsc->v4l2_dev);
1215
1216 vb2_dma_contig_clear_max_seg_size(&pdev->dev);
1217
1218 pm_runtime_disable(&pdev->dev);
1219
> 1220 if (!pm_runtime_status_suspended(dev))
1221 for (i = 0; i < gsc->num_clocks; i++)
1222 clk_disable_unprepare(gsc->clock[i]);
1223
1224 pm_runtime_set_suspended(dev);
1225
1226 dev_dbg(&pdev->dev, "%s driver unloaded\n", pdev->name);
1227 return 0;
1228 }
1229
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 63872 bytes --]
[-- Attachment #3: Type: text/plain, Size: 176 bytes --]
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v4 08/79] media: atmel: properly get pm_runtime
2021-04-28 14:51 ` [PATCH v4 08/79] media: atmel: properly get pm_runtime Mauro Carvalho Chehab
@ 2021-04-30 16:13 ` Jonathan Cameron
0 siblings, 0 replies; 28+ messages in thread
From: Jonathan Cameron @ 2021-04-30 16:13 UTC (permalink / raw)
To: Mauro Carvalho Chehab
Cc: Alexandre Belloni, linux-kernel, linuxarm, Ludovic Desroches,
mauro.chehab, Eugen Hristev, Mauro Carvalho Chehab,
linux-arm-kernel, linux-media
On Wed, 28 Apr 2021 16:51:29 +0200
Mauro Carvalho Chehab <mchehab+huawei@kernel.org> wrote:
> There are several issues in the way the atmel driver handles
> pm_runtime_get_sync():
>
> - it doesn't check return codes;
> - it doesn't properly decrement the usage_count on all places;
> - it starts streaming even if pm_runtime_get_sync() fails.
> - while it tries to get pm_runtime at the clock enable logic,
> it doesn't check if the operation was suceeded.
>
> Replace all occurrences of it to use the new kAPI:
> pm_runtime_resume_and_get(), which ensures that, if the
> return code is not negative, the usage_count was incremented.
>
> With that, add additional checks when this is called, in order
> to ensure that errors will be properly addressed.
>
> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
> ---
> drivers/media/platform/atmel/atmel-isc-base.c | 27 ++++++++++++++-----
> drivers/media/platform/atmel/atmel-isi.c | 19 ++++++++++---
> 2 files changed, 35 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/media/platform/atmel/atmel-isc-base.c b/drivers/media/platform/atmel/atmel-isc-base.c
> index fe3ec8d0eaee..02543fe42e9d 100644
> --- a/drivers/media/platform/atmel/atmel-isc-base.c
> +++ b/drivers/media/platform/atmel/atmel-isc-base.c
> @@ -294,9 +294,13 @@ static int isc_wait_clk_stable(struct clk_hw *hw)
> static int isc_clk_prepare(struct clk_hw *hw)
> {
> struct isc_clk *isc_clk = to_isc_clk(hw);
> + int ret;
>
> - if (isc_clk->id == ISC_ISPCK)
> - pm_runtime_get_sync(isc_clk->dev);
> + if (isc_clk->id == ISC_ISPCK) {
> + ret = pm_runtime_resume_and_get(isc_clk->dev);
> + if (ret < 0)
> + return 0;
Why not the error? isc_wait_clk_stable() is happy to return -ETIMEDOUT so I
assume the callers should fine with errors.
> + }
>
> return isc_wait_clk_stable(hw);
> }
> @@ -353,9 +357,13 @@ static int isc_clk_is_enabled(struct clk_hw *hw)
> {
> struct isc_clk *isc_clk = to_isc_clk(hw);
> u32 status;
> + int ret;
>
> - if (isc_clk->id == ISC_ISPCK)
> - pm_runtime_get_sync(isc_clk->dev);
> + if (isc_clk->id == ISC_ISPCK) {
> + ret = pm_runtime_resume_and_get(isc_clk->dev);
> + if (ret < 0)
> + return 0;
> + }
>
> regmap_read(isc_clk->regmap, ISC_CLKSR, &status);
>
> @@ -807,7 +815,9 @@ static int isc_start_streaming(struct vb2_queue *vq, unsigned int count)
> goto err_start_stream;
> }
>
> - pm_runtime_get_sync(isc->dev);
> + ret = pm_runtime_resume_and_get(isc->dev);
> + if (ret < 0)
> + goto err_pm_get;
>
> ret = isc_configure(isc);
> if (unlikely(ret))
> @@ -838,7 +848,7 @@ static int isc_start_streaming(struct vb2_queue *vq, unsigned int count)
>
> err_configure:
> pm_runtime_put_sync(isc->dev);
> -
> +err_pm_get:
> v4l2_subdev_call(isc->current_subdev->sd, video, s_stream, 0);
>
> err_start_stream:
> @@ -1809,6 +1819,7 @@ static void isc_awb_work(struct work_struct *w)
> u32 baysel;
> unsigned long flags;
> u32 min, max;
> + int ret;
>
> /* streaming is not active anymore */
> if (isc->stop)
> @@ -1831,7 +1842,9 @@ static void isc_awb_work(struct work_struct *w)
> ctrls->hist_id = hist_id;
> baysel = isc->config.sd_format->cfa_baycfg << ISC_HIS_CFG_BAYSEL_SHIFT;
>
> - pm_runtime_get_sync(isc->dev);
> + ret = pm_runtime_resume_and_get(isc->dev);
> + if (ret < 0)
Maybe warn or similar?
> + return;
>
> /*
> * only update if we have all the required histograms and controls
> diff --git a/drivers/media/platform/atmel/atmel-isi.c b/drivers/media/platform/atmel/atmel-isi.c
> index 0514be6153df..6a433926726d 100644
> --- a/drivers/media/platform/atmel/atmel-isi.c
> +++ b/drivers/media/platform/atmel/atmel-isi.c
> @@ -422,7 +422,9 @@ static int start_streaming(struct vb2_queue *vq, unsigned int count)
> struct frame_buffer *buf, *node;
> int ret;
>
> - pm_runtime_get_sync(isi->dev);
> + ret = pm_runtime_resume_and_get(isi->dev);
> + if (ret < 0)
> + return ret;
>
> /* Enable stream on the sub device */
> ret = v4l2_subdev_call(isi->entity.subdev, video, s_stream, 1);
> @@ -782,9 +784,10 @@ static int isi_enum_frameintervals(struct file *file, void *fh,
> return 0;
> }
>
> -static void isi_camera_set_bus_param(struct atmel_isi *isi)
> +static int isi_camera_set_bus_param(struct atmel_isi *isi)
> {
> u32 cfg1 = 0;
> + int ret;
>
> /* set bus param for ISI */
> if (isi->pdata.hsync_act_low)
> @@ -801,12 +804,16 @@ static void isi_camera_set_bus_param(struct atmel_isi *isi)
> cfg1 |= ISI_CFG1_THMASK_BEATS_16;
>
> /* Enable PM and peripheral clock before operate isi registers */
> - pm_runtime_get_sync(isi->dev);
> + ret = pm_runtime_resume_and_get(isi->dev);
> + if (ret < 0)
> + return ret;
>
> isi_writel(isi, ISI_CTRL, ISI_CTRL_DIS);
> isi_writel(isi, ISI_CFG1, cfg1);
>
> pm_runtime_put(isi->dev);
> +
> + return 0;
> }
>
> /* -----------------------------------------------------------------------*/
> @@ -1085,7 +1092,11 @@ static int isi_graph_notify_complete(struct v4l2_async_notifier *notifier)
> dev_err(isi->dev, "No supported mediabus format found\n");
> return ret;
> }
> - isi_camera_set_bus_param(isi);
> + ret = isi_camera_set_bus_param(isi);
> + if (ret) {
> + dev_err(isi->dev, "Can't wake up device\n");
> + return ret;
> + }
>
> ret = isi_set_default_fmt(isi);
> if (ret) {
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v4 10/79] media: mdk-mdp: fix pm_runtime_get_sync() usage count
2021-04-28 14:51 ` [PATCH v4 10/79] media: mdk-mdp: fix pm_runtime_get_sync() usage count Mauro Carvalho Chehab
@ 2021-04-30 16:30 ` Jonathan Cameron
0 siblings, 0 replies; 28+ messages in thread
From: Jonathan Cameron @ 2021-04-30 16:30 UTC (permalink / raw)
To: Mauro Carvalho Chehab
Cc: linuxarm, mauro.chehab, Andrew-CT Chen, Houlong Wei,
Matthias Brugger, Mauro Carvalho Chehab, Minghsiu Tsai,
linux-arm-kernel, linux-kernel, linux-media, linux-mediatek
On Wed, 28 Apr 2021 16:51:31 +0200
Mauro Carvalho Chehab <mchehab+huawei@kernel.org> wrote:
> The pm_runtime_get_sync() internally increments the
> dev->power.usage_count without decrementing it, even on errors.
> Replace it by the new pm_runtime_resume_and_get(), introduced by:
> commit dd8088d5a896 ("PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter")
> in order to properly decrement the usage counter and avoid memory
> leaks.
>
> While here, fix the return contition of mtk_mdp_m2m_start_streaming(),
> as it doesn't make any sense to return 0 if the PM runtime failed
> to resume.
>
> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> ---
> drivers/media/platform/mtk-mdp/mtk_mdp_m2m.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/media/platform/mtk-mdp/mtk_mdp_m2m.c b/drivers/media/platform/mtk-mdp/mtk_mdp_m2m.c
> index ace4528cdc5e..f14779e7596e 100644
> --- a/drivers/media/platform/mtk-mdp/mtk_mdp_m2m.c
> +++ b/drivers/media/platform/mtk-mdp/mtk_mdp_m2m.c
> @@ -391,12 +391,12 @@ static int mtk_mdp_m2m_start_streaming(struct vb2_queue *q, unsigned int count)
> struct mtk_mdp_ctx *ctx = q->drv_priv;
> int ret;
>
> - ret = pm_runtime_get_sync(&ctx->mdp_dev->pdev->dev);
> + ret = pm_runtime_resume_and_get(&ctx->mdp_dev->pdev->dev);
> if (ret < 0)
> - mtk_mdp_dbg(1, "[%d] pm_runtime_get_sync failed:%d",
> + mtk_mdp_dbg(1, "[%d] pm_runtime_resume_and_get failed:%d",
> ctx->id, ret);
>
> - return 0;
> + return ret;
> }
>
> static void *mtk_mdp_m2m_buf_remove(struct mtk_mdp_ctx *ctx,
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v4 16/79] media: mtk-vcodec: fix pm_runtime_get_sync() usage count
2021-04-28 14:51 ` [PATCH v4 16/79] media: mtk-vcodec: " Mauro Carvalho Chehab
@ 2021-04-30 16:44 ` Jonathan Cameron
0 siblings, 0 replies; 28+ messages in thread
From: Jonathan Cameron @ 2021-04-30 16:44 UTC (permalink / raw)
To: Mauro Carvalho Chehab
Cc: linuxarm, mauro.chehab, Andrew-CT Chen, Matthias Brugger,
Mauro Carvalho Chehab, Tiffany Lin, linux-arm-kernel,
linux-kernel, linux-media, linux-mediatek
On Wed, 28 Apr 2021 16:51:37 +0200
Mauro Carvalho Chehab <mchehab+huawei@kernel.org> wrote:
> The pm_runtime_get_sync() internally increments the
> dev->power.usage_count without decrementing it, even on errors.
> Replace it by the new pm_runtime_resume_and_get(), introduced by:
> commit dd8088d5a896 ("PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter")
> in order to properly decrement the usage counter and avoid memory
> leaks.
>
> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Without a return value, this seems like it's not complete as driver
will carry on and eventually call mtk_vcode_dec_pw_off() which will assume
it needs to decrement the count.
> ---
> drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_pm.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_pm.c b/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_pm.c
> index ddee7046ce42..fe096fe61c9d 100644
> --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_pm.c
> +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_pm.c
> @@ -92,9 +92,9 @@ void mtk_vcodec_dec_pw_on(struct mtk_vcodec_pm *pm)
> {
> int ret;
>
> - ret = pm_runtime_get_sync(pm->dev);
> + ret = pm_runtime_resume_and_get(pm->dev);
> if (ret)
> - mtk_v4l2_err("pm_runtime_get_sync fail %d", ret);
> + mtk_v4l2_err("pm_runtime_resume_and_get fail %d", ret);
> }
>
> void mtk_vcodec_dec_pw_off(struct mtk_vcodec_pm *pm)
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v4 19/79] media: sunxi: fix pm_runtime_get_sync() usage count
2021-04-28 14:51 ` [PATCH v4 19/79] media: sunxi: " Mauro Carvalho Chehab
@ 2021-04-30 16:48 ` Jonathan Cameron
0 siblings, 0 replies; 28+ messages in thread
From: Jonathan Cameron @ 2021-04-30 16:48 UTC (permalink / raw)
To: Mauro Carvalho Chehab
Cc: linuxarm, mauro.chehab, Chen-Yu Tsai, Jernej Skrabec,
Mauro Carvalho Chehab, Maxime Ripard, linux-arm-kernel,
linux-kernel, linux-media
On Wed, 28 Apr 2021 16:51:40 +0200
Mauro Carvalho Chehab <mchehab+huawei@kernel.org> wrote:
> The pm_runtime_get_sync() internally increments the
> dev->power.usage_count without decrementing it, even on errors.
> Replace it by the new pm_runtime_resume_and_get(), introduced by:
> commit dd8088d5a896 ("PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter")
> in order to properly decrement the usage counter and avoid memory
> leaks.
>
> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> ---
> drivers/media/platform/sunxi/sun8i-rotate/sun8i_rotate.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/media/platform/sunxi/sun8i-rotate/sun8i_rotate.c b/drivers/media/platform/sunxi/sun8i-rotate/sun8i_rotate.c
> index 3f81dd17755c..fbcca59a0517 100644
> --- a/drivers/media/platform/sunxi/sun8i-rotate/sun8i_rotate.c
> +++ b/drivers/media/platform/sunxi/sun8i-rotate/sun8i_rotate.c
> @@ -494,7 +494,7 @@ static int rotate_start_streaming(struct vb2_queue *vq, unsigned int count)
> struct device *dev = ctx->dev->dev;
> int ret;
>
> - ret = pm_runtime_get_sync(dev);
> + ret = pm_runtime_resume_and_get(dev);
> if (ret < 0) {
> dev_err(dev, "Failed to enable module\n");
>
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v4 24/79] staging: media: cedrus_video: use pm_runtime_resume_and_get()
2021-04-28 14:51 ` [PATCH v4 24/79] staging: media: cedrus_video: " Mauro Carvalho Chehab
@ 2021-04-30 17:05 ` Jonathan Cameron
0 siblings, 0 replies; 28+ messages in thread
From: Jonathan Cameron @ 2021-04-30 17:05 UTC (permalink / raw)
To: Mauro Carvalho Chehab
Cc: linuxarm, mauro.chehab, Chen-Yu Tsai, Greg Kroah-Hartman,
Jernej Skrabec, Mauro Carvalho Chehab, Maxime Ripard,
Paul Kocialkowski, devel, linux-arm-kernel, linux-kernel,
linux-media
On Wed, 28 Apr 2021 16:51:45 +0200
Mauro Carvalho Chehab <mchehab+huawei@kernel.org> wrote:
> Commit dd8088d5a896 ("PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter")
> added pm_runtime_resume_and_get() in order to automatically handle
> dev->power.usage_count decrement on errors.
>
> Use the new API, in order to cleanup the error check logic.
>
> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> ---
> drivers/staging/media/sunxi/cedrus/cedrus_video.c | 6 ++----
> 1 file changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/staging/media/sunxi/cedrus/cedrus_video.c b/drivers/staging/media/sunxi/cedrus/cedrus_video.c
> index b62eb8e84057..9ddd789d0b1f 100644
> --- a/drivers/staging/media/sunxi/cedrus/cedrus_video.c
> +++ b/drivers/staging/media/sunxi/cedrus/cedrus_video.c
> @@ -490,11 +490,9 @@ static int cedrus_start_streaming(struct vb2_queue *vq, unsigned int count)
> }
>
> if (V4L2_TYPE_IS_OUTPUT(vq->type)) {
> - ret = pm_runtime_get_sync(dev->dev);
> - if (ret < 0) {
> - pm_runtime_put_noidle(dev->dev);
> + ret = pm_runtime_resume_and_get(dev->dev);
> + if (ret < 0)
> goto err_cleanup;
> - }
>
> if (dev->dec_ops[ctx->current_codec]->start) {
> ret = dev->dec_ops[ctx->current_codec]->start(ctx);
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v4 62/79] media: exynos4-is: use pm_runtime_resume_and_get()
2021-04-28 14:52 ` [PATCH v4 62/79] media: exynos4-is: " Mauro Carvalho Chehab
@ 2021-04-30 17:49 ` Jonathan Cameron
0 siblings, 0 replies; 28+ messages in thread
From: Jonathan Cameron @ 2021-04-30 17:49 UTC (permalink / raw)
To: Mauro Carvalho Chehab
Cc: linuxarm, mauro.chehab, Krzysztof Kozlowski,
Mauro Carvalho Chehab, Sylwester Nawrocki, linux-arm-kernel,
linux-kernel, linux-media, linux-samsung-soc
On Wed, 28 Apr 2021 16:52:23 +0200
Mauro Carvalho Chehab <mchehab+huawei@kernel.org> wrote:
> Commit dd8088d5a896 ("PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter")
> added pm_runtime_resume_and_get() in order to automatically handle
> dev->power.usage_count decrement on errors.
>
> Use the new API, in order to cleanup the error check logic.
>
> Reviewed-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
> ---
> drivers/media/platform/exynos4-is/fimc-capture.c | 6 ++----
> drivers/media/platform/exynos4-is/fimc-is.c | 4 ++--
> drivers/media/platform/exynos4-is/fimc-isp-video.c | 3 +--
> drivers/media/platform/exynos4-is/fimc-isp.c | 7 +++----
> drivers/media/platform/exynos4-is/fimc-lite.c | 5 +++--
> drivers/media/platform/exynos4-is/fimc-m2m.c | 2 +-
> drivers/media/platform/exynos4-is/media-dev.c | 8 +++-----
> drivers/media/platform/exynos4-is/mipi-csis.c | 8 +++-----
> 8 files changed, 18 insertions(+), 25 deletions(-)
>
> diff --git a/drivers/media/platform/exynos4-is/fimc-capture.c b/drivers/media/platform/exynos4-is/fimc-capture.c
> index 13c838d3f947..0da36443173c 100644
> --- a/drivers/media/platform/exynos4-is/fimc-capture.c
> +++ b/drivers/media/platform/exynos4-is/fimc-capture.c
> @@ -478,11 +478,9 @@ static int fimc_capture_open(struct file *file)
> goto unlock;
>
> set_bit(ST_CAPT_BUSY, &fimc->state);
> - ret = pm_runtime_get_sync(&fimc->pdev->dev);
> - if (ret < 0) {
> - pm_runtime_put_sync(&fimc->pdev->dev);
> + ret = pm_runtime_resume_and_get(&fimc->pdev->dev);
> + if (ret < 0)
> goto unlock;
> - }
>
> ret = v4l2_fh_open(file);
> if (ret) {
> diff --git a/drivers/media/platform/exynos4-is/fimc-is.c b/drivers/media/platform/exynos4-is/fimc-is.c
> index 972d9601d236..1b24f5bfc4af 100644
> --- a/drivers/media/platform/exynos4-is/fimc-is.c
> +++ b/drivers/media/platform/exynos4-is/fimc-is.c
> @@ -828,9 +828,9 @@ static int fimc_is_probe(struct platform_device *pdev)
> goto err_irq;
> }
>
> - ret = pm_runtime_get_sync(dev);
> + ret = pm_runtime_resume_and_get(dev);
> if (ret < 0)
> - goto err_pm;
> + goto err_irq;
>
I think the pm_runtime_put_noidle() below err_pm: should become
a pm_runtime_put() because otherwise we won't call fimc_is_runtime_suspend()
if runtime pm is enabled (either directly or via runtime pm count becoming zero.
(not I'm not 100% sure of my argument here...)
> vb2_dma_contig_set_max_seg_size(dev, DMA_BIT_MASK(32));
>
> diff --git a/drivers/media/platform/exynos4-is/fimc-isp-video.c b/drivers/media/platform/exynos4-is/fimc-isp-video.c
> index 612b9872afc8..8d9dc597deaa 100644
> --- a/drivers/media/platform/exynos4-is/fimc-isp-video.c
> +++ b/drivers/media/platform/exynos4-is/fimc-isp-video.c
> @@ -275,7 +275,7 @@ static int isp_video_open(struct file *file)
> if (ret < 0)
> goto unlock;
>
> - ret = pm_runtime_get_sync(&isp->pdev->dev);
> + ret = pm_runtime_resume_and_get(&isp->pdev->dev);
> if (ret < 0)
> goto rel_fh;
>
> @@ -293,7 +293,6 @@ static int isp_video_open(struct file *file)
> if (!ret)
> goto unlock;
So the good path is to jump over the block. I'd just unlock and return here
to make it more readable but unrelated to this patch.
> rel_fh:
> - pm_runtime_put_noidle(&isp->pdev->dev);
Logic flow here isn't very standard, but with this change, you'll not
call anything to unwind a successful call to pm_runtime_resume_and_get if
fmic_pipeline_call() returns and error.
My guess is pm_runtime_put_sync() is needed before rel_fh; to balance this.
> v4l2_fh_release(file);
> unlock:
> mutex_unlock(&isp->video_lock);
> diff --git a/drivers/media/platform/exynos4-is/fimc-isp.c b/drivers/media/platform/exynos4-is/fimc-isp.c
> index a77c49b18511..74b49d30901e 100644
> --- a/drivers/media/platform/exynos4-is/fimc-isp.c
> +++ b/drivers/media/platform/exynos4-is/fimc-isp.c
> @@ -304,11 +304,10 @@ static int fimc_isp_subdev_s_power(struct v4l2_subdev *sd, int on)
> pr_debug("on: %d\n", on);
>
> if (on) {
> - ret = pm_runtime_get_sync(&is->pdev->dev);
> - if (ret < 0) {
> - pm_runtime_put(&is->pdev->dev);
> + ret = pm_runtime_resume_and_get(&is->pdev->dev);
> + if (ret < 0)
> return ret;
> - }
> +
> set_bit(IS_ST_PWR_ON, &is->state);
>
> ret = fimc_is_start_firmware(is);
> diff --git a/drivers/media/platform/exynos4-is/fimc-lite.c b/drivers/media/platform/exynos4-is/fimc-lite.c
> index fe20af3a7178..4d8b18078ff3 100644
> --- a/drivers/media/platform/exynos4-is/fimc-lite.c
> +++ b/drivers/media/platform/exynos4-is/fimc-lite.c
> @@ -469,9 +469,9 @@ static int fimc_lite_open(struct file *file)
> }
>
> set_bit(ST_FLITE_IN_USE, &fimc->state);
> - ret = pm_runtime_get_sync(&fimc->pdev->dev);
> + ret = pm_runtime_resume_and_get(&fimc->pdev->dev);
> if (ret < 0)
> - goto err_pm;
> + goto err_in_use;
>
> ret = v4l2_fh_open(file);
> if (ret < 0)
> @@ -499,6 +499,7 @@ static int fimc_lite_open(struct file *file)
> v4l2_fh_release(file);
> err_pm:
> pm_runtime_put_sync(&fimc->pdev->dev);
> +err_in_use:
> clear_bit(ST_FLITE_IN_USE, &fimc->state);
> unlock:
> mutex_unlock(&fimc->lock);
> diff --git a/drivers/media/platform/exynos4-is/fimc-m2m.c b/drivers/media/platform/exynos4-is/fimc-m2m.c
> index c9704a147e5c..7c1eb05c508f 100644
> --- a/drivers/media/platform/exynos4-is/fimc-m2m.c
> +++ b/drivers/media/platform/exynos4-is/fimc-m2m.c
> @@ -75,7 +75,7 @@ static int start_streaming(struct vb2_queue *q, unsigned int count)
> struct fimc_ctx *ctx = q->drv_priv;
> int ret;
>
> - ret = pm_runtime_get_sync(&ctx->fimc_dev->pdev->dev);
> + ret = pm_runtime_resume_and_get(&ctx->fimc_dev->pdev->dev);
Use the fact pm_runtime_resume_and_get only returns 0 or < 0 to
make this
return pm_runtime_resume_and_get()
> return ret > 0 ? 0 : ret;
> }
>
> diff --git a/drivers/media/platform/exynos4-is/media-dev.c b/drivers/media/platform/exynos4-is/media-dev.c
> index 13d192ba4aa6..9346d44a06c2 100644
> --- a/drivers/media/platform/exynos4-is/media-dev.c
> +++ b/drivers/media/platform/exynos4-is/media-dev.c
> @@ -512,11 +512,9 @@ static int fimc_md_register_sensor_entities(struct fimc_md *fmd)
> if (!fmd->pmf)
> return -ENXIO;
>
> - ret = pm_runtime_get_sync(fmd->pmf);
> - if (ret < 0) {
> - pm_runtime_put(fmd->pmf);
> + ret = pm_runtime_resume_and_get(fmd->pmf);
> + if (ret < 0)
> return ret;
> - }
>
> fmd->num_sensors = 0;
>
> @@ -1291,7 +1289,7 @@ static int cam_clk_prepare(struct clk_hw *hw)
> if (camclk->fmd->pmf == NULL)
> return -ENODEV;
>
> - ret = pm_runtime_get_sync(camclk->fmd->pmf);
> + ret = pm_runtime_resume_and_get(camclk->fmd->pmf);
return pm_...
> return ret < 0 ? ret : 0;
> }
>
> diff --git a/drivers/media/platform/exynos4-is/mipi-csis.c b/drivers/media/platform/exynos4-is/mipi-csis.c
> index 1aac167abb17..2a6afb78a049 100644
> --- a/drivers/media/platform/exynos4-is/mipi-csis.c
> +++ b/drivers/media/platform/exynos4-is/mipi-csis.c
> @@ -494,7 +494,7 @@ static int s5pcsis_s_power(struct v4l2_subdev *sd, int on)
> struct device *dev = &state->pdev->dev;
>
> if (on)
> - return pm_runtime_get_sync(dev);
> + return pm_runtime_resume_and_get(dev);
>
> return pm_runtime_put_sync(dev);
> }
> @@ -509,11 +509,9 @@ static int s5pcsis_s_stream(struct v4l2_subdev *sd, int enable)
>
> if (enable) {
> s5pcsis_clear_counters(state);
> - ret = pm_runtime_get_sync(&state->pdev->dev);
> - if (ret && ret != 1) {
> - pm_runtime_put_noidle(&state->pdev->dev);
> + ret = pm_runtime_resume_and_get(&state->pdev->dev);
> + if (ret && ret != 1)
It won't be equal to 1 as pm_runtime_resume_and_get only returns <= 0
> return ret;
> - }
> }
>
> mutex_lock(&state->lock);
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v4 63/79] media: exynos-gsc: use pm_runtime_resume_and_get()
2021-04-28 14:52 ` [PATCH v4 63/79] media: exynos-gsc: " Mauro Carvalho Chehab
@ 2021-04-30 17:50 ` Jonathan Cameron
0 siblings, 0 replies; 28+ messages in thread
From: Jonathan Cameron @ 2021-04-30 17:50 UTC (permalink / raw)
To: Mauro Carvalho Chehab
Cc: linuxarm, mauro.chehab, Ezequiel Garcia, Hans Verkuil,
Krzysztof Kozlowski, Mauro Carvalho Chehab, Sylwester Nawrocki,
linux-arm-kernel, linux-kernel, linux-media, linux-samsung-soc
On Wed, 28 Apr 2021 16:52:24 +0200
Mauro Carvalho Chehab <mchehab+huawei@kernel.org> wrote:
> Commit dd8088d5a896 ("PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter")
> added pm_runtime_resume_and_get() in order to automatically handle
> dev->power.usage_count decrement on errors.
>
> Use the new API, in order to cleanup the error check logic.
>
> Reviewed-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
> ---
> drivers/media/platform/exynos-gsc/gsc-m2m.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/media/platform/exynos-gsc/gsc-m2m.c b/drivers/media/platform/exynos-gsc/gsc-m2m.c
> index 27a3c92c73bc..09551e96ac15 100644
> --- a/drivers/media/platform/exynos-gsc/gsc-m2m.c
> +++ b/drivers/media/platform/exynos-gsc/gsc-m2m.c
> @@ -58,7 +58,7 @@ static int gsc_m2m_start_streaming(struct vb2_queue *q, unsigned int count)
> struct gsc_ctx *ctx = q->drv_priv;
> int ret;
>
> - ret = pm_runtime_get_sync(&ctx->gsc_dev->pdev->dev);
> + ret = pm_runtime_resume_and_get(&ctx->gsc_dev->pdev->dev);
> return ret > 0 ? 0 : ret;
return pm_runtime_resume_and_get()
as
static inline int pm_runtime_resume_and_get(struct device *dev)
{
int ret;
ret = __pm_runtime_resume(dev, RPM_GET_PUT);
if (ret < 0) {
pm_runtime_put_noidle(dev);
return ret;
}
return 0;
}
Can't return >= 0
> }
>
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v4 73/79] media: stm32: use pm_runtime_resume_and_get()
2021-04-28 14:52 ` [PATCH v4 73/79] media: stm32: " Mauro Carvalho Chehab
@ 2021-04-30 17:58 ` Jonathan Cameron
0 siblings, 0 replies; 28+ messages in thread
From: Jonathan Cameron @ 2021-04-30 17:58 UTC (permalink / raw)
To: Mauro Carvalho Chehab
Cc: linuxarm, mauro.chehab, Alexandre Torgue, Hugues Fruchet,
Mauro Carvalho Chehab, Maxime Coquelin, linux-arm-kernel,
linux-kernel, linux-media, linux-stm32
On Wed, 28 Apr 2021 16:52:34 +0200
Mauro Carvalho Chehab <mchehab+huawei@kernel.org> wrote:
> Commit dd8088d5a896 ("PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter")
> added pm_runtime_resume_and_get() in order to automatically handle
> dev->power.usage_count decrement on errors.
>
> Use the new API, in order to cleanup the error check logic.
>
> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
> ---
> drivers/media/platform/stm32/stm32-dcmi.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/media/platform/stm32/stm32-dcmi.c b/drivers/media/platform/stm32/stm32-dcmi.c
> index bbcc2254fa2e..5f4e1db8cfcd 100644
> --- a/drivers/media/platform/stm32/stm32-dcmi.c
> +++ b/drivers/media/platform/stm32/stm32-dcmi.c
> @@ -723,11 +723,11 @@ static int dcmi_start_streaming(struct vb2_queue *vq, unsigned int count)
> u32 val = 0;
> int ret;
>
> - ret = pm_runtime_get_sync(dcmi->dev);
> + ret = pm_runtime_resume_and_get(dcmi->dev);
> if (ret < 0) {
> dev_err(dcmi->dev, "%s: Failed to start streaming, cannot get sync (%d)\n",
> __func__, ret);
> - goto err_pm_put;
> + goto err_unlock;
maybe err_unlocked; to indicate the lock isn't held. This briefly confused me.
> }
>
> ret = media_pipeline_start(&dcmi->vdev->entity, &dcmi->pipeline);
> @@ -848,6 +848,7 @@ static int dcmi_start_streaming(struct vb2_queue *vq, unsigned int count)
>
> err_pm_put:
> pm_runtime_put(dcmi->dev);
> +err_unlock:
> spin_lock_irq(&dcmi->irqlock);
> /*
> * Return all buffers to vb2 in QUEUED state.
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 28+ messages in thread
end of thread, other threads:[~2021-04-30 18:01 UTC | newest]
Thread overview: 28+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <cover.1619621413.git.mchehab+huawei@kernel.org>
2021-04-28 14:51 ` [PATCH v4 07/79] media: exynos-gsc: don't resume at remove time Mauro Carvalho Chehab
2021-04-28 15:25 ` Sylwester Nawrocki
2021-04-28 19:44 ` kernel test robot
2021-04-28 19:56 ` kernel test robot
2021-04-28 14:51 ` [PATCH v4 08/79] media: atmel: properly get pm_runtime Mauro Carvalho Chehab
2021-04-30 16:13 ` Jonathan Cameron
2021-04-28 14:51 ` [PATCH v4 10/79] media: mdk-mdp: fix pm_runtime_get_sync() usage count Mauro Carvalho Chehab
2021-04-30 16:30 ` Jonathan Cameron
2021-04-28 14:51 ` [PATCH v4 16/79] media: mtk-vcodec: " Mauro Carvalho Chehab
2021-04-30 16:44 ` Jonathan Cameron
2021-04-28 14:51 ` [PATCH v4 17/79] media: s5p-jpeg: " Mauro Carvalho Chehab
2021-04-28 14:51 ` [PATCH v4 19/79] media: sunxi: " Mauro Carvalho Chehab
2021-04-30 16:48 ` Jonathan Cameron
2021-04-28 14:51 ` [PATCH v4 22/79] staging: media: imx7-mipi-csis: use pm_runtime_resume_and_get() Mauro Carvalho Chehab
2021-04-28 14:51 ` [PATCH v4 24/79] staging: media: cedrus_video: " Mauro Carvalho Chehab
2021-04-30 17:05 ` Jonathan Cameron
2021-04-28 14:52 ` [PATCH v4 57/79] media: rockchip/rga: " Mauro Carvalho Chehab
2021-04-28 17:11 ` Ezequiel Garcia
2021-04-28 14:52 ` [PATCH v4 62/79] media: exynos4-is: " Mauro Carvalho Chehab
2021-04-30 17:49 ` Jonathan Cameron
2021-04-28 14:52 ` [PATCH v4 63/79] media: exynos-gsc: " Mauro Carvalho Chehab
2021-04-30 17:50 ` Jonathan Cameron
2021-04-28 14:52 ` [PATCH v4 64/79] media: mtk-jpeg: " Mauro Carvalho Chehab
2021-04-28 14:52 ` [PATCH v4 70/79] media: rkisp1: " Mauro Carvalho Chehab
2021-04-28 14:52 ` [PATCH v4 72/79] media: s5p-mfc: " Mauro Carvalho Chehab
2021-04-28 14:52 ` [PATCH v4 73/79] media: stm32: " Mauro Carvalho Chehab
2021-04-30 17:58 ` Jonathan Cameron
2021-04-28 14:52 ` [PATCH v4 74/79] media: sunxi: " Mauro Carvalho Chehab
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).