| 1 | commit 5ced436d549d911ce610ea47d85f71fae5bbfce4 |
| 2 | Author: Lars-Peter Clausen <lars@metafoo.de> |
| 3 | Date: Fri Jul 31 18:26:48 2009 +0200 |
| 4 | |
| 5 | ASoC: jack: Fix race in snd_soc_jack_add_gpios |
| 6 | |
| 7 | The irq can fire as soon as it has been requested, thus all fields accessed |
| 8 | from within the irq handler must be initialized prior to requesting the irq. |
| 9 | |
| 10 | Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> |
| 11 | |
| 12 | --- a/sound/soc/soc-jack.c |
| 13 | +++ b/sound/soc/soc-jack.c |
| 14 | @@ -220,6 +220,9 @@ int snd_soc_jack_add_gpios(struct snd_so |
| 15 | if (ret) |
| 16 | goto err; |
| 17 | |
| 18 | + INIT_WORK(&gpios[i].work, gpio_work); |
| 19 | + gpios[i].jack = jack; |
| 20 | + |
| 21 | ret = request_irq(gpio_to_irq(gpios[i].gpio), |
| 22 | gpio_handler, |
| 23 | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, |
| 24 | @@ -227,9 +230,6 @@ int snd_soc_jack_add_gpios(struct snd_so |
| 25 | &gpios[i]); |
| 26 | if (ret) |
| 27 | goto err; |
| 28 | - |
| 29 | - INIT_WORK(&gpios[i].work, gpio_work); |
| 30 | - gpios[i].jack = jack; |
| 31 | } |
| 32 | |
| 33 | return 0; |
| 34 | |