diff options
author | Takashi Iwai <tiwai@suse.de> | 2015-04-13 11:01:14 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2015-04-13 11:07:20 +0200 |
commit | c3aeda62878f09da91329693a60a1f08ec97e0b8 (patch) | |
tree | 5b07fb0e0aeddc6cfb5b4b0b5f0151a679e62c4d /sound/pci | |
parent | eacf6e0a238923dfce0626450adcb6d486072f28 (diff) | |
download | op-kernel-dev-c3aeda62878f09da91329693a60a1f08ec97e0b8.zip op-kernel-dev-c3aeda62878f09da91329693a60a1f08ec97e0b8.tar.gz |
ALSA: hda - Fix another race in runtime PM refcounting
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>
Diffstat (limited to 'sound/pci')
0 files changed, 0 insertions, 0 deletions