Address some issues with PM runtime at media subsystem
Subsystems (58)
v3 cover Address some issues with PM runtime at media subsystem
During the review of the patches from unm.edu, one of the patterns I noticed is the amount of patches trying to fix pm_runtime_get_sync() calls.
After analyzing the feedback from version 1 of this series, I noticed a few other weird behaviors at the PM runtime resume code. So, this series start addressing some bugs and issues at the current code. Then, it gets rid of pm_runtime_get_sync() at the media subsystem (with 2 exceptions).
It should be noticed that
Commit dd8088d5a896 ("PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter") added a new method to does a pm_runtime get, which increments
the usage count only on success.
The rationale of getting rid of pm_runtime_get_sync() is:
1. despite its name, this is actually a PM runtime resume call, but some developers didn't seem to realize that, as I got this pattern on some drivers:
pm_runtime_get_sync(&client->dev);
pm_runtime_disable(&client->dev);
pm_runtime_set_suspended(&client->dev);
pm_runtime_put_noidle(&client->dev);It makes no sense to resume PM just to suspend it again ;-)
2. Usual *_get() methods only increment their use count on success, but pm_runtime_get_sync() increments it unconditionally. Due to that, several drivers were mistakenly not calling pm_runtime_put_noidle() when it fails;
3. The name of the new variant is a lot clearer:
pm_runtime_resume_and_get()
As its same clearly says that this is a PM runtime resume function,
that also increments the usage counter on success;4. Consistency: we did similar changes subsystem wide with for instance strlcpy() and strcpy() that got replaced by strscpy(). Having all drivers using the same known-to-be-safe methods is a good thing;
5. Prevent newer drivers to copy-and-paste a code that it would be easier to break if they don't truly understand what's behind the scenes.
This series replace places pm_runtime_get_sync(), by calling pm_runtime_resume_and_get() instead.
This should help to avoid future mistakes like that, as people tend to use the existing drivers as examples for newer ones.
compile-tested only.
Patches 1 to 7 fix some issues that already exists at the current PM runtime code;
patches 8 to 20 fix some usage_count problems that still exists at the media subsystem;
patches 21 to 78 repaces pm_runtime_get_sync() bypm_runtime_resume_and_get();
Patch 79 (and a hunk on patch 78) documents the two exceptions where pm_runtime_get_sync() will still be used for now.
---
v3: - fix a compilation error;
v2: - addressed pointed issues and fixed a few other PM issues.
Mauro Carvalho Chehab (79):
media: venus: fix PM runtime logic at venus_sys_error_handler()
media: i2c: ccs-core: return the right error code at suspend
media: i2c: mt9m001: don't resume at remove time
media: i2c: ov7740: don't resume at remove time
media: i2c: video-i2c: don't resume at remove time
media: exynos-gsc: don't resume at remove time
media: atmel: properly get pm_runtime
media: marvel-ccic: fix some issues when getting pm_runtime
media: mdk-mdp: fix pm_runtime_get_sync() usage count
media: rcar_fdp1: fix pm_runtime_get_sync() usage count
media: rga-buf: use pm_runtime_resume_and_get()
media: renesas-ceu: Properly check for PM errors
media: s5p: fix pm_runtime_get_sync() usage count
media: am437x: fix pm_runtime_get_sync() usage count
media: sh_vou: fix pm_runtime_get_sync() usage count
media: mtk-vcodec: fix pm_runtime_get_sync() usage count
media: s5p-jpeg: fix pm_runtime_get_sync() usage count
media: delta-v4l2: fix pm_runtime_get_sync() usage count
media: sun8i_rotate: fix pm_runtime_get_sync() usage count
staging: media: rkvdec: fix pm_runtime_get_sync() usage count
staging: media: atomisp_fops: use pm_runtime_resume_and_get()
staging: media: imx7-mipi-csis: use pm_runtime_resume_and_get()
staging: media: ipu3: use pm_runtime_resume_and_get()
staging: media: cedrus_video: use pm_runtime_resume_and_get()
staging: media: vde: use pm_runtime_resume_and_get()
staging: media: csi: use pm_runtime_resume_and_get()
staging: media: vi: use pm_runtime_resume_and_get()
media: i2c: ak7375: use pm_runtime_resume_and_get()
media: i2c: ccs-core: use pm_runtime_resume_and_get()
media: i2c: dw9714: use pm_runtime_resume_and_get()
media: i2c: dw9768: use pm_runtime_resume_and_get()
media: i2c: dw9807-vcm: use pm_runtime_resume_and_get()
media: i2c: hi556: use pm_runtime_resume_and_get()
media: i2c: imx214: use pm_runtime_resume_and_get()
media: i2c: imx219: use pm_runtime_resume_and_get()
media: i2c: imx258: use pm_runtime_resume_and_get()
media: i2c: imx274: use pm_runtime_resume_and_get()
media: i2c: imx290: use pm_runtime_resume_and_get()
media: i2c: imx319: use pm_runtime_resume_and_get()
media: i2c: imx334: use pm_runtime_resume_and_get()
media: i2c: imx355: use pm_runtime_resume_and_get()
media: i2c: mt9m001: use pm_runtime_resume_and_get()
media: i2c: ov02a10: use pm_runtime_resume_and_get()
media: i2c: ov13858: use pm_runtime_resume_and_get()
media: i2c: ov2659: use pm_runtime_resume_and_get()
media: i2c: ov2685: use pm_runtime_resume_and_get()
media: i2c: ov2740: use pm_runtime_resume_and_get()
media: i2c: ov5647: use pm_runtime_resume_and_get()
media: i2c: ov5648: use pm_runtime_resume_and_get()
media: i2c: ov5670: use pm_runtime_resume_and_get()
media: i2c: ov5675: use pm_runtime_resume_and_get()
media: i2c: ov5695: use pm_runtime_resume_and_get()
media: i2c: ov7740: use pm_runtime_resume_and_get()
media: i2c: ov8856: use pm_runtime_resume_and_get()
media: i2c: ov8865: use pm_runtime_resume_and_get()
media: i2c: ov9734: use pm_runtime_resume_and_get()
media: i2c: tvp5150: use pm_runtime_resume_and_get()
media: i2c: video-i2c: use pm_runtime_resume_and_get()
media: sti/hva: use pm_runtime_resume_and_get()
media: ipu3: use pm_runtime_resume_and_get()
media: coda: use pm_runtime_resume_and_get()
media: exynos4-is: use pm_runtime_resume_and_get()
media: exynos-gsc: use pm_runtime_resume_and_get()
media: mtk-jpeg: use pm_runtime_resume_and_get()
media: camss: use pm_runtime_resume_and_get()
media: venus: use pm_runtime_resume_and_get()
media: venus: vdec: use pm_runtime_resume_and_get()
media: venus: venc: use pm_runtime_resume_and_get()
media: rcar-fcp: use pm_runtime_resume_and_get()
media: rkisp1: use pm_runtime_resume_and_get()
media: s3c-camif: use pm_runtime_resume_and_get()
media: s5p-mfc: use pm_runtime_resume_and_get()
media: bdisp-v4l2: use pm_runtime_resume_and_get()
media: stm32: use pm_runtime_resume_and_get()
media: sunxi: use pm_runtime_resume_and_get()
media: ti-vpe: use pm_runtime_resume_and_get()
media: vsp1: use pm_runtime_resume_and_get()
media: rcar-vin: use pm_runtime_resume_and_get()
media: hantro: document the usage of pm_runtime_get_sync()
drivers/media/cec/platform/s5p/s5p_cec.c | 5 +++- drivers/media/i2c/ak7375.c | 10 +------ drivers/media/i2c/ccs/ccs-core.c | 18 +++++------- drivers/media/i2c/dw9714.c | 10 +------ drivers/media/i2c/dw9768.c | 10 +------ drivers/media/i2c/dw9807-vcm.c | 10 +------ drivers/media/i2c/hi556.c | 3 +- drivers/media/i2c/imx214.c | 6 ++-- drivers/media/i2c/imx219.c | 6 ++-- drivers/media/i2c/imx258.c | 6 ++-- drivers/media/i2c/imx274.c | 3 +- drivers/media/i2c/imx290.c | 6 ++-- drivers/media/i2c/imx319.c | 6 ++-- drivers/media/i2c/imx334.c | 5 ++-- drivers/media/i2c/imx355.c | 6 ++-- drivers/media/i2c/mt9m001.c | 8 ++---- drivers/media/i2c/ov02a10.c | 6 ++-- drivers/media/i2c/ov13858.c | 6 ++-- drivers/media/i2c/ov2659.c | 6 ++-- drivers/media/i2c/ov2685.c | 7 ++--- drivers/media/i2c/ov2740.c | 6 ++-- drivers/media/i2c/ov5647.c | 9 +++--- drivers/media/i2c/ov5648.c | 6 ++-- drivers/media/i2c/ov5670.c | 6 ++-- drivers/media/i2c/ov5675.c | 3 +- drivers/media/i2c/ov5695.c | 6 ++-- drivers/media/i2c/ov7740.c | 8 ++---- drivers/media/i2c/ov8856.c | 3 +- drivers/media/i2c/ov8865.c | 6 ++-- drivers/media/i2c/ov9734.c | 3 +- drivers/media/i2c/tvp5150.c | 16 ++--------- drivers/media/i2c/video-i2c.c | 14 +++------- drivers/media/pci/intel/ipu3/ipu3-cio2-main.c | 3 +- drivers/media/platform/am437x/am437x-vpfe.c | 22 +++++++++++---- drivers/media/platform/atmel/atmel-isc-base.c | 27 +++++++++++++----- drivers/media/platform/atmel/atmel-isi.c | 19 ++++++++++--- drivers/media/platform/coda/coda-common.c | 5 ++-- drivers/media/platform/exynos-gsc/gsc-core.c | 3 -- drivers/media/platform/exynos-gsc/gsc-m2m.c | 2 +- .../media/platform/exynos4-is/fimc-capture.c | 6 ++-- drivers/media/platform/exynos4-is/fimc-is.c | 4 +-- .../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 ++---- .../media/platform/marvell-ccic/mcam-core.c | 9 ++++-- .../media/platform/mtk-jpeg/mtk_jpeg_core.c | 4 +-- drivers/media/platform/mtk-mdp/mtk_mdp_m2m.c | 6 ++-- .../platform/mtk-vcodec/mtk_vcodec_dec_pm.c | 4 +-- .../media/platform/qcom/camss/camss-csid.c | 6 ++-- .../media/platform/qcom/camss/camss-csiphy.c | 6 ++-- .../media/platform/qcom/camss/camss-ispif.c | 6 ++-- drivers/media/platform/qcom/camss/camss-vfe.c | 5 ++-- drivers/media/platform/qcom/venus/core.c | 28 +++++++++++-------- .../media/platform/qcom/venus/pm_helpers.c | 10 +++---- drivers/media/platform/qcom/venus/vdec.c | 4 +-- drivers/media/platform/qcom/venus/venc.c | 5 ++-- drivers/media/platform/rcar-fcp.c | 6 ++-- drivers/media/platform/rcar-vin/rcar-csi2.c | 6 ++++ drivers/media/platform/rcar-vin/rcar-dma.c | 6 ++-- drivers/media/platform/rcar-vin/rcar-v4l2.c | 6 ++-- drivers/media/platform/rcar_fdp1.c | 12 ++++++-- drivers/media/platform/renesas-ceu.c | 4 +-- drivers/media/platform/rockchip/rga/rga-buf.c | 3 +- drivers/media/platform/rockchip/rga/rga.c | 4 ++- .../platform/rockchip/rkisp1/rkisp1-capture.c | 3 +- .../media/platform/s3c-camif/camif-capture.c | 2 +- drivers/media/platform/s3c-camif/camif-core.c | 5 ++-- drivers/media/platform/s5p-jpeg/jpeg-core.c | 2 +- drivers/media/platform/s5p-mfc/s5p_mfc_pm.c | 6 ++-- drivers/media/platform/sh_vou.c | 6 +++- drivers/media/platform/sti/bdisp/bdisp-v4l2.c | 7 +++-- drivers/media/platform/sti/delta/delta-v4l2.c | 4 +-- drivers/media/platform/sti/hva/hva-hw.c | 17 +++++------ drivers/media/platform/stm32/stm32-dcmi.c | 5 ++-- .../platform/sunxi/sun4i-csi/sun4i_v4l2.c | 6 ++-- .../sunxi/sun8i-rotate/sun8i_rotate.c | 2 +- drivers/media/platform/ti-vpe/cal-video.c | 4 ++- drivers/media/platform/ti-vpe/cal.c | 8 ++++-- drivers/media/platform/ti-vpe/vpe.c | 4 +-- drivers/media/platform/vsp1/vsp1_drv.c | 6 ++-- .../staging/media/atomisp/pci/atomisp_fops.c | 6 ++-- drivers/staging/media/hantro/hantro_drv.c | 7 +++++ drivers/staging/media/imx/imx7-mipi-csis.c | 7 ++--- drivers/staging/media/ipu3/ipu3.c | 3 +- drivers/staging/media/rkvdec/rkvdec.c | 2 +- .../staging/media/sunxi/cedrus/cedrus_video.c | 6 ++-- drivers/staging/media/tegra-vde/vde.c | 16 +++++++---- drivers/staging/media/tegra-video/csi.c | 3 +- drivers/staging/media/tegra-video/vi.c | 3 +- 92 files changed, 298 insertions(+), 335 deletions(-)
Signature · 1 line
2.30.2
PATCH v3 1/79 media: venus: fix PM runtime logic at venus_sys_error_handler()
The venus_sys_error_handler() assumes that pm_runtime was able to resume, as it does things like:
while (pm_runtime_active(core->dev_dec) || pm_runtime_active(core->dev_enc)) msleep(10);
Well, if, for whatever reason, this won't happen, the routine won't do what's expected. So, check for the returned error condition, warning if it returns an error.
--- drivers/media/platform/qcom/venus/core.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-)
drivers/media/platform/qcom/venus/core.c +11 -3
@@ -84,7 +84,11 @@ static void venus_sys_error_handler(struct work_struct *work) container_of(work, struct venus_core, work.work);int ret =0 ; -pm_runtime_get_sync (core->dev); + ret =pm_runtime_get_sync (core->dev); +if (WARN_ON (ret <0 )) { +pm_runtime_put_noidle (core->dev); +return ; + }hfi_core_deinit (core, true);
@@ -106,9 +110,13 @@ static void venus_sys_error_handler(struct work_struct *work)hfi_reinit (core); -pm_runtime_get_sync (core->dev); + ret =pm_runtime_get_sync (core->dev); +if (WARN_ON (ret <0 )) { +pm_runtime_put_noidle (core->dev); +return ; + } - ret |=venus_boot (core); + ret =venus_boot (core); ret |=hfi_core_resume (core, true);enable_irq (core->irq);
Signature · 1 line
2.30.2
PATCH v3 2/79 media: i2c: ccs-core: return the right error code at suspend
In reply to Mauro Carvalho ChehabIf pm_runtime resume logic fails, return the error code provided by it, instead of -EAGAIN, as, depending on what caused it to fail, it may not be something that would be recovered.
--- drivers/media/i2c/ccs/ccs-core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/media/i2c/ccs/ccs-core.c +1 -1
@@ -3093,7 +3093,7 @@ static int __maybe_unused ccs_suspend(struct device *dev)if (rval <0 ) {pm_runtime_put_noidle (dev); -return -EAGAIN ; +return rval; }if (sensor->streaming)
Signature · 1 line
2.30.2
PATCH v3 3/79 media: i2c: mt9m001: don't resume at remove time
In reply to Mauro Carvalho ChehabCalling pm_runtime_get_sync() at driver's removal time is not right, as this will resume PM runtime. This is clearly not what it is desired there, since it calls pm_runtime_set_suspended() afterwards.
So, just remove pm runtime get/put logic from the device removal logic.
--- drivers/media/i2c/mt9m001.c | 3 --- 1 file changed, 3 deletions(-)
drivers/media/i2c/mt9m001.c +0 -3
@@ -834,14 +834,11 @@ static int mt9m001_remove(struct i2c_client *client) {struct mt9m001 *mt9m001 =to_mt9m001 (client); -pm_runtime_get_sync (&client->dev); -v4l2_async_unregister_subdev (&mt9m001->subdev);media_entity_cleanup (&mt9m001->subdev.entity);pm_runtime_disable (&client->dev);pm_runtime_set_suspended (&client->dev); -pm_runtime_put_noidle (&client->dev);mt9m001_power_off (&client->dev);v4l2_ctrl_handler_free (&mt9m001->hdl);
Signature · 1 line
2.30.2
PATCH v3 4/79 media: i2c: ov7740: don't resume at remove time
In reply to Mauro Carvalho ChehabCalling pm_runtime_get_sync() at driver's removal time is not right, as this will resume PM runtime. This is clearly not what it is desired there, since it calls pm_runtime_set_suspended() afterwards.
So, just remove pm runtime get/put logic from the device removal logic.
--- drivers/media/i2c/ov7740.c | 2 -- 1 file changed, 2 deletions(-)
drivers/media/i2c/ov7740.c +0 -2
@@ -1165,10 +1165,8 @@ static int ov7740_remove(struct i2c_client *client)v4l2_async_unregister_subdev (sd);ov7740_free_controls (ov7740); -pm_runtime_get_sync (&client->dev);pm_runtime_disable (&client->dev);pm_runtime_set_suspended (&client->dev); -pm_runtime_put_noidle (&client->dev);ov7740_set_power (ov7740,0 );return 0 ;
Signature · 1 line
2.30.2
PATCH v3 5/79 media: i2c: video-i2c: don't resume at remove time
In reply to Mauro Carvalho ChehabCalling pm_runtime_get_sync() at driver's removal time is not right, as this will resume PM runtime. This is clearly not what it is desired there, since it calls pm_runtime_set_suspended() afterwards.
So, just remove pm runtime get/put logic from the device removal logic.
--- drivers/media/i2c/video-i2c.c | 2 -- 1 file changed, 2 deletions(-)
drivers/media/i2c/video-i2c.c +0 -2
@@ -893,10 +893,8 @@ static int video_i2c_remove(struct i2c_client *client) {struct video_i2c_data *data =i2c_get_clientdata (client); -pm_runtime_get_sync (&client->dev);pm_runtime_disable (&client->dev);pm_runtime_set_suspended (&client->dev); -pm_runtime_put_noidle (&client->dev);if (data->chip->set_power) data->chip->set_power (data, false);
Signature · 1 line
2.30.2
PATCH v3 6/79 media: exynos-gsc: don't resume at remove time
In reply to Mauro Carvalho ChehabCalling 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, simplify the code by getting rid of that.
--- drivers/media/platform/exynos-gsc/gsc-core.c | 3 --- 1 file changed, 3 deletions(-)
drivers/media/platform/exynos-gsc/gsc-core.c +0 -3
@@ -1210,8 +1210,6 @@ 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);
@@ -1219,7 +1217,6 @@ static int gsc_remove(struct platform_device *pdev)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);dev_dbg (&pdev->dev,"%s driver unloaded\n" , pdev->name);
Signature · 1 line
2.30.2
Re: [PATCH v3 06/79] media: exynos-gsc: don't resume at remove time
Quoted 26 lines · Mauro Carvalho Chehab
Calling
pm_runtime_get_sync()at driver's removal time is not needed, as this will resume PM runtime. Also, the PM runtime code atpm_runtime_disable()already calls it, if it detects the need.So, simplify the code by getting rid of that.
Signed-off-by Mauro Carvalho Chehab <[email protected]>--- drivers/media/platform/exynos-gsc/gsc-core.c | 3 --- 1 file changed, 3 deletions(-)drivers/media/platform/exynos-gsc/gsc-core.c +0
-2@@ -1210,8 +1210,6 @@ 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);
drivers/media/platform/exynos-gsc/gsc-core.c static int gsc_remove(struct platform_device *pdev) · line 1220
Quoted 5 lines
drivers/media/platform/exynos-gsc/gsc-core.c +0
-1@@ -1219,7 +1217,6 @@ static int gsc_remove(struct platform_device *pdev)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);
This will result in unbalanced clk_disable_unprepare() calls when the device is not runtime PM active at the time of gsc_remove() call. I think we need to first disable runtime PM for the device and then disable the clocks only when pm_runtime_status_suspended(&pdev->dev) returns false.
Thanks,
Sylwester
PATCH v3 7/79 media: atmel: properly get pm_runtime
In reply to Mauro Carvalho ChehabThere 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.
--- drivers/media/platform/atmel/atmel-isc-base.c | 27 ++++++++++++++----- drivers/media/platform/atmel/atmel-isi.c | 19 ++++++++++--- 2 files changed, 35 insertions(+), 11 deletions(-)
drivers/media/platform/atmel/atmel-isc-base.c +20 -7
@@ -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
drivers/media/platform/atmel/atmel-isi.c +15 -4
@@ -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) {
Signature · 1 line
2.30.2
PATCH v3 8/79 media: marvel-ccic: fix some issues when getting pm_runtime
In reply to Mauro Carvalho ChehabCalling pm_runtime_get_sync() is bad, since even when it returns an error, pm_runtime_put*() should be called. So, use instead pm_runtime_resume_and_get().
While here, ensure that the error condition will be checked during clock enable an media open() calls.
--- drivers/media/platform/marvell-ccic/mcam-core.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
drivers/media/platform/marvell-ccic/mcam-core.c +7 -2
@@ -918,6 +918,7 @@ static int mclk_enable(struct clk_hw *hw) struct mcam_camera *cam = container_of(hw, struct mcam_camera, mclk_hw);int mclk_src;int mclk_div; +int ret;/* * Clock the sensor appropriately. Controller clock should
@@ -931,7 +932,9 @@ static int mclk_enable(struct clk_hw *hw) mclk_div =2 ; } -pm_runtime_get_sync (cam->dev); + ret =pm_runtime_resume_and_get (cam->dev); +if (ret <0 ) +return ret;clk_enable (cam->clk[0 ]);mcam_reg_write (cam,REG_CLKCTRL , (mclk_src <<29 ) | mclk_div);mcam_ctlr_power_up (cam);
@@ -1611,7 +1614,9 @@ static int mcam_v4l_open(struct file *filp) ret =sensor_call (cam, core, s_power,1 );if (ret) goto out; -pm_runtime_get_sync (cam->dev); + ret =pm_runtime_resume_and_get (cam->dev); +if (ret <0 ) + goto out;__mcam_cam_reset (cam);mcam_set_config_needed (cam,1 ); }
Signature · 1 line
2.30.2
PATCH v3 9/79 media: mdk-mdp: fix pm_runtime_get_sync() usage count
In reply to Mauro Carvalho ChehabThe pm_runtime_get_sync() internally increments thedev->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.
--- drivers/media/platform/mtk-mdp/mtk_mdp_m2m.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/media/platform/mtk-mdp/mtk_mdp_m2m.c +3 -3
@@ -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,
Signature · 1 line
2.30.2
PATCH v3 10/79 media: rcar_fdp1: fix pm_runtime_get_sync() usage count
In reply to Mauro Carvalho ChehabThe pm_runtime_get_sync() internally increments thedev->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.
Also, right now, the driver is ignoring any troubles when trying to do PM resume. So, add the proper error handling for the code.
--- drivers/media/platform/rcar_fdp1.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)
drivers/media/platform/rcar_fdp1.c +10 -2
@@ -2140,7 +2140,13 @@ static int fdp1_open(struct file *file) }/* Perform any power management required */ -pm_runtime_get_sync (fdp1->dev); + ret =pm_runtime_resume_and_get (fdp1->dev); +if (ret <0 ) { +v4l2_m2m_ctx_release (ctx->fh.m2m_ctx); +v4l2_ctrl_handler_free (&ctx->hdl); +kfree (ctx); + goto done; + }v4l2_fh_add (&ctx->fh);
@@ -2351,7 +2357,9 @@ static int fdp1_probe(struct platform_device *pdev)/* Power up the cells to read HW */ pm_runtime_enable (&pdev->dev); -pm_runtime_get_sync (fdp1->dev); + ret =pm_runtime_resume_and_get (fdp1->dev); +if (ret <0 ) +return ret; hw_version =fdp1_read (fdp1,FD1_IP_INTDATA );switch (hw_version) {
Signature · 1 line
2.30.2
PATCH v3 11/79 media: rga-buf: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/platform/rockchip/rga/rga-buf.c | 3 +-- drivers/media/platform/rockchip/rga/rga.c | 4 +++- 2 files changed, 4 insertions(+), 3 deletions(-)
drivers/media/platform/rockchip/rga/rga-buf.c +1 -2
@@ -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; }
drivers/media/platform/rockchip/rga/rga.c +3 -1
@@ -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 ;
Signature · 1 line
2.30.2
Re: [PATCH v3 11/79] media: rga-buf: use pm_runtime_resume_and_get()
Quoted 7 lines · Mauro Carvalho Chehab
Commit
dd8088d5a896("PM: runtime: Addpm_runtime_resume_and_getto deal with usage counter") addedpm_runtime_resume_and_get()in order to automatically handledev->power.usage_countdecrement on errors.Use the new API, in order to cleanup the error check logic.
Signed-off-by Mauro Carvalho Chehab <[email protected]>
Sorry, I just replied to the wrong patch version.
Again:
Thanks,
Ezequiel
Quoted 35 lines
---
drivers/media/platform/rockchip/rga/rga-buf.c | 3 +-- drivers/media/platform/rockchip/rga/rga.c | 4 +++-2 files changed, 4 insertions(+), 3 deletions(-)drivers/media/platform/rockchip/rga/rga-buf.c +0
-0@@ -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;
}drivers/media/platform/rockchip/rga/rga.c +0
-0@@ -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)
+ gotounreg_video_dev;
rga->version.major = (rga_read(rga, RGA_VERSION_INFO)>> 24) &0xFF;rga->version.minor= (rga_read(rga, RGA_VERSION_INFO)>> 20) &0x0F;
PATCH v3 12/79 media: renesas-ceu: Properly check for PM errors
In reply to Mauro Carvalho ChehabRight now, the driver just assumes that PM runtime resume worked, but it may fail.
Well, the pm_runtime_get_sync() internally increments the dev->power.usage_count without decrementing it, even on errors.
So, using it is tricky. Let's 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") and return an error if something bad happens.
This should ensure that the PM runtime usage_count will be properly decremented if an error happens at open time.
--- drivers/media/platform/renesas-ceu.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/media/platform/renesas-ceu.c +2 -2
@@ -1099,10 +1099,10 @@ static int ceu_open(struct file *file)mutex_lock (&ceudev->mlock);/* Causes soft-reset and sensor power on on first open */ -pm_runtime_get_sync (ceudev->dev); + ret =pm_runtime_resume_and_get (ceudev->dev);mutex_unlock (&ceudev->mlock); -return 0 ; +return ret; }static int ceu_release (struct file *file)
Signature · 1 line
2.30.2
PATCH v3 13/79 media: s5p: fix pm_runtime_get_sync() usage count
In reply to Mauro Carvalho ChehabThe pm_runtime_get_sync() internally increments thedev->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, check if the PM runtime error was caught at s5p_cec_adap_enable().
--- drivers/media/cec/platform/s5p/s5p_cec.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/media/cec/platform/s5p/s5p_cec.c +4 -1
@@ -35,10 +35,13 @@ MODULE_PARM_DESC(debug, "debug level (0-2)");static int s5p_cec_adap_enable (struct cec_adapter *adap,bool enable) { +int ret;struct s5p_cec_dev *cec =cec_get_drvdata (adap);if (enable) { -pm_runtime_get_sync (cec->dev); + ret =pm_runtime_resume_and_get (cec->dev); +if (ret <0 ) +return ret;s5p_cec_reset (cec);
Signature · 1 line
2.30.2
Re: [PATCH v3 13/79] media: s5p: fix pm_runtime_get_sync() usage count
Quoted 11 lines · Mauro Carvalho Chehab
The
pm_runtime_get_sync()internally increments thedev->power.usage_countwithout decrementing it, even on errors.
Replace it by the newpm_runtime_resume_and_get(), introduced by:
commitdd8088d5a896("PM: runtime: Addpm_runtime_resume_and_getto deal with usage counter") in order to properly decrement the usage counter and avoid memory
leaks.While here, check if the PM runtime error was caught at
s5p_cec_adap_enable().Signed-off-by Mauro Carvalho Chehab <[email protected]>
Quoted 13 lines
--- drivers/media/cec/platform/s5p/s5p_cec.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)drivers/media/cec/platform/s5p/s5p_cec.c +1
-0@@ -35,10 +35,13 @@ MODULE_PARM_DESC(debug, "debug level (0-2)");static int s5p_cec_adap_enable (struct cec_adapter *adap,bool enable) { +int ret;
drivers/media/cec/platform/s5p/s5p_cec.c MODULE_PARM_DESC(debug, "debug level (0-2)"); · line 47
Quoted 10 lines
drivers/media/cec/platform/s5p/s5p_cec.c +3
-1struct s5p_cec_dev *cec =cec_get_drvdata (adap);if (enable) { -pm_runtime_get_sync (cec->dev); + ret =pm_runtime_resume_and_get (cec->dev); +if (ret <0 ) +return ret;s5p_cec_reset (cec);
Best regards
Signature · 2 lines
Marek Szyprowski, PhD Samsung R&D Institute Poland
Re: [PATCH v3 13/79] media: s5p: fix pm_runtime_get_sync() usage count
In reply to Mauro Carvalho ChehabQuoted 23 lines · Mauro Carvalho Chehab
The
pm_runtime_get_sync()internally increments thedev->power.usage_countwithout decrementing it, even on errors.
Replace it by the newpm_runtime_resume_and_get(), introduced by:
commitdd8088d5a896("PM: runtime: Addpm_runtime_resume_and_getto deal with usage counter") in order to properly decrement the usage counter and avoid memory
leaks.While here, check if the PM runtime error was caught at
s5p_cec_adap_enable().Signed-off-by Mauro Carvalho Chehab <[email protected]>--- drivers/media/cec/platform/s5p/s5p_cec.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)drivers/media/cec/platform/s5p/s5p_cec.c +0
-0@@ -35,10 +35,13 @@ MODULE_PARM_DESC(debug, "debug level (0-2)");static int s5p_cec_adap_enable (struct cec_adapter *adap,bool enable) {
drivers/media/cec/platform/s5p/s5p_cec.c MODULE_PARM_DESC(debug, "debug level (0-2)"); · line 46
Quoted 10 lines
drivers/media/cec/platform/s5p/s5p_cec.c +4
-1+int ret;struct s5p_cec_dev *cec =cec_get_drvdata (adap);if (enable) { -pm_runtime_get_sync (cec->dev); + ret =pm_runtime_resume_and_get (cec->dev); +if (ret <0 ) +return ret;s5p_cec_reset (cec);
Not related to this patch, it seems there is bug in the second 'if (enable)' branch, where pm_runtime_disable() is used instead of pm_runtime_put(_sync)().
Re: [PATCH v3 13/79] media: s5p: fix pm_runtime_get_sync() usage count
Em Tue, 27 Apr 2021 12:51:45 +0200
Sylwester Nawrocki <[email protected]> escreveu:
Quoted 33 lines · Mauro Carvalho Chehab
Quoted 32 lines
The
pm_runtime_get_sync()internally increments thedev->power.usage_countwithout decrementing it, even on errors.
Replace it by the newpm_runtime_resume_and_get(), introduced by:
commitdd8088d5a896("PM: runtime: Addpm_runtime_resume_and_getto deal with usage counter") in order to properly decrement the usage counter and avoid memory
leaks.While here, check if the PM runtime error was caught at
s5p_cec_adap_enable().Signed-off-by Mauro Carvalho Chehab <[email protected]>--- drivers/media/cec/platform/s5p/s5p_cec.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)drivers/media/cec/platform/s5p/s5p_cec.c +4
-1@@ -35,10 +35,13 @@ MODULE_PARM_DESC(debug, "debug level (0-2)");static int s5p_cec_adap_enable (struct cec_adapter *adap,bool enable) { +int ret;struct s5p_cec_dev *cec =cec_get_drvdata (adap);if (enable) { -pm_runtime_get_sync (cec->dev); + ret =pm_runtime_resume_and_get (cec->dev); +if (ret <0 ) +return ret;
Quoted 7 lines
drivers/media/cec/platform/s5p/s5p_cec.c MODULE_PARM_DESC(debug, "debug level (0-2)"); · line 46
Quoted 1 line
drivers/media/cec/platform/s5p/s5p_cec.c +0
-0s5p_cec_reset (cec);Reviewed-by Sylwester Nawrocki <[email protected]>Not related to this patch, it seems there is bug in the second 'if (enable)' branch, where
pm_runtime_disable()is used instead of pm_runtime_put(_sync)().
Yeah. I'll add an additional patch before this series in order to fix the bug. Thanks!
Regards,
Mauro
Thanks,
Mauro
PATCH v3 14/79 media: am437x: fix pm_runtime_get_sync() usage count
In reply to Mauro Carvalho ChehabThe pm_runtime_get_sync() internally increments thedev->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, ensure that the driver will check if PM runtime resumed at vpfe_initialize_device().
--- drivers/media/platform/am437x/am437x-vpfe.c | 22 +++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-)
drivers/media/platform/am437x/am437x-vpfe.c +16 -6
@@ -1021,7 +1021,9 @@ static int vpfe_initialize_device(struct vpfe_device *vpfe)if (ret)return ret; -pm_runtime_get_sync (vpfe->pdev); + ret =pm_runtime_resume_and_get (vpfe->pdev); +if (ret <0 ) +return ret;vpfe_config_enable (&vpfe->ccdc,1 );
@@ -2443,7 +2445,11 @@ static int vpfe_probe(struct platform_device *pdev)pm_runtime_enable (&pdev->dev);/* for now just enable it here instead of waiting for the open */ -pm_runtime_get_sync (&pdev->dev); + ret =pm_runtime_resume_and_get (&pdev->dev); +if (ret <0 ) { +vpfe_err (vpfe,"Unable to resume device.\n" ); + goto probe_out_v4l2_unregister; + }vpfe_ccdc_config_defaults (ccdc);
@@ -2527,10 +2533,11 @@ static int vpfe_suspend(struct device *dev) {struct vpfe_device *vpfe =dev_get_drvdata (dev);struct vpfe_ccdc *ccdc = &vpfe->ccdc; +int ret;/* only do full suspend if streaming has started */ if (vb2_start_streaming_called (&vpfe->buffer_queue)) { -pm_runtime_get_sync (dev); + ret =pm_runtime_resume_and_get (dev);vpfe_config_enable (ccdc,1 );/* Save VPFE context */
@@ -2541,7 +2548,8 @@ static int vpfe_suspend(struct device *dev)vpfe_config_enable (ccdc,0 );/* Disable both master and slave clock */ -pm_runtime_put_sync (dev); +if (ret >=0 ) +pm_runtime_put_sync (dev); }/* Select sleep pin state */
@@ -2583,18 +2591,20 @@ static int vpfe_resume(struct device *dev) {struct vpfe_device *vpfe =dev_get_drvdata (dev);struct vpfe_ccdc *ccdc = &vpfe->ccdc; +int ret;/* only do full resume if streaming has started */ if (vb2_start_streaming_called (&vpfe->buffer_queue)) {/* Enable both master and slave clock */ -pm_runtime_get_sync (dev); + ret =pm_runtime_resume_and_get (dev);vpfe_config_enable (ccdc,1 );/* Restore VPFE context */ vpfe_restore_context (ccdc);vpfe_config_enable (ccdc,0 ); -pm_runtime_put_sync (dev); +if (ret >=0 ) +pm_runtime_put_sync (dev); }/* Select default pin state */
Signature · 1 line
2.30.2
PATCH v3 15/79 media: sh_vou: fix pm_runtime_get_sync() usage count
In reply to Mauro Carvalho ChehabThe pm_runtime_get_sync() internally increments thedev->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, check if the PM runtime error was caught at open time.
--- drivers/media/platform/sh_vou.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
drivers/media/platform/sh_vou.c +5 -1
@@ -1133,7 +1133,11 @@ static int sh_vou_open(struct file *file)if (v4l2_fh_is_singular_file (file) && vou_dev->status ==SH_VOU_INITIALISING ) {/* First open */ -pm_runtime_get_sync (vou_dev->v4l2_dev.dev); + err =pm_runtime_resume_and_get (vou_dev->v4l2_dev.dev); +if (err <0 ) { +v4l2_fh_release (file); + goto done_open; + } err =sh_vou_hw_init (vou_dev);if (err <0 ) {pm_runtime_put (vou_dev->v4l2_dev.dev);
Signature · 1 line
2.30.2
PATCH v3 16/79 media: mtk-vcodec: fix pm_runtime_get_sync() usage count
In reply to Mauro Carvalho ChehabThe pm_runtime_get_sync() internally increments thedev->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.
--- drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_pm.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_pm.c +2 -2
@@ -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)
Signature · 1 line
2.30.2
PATCH v3 17/79 media: s5p-jpeg: fix pm_runtime_get_sync() usage count
In reply to Mauro Carvalho ChehabThe pm_runtime_get_sync() internally increments thedev->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.
--- drivers/media/platform/s5p-jpeg/jpeg-core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/media/platform/s5p-jpeg/jpeg-core.c +1 -1
@@ -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; }
Signature · 1 line
2.30.2
Re: [PATCH v3 17/79] media: s5p-jpeg: fix pm_runtime_get_sync() usage count
Hi Mauro,
Thanks for the patch.
W dniu 27.04.2021 o 12:26, Mauro Carvalho Chehab pisze:
Quoted 9 lines
The
pm_runtime_get_sync()internally increments thedev->power.usage_countwithout decrementing it, even on errors.
Replace it by the newpm_runtime_resume_and_get(), introduced by:
commitdd8088d5a896("PM: runtime: Addpm_runtime_resume_and_getto deal with usage counter") in order to properly decrement the usage counter and avoid memory
leaks.Reviewed-by Sylwester Nawrocki <[email protected]>Signed-off-by Mauro Carvalho Chehab <[email protected]>
Quoted 18 lines
--- drivers/media/platform/s5p-jpeg/jpeg-core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)drivers/media/platform/s5p-jpeg/jpeg-core.c +1
-1@@ -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; }
PATCH v3 18/79 media: delta-v4l2: fix pm_runtime_get_sync() usage count
In reply to Mauro Carvalho ChehabThe pm_runtime_get_sync() internally increments thedev->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.
--- drivers/media/platform/sti/delta/delta-v4l2.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/media/platform/sti/delta/delta-v4l2.c +2 -2
@@ -1277,9 +1277,9 @@ int delta_get_sync(struct delta_ctx *ctx)int ret =0 ;/* enable the hardware */ - ret =pm_runtime_get_sync (delta->dev); + ret =pm_runtime_resume_and_get (delta->dev);if (ret <0 ) { -dev_err (delta->dev,"%s pm_runtime_get_sync failed (%d)\n" , +dev_err (delta->dev,"%s pm_runtime_resume_and_get failed (%d)\n" , __func__, ret);return ret; }
Signature · 1 line
2.30.2
PATCH v3 19/79 media: sun8i_rotate: fix pm_runtime_get_sync() usage count
In reply to Mauro Carvalho ChehabThe pm_runtime_get_sync() internally increments thedev->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.
--- drivers/media/platform/sunxi/sun8i-rotate/sun8i_rotate.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/media/platform/sunxi/sun8i-rotate/sun8i_rotate.c +1 -1
@@ -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" );
Signature · 1 line
2.30.2
PATCH v3 20/79 staging: media: rkvdec: fix pm_runtime_get_sync() usage count
In reply to Mauro Carvalho ChehabThe pm_runtime_get_sync() internally increments thedev->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.
--- drivers/staging/media/rkvdec/rkvdec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/staging/media/rkvdec/rkvdec.c +1 -1
@@ -658,7 +658,7 @@ static void rkvdec_device_run(void *priv)if (WARN_ON (!desc))return ; - ret =pm_runtime_get_sync (rkvdec->dev); + ret =pm_runtime_resume_and_get (rkvdec->dev);if (ret <0 ) {rkvdec_job_finish_no_pm (ctx,VB2_BUF_STATE_ERROR );return ;
Signature · 1 line
2.30.2
PATCH v3 21/79 staging: media: atomisp_fops: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/staging/media/atomisp/pci/atomisp_fops.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/staging/media/atomisp/pci/atomisp_fops.c +3 -3
@@ -837,7 +837,7 @@ static int atomisp_open(struct file *file) }/* runtime power management, turn on ISP */ - ret =pm_runtime_get_sync (vdev->v4l2_dev->dev); + ret =pm_runtime_resume_and_get (vdev->v4l2_dev->dev);if (ret <0 ) {dev_err (isp->dev,"Failed to power on device\n" ); goto error;
@@ -881,9 +881,9 @@ static int atomisp_open(struct file *file) css_error:atomisp_css_uninit (isp); -error: -hmm_pool_unregister (HMM_POOL_TYPE_DYNAMIC );pm_runtime_put (vdev->v4l2_dev->dev); +error: +hmm_pool_unregister (HMM_POOL_TYPE_DYNAMIC );rt_mutex_unlock (&isp->mutex);return ret; }
Signature · 1 line
2.30.2
PATCH v3 22/79 staging: media: imx7-mipi-csis: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/staging/media/imx/imx7-mipi-csis.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)
drivers/staging/media/imx/imx7-mipi-csis.c +3 -4
@@ -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;
Signature · 1 line
2.30.2
PATCH v3 23/79 staging: media: ipu3: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/staging/media/ipu3/ipu3.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/staging/media/ipu3/ipu3.c +1 -2
@@ -392,10 +392,9 @@ int imgu_s_stream(struct imgu_device *imgu, int enable) }/* Set Power */ - r =pm_runtime_get_sync (dev); + r =pm_runtime_resume_and_get (dev);if (r <0 ) {dev_err (dev,"failed to set imgu power\n" ); -pm_runtime_put (dev);return r; }
Signature · 1 line
2.30.2
PATCH v3 24/79 staging: media: cedrus_video: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/staging/media/sunxi/cedrus/cedrus_video.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/staging/media/sunxi/cedrus/cedrus_video.c +2 -4
@@ -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);
Signature · 1 line
2.30.2
PATCH v3 25/79 staging: media: vde: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/staging/media/tegra-vde/vde.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-)
drivers/staging/media/tegra-vde/vde.c +10 -6
@@ -775,9 +775,9 @@ static int tegra_vde_ioctl_decode_h264(struct tegra_vde *vde,if (ret) goto release_dpb_frames; - ret =pm_runtime_get_sync (dev); + ret =pm_runtime_resume_and_get (dev);if (ret <0 ) - goto put_runtime_pm; + goto unlock;/* * We rely on the VDE registers reset value, otherwise VDE
@@ -843,6 +843,8 @@ static int tegra_vde_ioctl_decode_h264(struct tegra_vde *vde, put_runtime_pm:pm_runtime_mark_last_busy (dev);pm_runtime_put_autosuspend (dev); + +unlock:mutex_unlock (&vde->lock); release_dpb_frames:
@@ -1069,8 +1071,8 @@ static int tegra_vde_probe(struct platform_device *pdev)* power-cycle it in order to put hardware into a predictable lower * power state. */ -pm_runtime_get_sync (dev); -pm_runtime_put (dev); +if (pm_runtime_resume_and_get (dev) >=0 ) +pm_runtime_put (dev);return 0 ;
@@ -1088,8 +1090,9 @@ static int tegra_vde_remove(struct platform_device *pdev) {struct tegra_vde *vde =platform_get_drvdata (pdev);struct device *dev = &pdev->dev; +int ret; -pm_runtime_get_sync (dev); + ret =pm_runtime_resume_and_get (dev);pm_runtime_dont_use_autosuspend (dev);pm_runtime_disable (dev);
@@ -1097,7 +1100,8 @@ static int tegra_vde_remove(struct platform_device *pdev)* Balance RPM state, the VDE power domain is left ON and hardware * is clock-gated. It's safe to reboot machine now. */ -pm_runtime_put_noidle (dev); +if (ret >=0 ) +pm_runtime_put_noidle (dev);clk_disable_unprepare (vde->clk);misc_deregister (&vde->miscdev);
Signature · 1 line
2.30.2
Re: [PATCH v3 25/79] staging: media: vde: use pm_runtime_resume_and_get()
27.04.2021 13:26, Mauro Carvalho Chehab пишет:
drivers/staging/media/tegra-vde/vde.c static int tegra_vde_remove(struct platform_device *pdev) · line 1095
Quoted 8 lines
drivers/staging/media/tegra-vde/vde.c +2
-1@@ -1088,8 +1090,9 @@ static int tegra_vde_remove(struct platform_device *pdev) {struct tegra_vde *vde =platform_get_drvdata (pdev);struct device *dev = &pdev->dev; +int ret; -pm_runtime_get_sync (dev); + ret =pm_runtime_resume_and_get (dev);
Should be cleaner to return error directly here, IMO.
Quoted 11 lines
drivers/staging/media/tegra-vde/vde.c +2
-1pm_runtime_dont_use_autosuspend (dev);pm_runtime_disable (dev);@@ -1097,7 +1100,8 @@ static int tegra_vde_remove(struct platform_device *pdev)* Balance RPM state, the VDE power domain is left ON and hardware * is clock-gated. It's safe to reboot machine now. */ -pm_runtime_put_noidle (dev); +if (ret >=0 ) +pm_runtime_put_noidle (dev);clk_disable_unprepare (vde->clk);
Re: [PATCH v3 25/79] staging: media: vde: use pm_runtime_resume_and_get()
Em Tue, 27 Apr 2021 14:47:01 +0300
Dmitry Osipenko <[email protected]> escreveu:
Quoted 11 lines
27.04.2021 13:26, Mauro Carvalho Chehab пишет:
drivers/staging/media/tegra-vde/vde.c static int tegra_vde_remove(struct platform_device *pdev) · line 1095
Quoted 8 lines
drivers/staging/media/tegra-vde/vde.c +2
-1@@ -1088,8 +1090,9 @@ static int tegra_vde_remove(struct platform_device *pdev) {struct tegra_vde *vde =platform_get_drvdata (pdev);struct device *dev = &pdev->dev; +int ret; -pm_runtime_get_sync (dev); + ret =pm_runtime_resume_and_get (dev);Should be cleaner to return error directly here, IMO.
I double-checked how drivers/base/platform.c deals with non-zero returns at the .remove method:
static int platform_remove(struct device *_dev)
{
struct platform_driver *drv = to_platform_driver(_dev->driver);
struct platform_device *dev = to_platform_device(_dev);
if (drv->remove) {
int ret = drv->remove(dev);
if (ret)
dev_warn(_dev, "remove callback returned a non-zero value. This will be ignored.\n");
}
dev_pm_domain_detach(_dev, true);
return 0;
}Basically, it will print a message but will ignore whatever happens afterwards.
So, if the driver is changed to return an error there, it will leak resources.
Thanks,
Mauro
Re: [PATCH v3 25/79] staging: media: vde: use pm_runtime_resume_and_get()
28.04.2021 10:20, Mauro Carvalho Chehab пишет:
Quoted 34 lines
Em Tue, 27 Apr 2021 14:47:01 +0300
Dmitry Osipenko <[email protected]> escreveu:Quoted 11 lines
27.04.2021 13:26, Mauro Carvalho Chehab пишет:
drivers/staging/media/tegra-vde/vde.c static int tegra_vde_remove(struct platform_device *pdev) · line 1095
Quoted 8 lines
drivers/staging/media/tegra-vde/vde.c +2
-1@@ -1088,8 +1090,9 @@ static int tegra_vde_remove(struct platform_device *pdev) {struct tegra_vde *vde =platform_get_drvdata (pdev);struct device *dev = &pdev->dev; +int ret; -pm_runtime_get_sync (dev); + ret =pm_runtime_resume_and_get (dev);Should be cleaner to return error directly here, IMO.
I double-checked how
drivers/base/platform.cdeals with non-zero returns at the .remove method:static int platform_remove(struct device *_dev) { struct platform_driver *drv = to_platform_driver(_dev->driver); struct platform_device *dev = to_platform_device(_dev); if (drv->remove) { int ret = drv->remove(dev); if (ret) dev_warn(_dev, "remove callback returned a non-zero value. This will be ignored.\n"); } dev_pm_domain_detach(_dev, true); return 0; }
Quoted 5 lines
Basically, it will print a message but will ignore whatever happens afterwards.
So, if the driver is changed to return an error there, it will leak resources.
Indeed, thank you. But then the pm_runtime_get_sync() should be more appropriate since this function is specifically made for such cases where returned value is ignored.
A better option could be better to add a clarifying comment to the code rather than to change it to a variant which introduces confusion, IMO.
PATCH v3 26/79 staging: media: csi: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/staging/media/tegra-video/csi.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/staging/media/tegra-video/csi.c +1 -2
@@ -298,10 +298,9 @@ static int tegra_csi_enable_stream(struct v4l2_subdev *subdev)struct tegra_csi *csi = csi_chan->csi;int ret, err; - ret =pm_runtime_get_sync (csi->dev); + ret =pm_runtime_resume_and_get (csi->dev);if (ret <0 ) {dev_err (csi->dev,"failed to get runtime PM: %d\n" , ret); -pm_runtime_put_noidle (csi->dev);return ret; }
Signature · 1 line
2.30.2
PATCH v3 27/79 staging: media: vi: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/staging/media/tegra-video/vi.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/staging/media/tegra-video/vi.c +1 -2
@@ -297,10 +297,9 @@ static int tegra_channel_start_streaming(struct vb2_queue *vq, u32 count)struct tegra_vi_channel *chan =vb2_get_drv_priv (vq);int ret; - ret =pm_runtime_get_sync (chan->vi->dev); + ret =pm_runtime_resume_and_get (chan->vi->dev);if (ret <0 ) {dev_err (chan->vi->dev,"failed to get runtime PM: %d\n" , ret); -pm_runtime_put_noidle (chan->vi->dev);return ret; }
Signature · 1 line
2.30.2
PATCH v3 28/79 media: i2c: ak7375: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/i2c/ak7375.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-)
drivers/media/i2c/ak7375.c +1 -9
@@ -87,15 +87,7 @@ static const struct v4l2_ctrl_ops ak7375_vcm_ctrl_ops = {static int ak7375_open (struct v4l2_subdev *sd,struct v4l2_subdev_fh *fh) { -int ret; - - ret =pm_runtime_get_sync (sd->dev); -if (ret <0 ) { -pm_runtime_put_noidle (sd->dev); -return ret; - } - -return 0 ; +return pm_runtime_resume_and_get (sd->dev); }static int ak7375_close (struct v4l2_subdev *sd,struct v4l2_subdev_fh *fh)
Signature · 1 line
2.30.2
PATCH v3 29/79 media: i2c: ccs-core: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/i2c/ccs/ccs-core.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-)
drivers/media/i2c/ccs/ccs-core.c +6 -10
@@ -1880,12 +1880,11 @@ static int ccs_pm_get_init(struct ccs_sensor *sensor)struct i2c_client *client =v4l2_get_subdevdata (&sensor->src->sd);int rval; - rval =pm_runtime_get_sync (&client->dev); -if (rval <0 ) { -pm_runtime_put_noidle (&client->dev); - + rval =pm_runtime_resume_and_get (&client->dev); +if (rval <0 )return rval; - }else if (!rval) { + +if (!rval) { rval =v4l2_ctrl_handler_setup (&sensor->pixel_array-> ctrl_handler);if (rval)
@@ -3089,12 +3088,9 @@ static int __maybe_unused ccs_suspend(struct device *dev)bool streaming = sensor->streaming;int rval; - rval =pm_runtime_get_sync (dev); -if (rval <0 ) { -pm_runtime_put_noidle (dev); - + rval =pm_runtime_resume_and_get (dev); +if (rval <0 )return rval; - }if (sensor->streaming)ccs_stop_streaming (sensor);
Signature · 1 line
2.30.2
PATCH v3 30/79 media: i2c: dw9714: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/i2c/dw9714.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-)
drivers/media/i2c/dw9714.c +1 -9
@@ -85,15 +85,7 @@ static const struct v4l2_ctrl_ops dw9714_vcm_ctrl_ops = {static int dw9714_open (struct v4l2_subdev *sd,struct v4l2_subdev_fh *fh) { -int rval; - - rval =pm_runtime_get_sync (sd->dev); -if (rval <0 ) { -pm_runtime_put_noidle (sd->dev); -return rval; - } - -return 0 ; +return pm_runtime_resume_and_get (sd->dev); }static int dw9714_close (struct v4l2_subdev *sd,struct v4l2_subdev_fh *fh)
Signature · 1 line
2.30.2
PATCH v3 31/79 media: i2c: dw9768: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/i2c/dw9768.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-)
drivers/media/i2c/dw9768.c +1 -9
@@ -374,15 +374,7 @@ static const struct v4l2_ctrl_ops dw9768_ctrl_ops = {static int dw9768_open (struct v4l2_subdev *sd,struct v4l2_subdev_fh *fh) { -int ret; - - ret =pm_runtime_get_sync (sd->dev); -if (ret <0 ) { -pm_runtime_put_noidle (sd->dev); -return ret; - } - -return 0 ; +return pm_runtime_resume_and_get (sd->dev); }static int dw9768_close (struct v4l2_subdev *sd,struct v4l2_subdev_fh *fh)
Signature · 1 line
2.30.2
PATCH v3 32/79 media: i2c: dw9807-vcm: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/i2c/dw9807-vcm.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-)
drivers/media/i2c/dw9807-vcm.c +1 -9
@@ -130,15 +130,7 @@ static const struct v4l2_ctrl_ops dw9807_vcm_ctrl_ops = {static int dw9807_open (struct v4l2_subdev *sd,struct v4l2_subdev_fh *fh) { -int rval; - - rval =pm_runtime_get_sync (sd->dev); -if (rval <0 ) { -pm_runtime_put_noidle (sd->dev); -return rval; - } - -return 0 ; +return pm_runtime_resume_and_get (sd->dev); }static int dw9807_close (struct v4l2_subdev *sd,struct v4l2_subdev_fh *fh)
Signature · 1 line
2.30.2
PATCH v3 33/79 media: i2c: hi556: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/i2c/hi556.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/media/i2c/hi556.c +1 -2
@@ -813,9 +813,8 @@ static int hi556_set_stream(struct v4l2_subdev *sd, int enable)mutex_lock (&hi556->mutex);if (enable) { - ret =pm_runtime_get_sync (&client->dev); + ret =pm_runtime_resume_and_get (&client->dev);if (ret <0 ) { -pm_runtime_put_noidle (&client->dev);mutex_unlock (&hi556->mutex);return ret; }
Signature · 1 line
2.30.2
PATCH v3 34/79 media: i2c: imx214: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/i2c/imx214.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/media/i2c/imx214.c +2 -4
@@ -776,11 +776,9 @@ static int imx214_s_stream(struct v4l2_subdev *subdev, int enable)return 0 ;if (enable) { - ret =pm_runtime_get_sync (imx214->dev); -if (ret <0 ) { -pm_runtime_put_noidle (imx214->dev); + ret =pm_runtime_resume_and_get (imx214->dev); +if (ret <0 )return ret; - } ret =imx214_start_streaming (imx214);if (ret <0 )
Signature · 1 line
2.30.2
PATCH v3 35/79 media: i2c: imx219: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/i2c/imx219.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/media/i2c/imx219.c +2 -4
@@ -1035,11 +1035,9 @@ static int imx219_start_streaming(struct imx219 *imx219)const struct imx219_reg_list *reg_list;int ret; - ret =pm_runtime_get_sync (&client->dev); -if (ret <0 ) { -pm_runtime_put_noidle (&client->dev); + ret =pm_runtime_resume_and_get (&client->dev); +if (ret <0 )return ret; - }/* Apply default values of current mode */ reg_list = &imx219->mode->reg_list;
Signature · 1 line
2.30.2
PATCH v3 36/79 media: i2c: imx258: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/i2c/imx258.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/media/i2c/imx258.c +2 -4
@@ -1039,11 +1039,9 @@ static int imx258_set_stream(struct v4l2_subdev *sd, int enable) }if (enable) { - ret =pm_runtime_get_sync (&client->dev); -if (ret <0 ) { -pm_runtime_put_noidle (&client->dev); + ret =pm_runtime_resume_and_get (&client->dev); +if (ret <0 ) goto err_unlock; - }/* * Apply default & customized values
Signature · 1 line
2.30.2
PATCH v3 37/79 media: i2c: imx274: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/i2c/imx274.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/media/i2c/imx274.c +1 -2
@@ -1441,9 +1441,8 @@ static int imx274_s_stream(struct v4l2_subdev *sd, int on)mutex_lock (&imx274->lock);if (on) { - ret =pm_runtime_get_sync (&imx274->client->dev); + ret =pm_runtime_resume_and_get (&imx274->client->dev);if (ret <0 ) { -pm_runtime_put_noidle (&imx274->client->dev);mutex_unlock (&imx274->lock);return ret; }
Signature · 1 line
2.30.2
PATCH v3 38/79 media: i2c: imx290: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/i2c/imx290.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/media/i2c/imx290.c +2 -4
@@ -764,11 +764,9 @@ static int imx290_set_stream(struct v4l2_subdev *sd, int enable)int ret =0 ;if (enable) { - ret =pm_runtime_get_sync (imx290->dev); -if (ret <0 ) { -pm_runtime_put_noidle (imx290->dev); + ret =pm_runtime_resume_and_get (imx290->dev); +if (ret <0 ) goto unlock_and_return; - } ret =imx290_start_streaming (imx290);if (ret) {
Signature · 1 line
2.30.2
PATCH v3 39/79 media: i2c: imx319: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/i2c/imx319.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/media/i2c/imx319.c +2 -4
@@ -2141,11 +2141,9 @@ static int imx319_set_stream(struct v4l2_subdev *sd, int enable) }if (enable) { - ret =pm_runtime_get_sync (&client->dev); -if (ret <0 ) { -pm_runtime_put_noidle (&client->dev); + ret =pm_runtime_resume_and_get (&client->dev); +if (ret <0 ) goto err_unlock; - }/* * Apply default & customized values
Signature · 1 line
2.30.2
PATCH v3 40/79 media: i2c: imx334: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/i2c/imx334.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/media/i2c/imx334.c +3 -2
@@ -717,9 +717,9 @@ static int imx334_set_stream(struct v4l2_subdev *sd, int enable) }if (enable) { - ret =pm_runtime_get_sync (imx334->dev); + ret =pm_runtime_resume_and_get (imx334->dev);if (ret) - goto error_power_off; + goto error_unlock; ret =imx334_start_streaming (imx334);if (ret)
@@ -737,6 +737,7 @@ static int imx334_set_stream(struct v4l2_subdev *sd, int enable) error_power_off:pm_runtime_put (imx334->dev); +error_unlock:mutex_unlock (&imx334->mutex);return ret;
Signature · 1 line
2.30.2
PATCH v3 41/79 media: i2c: imx355: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/i2c/imx355.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/media/i2c/imx355.c +2 -4
@@ -1442,11 +1442,9 @@ static int imx355_set_stream(struct v4l2_subdev *sd, int enable) }if (enable) { - ret =pm_runtime_get_sync (&client->dev); -if (ret <0 ) { -pm_runtime_put_noidle (&client->dev); + ret =pm_runtime_resume_and_get (&client->dev); +if (ret <0 ) goto err_unlock; - }/* * Apply default & customized values
Signature · 1 line
2.30.2
PATCH v3 42/79 media: i2c: mt9m001: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/i2c/mt9m001.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/media/i2c/mt9m001.c +3 -2
@@ -217,9 +217,9 @@ static int mt9m001_s_stream(struct v4l2_subdev *sd, int enable) goto done;if (enable) { - ret =pm_runtime_get_sync (&client->dev); + ret =pm_runtime_resume_and_get (&client->dev);if (ret <0 ) - goto put_unlock; + goto unlock; ret =mt9m001_apply_selection (sd);if (ret)
@@ -247,6 +247,7 @@ static int mt9m001_s_stream(struct v4l2_subdev *sd, int enable) put_unlock:pm_runtime_put (&client->dev); +unlock:mutex_unlock (&mt9m001->mutex);return ret;
Signature · 1 line
2.30.2
PATCH v3 43/79 media: i2c: ov02a10: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/i2c/ov02a10.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/media/i2c/ov02a10.c +2 -4
@@ -540,11 +540,9 @@ static int ov02a10_s_stream(struct v4l2_subdev *sd, int on) }if (on) { - ret =pm_runtime_get_sync (&client->dev); -if (ret <0 ) { -pm_runtime_put_noidle (&client->dev); + ret =pm_runtime_resume_and_get (&client->dev); +if (ret <0 ) goto unlock_and_return; - } ret =__ov02a10_start_stream (ov02a10);if (ret) {
Signature · 1 line
2.30.2
PATCH v3 44/79 media: i2c: ov13858: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/i2c/ov13858.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/media/i2c/ov13858.c +2 -4
@@ -1472,11 +1472,9 @@ static int ov13858_set_stream(struct v4l2_subdev *sd, int enable) }if (enable) { - ret =pm_runtime_get_sync (&client->dev); -if (ret <0 ) { -pm_runtime_put_noidle (&client->dev); + ret =pm_runtime_resume_and_get (&client->dev); +if (ret <0 ) goto err_unlock; - }/* * Apply default & customized values
Signature · 1 line
2.30.2
PATCH v3 45/79 media: i2c: ov2659: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/i2c/ov2659.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/media/i2c/ov2659.c +2 -4
@@ -1186,11 +1186,9 @@ static int ov2659_s_stream(struct v4l2_subdev *sd, int on) goto unlock; } - ret =pm_runtime_get_sync (&client->dev); -if (ret <0 ) { -pm_runtime_put_noidle (&client->dev); + ret =pm_runtime_resume_and_get (&client->dev); +if (ret <0 ) goto unlock; - } ret =ov2659_init (sd,0 );if (!ret)
Signature · 1 line
2.30.2
PATCH v3 46/79 media: i2c: ov2685: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/i2c/ov2685.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)
drivers/media/i2c/ov2685.c +3 -4
@@ -456,11 +456,10 @@ static int ov2685_s_stream(struct v4l2_subdev *sd, int on) goto unlock_and_return;if (on) { - ret =pm_runtime_get_sync (&ov2685->client->dev); -if (ret <0 ) { -pm_runtime_put_noidle (&client->dev); + ret =pm_runtime_resume_and_get (&ov2685->client->dev); +if (ret <0 ) goto unlock_and_return; - } + ret =__v4l2_ctrl_handler_setup (&ov2685->ctrl_handler);if (ret) {pm_runtime_put (&client->dev);
Signature · 1 line
2.30.2
PATCH v3 47/79 media: i2c: ov2740: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/i2c/ov2740.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/media/i2c/ov2740.c +2 -4
@@ -751,9 +751,8 @@ static int ov2740_set_stream(struct v4l2_subdev *sd, int enable)mutex_lock (&ov2740->mutex);if (enable) { - ret =pm_runtime_get_sync (&client->dev); + ret =pm_runtime_resume_and_get (&client->dev);if (ret <0 ) { -pm_runtime_put_noidle (&client->dev);mutex_unlock (&ov2740->mutex);return ret; }
@@ -1049,9 +1048,8 @@ static int ov2740_nvmem_read(void *priv, unsigned int off, void *val, goto exit; } - ret =pm_runtime_get_sync (dev); + ret =pm_runtime_resume_and_get (dev);if (ret <0 ) { -pm_runtime_put_noidle (dev); goto exit; }
Signature · 1 line
2.30.2
PATCH v3 48/79 media: i2c: ov5647: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/i2c/ov5647.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
drivers/media/i2c/ov5647.c +5 -4
@@ -882,20 +882,20 @@ static int ov5647_s_stream(struct v4l2_subdev *sd, int enable) }if (enable) { - ret =pm_runtime_get_sync (&client->dev); + ret =pm_runtime_resume_and_get (&client->dev);if (ret <0 ) goto error_unlock; ret =ov5647_stream_on (sd);if (ret <0 ) {dev_err (&client->dev,"stream start failed: %d\n" , ret); - goto error_unlock; + goto error_pm; } }else { ret =ov5647_stream_off (sd);if (ret <0 ) {dev_err (&client->dev,"stream stop failed: %d\n" , ret); - goto error_unlock; + goto error_pm; }pm_runtime_put (&client->dev); }
@@ -905,8 +905,9 @@ static int ov5647_s_stream(struct v4l2_subdev *sd, int enable)return 0 ; +error_pm: +pm_runtime_put (&client->dev); error_unlock: -pm_runtime_put (&client->dev);mutex_unlock (&sensor->lock);return ret;
Signature · 1 line
2.30.2
PATCH v3 49/79 media: i2c: ov5648: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/i2c/ov5648.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/media/i2c/ov5648.c +2 -4
@@ -2132,11 +2132,9 @@ static int ov5648_s_stream(struct v4l2_subdev *subdev, int enable)int ret;if (enable) { - ret =pm_runtime_get_sync (sensor->dev); -if (ret <0 ) { -pm_runtime_put_noidle (sensor->dev); + ret =pm_runtime_resume_and_get (sensor->dev); +if (ret <0 )return ret; - } }mutex_lock (&sensor->mutex);
Signature · 1 line
2.30.2
PATCH v3 50/79 media: i2c: ov5670: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/i2c/ov5670.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/media/i2c/ov5670.c +2 -4
@@ -2347,11 +2347,9 @@ static int ov5670_set_stream(struct v4l2_subdev *sd, int enable) goto unlock_and_return;if (enable) { - ret =pm_runtime_get_sync (&client->dev); -if (ret <0 ) { -pm_runtime_put_noidle (&client->dev); + ret =pm_runtime_resume_and_get (&client->dev); +if (ret <0 ) goto unlock_and_return; - } ret =ov5670_start_streaming (ov5670);if (ret)
Signature · 1 line
2.30.2
PATCH v3 51/79 media: i2c: ov5675: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/i2c/ov5675.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/media/i2c/ov5675.c +1 -2
@@ -863,9 +863,8 @@ static int ov5675_set_stream(struct v4l2_subdev *sd, int enable)mutex_lock (&ov5675->mutex);if (enable) { - ret =pm_runtime_get_sync (&client->dev); + ret =pm_runtime_resume_and_get (&client->dev);if (ret <0 ) { -pm_runtime_put_noidle (&client->dev);mutex_unlock (&ov5675->mutex);return ret; }
Signature · 1 line
2.30.2
PATCH v3 52/79 media: i2c: ov5695: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/i2c/ov5695.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/media/i2c/ov5695.c +2 -4
@@ -946,11 +946,9 @@ static int ov5695_s_stream(struct v4l2_subdev *sd, int on) goto unlock_and_return;if (on) { - ret =pm_runtime_get_sync (&client->dev); -if (ret <0 ) { -pm_runtime_put_noidle (&client->dev); + ret =pm_runtime_resume_and_get (&client->dev); +if (ret <0 ) goto unlock_and_return; - } ret =__ov5695_start_stream (ov5695);if (ret) {
Signature · 1 line
2.30.2
PATCH v3 53/79 media: i2c: ov7740: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/i2c/ov7740.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/media/i2c/ov7740.c +2 -4
@@ -624,11 +624,9 @@ static int ov7740_set_stream(struct v4l2_subdev *sd, int enable) }if (enable) { - ret =pm_runtime_get_sync (&client->dev); -if (ret <0 ) { -pm_runtime_put_noidle (&client->dev); + ret =pm_runtime_resume_and_get (&client->dev); +if (ret <0 ) goto err_unlock; - } ret =ov7740_start_streaming (ov7740);if (ret)
Signature · 1 line
2.30.2
PATCH v3 54/79 media: i2c: ov8856: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/i2c/ov8856.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/media/i2c/ov8856.c +1 -2
@@ -1340,9 +1340,8 @@ static int ov8856_set_stream(struct v4l2_subdev *sd, int enable)mutex_lock (&ov8856->mutex);if (enable) { - ret =pm_runtime_get_sync (&client->dev); + ret =pm_runtime_resume_and_get (&client->dev);if (ret <0 ) { -pm_runtime_put_noidle (&client->dev);mutex_unlock (&ov8856->mutex);return ret; }
Signature · 1 line
2.30.2
PATCH v3 55/79 media: i2c: ov8865: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/i2c/ov8865.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/media/i2c/ov8865.c +2 -4
@@ -2497,11 +2497,9 @@ static int ov8865_s_stream(struct v4l2_subdev *subdev, int enable)int ret;if (enable) { - ret =pm_runtime_get_sync (sensor->dev); -if (ret <0 ) { -pm_runtime_put_noidle (sensor->dev); + ret =pm_runtime_resume_and_get (sensor->dev); +if (ret <0 )return ret; - } }mutex_lock (&sensor->mutex);
Signature · 1 line
2.30.2
PATCH v3 56/79 media: i2c: ov9734: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/i2c/ov9734.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/media/i2c/ov9734.c +1 -2
@@ -644,9 +644,8 @@ static int ov9734_set_stream(struct v4l2_subdev *sd, int enable) }if (enable) { - ret =pm_runtime_get_sync (&client->dev); + ret =pm_runtime_resume_and_get (&client->dev);if (ret <0 ) { -pm_runtime_put_noidle (&client->dev);mutex_unlock (&ov9734->mutex);return ret; }
Signature · 1 line
2.30.2
PATCH v3 57/79 media: i2c: tvp5150: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/i2c/tvp5150.c | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-)
drivers/media/i2c/tvp5150.c +3 -13
@@ -1448,11 +1448,9 @@ static int tvp5150_s_stream(struct v4l2_subdev *sd, int enable)TVP5150_MISC_CTL_CLOCK_OE ;if (enable) { - ret =pm_runtime_get_sync (sd->dev); -if (ret <0 ) { -pm_runtime_put_noidle (sd->dev); + ret =pm_runtime_resume_and_get (sd->dev); +if (ret <0 )return ret; - }tvp5150_enable (sd);
@@ -1675,15 +1673,7 @@ static int tvp5150_registered(struct v4l2_subdev *sd)static int tvp5150_open (struct v4l2_subdev *sd,struct v4l2_subdev_fh *fh) { -int ret; - - ret =pm_runtime_get_sync (sd->dev); -if (ret <0 ) { -pm_runtime_put_noidle (sd->dev); -return ret; - } - -return 0 ; +return pm_runtime_resume_and_get (sd->dev); }static int tvp5150_close (struct v4l2_subdev *sd,struct v4l2_subdev_fh *fh)
Signature · 1 line
2.30.2
PATCH v3 58/79 media: i2c: video-i2c: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/i2c/video-i2c.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-)
drivers/media/i2c/video-i2c.c +4 -8
@@ -286,11 +286,9 @@ static int amg88xx_read(struct device *dev, enum hwmon_sensor_types type,__le16 buf;int tmp; - tmp =pm_runtime_get_sync (regmap_get_device (data->regmap)); -if (tmp <0 ) { -pm_runtime_put_noidle (regmap_get_device (data->regmap)); + tmp =pm_runtime_resume_and_get (regmap_get_device (data->regmap)); +if (tmp <0 )return tmp; - } tmp =regmap_bulk_read (data->regmap,AMG88XX_REG_TTHL , &buf,2 );pm_runtime_mark_last_busy (regmap_get_device (data->regmap));
@@ -512,11 +510,9 @@ static int start_streaming(struct vb2_queue *vq, unsigned int count)if (data->kthread_vid_cap)return 0 ; - ret =pm_runtime_get_sync (dev); -if (ret <0 ) { -pm_runtime_put_noidle (dev); + ret =pm_runtime_resume_and_get (dev); +if (ret <0 ) goto error_del_list; - } ret = data->chip->setup (data);if (ret)
Signature · 1 line
2.30.2
PATCH v3 59/79 media: sti/hva: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
While the hva driver does it right, there are lots of errors on other drivers due to its misusage. So, let's change this driver to also use pm_runtime_resume_and_get(), as we're doing similar changes all over the media subsystem.
--- drivers/media/platform/sti/hva/hva-hw.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-)
drivers/media/platform/sti/hva/hva-hw.c +9 -8
@@ -270,9 +270,8 @@ static unsigned long int hva_hw_get_ip_version(struct hva_dev *hva)struct device *dev =hva_to_dev (hva);unsigned long int version; -if (pm_runtime_get_sync (dev) <0 ) { +if (pm_runtime_resume_and_get (dev) <0 ) {dev_err (dev,"%s failed to get pm_runtime\n" ,HVA_PREFIX ); -pm_runtime_put_noidle (dev);mutex_unlock (&hva->protect_mutex);return -EFAULT ; }
@@ -386,10 +385,10 @@ int hva_hw_probe(struct platform_device *pdev, struct hva_dev *hva)pm_runtime_set_suspended (dev);pm_runtime_enable (dev); - ret =pm_runtime_get_sync (dev); + ret =pm_runtime_resume_and_get (dev);if (ret <0 ) {dev_err (dev,"%s failed to set PM\n" ,HVA_PREFIX ); - goto err_pm; + goto err_clk; }/* check IP hardware version */
@@ -462,6 +461,7 @@ int hva_hw_execute_task(struct hva_ctx *ctx, enum hva_hw_cmd_type cmd,u8 client_id = ctx->id;int ret;u32 reg =0 ; +bool got_pm = false;mutex_lock (&hva->protect_mutex);
@@ -469,12 +469,13 @@ int hva_hw_execute_task(struct hva_ctx *ctx, enum hva_hw_cmd_type cmd,enable_irq (hva->irq_its);enable_irq (hva->irq_err); -if (pm_runtime_get_sync (dev) <0 ) { +if (pm_runtime_resume_and_get (dev) <0 ) {dev_err (dev,"%s failed to get pm_runtime\n" , ctx->name); ctx->sys_errors++; ret = -EFAULT ; goto out; } + got_pm = true; reg =readl_relaxed (hva->regs +HVA_HIF_REG_CLK_GATING );switch (cmd) {
@@ -537,7 +538,8 @@ int hva_hw_execute_task(struct hva_ctx *ctx, enum hva_hw_cmd_type cmd,dev_dbg (dev,"%s unknown command 0x%x\n" , ctx->name, cmd); } -pm_runtime_put_autosuspend (dev); +if (got_pm) +pm_runtime_put_autosuspend (dev);mutex_unlock (&hva->protect_mutex);return ret;
@@ -553,9 +555,8 @@ void hva_hw_dump_regs(struct hva_dev *hva, struct seq_file *s)mutex_lock (&hva->protect_mutex); -if (pm_runtime_get_sync (dev) <0 ) { +if (pm_runtime_resume_and_get (dev) <0 ) {seq_puts (s,"Cannot wake up IP\n" ); -pm_runtime_put_noidle (dev);mutex_unlock (&hva->protect_mutex);return ; }
Signature · 1 line
2.30.2
PATCH v3 60/79 media: ipu3: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/pci/intel/ipu3/ipu3-cio2-main.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/media/pci/intel/ipu3/ipu3-cio2-main.c +1 -2
@@ -975,10 +975,9 @@ static int cio2_vb2_start_streaming(struct vb2_queue *vq, unsigned int count) cio2->cur_queue = q;atomic_set (&q->frame_sequence,0 ); - r =pm_runtime_get_sync (&cio2->pci_dev->dev); + r =pm_runtime_resume_and_get (&cio2->pci_dev->dev);if (r <0 ) {dev_info (&cio2->pci_dev->dev,"failed to set power %d\n" , r); -pm_runtime_put_noidle (&cio2->pci_dev->dev);return r; }
Signature · 1 line
2.30.2
PATCH v3 61/79 media: coda: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/platform/coda/coda-common.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/media/platform/coda/coda-common.c +3 -2
@@ -2660,10 +2660,10 @@ static int coda_open(struct file *file) ctx->use_vdoa = false;/* Power up and upload firmware if necessary */ - ret =pm_runtime_get_sync (dev->dev); + ret =pm_runtime_resume_and_get (dev->dev);if (ret <0 ) {v4l2_err (&dev->v4l2_dev,"failed to power up: %d\n" , ret); - goto err_pm_get; + goto err_fh_del; } ret =clk_prepare_enable (dev->clk_per);
@@ -2709,6 +2709,7 @@ static int coda_open(struct file *file)clk_disable_unprepare (dev->clk_per); err_pm_get:pm_runtime_put_sync (dev->dev); +err_fh_del:v4l2_fh_del (&ctx->fh);v4l2_fh_exit (&ctx->fh); err_coda_name_init:
Signature · 1 line
2.30.2
Re: [PATCH v3 61/79] media: coda: use pm_runtime_resume_and_get()
Quoted 29 lines · Mauro Carvalho Chehab
Commit
dd8088d5a896("PM: runtime: Addpm_runtime_resume_and_getto deal with usage counter") addedpm_runtime_resume_and_get()in order to automatically handledev->power.usage_countdecrement on errors.Use the new API, in order to cleanup the error check logic.
Signed-off-by Mauro Carvalho Chehab <[email protected]>--- drivers/media/platform/coda/coda-common.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)drivers/media/platform/coda/coda-common.c +2
-2@@ -2660,10 +2660,10 @@ static int coda_open(struct file *file) ctx->use_vdoa = false;/* Power up and upload firmware if necessary */ - ret =pm_runtime_get_sync (dev->dev); + ret =pm_runtime_resume_and_get (dev->dev);if (ret <0 ) {v4l2_err (&dev->v4l2_dev,"failed to power up: %d\n" , ret); - goto err_pm_get; + goto err_fh_del; } ret =clk_prepare_enable (dev->clk_per);
drivers/media/platform/coda/coda-common.c static int coda_open(struct file *file) · line 2710
Quoted 2 lines
drivers/media/platform/coda/coda-common.c +0
-0@@ -2709,6 +2709,7 @@ static int coda_open(struct file *file)clk_disable_unprepare (dev->clk_per); err_pm_get:
Oh right, the PER clk enable also fails through this label. Thanks!
drivers/media/platform/coda/coda-common.c static int coda_open(struct file *file) · line 2712
Quoted 2 lines
drivers/media/platform/coda/coda-common.c +1
-0pm_runtime_put_sync (dev->dev); +err_fh_del:
Just a note that - contrary to what coding-style suggests - the other labels in this function are currently named after what operation failed, instead of what they do in response.
regards
Philipp
PATCH v3 62/79 media: exynos4-is: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- 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(-)
drivers/media/platform/exynos4-is/fimc-capture.c +2 -4
@@ -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) {
drivers/media/platform/exynos4-is/fimc-is.c +2 -2
@@ -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 ));
drivers/media/platform/exynos4-is/fimc-isp-video.c +1 -2
@@ -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);
drivers/media/platform/exynos4-is/fimc-isp.c +3 -4
@@ -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);
drivers/media/platform/exynos4-is/fimc-lite.c +3 -2
@@ -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);
drivers/media/platform/exynos4-is/fimc-m2m.c +1 -1
@@ -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; }
drivers/media/platform/exynos4-is/media-dev.c +3 -5
@@ -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 ; }
drivers/media/platform/exynos4-is/mipi-csis.c +3 -5
@@ -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);
Signature · 1 line
2.30.2
Re: [PATCH v3 62/79] media: exynos4-is: use pm_runtime_resume_and_get()
Quoted 7 lines · Mauro Carvalho Chehab
Commit
dd8088d5a896("PM: runtime: Addpm_runtime_resume_and_getto deal with usage counter") addedpm_runtime_resume_and_get()in order to automatically handledev->power.usage_countdecrement on errors.Use the new API, in order to cleanup the error check logic.
Signed-off-by Mauro Carvalho Chehab <[email protected]>
PATCH v3 63/79 media: exynos-gsc: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/platform/exynos-gsc/gsc-m2m.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/media/platform/exynos-gsc/gsc-m2m.c +1 -1
@@ -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; }
Signature · 1 line
2.30.2
Re: [PATCH v3 63/79] media: exynos-gsc: use pm_runtime_resume_and_get()
Quoted 7 lines · Mauro Carvalho Chehab
Commit
dd8088d5a896("PM: runtime: Addpm_runtime_resume_and_getto deal with usage counter") addedpm_runtime_resume_and_get()in order to automatically handledev->power.usage_countdecrement on errors.Use the new API, in order to cleanup the error check logic.
Signed-off-by Mauro Carvalho Chehab <[email protected]>
PATCH v3 64/79 media: mtk-jpeg: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c +2 -2
@@ -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;
Signature · 1 line
2.30.2
PATCH v3 65/79 media: camss: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/platform/qcom/camss/camss-csid.c | 6 ++---- drivers/media/platform/qcom/camss/camss-csiphy.c | 6 ++---- drivers/media/platform/qcom/camss/camss-ispif.c | 6 ++---- drivers/media/platform/qcom/camss/camss-vfe.c | 5 +++-- 4 files changed, 9 insertions(+), 14 deletions(-)
drivers/media/platform/qcom/camss/camss-csid.c +2 -4
@@ -156,11 +156,9 @@ static int csid_set_power(struct v4l2_subdev *sd, int on)int ret;if (on) { - ret =pm_runtime_get_sync (dev); -if (ret <0 ) { -pm_runtime_put_sync (dev); + ret =pm_runtime_resume_and_get (dev); +if (ret <0 )return ret; - } ret =regulator_enable (csid->vdda);if (ret <0 ) {
drivers/media/platform/qcom/camss/camss-csiphy.c +2 -4
@@ -197,11 +197,9 @@ static int csiphy_set_power(struct v4l2_subdev *sd, int on)if (on) {int ret; - ret =pm_runtime_get_sync (dev); -if (ret <0 ) { -pm_runtime_put_sync (dev); + ret =pm_runtime_resume_and_get (dev); +if (ret <0 )return ret; - } ret =csiphy_set_clock_rates (csiphy);if (ret <0 ) {
drivers/media/platform/qcom/camss/camss-ispif.c +2 -4
@@ -372,11 +372,9 @@ static int ispif_set_power(struct v4l2_subdev *sd, int on) goto exit; } - ret =pm_runtime_get_sync (dev); -if (ret <0 ) { -pm_runtime_put_sync (dev); + ret =pm_runtime_resume_and_get (dev); +if (ret <0 ) goto exit; - } ret =camss_enable_clocks (ispif->nclocks, ispif->clock, dev);if (ret <0 ) {
drivers/media/platform/qcom/camss/camss-vfe.c +3 -2
@@ -584,9 +584,9 @@ static int vfe_get(struct vfe_device *vfe)if (ret <0 ) goto error_pm_domain; - ret =pm_runtime_get_sync (vfe->camss->dev); + ret =pm_runtime_resume_and_get (vfe->camss->dev);if (ret <0 ) - goto error_pm_runtime_get; + goto error_domain_off; ret =vfe_set_clock_rates (vfe);if (ret <0 )
@@ -620,6 +620,7 @@ static int vfe_get(struct vfe_device *vfe) error_pm_runtime_get:pm_runtime_put_sync (vfe->camss->dev); +error_domain_off: vfe->ops->pm_domain_off (vfe); error_pm_domain:
Signature · 1 line
2.30.2
PATCH v3 66/79 media: venus: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/platform/qcom/venus/core.c | 30 +++++++++---------- .../media/platform/qcom/venus/pm_helpers.c | 10 +++---- 2 files changed, 18 insertions(+), 22 deletions(-)
drivers/media/platform/qcom/venus/core.c +14 -16
@@ -84,11 +84,9 @@ static void venus_sys_error_handler(struct work_struct *work) container_of(work, struct venus_core, work.work);int ret =0 ; - ret =pm_runtime_get_sync (core->dev); -if (WARN_ON (ret <0 )) { -pm_runtime_put_noidle (core->dev); + ret =pm_runtime_resume_and_get (core->dev); +if (WARN_ON (ret <0 ))return ; - }hfi_core_deinit (core, true);
@@ -110,11 +108,9 @@ static void venus_sys_error_handler(struct work_struct *work)hfi_reinit (core); - ret =pm_runtime_get_sync (core->dev); -if (WARN_ON (ret <0 )) { -pm_runtime_put_noidle (core->dev); + ret =pm_runtime_resume_and_get (core->dev); +if (WARN_ON (ret <0 ))return ; - } ret =venus_boot (core); ret |=hfi_core_resume (core, true);
@@ -313,21 +309,21 @@ static int venus_probe(struct platform_device *pdev)pm_runtime_enable (dev); - ret =pm_runtime_get_sync (dev); + ret =pm_runtime_resume_and_get (dev);if (ret <0 ) goto err_runtime_disable; ret =of_platform_populate (dev->of_node,NULL ,NULL , dev);if (ret) - goto err_runtime_disable; + goto err_pm; ret =venus_firmware_init (core);if (ret) - goto err_runtime_disable; + goto err_pm; ret =venus_boot (core);if (ret) - goto err_runtime_disable; + goto err_pm; ret =hfi_core_resume (core, true);if (ret)
@@ -359,8 +355,9 @@ static int venus_probe(struct platform_device *pdev)v4l2_device_unregister (&core->v4l2_dev); err_venus_shutdown:venus_shutdown (core); -err_runtime_disable: +err_pm:pm_runtime_put_noidle (dev); +err_runtime_disable:pm_runtime_set_suspended (dev);pm_runtime_disable (dev);hfi_destroy (core);
@@ -379,7 +376,7 @@ static int venus_remove(struct platform_device *pdev)struct device *dev = core->dev;int ret; - ret =pm_runtime_get_sync (dev); + ret =pm_runtime_resume_and_get (dev);WARN_ON (ret <0 ); ret =hfi_core_deinit (core, true);
@@ -390,7 +387,8 @@ static int venus_remove(struct platform_device *pdev)venus_firmware_deinit (core); -pm_runtime_put_sync (dev); +if (ret >=0 ) +pm_runtime_put_sync (dev);pm_runtime_disable (dev);if (pm_ops->core_put)
@@ -411,7 +409,7 @@ static void venus_core_shutdown(struct platform_device *pdev) {struct venus_core *core =platform_get_drvdata (pdev); -pm_runtime_get_sync (core->dev); +pm_runtime_resume_and_get (core->dev);venus_shutdown (core);venus_firmware_deinit (core);pm_runtime_put_sync (core->dev);
drivers/media/platform/qcom/venus/pm_helpers.c +4 -6
@@ -486,7 +486,7 @@ static int poweron_coreid(struct venus_core *core, unsigned int coreid_mask)int ret;if (coreid_mask &VIDC_CORE_ID_1 ) { - ret =pm_runtime_get_sync (core->pmdomains[1 ]); + ret =pm_runtime_resume_and_get (core->pmdomains[1 ]);if (ret <0 )return ret;
@@ -504,7 +504,7 @@ static int poweron_coreid(struct venus_core *core, unsigned int coreid_mask) }if (coreid_mask &VIDC_CORE_ID_2 ) { - ret =pm_runtime_get_sync (core->pmdomains[2 ]); + ret =pm_runtime_resume_and_get (core->pmdomains[2 ]);if (ret <0 )return ret;
@@ -990,11 +990,9 @@ static int core_power_v4(struct venus_core *core, int on)if (on ==POWER_ON ) {if (pmctrl) { - ret =pm_runtime_get_sync (pmctrl); -if (ret <0 ) { -pm_runtime_put_noidle (pmctrl); + ret =pm_runtime_resume_and_get (pmctrl); +if (ret <0 )return ret; - } } ret =core_resets_reset (core);
Signature · 1 line
2.30.2
PATCH v3 67/79 media: venus: vdec: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/platform/qcom/venus/vdec.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/media/platform/qcom/venus/vdec.c +2 -2
@@ -568,7 +568,7 @@ static int vdec_pm_get(struct venus_inst *inst)int ret;mutex_lock (&core->pm_lock); - ret =pm_runtime_get_sync (dev); + ret =pm_runtime_resume_and_get (dev);mutex_unlock (&core->pm_lock);return ret <0 ? ret :0 ;
@@ -601,7 +601,7 @@ static int vdec_pm_get_put(struct venus_inst *inst)mutex_lock (&core->pm_lock);if (pm_runtime_suspended (dev)) { - ret =pm_runtime_get_sync (dev); + ret =pm_runtime_resume_and_get (dev);if (ret <0 ) goto error;
Signature · 1 line
2.30.2
PATCH v3 68/79 media: venus: venc: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/platform/qcom/venus/venc.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/media/platform/qcom/venus/venc.c +3 -2
@@ -1205,9 +1205,9 @@ static int venc_open(struct file *file)venus_helper_init_instance (inst); - ret =pm_runtime_get_sync (core->dev_enc); + ret =pm_runtime_resume_and_get (core->dev_enc);if (ret <0 ) - goto err_put_sync; + goto err_free; ret =venc_ctrl_init (inst);if (ret)
@@ -1252,6 +1252,7 @@ static int venc_open(struct file *file)venc_ctrl_deinit (inst); err_put_sync:pm_runtime_put_sync (core->dev_enc); +err_free:kfree (inst);return ret; }
Signature · 1 line
2.30.2
PATCH v3 69/79 media: rcar-fcp: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/platform/rcar-fcp.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/media/platform/rcar-fcp.c +2 -4
@@ -101,11 +101,9 @@ int rcar_fcp_enable(struct rcar_fcp_device *fcp)if (!fcp)return 0 ; - ret =pm_runtime_get_sync (fcp->dev); -if (ret <0 ) { -pm_runtime_put_noidle (fcp->dev); + ret =pm_runtime_resume_and_get (fcp->dev); +if (ret <0 )return ret; - }return 0 ; }
Signature · 1 line
2.30.2
PATCH v3 70/79 media: rkisp1: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c +1 -2
@@ -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; }
Signature · 1 line
2.30.2
PATCH v3 71/79 media: s3c-camif: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/platform/s3c-camif/camif-capture.c | 2 +- drivers/media/platform/s3c-camif/camif-core.c | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-)
drivers/media/platform/s3c-camif/camif-capture.c +1 -1
@@ -547,7 +547,7 @@ static int s3c_camif_open(struct file *file)if (ret <0 ) goto unlock; - ret =pm_runtime_get_sync (camif->dev); + ret =pm_runtime_resume_and_get (camif->dev);if (ret <0 ) goto err_pm;
drivers/media/platform/s3c-camif/camif-core.c +3 -2
@@ -460,9 +460,9 @@ static int s3c_camif_probe(struct platform_device *pdev)pm_runtime_enable (dev); - ret =pm_runtime_get_sync (dev); + ret =pm_runtime_resume_and_get (dev);if (ret <0 ) - goto err_pm; + goto err_disable; ret =camif_media_dev_init (camif);if (ret <0 )
@@ -502,6 +502,7 @@ static int s3c_camif_probe(struct platform_device *pdev)camif_unregister_media_entities (camif); err_pm:pm_runtime_put (dev); +err_disable:pm_runtime_disable (dev);camif_clk_put (camif); err_clk:
Signature · 1 line
2.30.2
Re: [PATCH v3 71/79] media: s3c-camif: use pm_runtime_resume_and_get()
Quoted 7 lines · Mauro Carvalho Chehab
Commit
dd8088d5a896("PM: runtime: Addpm_runtime_resume_and_getto deal with usage counter") addedpm_runtime_resume_and_get()in order to automatically handledev->power.usage_countdecrement on errors.Use the new API, in order to cleanup the error check logic.
Signed-off-by Mauro Carvalho Chehab <[email protected]>
PATCH v3 72/79 media: s5p-mfc: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/platform/s5p-mfc/s5p_mfc_pm.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/media/platform/s5p-mfc/s5p_mfc_pm.c +2 -4
@@ -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++) {
Signature · 1 line
2.30.2
PATCH v3 73/79 media: bdisp-v4l2: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/platform/sti/bdisp/bdisp-v4l2.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
drivers/media/platform/sti/bdisp/bdisp-v4l2.c +4 -3
@@ -499,7 +499,7 @@ static int bdisp_start_streaming(struct vb2_queue *q, unsigned int count) {struct bdisp_ctx *ctx = q->drv_priv;struct vb2_v4l2_buffer *buf; -int ret =pm_runtime_get_sync (ctx->bdisp_dev->dev); +int ret =pm_runtime_resume_and_get (ctx->bdisp_dev->dev);if (ret <0 ) {dev_err (ctx->bdisp_dev->dev,"failed to set runtime PM\n" );
@@ -1364,10 +1364,10 @@ static int bdisp_probe(struct platform_device *pdev)/* Power management */ pm_runtime_enable (dev); - ret =pm_runtime_get_sync (dev); + ret =pm_runtime_resume_and_get (dev);if (ret <0 ) {dev_err (dev,"failed to set PM\n" ); - goto err_pm; + goto err_remove; }/* Filters */
@@ -1395,6 +1395,7 @@ static int bdisp_probe(struct platform_device *pdev)bdisp_hw_free_filters (bdisp->dev); err_pm:pm_runtime_put (dev); +err_remove:bdisp_debugfs_remove (bdisp);v4l2_device_unregister (&bdisp->v4l2_dev); err_clk:
Signature · 1 line
2.30.2
PATCH v3 74/79 media: stm32: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/platform/stm32/stm32-dcmi.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/media/platform/stm32/stm32-dcmi.c +3 -2
@@ -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.
Signature · 1 line
2.30.2
PATCH v3 75/79 media: sunxi: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/platform/sunxi/sun4i-csi/sun4i_v4l2.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
drivers/media/platform/sunxi/sun4i-csi/sun4i_v4l2.c +4 -2
@@ -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;
Signature · 1 line
2.30.2
PATCH v3 76/79 media: ti-vpe: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/platform/ti-vpe/cal-video.c | 4 +++- drivers/media/platform/ti-vpe/cal.c | 8 +++++--- drivers/media/platform/ti-vpe/vpe.c | 4 +--- 3 files changed, 9 insertions(+), 7 deletions(-)
drivers/media/platform/ti-vpe/cal-video.c +3 -1
@@ -700,7 +700,9 @@ static int cal_start_streaming(struct vb2_queue *vq, unsigned int count) addr =vb2_dma_contig_plane_dma_addr (&buf->vb.vb2_buf,0 ); -pm_runtime_get_sync (ctx->cal->dev); + ret =pm_runtime_resume_and_get (ctx->cal->dev); +if (ret <0 ) + goto error_pipeline;cal_ctx_set_dma_addr (ctx, addr);cal_ctx_start (ctx);
drivers/media/platform/ti-vpe/cal.c +5 -3
@@ -1024,7 +1024,7 @@ static int cal_probe(struct platform_device *pdev)/* Read the revision and hardware info to verify hardware access. */ pm_runtime_enable (&pdev->dev); - ret =pm_runtime_get_sync (&pdev->dev); + ret =pm_runtime_resume_and_get (&pdev->dev);if (ret) goto error_pm_runtime;
@@ -1098,10 +1098,11 @@ static int cal_remove(struct platform_device *pdev) {struct cal_dev *cal =platform_get_drvdata (pdev);unsigned int i; +int ret;cal_dbg (1 , cal,"Removing %s\n" ,CAL_MODULE_NAME ); -pm_runtime_get_sync (&pdev->dev); + ret =pm_runtime_resume_and_get (&pdev->dev);cal_media_unregister (cal);
@@ -1115,7 +1116,8 @@ static int cal_remove(struct platform_device *pdev)for (i =0 ; i < cal->data->num_csi2_phy; i++)cal_camerarx_destroy (cal->phy[i]); -pm_runtime_put_sync (&pdev->dev); +if (ret >=0 ) +pm_runtime_put_sync (&pdev->dev);pm_runtime_disable (&pdev->dev);return 0 ;
drivers/media/platform/ti-vpe/vpe.c +1 -3
@@ -2471,10 +2471,8 @@ static int vpe_runtime_get(struct platform_device *pdev)dev_dbg (&pdev->dev,"vpe_runtime_get\n" ); - r =pm_runtime_get_sync (&pdev->dev); + r =pm_runtime_resume_and_get (&pdev->dev);WARN_ON (r <0 ); -if (r) -pm_runtime_put_noidle (&pdev->dev);return r <0 ? r :0 ; }
Signature · 1 line
2.30.2
PATCH v3 77/79 media: vsp1: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/platform/vsp1/vsp1_drv.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/media/platform/vsp1/vsp1_drv.c +2 -4
@@ -561,11 +561,9 @@ int vsp1_device_get(struct vsp1_device *vsp1) {int ret; - ret =pm_runtime_get_sync (vsp1->dev); -if (ret <0 ) { -pm_runtime_put_noidle (vsp1->dev); + ret =pm_runtime_resume_and_get (vsp1->dev); +if (ret <0 )return ret; - }return 0 ; }
Signature · 1 line
2.30.2
PATCH v3 78/79 media: rcar-vin: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabCommit 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.
--- drivers/media/platform/rcar-vin/rcar-csi2.c | 6 ++++++ drivers/media/platform/rcar-vin/rcar-dma.c | 6 ++---- drivers/media/platform/rcar-vin/rcar-v4l2.c | 6 ++---- 3 files changed, 10 insertions(+), 8 deletions(-)
drivers/media/platform/rcar-vin/rcar-csi2.c +6 -0
@@ -408,6 +408,12 @@ static void rcsi2_enter_standby(struct rcar_csi2 *priv)static void rcsi2_exit_standby (struct rcar_csi2 *priv) { +/* +* The code at rcsi2_enter_standby() assumes +* inconditionally that PM runtime usage count was +* incremented. So, it shouldn't use pm_runtime_resume_and_get() +* here. +*/ pm_runtime_get_sync (priv->dev);reset_control_deassert (priv->rstc); }
drivers/media/platform/rcar-vin/rcar-dma.c +2 -4
@@ -1458,11 +1458,9 @@ int rvin_set_channel_routing(struct rvin_dev *vin, u8 chsel)u32 vnmc;int ret; - ret =pm_runtime_get_sync (vin->dev); -if (ret <0 ) { -pm_runtime_put_noidle (vin->dev); + ret =pm_runtime_resume_and_get (vin->dev); +if (ret <0 )return ret; - }/* Make register writes take effect immediately. */ vnmc =rvin_read (vin,VNMC_REG );
drivers/media/platform/rcar-vin/rcar-v4l2.c +2 -4
@@ -870,11 +870,9 @@ static int rvin_open(struct file *file)struct rvin_dev *vin =video_drvdata (file);int ret; - ret =pm_runtime_get_sync (vin->dev); -if (ret <0 ) { -pm_runtime_put_noidle (vin->dev); + ret =pm_runtime_resume_and_get (vin->dev); +if (ret <0 )return ret; - } ret =mutex_lock_interruptible (&vin->lock);if (ret)
Signature · 1 line
2.30.2
Re: [PATCH v3 78/79] media: rcar-vin: use pm_runtime_resume_and_get()
Quoted 8 lines · Mauro Carvalho Chehab
Commit
dd8088d5a896("PM: runtime: Addpm_runtime_resume_and_getto deal with usage counter") addedpm_runtime_resume_and_get()in order to automatically handledev->power.usage_countdecrement on errors.Use the new API, in order to cleanup the error check logic.
Reviewed-by Niklas Söderlund <[email protected]>Signed-off-by Mauro Carvalho Chehab <[email protected]>
drivers/media/platform/rcar-vin/rcar-csi2.c static void rcsi2_enter_standby(struct rcar_csi2 *priv) · line 413
Quoted 9 lines
drivers/media/platform/rcar-vin/rcar-csi2.c +3
-0@@ -408,6 +408,12 @@ static void rcsi2_enter_standby(struct rcar_csi2 *priv)static void rcsi2_exit_standby (struct rcar_csi2 *priv) { +/* +* The code at rcsi2_enter_standby() assumes +* inconditionally that PM runtime usage count was
unconditionally
drivers/media/platform/rcar-vin/rcar-csi2.c static void rcsi2_enter_standby(struct rcar_csi2 *priv) · line 419
Quoted 6 lines
drivers/media/platform/rcar-vin/rcar-csi2.c +3
-0+* incremented. So, it shouldn't use pm_runtime_resume_and_get() +* here. +*/ pm_runtime_get_sync (priv->dev);reset_control_deassert (priv->rstc); }
Gr{oetje,eeting}s,
Geert
Signature · 5 lines
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected] In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds
Re: [PATCH v3 78/79] media: rcar-vin: use pm_runtime_resume_and_get()
In reply to Mauro Carvalho ChehabHi Mauro,
Quoted 19 lines · Mauro Carvalho Chehab
Commit
dd8088d5a896("PM: runtime: Addpm_runtime_resume_and_getto deal with usage counter") addedpm_runtime_resume_and_get()in order to automatically handledev->power.usage_countdecrement on errors.Use the new API, in order to cleanup the error check logic.
Reviewed-by Niklas Söderlund <[email protected]>Signed-off-by Mauro Carvalho Chehab <[email protected]>--- drivers/media/platform/rcar-vin/rcar-csi2.c | 6 ++++++ drivers/media/platform/rcar-vin/rcar-dma.c | 6 ++---- drivers/media/platform/rcar-vin/rcar-v4l2.c | 6 ++---- 3 files changed, 10 insertions(+), 8 deletions(-)drivers/media/platform/rcar-vin/rcar-csi2.c +0
-0
drivers/media/platform/rcar-vin/rcar-csi2.c static void rcsi2_enter_standby(struct rcar_csi2 *priv) · line 416
Quoted 9 lines
drivers/media/platform/rcar-vin/rcar-csi2.c +6
-0@@ -408,6 +408,12 @@ static void rcsi2_enter_standby(struct rcar_csi2 *priv)static void rcsi2_exit_standby (struct rcar_csi2 *priv) { +/* +* The code at rcsi2_enter_standby() assumes +* inconditionally that PM runtime usage count was +* incremented. So, it shouldn't use pm_runtime_resume_and_get() +* here. +*/
I think this comment is a bit much. I won't object if you really want to keep it but my preference would be to drop it.
Quoted 42 lines
drivers/media/platform/rcar-vin/rcar-csi2.c +0
-0pm_runtime_get_sync (priv->dev);reset_control_deassert (priv->rstc); }drivers/media/platform/rcar-vin/rcar-dma.c +2
-4@@ -1458,11 +1458,9 @@ int rvin_set_channel_routing(struct rvin_dev *vin, u8 chsel)u32 vnmc;int ret; - ret =pm_runtime_get_sync (vin->dev); -if (ret <0 ) { -pm_runtime_put_noidle (vin->dev); + ret =pm_runtime_resume_and_get (vin->dev); +if (ret <0 )return ret; - }/* Make register writes take effect immediately. */ vnmc =rvin_read (vin,VNMC_REG );drivers/media/platform/rcar-vin/rcar-v4l2.c +2
-4@@ -870,11 +870,9 @@ static int rvin_open(struct file *file)struct rvin_dev *vin =video_drvdata (file);int ret; - ret =pm_runtime_get_sync (vin->dev); -if (ret <0 ) { -pm_runtime_put_noidle (vin->dev); + ret =pm_runtime_resume_and_get (vin->dev); +if (ret <0 )return ret; - } ret =mutex_lock_interruptible (&vin->lock);if (ret)Signature · 1 line
2.30.2
Signature · 2 lines
Regards, Niklas Söderlund
Re: [PATCH v3 78/79] media: rcar-vin: use pm_runtime_resume_and_get()
Hi Niklas,
Em Tue, 27 Apr 2021 22:12:30 +0200
Niklas Söderlund <[email protected]> escreveu:
Quoted 34 lines
Hi Mauro,
Quoted 19 lines · Mauro Carvalho Chehab
Commit
dd8088d5a896("PM: runtime: Addpm_runtime_resume_and_getto deal with usage counter") addedpm_runtime_resume_and_get()in order to automatically handledev->power.usage_countdecrement on errors.Use the new API, in order to cleanup the error check logic.
Reviewed-by Niklas Söderlund <[email protected]>Signed-off-by Mauro Carvalho Chehab <[email protected]>--- drivers/media/platform/rcar-vin/rcar-csi2.c | 6 ++++++ drivers/media/platform/rcar-vin/rcar-dma.c | 6 ++---- drivers/media/platform/rcar-vin/rcar-v4l2.c | 6 ++---- 3 files changed, 10 insertions(+), 8 deletions(-)drivers/media/platform/rcar-vin/rcar-csi2.c +0
-0drivers/media/platform/rcar-vin/rcar-csi2.c static void rcsi2_enter_standby(struct rcar_csi2 *priv) · line 416
Quoted 9 lines
drivers/media/platform/rcar-vin/rcar-csi2.c +6
-0@@ -408,6 +408,12 @@ static void rcsi2_enter_standby(struct rcar_csi2 *priv)static void rcsi2_exit_standby (struct rcar_csi2 *priv) { +/* +* The code at rcsi2_enter_standby() assumes +* inconditionally that PM runtime usage count was +* incremented. So, it shouldn't use pm_runtime_resume_and_get() +* here. +*/
pm_runtime_get_sync(priv->dev);
Quoted 2 lines
I think this comment is a bit much. I won't object if you really want to keep it but my preference would be to drop it.
Hmm... I guess we could do this, instead:
drivers/media/platform/rcar-vin/rcar-csi2.c +10 -3
@@ -406,9 +406,14 @@ static void rcsi2_enter_standby(struct rcar_csi2 *priv)pm_runtime_put (priv->dev); } -static void rcsi2_exit_standby (struct rcar_csi2 *priv) +static int rcsi2_exit_standby (struct rcar_csi2 *priv) { -pm_runtime_get_sync (priv->dev); +int ret; + + ret =pm_runtime_resume_and_get (priv->dev); +if (ret <0 ) +return ret; +reset_control_deassert (priv->rstc); }
@@ -657,7 +662,9 @@ static int rcsi2_start(struct rcar_csi2 *priv) {int ret; -rcsi2_exit_standby (priv); + ret =rcsi2_exit_standby (priv); +if (ret <0 ) +return ret; ret =rcsi2_start_receiver (priv);if (ret) {
Thanks,
Mauro
PATCH v3 79/79 media: hantro: document the usage of pm_runtime_get_sync()
In reply to Mauro Carvalho ChehabDespite other *_get()/*_put() functions, where usage count is incremented only if not errors, the pm_runtime_get_sync() has a different behavior, incrementing the counter *even* on errors.
That's an error prone behavior, as people often forget to decrement the usage counter.
However, the hantro driver depends on this behavior, as it will decrement the usage_count unconditionally at the m2m job finish time, which makes sense.
So, intead of using the pm_runtime_resume_and_get() that would decrement the counter on error, keep the current API, but add a documentation explaining the rationale for keep using pm_runtime_get_sync().
--- drivers/staging/media/hantro/hantro_drv.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/staging/media/hantro/hantro_drv.c +7 -0
@@ -155,6 +155,13 @@ static void device_run(void *priv) ret =clk_bulk_enable (ctx->dev->variant->num_clocks, ctx->dev->clocks);if (ret) goto err_cancel_job; + +/* +* The pm_runtime_get_sync() will increment dev->power.usage_count, +* even on errors. That's the expected behavior here, since the +* hantro_job_finish() function at the error handling code +* will internally call pm_runtime_put_autosuspend(). +*/ ret =pm_runtime_get_sync (ctx->dev->dev);if (ret <0 ) goto err_cancel_job;
Signature · 1 line
2.30.2
Re: [PATCH v3 79/79] media: hantro: document the usage of pm_runtime_get_sync()
Quoted 27 lines · Mauro Carvalho Chehab
Despite other *_get()/*_put() functions, where usage count is incremented only if not errors, the
pm_runtime_get_sync()has a different behavior, incrementing the counter *even* on errors.That's an error prone behavior, as people often forget to decrement the usage counter.
However, the hantro driver depends on this behavior, as it will decrement the
usage_countunconditionally at the m2m job finish time, which makes sense.So, intead of using the
pm_runtime_resume_and_get()that would decrement the counter on error, keep the current API, but add a documentation explaining the rationale for keep usingpm_runtime_get_sync().Signed-off-by Mauro Carvalho Chehab <[email protected]>--- drivers/staging/media/hantro/hantro_drv.c | 7 +++++++ 1 file changed, 7 insertions(+)drivers/staging/media/hantro/hantro_drv.c +0
-0
drivers/staging/media/hantro/hantro_drv.c static void device_run(void *priv) · line 157
Quoted 3 lines
drivers/staging/media/hantro/hantro_drv.c +0
-0@@ -155,6 +155,13 @@ static void device_run(void *priv) ret =clk_bulk_enable (ctx->dev->variant->num_clocks, ctx->dev->clocks);if (ret) goto err_cancel_job;
..except this can also cause the same pm_runtime_put_autosuspend() call without even reaching the "matching" get below, so rather than some kind of cleverness it seems more like it's just broken :/
Robin.
Quoted 11 lines
drivers/staging/media/hantro/hantro_drv.c +7
-0+ +/* +* The pm_runtime_get_sync() will increment dev->power.usage_count, +* even on errors. That's the expected behavior here, since the +* hantro_job_finish() function at the error handling code +* will internally call pm_runtime_put_autosuspend(). +*/ ret =pm_runtime_get_sync (ctx->dev->dev);if (ret <0 ) goto err_cancel_job;
Re: [PATCH v3 79/79] media: hantro: document the usage of pm_runtime_get_sync()
Quoted 23 lines · Robin Murphy
Quoted 22 lines · Mauro Carvalho Chehab
Despite other *_get()/*_put() functions, where usage count is incremented only if not errors, the
pm_runtime_get_sync()has a different behavior, incrementing the counter *even* on errors.That's an error prone behavior, as people often forget to decrement the usage counter.
However, the hantro driver depends on this behavior, as it will decrement the
usage_countunconditionally at the m2m job finish time, which makes sense.So, intead of using the
pm_runtime_resume_and_get()that would decrement the counter on error, keep the current API, but add a documentation explaining the rationale for keep usingpm_runtime_get_sync().Signed-off-by Mauro Carvalho Chehab <[email protected]>---
drivers/staging/media/hantro/hantro_drv.c| 7 +++++++1 file changed, 7 insertions(+)
Quoted 13 lines
drivers/staging/media/hantro/hantro_drv.c static void device_run(void *priv) · line 157
Quoted 8 lines
drivers/staging/media/hantro/hantro_drv.c +0
-0@@ -155,6 +155,13 @@ static void device_run(void *priv) ret = clk_bulk_enable(ctx->dev->variant->num_clocks, ctx->dev->clocks); if (ret) goto err_cancel_job;..except this can also cause the same
pm_runtime_put_autosuspend()call without even reaching the "matching" get below, so rather than some kind of cleverness it seems more like it's just broken :/
Indeed, I was trying to find time to cook a quick patch, but kept getting preempted.
Feel free to submit a fix for this, otherwise, I'll try to find time later this week.
Thanks,
Ezequiel
Re: [PATCH v3 79/79] media: hantro: document the usage of pm_runtime_get_sync()
Em Tue, 27 Apr 2021 12:18:32 -0300 Ezequiel Garcia <[email protected]> escreveu:
Quoted 38 lines · Robin Murphy
Quoted 23 lines · Mauro Carvalho Chehab
Quoted 22 lines
Despite other *_get()/*_put() functions, where usage count is incremented only if not errors, the
pm_runtime_get_sync()has a different behavior, incrementing the counter *even* on errors.That's an error prone behavior, as people often forget to decrement the usage counter.
However, the hantro driver depends on this behavior, as it will decrement the
usage_countunconditionally at the m2m job finish time, which makes sense.So, intead of using the
pm_runtime_resume_and_get()that would decrement the counter on error, keep the current API, but add a documentation explaining the rationale for keep usingpm_runtime_get_sync().Signed-off-by Mauro Carvalho Chehab <[email protected]>---
drivers/staging/media/hantro/hantro_drv.c| 7 +++++++1 file changed, 7 insertions(+)Quoted 13 lines
drivers/staging/media/hantro/hantro_drv.c static void device_run(void *priv) · line 157
Quoted 8 lines
drivers/staging/media/hantro/hantro_drv.c +0
-0@@ -155,6 +155,13 @@ static void device_run(void *priv) ret = clk_bulk_enable(ctx->dev->variant->num_clocks, ctx->dev->clocks); if (ret) goto err_cancel_job;..except this can also cause the same
pm_runtime_put_autosuspend()call without even reaching the "matching" get below, so rather than some kind of cleverness it seems more like it's just broken :/
Quoted 5 lines
Indeed, I was trying to find time to cook a quick patch, but kept getting preempted.
Feel free to submit a fix for this, otherwise, I'll try to find time later this week.
What about doing this instead:
drivers/staging/media/hantro/hantro_drv.c +18 -9
@@ -56,14 +56,12 @@ dma_addr_t hantro_get_ref(struct hantro_ctx *ctx, u64 ts)return hantro_get_dec_buf_addr (ctx, buf); } -static void hantro_job_finish (struct hantro_dev *vpu, -struct hantro_ctx *ctx, -enum vb2_buffer_state result) +static void hantro_job_finish_no_pm (struct hantro_dev *vpu, +struct hantro_ctx *ctx, +enum vb2_buffer_state result) {struct vb2_v4l2_buffer *src, *dst; -pm_runtime_mark_last_busy (vpu->dev); -pm_runtime_put_autosuspend (vpu->dev);clk_bulk_disable (vpu->variant->num_clocks, vpu->clocks); src =v4l2_m2m_next_src_buf (ctx->fh.m2m_ctx);
@@ -81,6 +79,16 @@ static void hantro_job_finish(struct hantro_dev *vpu, result); } +static void hantro_job_finish (struct hantro_dev *vpu, +struct hantro_ctx *ctx, +enum vb2_buffer_state result) +{ +pm_runtime_mark_last_busy (vpu->dev); +pm_runtime_put_autosuspend (vpu->dev); + +hantro_job_finish_no_pm (vpu, ctx, result); +} +void hantro_irq_done (struct hantro_dev *vpu,enum vb2_buffer_state result) {
@@ -152,12 +160,13 @@ static void device_run(void *priv) src =hantro_get_src_buf (ctx); dst =hantro_get_dst_buf (ctx); + ret =pm_runtime_resume_and_get (ctx->dev->dev); +if (ret <0 ) + goto err_cancel_job; + ret =clk_bulk_enable (ctx->dev->variant->num_clocks, ctx->dev->clocks);if (ret) goto err_cancel_job; - ret =pm_runtime_get_sync (ctx->dev->dev); -if (ret <0 ) - goto err_cancel_job;v4l2_m2m_buf_copy_metadata (src, dst, true);
@@ -165,7 +174,7 @@ static void device_run(void *priv)return ; err_cancel_job: -hantro_job_finish (ctx->dev, ctx,VB2_BUF_STATE_ERROR ); +hantro_job_finish_no_pm (ctx->dev, ctx,VB2_BUF_STATE_ERROR ); }static struct v4l2_m2m_ops vpu_m2m_ops = {
Thanks,
Mauro
Re: [PATCH v3 79/79] media: hantro: document the usage of pm_runtime_get_sync()
Em Wed, 28 Apr 2021 08:27:42 +0200
Mauro Carvalho Chehab <[email protected]> escreveu:
Quoted 115 lines
Em Tue, 27 Apr 2021 12:18:32 -0300 Ezequiel Garcia <[email protected]> escreveu:
Quoted 38 lines · Robin Murphy
Quoted 23 lines · Mauro Carvalho Chehab
Quoted 22 lines
Despite other *_get()/*_put() functions, where usage count is incremented only if not errors, the
pm_runtime_get_sync()has a different behavior, incrementing the counter *even* on errors.That's an error prone behavior, as people often forget to decrement the usage counter.
However, the hantro driver depends on this behavior, as it will decrement the
usage_countunconditionally at the m2m job finish time, which makes sense.So, intead of using the
pm_runtime_resume_and_get()that would decrement the counter on error, keep the current API, but add a documentation explaining the rationale for keep usingpm_runtime_get_sync().Signed-off-by Mauro Carvalho Chehab <[email protected]>---
drivers/staging/media/hantro/hantro_drv.c| 7 +++++++1 file changed, 7 insertions(+)Quoted 13 lines
drivers/staging/media/hantro/hantro_drv.c static void device_run(void *priv) · line 157
Quoted 8 lines
drivers/staging/media/hantro/hantro_drv.c +0
-0@@ -155,6 +155,13 @@ static void device_run(void *priv) ret = clk_bulk_enable(ctx->dev->variant->num_clocks, ctx->dev->clocks); if (ret) goto err_cancel_job;..except this can also cause the same
pm_runtime_put_autosuspend()call without even reaching the "matching" get below, so rather than some kind of cleverness it seems more like it's just broken :/Quoted 5 lines
Indeed, I was trying to find time to cook a quick patch, but kept getting preempted.
Feel free to submit a fix for this, otherwise, I'll try to find time later this week.
What about doing this instead:
drivers/staging/media/hantro/hantro_drv.c +18
-9@@ -56,14 +56,12 @@ dma_addr_t hantro_get_ref(struct hantro_ctx *ctx, u64 ts)return hantro_get_dec_buf_addr (ctx, buf); } -static void hantro_job_finish (struct hantro_dev *vpu, -struct hantro_ctx *ctx, -enum vb2_buffer_state result) +static void hantro_job_finish_no_pm (struct hantro_dev *vpu, +struct hantro_ctx *ctx, +enum vb2_buffer_state result) {struct vb2_v4l2_buffer *src, *dst; -pm_runtime_mark_last_busy (vpu->dev); -pm_runtime_put_autosuspend (vpu->dev);clk_bulk_disable (vpu->variant->num_clocks, vpu->clocks); src =v4l2_m2m_next_src_buf (ctx->fh.m2m_ctx);@@ -81,6 +79,16 @@ static void hantro_job_finish(struct hantro_dev *vpu, result); } +static void hantro_job_finish (struct hantro_dev *vpu, +struct hantro_ctx *ctx, +enum vb2_buffer_state result) +{ +pm_runtime_mark_last_busy (vpu->dev); +pm_runtime_put_autosuspend (vpu->dev); + +hantro_job_finish_no_pm (vpu, ctx, result); +} +void hantro_irq_done (struct hantro_dev *vpu,enum vb2_buffer_state result) {@@ -152,12 +160,13 @@ static void device_run(void *priv) src =hantro_get_src_buf (ctx); dst =hantro_get_dst_buf (ctx); + ret =pm_runtime_resume_and_get (ctx->dev->dev); +if (ret <0 ) + goto err_cancel_job; + ret =clk_bulk_enable (ctx->dev->variant->num_clocks, ctx->dev->clocks);if (ret) goto err_cancel_job; - ret =pm_runtime_get_sync (ctx->dev->dev); -if (ret <0 ) - goto err_cancel_job;v4l2_m2m_buf_copy_metadata (src, dst, true);@@ -165,7 +174,7 @@ static void device_run(void *priv)return ; err_cancel_job: -hantro_job_finish (ctx->dev, ctx,VB2_BUF_STATE_ERROR ); +hantro_job_finish_no_pm (ctx->dev, ctx,VB2_BUF_STATE_ERROR ); }static struct v4l2_m2m_ops vpu_m2m_ops = {
Quoted 2 lines
Thanks,
Mauro
Actually, the order at the finish logic should change as well. Maybe like this:
<snip>
static void hantro_job_finish_no_pm(struct hantro_dev *vpu,
struct hantro_ctx *ctx, enum vb2_buffer_state result)
{
struct vb2_v4l2_buffer *src, *dst;
src = v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx);
dst = v4l2_m2m_next_dst_buf(ctx->fh.m2m_ctx);
if (WARN_ON(!src))
return;
if (WARN_ON(!dst))
return;
src->sequence = ctx->sequence_out++;
dst->sequence = ctx->sequence_cap++;
v4l2_m2m_buf_done_and_job_finish(ctx->dev->m2m_dev, ctx->fh.m2m_ctx,
result);
}static void hantro_job_finish(struct hantro_dev *vpu,
struct hantro_ctx *ctx, enum vb2_buffer_state result)
{
hantro_job_finish_no_pm(vpu, ctx, result); clk_bulk_disable(vpu->variant->num_clocks, vpu->clocks); pm_runtime_mark_last_busy(vpu->dev); pm_runtime_put_autosuspend(vpu->dev); }
static void device_run(void *priv)
{
struct hantro_ctx *ctx = priv;
struct vb2_v4l2_buffer *src, *dst;
int ret;
src = hantro_get_src_buf(ctx);
dst = hantro_get_dst_buf(ctx);
ret = pm_runtime_resume_and_get(ctx->dev->dev);
if (ret < 0)
goto err_cancel_job;
ret = clk_bulk_enable(ctx->dev->variant->num_clocks, ctx->dev->clocks);
if (ret)
goto err_cancel_job;
v4l2_m2m_buf_copy_metadata(src, dst, true);
ctx->codec_ops->run(ctx);
return;err_cancel_job:
hantro_job_finish_no_pm(ctx->dev, ctx, VB2_BUF_STATE_ERROR); }
</snip>
Thanks,
Mauro
Re: [PATCH v3 79/79] media: hantro: document the usage of pm_runtime_get_sync()
Hi Mauro,
Quoted 118 lines · Mauro Carvalho Chehab
Em Wed, 28 Apr 2021 08:27:42 +0200
Mauro Carvalho Chehab <[email protected]> escreveu:Quoted 115 lines
Em Tue, 27 Apr 2021 12:18:32 -0300 Ezequiel Garcia <[email protected]> escreveu:
Quoted 38 lines · Robin Murphy
Quoted 23 lines · Mauro Carvalho Chehab
Quoted 22 lines
Despite other *_get()/*_put() functions, where usage count is incremented only if not errors, the
pm_runtime_get_sync()has a different behavior, incrementing the counter *even* on errors.That's an error prone behavior, as people often forget to decrement the usage counter.
However, the hantro driver depends on this behavior, as it will decrement the
usage_countunconditionally at the m2m job finish time, which makes sense.So, intead of using the
pm_runtime_resume_and_get()that would decrement the counter on error, keep the current API, but add a documentation explaining the rationale for keep usingpm_runtime_get_sync().Signed-off-by Mauro Carvalho Chehab <[email protected]>---
drivers/staging/media/hantro/hantro_drv.c| 7 +++++++1 file changed, 7 insertions(+)Quoted 13 lines
drivers/staging/media/hantro/hantro_drv.c static void device_run(void *priv) · line 157
Quoted 8 lines
drivers/staging/media/hantro/hantro_drv.c +0
-0@@ -155,6 +155,13 @@ static void device_run(void *priv) ret = clk_bulk_enable(ctx->dev->variant->num_clocks, ctx->dev->clocks); if (ret) goto err_cancel_job;..except this can also cause the same
pm_runtime_put_autosuspend()call without even reaching the "matching" get below, so rather than some kind of cleverness it seems more like it's just broken :/Quoted 5 lines
Indeed, I was trying to find time to cook a quick patch, but kept getting preempted.
Feel free to submit a fix for this, otherwise, I'll try to find time later this week.
What about doing this instead:
drivers/staging/media/hantro/hantro_drv.c +0
-0@@ -56,14 +56,12 @@ dma_addr_t hantro_get_ref(struct hantro_ctx *ctx, u64 ts) return hantro_get_dec_buf_addr(ctx, buf); }drivers/staging/media/hantro/hantro_drv.c +3
-3-static void hantro_job_finish (struct hantro_dev *vpu, - struct hantro_ctx *ctx, - enum vb2_buffer_state result) +static void hantro_job_finish_no_pm (struct hantro_dev *vpu, + struct hantro_ctx *ctx, + enum vb2_buffer_state result){
structvb2_v4l2_buffer*src, *dst;
- pm_runtime_mark_last_busy(vpu->dev);
- pm_runtime_put_autosuspend(vpu->dev);clk_bulk_disable(vpu->variant->num_clocks, vpu->clocks);
src =v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx);drivers/staging/media/hantro/hantro_drv.c +0
-0@@ -81,6 +79,16 @@ static void hantro_job_finish(struct hantro_dev *vpu, result); }drivers/staging/media/hantro/hantro_drv.c +10
-0+static void hantro_job_finish (struct hantro_dev *vpu, + struct hantro_ctx *ctx, + enum vb2_buffer_state result) +{ + pm_runtime_mark_last_busy(vpu->dev); + pm_runtime_put_autosuspend(vpu->dev); + + hantro_job_finish_no_pm(vpu, ctx, result); +} +void
hantro_irq_done(struct hantro_dev *vpu, enum vb2_buffer_state result){drivers/staging/media/hantro/hantro_drv.c +0
-0@@ -152,12 +160,13 @@ static void device_run(void *priv) src = hantro_get_src_buf(ctx); dst = hantro_get_dst_buf(ctx);
+ ret =pm_runtime_resume_and_get(ctx->dev->dev);
+ if (ret < 0)
+ gotoerr_cancel_job;
+
ret =clk_bulk_enable(ctx->dev->variant->num_clocks, ctx->dev->clocks); if (ret)
gotoerr_cancel_job;
- ret =pm_runtime_get_sync(ctx->dev->dev);
- if (ret < 0)
- gotoerr_cancel_job;
v4l2_m2m_buf_copy_metadata(src, dst, true);drivers/staging/media/hantro/hantro_drv.c +0
-0@@ -165,7 +174,7 @@ static void device_run(void *priv) return;
err_cancel_job:
- hantro_job_finish(ctx->dev, ctx,VB2_BUF_STATE_ERROR); + hantro_job_finish_no_pm(ctx->dev, ctx,VB2_BUF_STATE_ERROR); }
static structv4l2_m2m_opsvpu_m2m_ops= {
Quoted 6 lines
Quoted 2 lines
Thanks,
MauroActually, the order at the finish logic should change as well. Maybe like this:
This one looks good.
Thanks!
Ezequiel
Quoted 65 lines
<snip>
static voidhantro_job_finish_no_pm(struct hantro_dev *vpu, struct hantro_ctx *ctx, enum vb2_buffer_state result){
structvb2_v4l2_buffer*src, *dst;src =
v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx); dst =v4l2_m2m_next_dst_buf(ctx->fh.m2m_ctx);if (
WARN_ON(!src))
return;
if (WARN_ON(!dst))
return;src->sequence = ctx->sequence_out++;
dst->sequence = ctx->sequence_cap++;v4l2_m2m_buf_done_and_job_finish(ctx->dev->m2m_dev,
ctx->fh.m2m_ctx, result);
}static void
hantro_job_finish(struct hantro_dev *vpu, struct hantro_ctx *ctx, enum vb2_buffer_state result){hantro_job_finish_no_pm(vpu, ctx, result);
clk_bulk_disable(vpu->variant->num_clocks,
vpu->clocks);pm_runtime_mark_last_busy(vpu->dev);
pm_runtime_put_autosuspend(vpu->dev);
}static void
device_run(void *priv)
{
structhantro_ctx*ctx = priv;
structvb2_v4l2_buffer*src, *dst;
int ret;src =
hantro_get_src_buf(ctx);
dst =hantro_get_dst_buf(ctx);ret =
pm_runtime_resume_and_get(ctx->dev->dev); if (ret < 0)
gotoerr_cancel_job;ret =
clk_bulk_enable(ctx->dev->variant->num_clocks, ctx->dev->clocks); if (ret)
gotoerr_cancel_job;v4l2_m2m_buf_copy_metadata(src, dst, true);
ctx->codec_ops->run(ctx);
return;
err_cancel_job:
hantro_job_finish_no_pm(ctx->dev, ctx,VB2_BUF_STATE_ERROR); }
</snip>Thanks,
Mauro