linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
To: Johan Hovold <johan@kernel.org>
Cc: Jacopo Mondi <jacopo@jmondi.org>,
	linuxarm@huawei.com, mauro.chehab@huawei.com,
	Hans Verkuil <hverkuil-cisco@xs4all.nl>,
	Jacopo Mondi <jacopo+renesas@jmondi.org>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	linux-kernel@vger.kernel.org, linux-media@vger.kernel.org
Subject: Re: [PATCH 38/78] media: i2c: mt9m001: use pm_runtime_resume_and_get()
Date: Wed, 28 Apr 2021 10:31:48 +0200	[thread overview]
Message-ID: <20210428103148.590191ac@coco.lan> (raw)
In-Reply-To: <YIgCOA1kSd/lzLFc@hovoldconsulting.com>

Em Tue, 27 Apr 2021 14:23:20 +0200
Johan Hovold <johan@kernel.org> escreveu:

> On Mon, Apr 26, 2021 at 04:38:40PM +0200, Mauro Carvalho Chehab wrote:
> > Em Sat, 24 Apr 2021 12:00:46 +0200
> > Johan Hovold <johan@kernel.org> escreveu:
> >   
> > > On Sat, Apr 24, 2021 at 10:24:54AM +0200, Jacopo Mondi wrote:  
> > > > Hi Mauro,
> > > > 
> > > > On Sat, Apr 24, 2021 at 08:44:48AM +0200, Mauro Carvalho Chehab wrote:    
> > > > > Commit dd8088d5a896 ("PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter")
> > > > > added pm_runtime_resume_and_get() in order to automatically handle
> > > > > dev->power.usage_count decrement on errors.
> > > > >
> > > > > Use the new API, in order to cleanup the error check logic.
> > > > >
> > > > > Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>    
> 
> > > I'd say this kind of mass-conversion is of questionable worth as
> > > pm_runtime_resume_and_get() isn't necessarily an improvement (even if it
> > > may have its use in some places).  
> > 
> > The main problem is that other parts of the driver's core APIs
> > assume that get object methods will only increment the usage
> > counter if no errors. The pm_runtime_get_sync() is an exception.
> > 
> > Its name doesn't help at all: A function like that should, IMHO,
> > be called, instead:
> > 
> > 	pm_runtime_inc_usage_count_and_try_to_resume().
> > 
> > Or something similar, in order to make clearer that it always
> > increment the usage count, no matter what. If possible, all drivers
> > should get rid of it too (or alternatively add comments warning
> > people that keeping the usage_count incremented is desired on the
> > very specific places where it is really needed), as it is risky
> > to use something that has a different usage_count increement behavior
> > than other more usual *_get() functions.  
> 
> pm_runtime_get_sync() has worked this way since it was merged 12 years
> ago, and for someone who's used to this interface this is not such a big
> deal as you seem to think. Sure, you need to remember to put the usage
> counter on errors, but that's it (and the other side of that is that you
> don't need to worry about error handling where it doesn't matter).

Before we have those at PM subsystem, the media had its own way to
set/disable power for their sub-devices. The PCI and USB drivers 
still use it, instead of pm_runtime, mostly due to historic reasons.

So, basically, its usage at the media subsystem is restricted to
drivers for embedded systems. The vast majority of drivers supporting
PM runtime are the I2C camera drivers. The camera drivers can be used 
interchangeable. So, in practice, the same bridge driver can work 
with a lot of different camera models, depending on the hardware
vendors' personal preferences and the desired max resolution.

So, in thesis, all such drivers should behave exactly the same 
with regards to PM.

However, on most existing drivers, the pm_runtime was added a
couple of years ago, and by people that are not too familiar
with the PM subsystem.

That probably explains why there were/are several places that 
do things like this[1]:

	ret = pm_runtime_get_sync(dev);
	if (ret < 0)
		return ret;

without taking care of calling a pm_runtime_put*() function.

[1] besides the 13 patches made by UCN addressing it on
    existing code, I discovered the same pattern on a 
    couple of other drivers with current upstream code.

That shows a pattern: several media developers are not familiar
with the usage_count behavior for pm_runtime_get functions.

