ALSA: mtpav - Fix race in probe
Takashi Iwai [Wed, 8 Oct 2008 08:28:25 +0000 (10:28 +0200)]
Ingo reported Oops at probing mtpav driver.  It's a race between
the irq handler and the rawmidi instance registration.

This patch fixes the order of registration to avoid the race.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Tested-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>

sound/drivers/mtpav.c

index b5e1a71..5b89c08 100644 (file)
@@ -715,6 +715,10 @@ static int __devinit snd_mtpav_probe(struct platform_device *dev)
 
        card->private_free = snd_mtpav_free;
 
+       err = snd_mtpav_get_RAWMIDI(mtp_card);
+       if (err < 0)
+               goto __error;
+
        err = snd_mtpav_get_ISA(mtp_card);
        if (err < 0)
                goto __error;
@@ -724,10 +728,6 @@ static int __devinit snd_mtpav_probe(struct platform_device *dev)
        snprintf(card->longname, sizeof(card->longname),
                 "MTPAV on parallel port at 0x%lx", port);
 
-       err = snd_mtpav_get_RAWMIDI(mtp_card);
-       if (err < 0)
-               goto __error;
-
        snd_mtpav_portscan(mtp_card);
 
        snd_card_set_dev(card, &dev->dev);