ALSA: core: Use READ_ONCE() / WRITE_ONCE() for power state change
authorTakashi Iwai <tiwai@suse.de>
Sun, 23 May 2021 09:09:15 +0000 (11:09 +0200)
committerTakashi Iwai <tiwai@suse.de>
Tue, 25 May 2021 06:48:03 +0000 (08:48 +0200)
We need proper barriers to handle the power state change of the card
from different CPUs.

Reviewed-by: Jaroslav Kysela <perex@perex.cz>
Link: https://lore.kernel.org/r/20210523090920.15345-2-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
include/sound/core.h

index 1f9aef0..d69dfc6 100644 (file)
@@ -142,12 +142,12 @@ struct snd_card {
 #ifdef CONFIG_PM
 static inline unsigned int snd_power_get_state(struct snd_card *card)
 {
-       return card->power_state;
+       return READ_ONCE(card->power_state);
 }
 
 static inline void snd_power_change_state(struct snd_card *card, unsigned int state)
 {
-       card->power_state = state;
+       WRITE_ONCE(card->power_state, state);
        wake_up(&card->power_sleep);
 }