So, doing this work is not only helping to make the PM support
more uniform, but it is also helping to solve existing issues.

> Also note all the pm_runtime_get functions *always* increment the usage
> count even if an async resume may later fail so there is consistency
> here.
> 
> And regarding naming, the new pm_resume_and_get() looks completely out
> of place to me since it uses a different naming scheme than the other
> helpers (including the ones that are used to balance the new call).
> 
> > With regards to mass-fixing it, I've seen several patches seen
> > to media fixing bugs due to the bad usage_count decrement logic.
> > So, the best is to solve them all at once, and stop using
> > pm_runtime_get_sync() inside the subsystem.  
> 
> Sure, having the script kiddies patch drivers without understanding what
> they're are really doing is bound to introduce bugs unless it can be
> caught in review.

Yes, but as I pointed, the current code has bugs already.

> You're call, but converting functioning drivers where the authors knew
> what they were doing just because you're not used to the API and risk
> introducing new bugs in the process isn't necessarily a good idea.

The problem is that the above assumption is not necessarily true:
based on the number of drivers that pm_runtime_get_sync() weren't
decrementing usage_count on errors, several driver authors were not 
familiar enough with the PM runtime behavior by the time the drivers
were written or converted to use the PM runtime, instead of the
media .s_power()/.s_stream() callbacks.

> Especially since the pm_runtime_get_sync() will continue to be used
> elsewhere, and possibly even in media in cases where you don't need to
> check for errors (e.g. remove()).

Talking about the remove(), I'm not sure if just ignoring errors
there would do the right thing. I mean, if pm_runtime_get_sync()
fails, probably any attempts to disable clocks and other things
that depend on PM runtime will also (silently) fail.

This may put the device on an unknown PM and keep clock lines enabled
after its removal.

Thanks,
Mauro

  reply	other threads:[~2021-04-28  8:31 UTC|newest]

