mirror-linux/drivers/soundwire
Richard Fitzgerald 4e5e9da139 soundwire: bus: Fix unbalanced pm_runtime_put() causing usage count underflow
[ Upstream commit e953796251 ]

This reverts commit
443a98e649 ("soundwire: bus: use pm_runtime_resume_and_get()")

Change calls to pm_runtime_resume_and_get() back to pm_runtime_get_sync().
This fixes a usage count underrun caused by doing a pm_runtime_put() even
though pm_runtime_resume_and_get() returned an error.

The three affected functions ignore -EACCES error from trying to get
pm_runtime, and carry on, including a put at the end of the function.
But pm_runtime_resume_and_get() does not increment the usage count if it
returns an error. So in the -EACCES case you must not call
pm_runtime_put().

The documentation for pm_runtime_get_sync() says:
 "Consider using pm_runtime_resume_and_get() ...  as this is likely to
 result in cleaner code."

In this case I don't think it results in cleaner code because the
pm_runtime_put() at the end of the function would have to be conditional on
the return value from pm_runtime_resume_and_get() at the top of the
function.

pm_runtime_get_sync() doesn't have this problem because it always
increments the count, so always needs a put. The code can just flow through
and do the pm_runtime_put() unconditionally.

Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20230406134640.8582-1-rf@opensource.cirrus.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2023-05-24 17:32:42 +01:00
..
Kconfig
Makefile
bus.c soundwire: bus: Fix unbalanced pm_runtime_put() causing usage count underflow 2023-05-24 17:32:42 +01:00
bus.h
bus_type.c soundwire: bus_type: Avoid lockdep assert in sdw_drv_probe() 2023-03-11 13:55:35 +01:00
cadence_master.c soundwire: cadence: rename sdw_cdns_dai_dma_data as sdw_cdns_dai_runtime 2023-05-11 23:03:37 +09:00
cadence_master.h soundwire: intel: don't save hw_params for use in prepare 2023-05-11 23:03:37 +09:00
debugfs.c
dmi-quirks.c soundwire: dmi-quirks: add remapping for Intel 'Rooks County' NUC M15 2023-05-24 17:32:41 +01:00
generic_bandwidth_allocation.c
intel.c soundwire: intel: don't save hw_params for use in prepare 2023-05-11 23:03:37 +09:00
intel.h
intel_init.c soundwire: intel: cleanup definition of LCOUNT 2022-09-01 14:29:14 +05:30
master.c
mipi_disco.c
qcom.c soundwire: qcom: gracefully handle too many ports in DT 2023-05-24 17:32:41 +01:00
slave.c Char / Misc driver changes for 6.0-rc1 2022-08-04 11:05:48 -07:00
stream.c
sysfs_local.h
sysfs_slave.c
sysfs_slave_dpn.c