Patch "media: i2c: imx334: fix the pm runtime get logic" has been added to the 5.12-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    media: i2c: imx334: fix the pm runtime get logic

to the 5.12-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     media-i2c-imx334-fix-the-pm-runtime-get-logic.patch
and it can be found in the queue-5.12 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 7380a1326ffd1885d0364d565f57c505b72b49f6
Author: Mauro Carvalho Chehab <mchehab+huawei@xxxxxxxxxx>
Date:   Fri Apr 23 17:19:13 2021 +0200

    media: i2c: imx334: fix the pm runtime get logic
    
    [ Upstream commit 62c90446868b439929cb04395f04a709a64ae04b ]
    
    The PM runtime get logic is currently broken, as it checks if
    ret is zero instead of checking if it is an error code,
    as reported by Dan Carpenter.
    
    While here, use the pm_runtime_resume_and_get() as added by:
    commit dd8088d5a896 ("PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter")
    added pm_runtime_resume_and_get() in order to automatically handle
    dev->power.usage_count decrement on errors. As a bonus, such function
    always return zero on success.
    
    It should also be noticed that a fail of pm_runtime_get_sync() would
    potentially result in a spurious runtime_suspend(), instead of
    using pm_runtime_put_noidle().
    
    Reported-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
    Reviewed-by: Daniele Alessandrelli <daniele.alessandrelli@xxxxxxxxx>
    Reviewed-by: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/media/i2c/imx334.c b/drivers/media/i2c/imx334.c
index ad530f0d338a..02d22907c75c 100644
--- a/drivers/media/i2c/imx334.c
+++ b/drivers/media/i2c/imx334.c
@@ -717,9 +717,9 @@ static int imx334_set_stream(struct v4l2_subdev *sd, int enable)
 	}
 
 	if (enable) {
-		ret = pm_runtime_get_sync(imx334->dev);
-		if (ret)
-			goto error_power_off;
+		ret = pm_runtime_resume_and_get(imx334->dev);
+		if (ret < 0)
+			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;



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux