| From 72832302cf8f7fb8faf9b3ae86a056e72adc01df Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 23 Apr 2021 17:07:41 +0200 |
| Subject: media: sh_vou: fix pm_runtime_get_sync() usage count |
| |
| From: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> |
| |
| [ Upstream commit 6e8b1526db164c9d4b9dacfb9bc48e365d7c4860 ] |
| |
| The pm_runtime_get_sync() internally increments the |
| dev->power.usage_count without decrementing it, even on errors. |
| Replace it by the new pm_runtime_resume_and_get(), introduced by: |
| commit dd8088d5a896 ("PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter") |
| in order to properly decrement the usage counter, avoiding |
| a potential PM usage counter leak. |
| |
| While here, check if the PM runtime error was caught at open time. |
| |
| Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> |
| Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/media/platform/sh_vou.c | 6 +++++- |
| 1 file changed, 5 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/media/platform/sh_vou.c b/drivers/media/platform/sh_vou.c |
| index b22dc1d72527..7d30e0c9447e 100644 |
| --- a/drivers/media/platform/sh_vou.c |
| +++ b/drivers/media/platform/sh_vou.c |
| @@ -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); |
| -- |
| 2.30.2 |
| |