[alsa-devel] [PATCH] ASoC: jack: Fix race in snd_soc_jack_add_gpios

Lars-Peter Clausen lars at metafoo.de
Fri Jul 31 21:15:25 CEST 2009


The irq can fire as soon as it has been requested, thus all fields accessed
from within the irq handler must be initialized prior to requesting the irq.

Signed-off-by: Lars-Peter Clausen <lars at metafoo.de>
---
The patch is against alsa-kernel/master but I guess something similar should also
go into 2.6.31.

 sound/soc/soc-jack.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/sound/soc/soc-jack.c b/sound/soc/soc-jack.c
index 4aa7d8f..1d455ab 100644
--- a/sound/soc/soc-jack.c
+++ b/sound/soc/soc-jack.c
@@ -221,6 +221,9 @@ int snd_soc_jack_add_gpios(struct snd_soc_jack *jack, int count,
 		if (ret)
 			goto err;
 
+		INIT_WORK(&gpios[i].work, gpio_work);
+		gpios[i].jack = jack;
+
 		ret = request_irq(gpio_to_irq(gpios[i].gpio),
 				gpio_handler,
 				IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
@@ -234,9 +237,6 @@ int snd_soc_jack_add_gpios(struct snd_soc_jack *jack, int count,
 		gpio_export(gpios[i].gpio, false);
 #endif
 
-		INIT_WORK(&gpios[i].work, gpio_work);
-		gpios[i].jack = jack;
-
 		/* Update initial jack status */
 		snd_soc_jack_gpio_detect(&gpios[i]);
 	}
-- 
1.5.6.5



More information about the Alsa-devel mailing list