Thread overview: 127+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-24  6:44 [PATCH 00/78] media: use pm_runtime_resume_and_get() instead of pm_runtime_get_sync() Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 01/78] media: atmel: properly get pm_runtime Mauro Carvalho Chehab
2021-04-24  9:36   ` kernel test robot
2021-04-24  6:44 ` [PATCH 02/78] media: marvel-ccic: fix some issues when getting pm_runtime Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 03/78] media: mdk-mdp: fix pm_runtime_get_sync() usage count Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 04/78] media: rcar_fdp1: " Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 05/78] media: mdk-mdp: " Mauro Carvalho Chehab
2021-04-24 18:23   ` Ezequiel Garcia
2021-04-24  6:44 ` [PATCH 06/78] media: renesas-ceu: " Mauro Carvalho Chehab
2021-04-24  8:11   ` Jacopo Mondi
2021-04-24  6:44 ` [PATCH 07/78] media: s5p: " Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 08/78] media: am437x:: " Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 09/78] media: sh_vou: " Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 10/78] media: sti/hva: use pm_runtime_resume_and_get() Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 11/78] staging: media: rkvdec: fix pm_runtime_get_sync() usage count Mauro Carvalho Chehab
2021-04-24 23:20   ` Ezequiel Garcia
2021-04-24  6:44 ` [PATCH 12/78] staging: media: atomisp_fops: use pm_runtime_resume_and_get() Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 13/78] staging: media: hantro_drv: " Mauro Carvalho Chehab
2021-04-24 23:23   ` Ezequiel Garcia
2021-04-26 12:33     ` Mauro Carvalho Chehab
2021-04-26 12:42       ` Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 14/78] staging: media: imx7-mipi-csis: " Mauro Carvalho Chehab
2021-04-26 10:11   ` Rui Miguel Silva
2021-04-24  6:44 ` [PATCH 15/78] staging: media: ipu3: " Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 16/78] staging: media: cedrus_video: " Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 17/78] staging: media: vde: " Mauro Carvalho Chehab
2021-04-24  7:35   ` Dmitry Osipenko
2021-04-27  9:22     ` Mauro Carvalho Chehab
2021-04-27 12:34       ` Johan Hovold
2021-04-24  6:44 ` [PATCH 18/78] staging: media: csi: " Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 19/78] staging: media: vi: " Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 20/78] media: mtk-vcodec: fix pm_runtime_get_sync() usage count Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 21/78] media: s5p-jpeg: " Mauro Carvalho Chehab
2021-04-27  9:14   ` Sylwester Nawrocki
2021-04-24  6:44 ` [PATCH 22/78] media: delta-v4l2: " Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 23/78] media: sun8i_rotate: " Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 24/78] media: i2c: ak7375: use pm_runtime_resume_and_get() Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 25/78] media: i2c: ccs-core: " Mauro Carvalho Chehab
2021-04-25 18:55   ` Sakari Ailus
2021-04-26 14:01     ` Mauro Carvalho Chehab
2021-04-26 14:09       ` Sakari Ailus
2021-04-26 14:16         ` Mauro Carvalho Chehab
2021-04-26 14:29           ` Sakari Ailus
2021-04-26 17:32             ` Mauro Carvalho Chehab
2021-04-27  7:02               ` Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 26/78] media: i2c: dw9714: " Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 27/78] media: i2c: dw9768: " Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 28/78] media: i2c: dw9807-vcm: " Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 29/78] media: i2c: hi556: " Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 30/78] media: i2c: imx214: " Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 31/78] media: i2c: imx219: " Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 32/78] media: i2c: imx258: " Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 33/78] media: i2c: imx274: " Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 34/78] media: i2c: imx290: " Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 35/78] media: i2c: imx319: " Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 36/78] media: i2c: imx334: " Mauro Carvalho Chehab
2021-04-26  9:06   ` Alessandrelli, Daniele
2021-04-24  6:44 ` [PATCH 37/78] media: i2c: imx355: " Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 38/78] media: i2c: mt9m001: " Mauro Carvalho Chehab
2021-04-24  8:24   ` Jacopo Mondi
2021-04-24 10:00     ` Johan Hovold
2021-04-26 14:38       ` Mauro Carvalho Chehab
2021-04-27 12:23         ` Johan Hovold
2021-04-28  8:31           ` Mauro Carvalho Chehab [this message]
2021-04-28 10:05             ` Johan Hovold
2021-04-28 11:28               ` Mauro Carvalho Chehab
2021-04-28 11:56                 ` Johan Hovold
2021-04-24  6:44 ` [PATCH 39/78] media: i2c: ov02a10: " Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 40/78] media: i2c: ov13858: " Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 41/78] media: i2c: ov2659: " Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 42/78] media: i2c: ov2685: " Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 43/78] media: i2c: ov2740: " Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 44/78] media: i2c: ov5647: " Mauro Carvalho Chehab
2021-04-24  8:30   ` Jacopo Mondi
2021-04-24  6:44 ` [PATCH 45/78] media: i2c: ov5648: " Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 46/78] media: i2c: ov5670: " Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 47/78] media: i2c: ov5675: " Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 48/78] media: i2c: ov5695: " Mauro Carvalho Chehab
2021-04-24  6:44 ` [PATCH 49/78] media: i2c: ov7740: " Mauro Carvalho Chehab
2021-04-24  6:45 ` [PATCH 50/78] media: i2c: ov8856: " Mauro Carvalho Chehab
2021-04-24  6:45 ` [PATCH 51/78] media: i2c: ov8865: " Mauro Carvalho Chehab
2021-04-24  6:45 ` [PATCH 52/78] media: i2c: ov9734: " Mauro Carvalho Chehab
2021-04-24  6:45 ` [PATCH 53/78] media: i2c: tvp5150: " Mauro Carvalho Chehab
2021-04-24  6:45 ` [PATCH 54/78] media: i2c: video-i2c: " Mauro Carvalho Chehab
2021-04-24  6:45 ` [PATCH 55/78] media: ipu3: " Mauro Carvalho Chehab
2021-04-24  6:45 ` [PATCH 56/78] media: coda: " Mauro Carvalho Chehab
2021-04-26  6:53   ` Philipp Zabel
2021-04-24  6:45 ` [PATCH 57/78] media: exynos4-is: " Mauro Carvalho Chehab
2021-04-25 20:57   ` Sylwester Nawrocki
2021-04-26 13:12     ` Mauro Carvalho Chehab
2021-04-27  8:06       ` Sylwester Nawrocki
2021-04-24  6:45 ` [PATCH 58/78] media: exynos-gsc: " Mauro Carvalho Chehab
2021-04-27  8:18   ` Sylwester Nawrocki
2021-04-27  9:30     ` Mauro Carvalho Chehab
2021-04-27  9:42       ` Mauro Carvalho Chehab
2021-04-27 11:50         ` Sylwester Nawrocki
2021-04-28  7:13           ` Mauro Carvalho Chehab
2021-04-28  7:17             ` Mauro Carvalho Chehab
2021-04-28  8:27               ` Sylwester Nawrocki
2021-04-24  6:45 ` [PATCH 59/78] media: mtk-jpeg: " Mauro Carvalho Chehab
2021-04-24  6:45 ` [PATCH 60/78] media: camss-csid: " Mauro Carvalho Chehab
2021-04-24  6:45 ` [PATCH 61/78] media: camss-csiphy: " Mauro Carvalho Chehab
2021-04-24  6:45 ` [PATCH 62/78] media: camss-ispif: " Mauro Carvalho Chehab
2021-04-24  6:45 ` [PATCH 63/78] media: camss-vfe: " Mauro Carvalho Chehab
2021-04-24  6:45 ` [PATCH 64/78] media: core: " Mauro Carvalho Chehab
2021-04-24  6:45 ` [PATCH 65/78] media: pm_helpers: " Mauro Carvalho Chehab
2021-04-24  6:45 ` [PATCH 66/78] media: vdec: " Mauro Carvalho Chehab
2021-04-24  6:45 ` [PATCH 67/78] media: venc: " Mauro Carvalho Chehab
2021-04-24  6:45 ` [PATCH 68/78] media: rcar-fcp: " Mauro Carvalho Chehab
2021-04-24  6:45 ` [PATCH 69/78] media: rcar-vin: " Mauro Carvalho Chehab
2021-04-24  8:33   ` Niklas Söderlund
2021-04-24  9:12   ` Geert Uytterhoeven
2021-04-26 13:33     ` Mauro Carvalho Chehab
2021-04-24  6:45 ` [PATCH 70/78] media: rga-buf: " Mauro Carvalho Chehab
2021-04-28 17:09   ` Ezequiel Garcia
2021-04-24  6:45 ` [PATCH 71/78] media: rkisp1-capture: " Mauro Carvalho Chehab
2021-04-24  6:45 ` [PATCH 72/78] media: s3c-camif: " Mauro Carvalho Chehab
2021-04-25 19:36   ` Sylwester Nawrocki
2021-04-24  6:45 ` [PATCH 73/78] media: s5p-mfc: " Mauro Carvalho Chehab
2021-04-27  9:36   ` Sylwester Nawrocki
2021-04-24  6:45 ` [PATCH 74/78] media: bdisp-v4l2: " Mauro Carvalho Chehab
2021-04-24  6:45 ` [PATCH 75/78] media: stm32: " Mauro Carvalho Chehab
2021-04-24  6:45 ` [PATCH 76/78] media: sun4i_v4l2: " Mauro Carvalho Chehab
2021-04-24 10:21   ` kernel test robot
2021-04-24  6:45 ` [PATCH 77/78] media: ti-vpe: " Mauro Carvalho Chehab
2021-04-24  6:45 ` [PATCH 78/78] media: vsp1: " Mauro Carvalho Chehab
2021-04-28 10:13 ` [PATCH 00/78] media: use pm_runtime_resume_and_get() instead of pm_runtime_get_sync() Dan Carpenter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210428103148.590191ac@coco.lan \
    --to=mchehab+huawei@kernel.org \
    --cc=hverkuil-cisco@xs4all.nl \
    --cc=jacopo+renesas@jmondi.org \
    --cc=jacopo@jmondi.org \
    --cc=johan@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=linuxarm@huawei.com \
    --cc=mauro.chehab@huawei.com \
    --cc=mchehab@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).