On Wed, 12 May 2021 16:49:58 +0200 Mauro Carvalho Chehab <mchehab+huawei@xxxxxxxxxx> wrote: > Em Sun, 9 May 2021 12:33:49 +0100 > Jonathan Cameron <jic23@xxxxxxxxxx> escreveu: > > > From: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx> > > > > This case illustrates why the new pm_runtime_sync_and_get() is good > > in that it makes clear the correct way to handle errors. > > > > Calling pm_runtime_put() on failure of the _get() in pm_runtime_get_sync() > > will potentially result in powering down an already powered down device > > (as we never successfully powered it up. Unlikely to cause any problems > > in reality. > > > > Signed-off-by: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx> > > This one seems a little odd on my eyes, although I don't know much about > IIO, as it calls RPM get only at: > > zpa2326_init_runtime() > > on a balanced way, as the routine starts with RPM get() ends with RPM put(). > > Then it does a put at zpa2326_suspend() and a get at zpa2326_resume(). > > Can RPM usage_count be zero at suspend (or are there some other part > of IIO core that increments it?). Because, if after resume, usage_count > would be equal to 1, as I guess RPM core prevent negative values. I've stared at this for a few minutes and gotten nowhere in figuring out the intent. As such I'm going to drop the patch for now and revisit at a later date. Jonathan > > Regards, > Mauro > > > > > --- > > drivers/iio/pressure/zpa2326.c | 6 ++---- > > 1 file changed, 2 insertions(+), 4 deletions(-) > > > > diff --git a/drivers/iio/pressure/zpa2326.c b/drivers/iio/pressure/zpa2326.c > > index 89295c90f801..97ac3ba399f7 100644 > > --- a/drivers/iio/pressure/zpa2326.c > > +++ b/drivers/iio/pressure/zpa2326.c > > @@ -664,11 +664,9 @@ static int zpa2326_resume(const struct iio_dev *indio_dev) > > { > > int err; > > > > - err = pm_runtime_get_sync(indio_dev->dev.parent); > > - if (err < 0) { > > - pm_runtime_put(indio_dev->dev.parent); > > + err = pm_runtime_resume_and_get(indio_dev->dev.parent); > > + if (err < 0) > > return err; > > - } > > > > if (err > 0) { > > /* > > > > Thanks, > Mauro