Messages in this thread Patch in this message | | | Date | Thu, 29 Aug 2002 21:56:27 +0200 | Subject | [PATCH] 13/41 sound/oss/pas2_midi.c - convert cli to spinlocks | From | pwaechtler@mac ... |
| |
--- vanilla-2.5.32/sound/oss/pas2_midi.c Sat Apr 20 18:25:21 2002 +++ linux-2.5-cli-oss/sound/oss/pas2_midi.c Wed Aug 14 19:44:58 2002 @@ -14,10 +14,13 @@ */ #include <linux/init.h> +#include <linux/spinlock.h> #include "sound_config.h" #include "pas2.h" +extern spinlock_t lock; + static int midi_busy = 0, input_opened = 0; static int my_dev; @@ -48,12 +51,11 @@ pas_write(0x20 | 0x40, 0x178b); - save_flags(flags); - cli(); + spin_lock_irqsave(&lock, flags); if ((err = pas_set_intr(0x10)) < 0) { - restore_flags(flags); + spin_unlock_irqrestore(&lock, flags); return err; } /* @@ -81,7 +83,7 @@ pas_write(0xff, 0x1B88); - restore_flags(flags); + spin_unlock_irqrestore(&lock, flags); midi_busy = 1; qlen = qhead = qtail = 0; @@ -131,8 +133,7 @@ * Drain the local queue first */ - save_flags(flags); - cli(); + spin_lock_irqsave(&lock, flags); while (qlen && dump_to_midi(tmp_queue[qhead])) { @@ -140,7 +141,7 @@ qhead++; } - restore_flags(flags); + spin_unlock_irqrestore(&lock, flags); /* * Output the byte if the local queue is empty. @@ -157,14 +158,13 @@ if (qlen >= 256) return 0; /* Local queue full */ - save_flags(flags); - cli(); + spin_lock_irqsave(&lock, flags); tmp_queue[qtail] = midi_byte; qlen++; qtail++; - restore_flags(flags); + spin_unlock_irqrestore(&lock, flags); return 1; } @@ -226,7 +226,6 @@ { unsigned char stat; int i, incount; - unsigned long flags; stat = pas_read(0x1B88); @@ -245,8 +244,7 @@ } if (stat & (0x08 | 0x10)) { - save_flags(flags); - cli(); + spin_lock(&lock);/* called in irq context */ while (qlen && dump_to_midi(tmp_queue[qhead])) { @@ -254,7 +252,7 @@ qhead++; } - restore_flags(flags); + spin_unlock(&lock); } if (stat & 0x40) { - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |