mirror of
https://github.com/torvalds/linux.git
synced 2024-10-25 22:44:30 +00:00
c3aeda6287
Although some races in runtime PM refcount was fixed by the commit [664c715573c2: ALSA: hda - Work around races of power up/down with runtime PM], there is still a race in the following case: CPU0: CPU1 : runtime suspend: codec->in_pm = 1 snd_hdac_power_up_pm(): pm_runtime_get_sync() skipped suspend finished: codec->in_pm = 0 snd_hdac_power_down_pm(): pm_runtime_put_*() is called! For avoiding this situation, increment in_pm flag atomically when it's non-zero, and decrement accordingly, to ensure that in_pm is set consistently for the whole concurrent operations. Also, since atomic_inc_not_zero() and atomic_dec_if_positive() are lengthy inline functions, move snd_hdac_power_up_pm() and _down_pm() to sound/hda/hdac_device.c as no inline functions. Signed-off-by: Takashi Iwai <tiwai@suse.de> |
||
---|---|---|
.. | ||
array.c | ||
hda_bus_type.c | ||
hdac_bus.c | ||
hdac_device.c | ||
hdac_regmap.c | ||
hdac_sysfs.c | ||
Kconfig | ||
local.h | ||
Makefile | ||
trace.c | ||
trace.h |