[PATCH] 1/10 sound/oss/gus_midi.c - convert cli to spinlocks

From: pwaechtler@mac.com
Date: Thu Aug 29 2002 - 14:56:27 EST


This is the first of a series of patches against 2.5.33
converting all remaining OSS sound drivers to use
spin_lock_irqsave&co instead of cli() which is nowadays
gone when compiling for SMP.

The most mysterious one was: dmasound_q40.c

--- vanilla-2.5.33/sound/oss/gus_midi.c Sat Apr 20 18:25:20 2002
+++ linux-2.5-cli-oss/sound/oss/gus_midi.c Fri Aug 16 13:57:28 2002
@@ -16,6 +16,7 @@
  */
 
 #include <linux/init.h>
+#include <linux/spinlock.h>
 #include "sound_config.h"
 
 #include "gus.h"
@@ -25,7 +26,7 @@
 static int my_dev;
 static int output_used = 0;
 static volatile unsigned char gus_midi_control;
-
+static spinlock_t lock=SPIN_LOCK_UNLOCKED;
 static void (*midi_input_intr) (int dev, unsigned char data);
 
 static unsigned char tmp_queue[256];
@@ -75,8 +76,7 @@
 
         output_used = 1;
 
- save_flags(flags);
- cli();
+ spin_lock_irqsave(&lock, flags);
 
         if (GUS_MIDI_STATUS() & MIDI_XMIT_EMPTY)
         {
@@ -92,7 +92,7 @@
                 outb((gus_midi_control), u_MidiControl);
         }
 
- restore_flags(flags);
+ spin_unlock_irqrestore(&lock, flags);
         return ok;
 }
 
@@ -113,16 +113,14 @@
         /*
          * Drain the local queue first
          */
-
- save_flags(flags);
- cli();
+ spin_lock_irqsave(&lock, flags);
 
         while (qlen && dump_to_midi(tmp_queue[qhead]))
         {
                 qlen--;
                 qhead++;
         }
- restore_flags(flags);
+ spin_unlock_irqrestore(&lock, flags);
 
         /*
          * Output the byte if the local queue is empty.
@@ -142,14 +140,13 @@
                 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;
 }
 
@@ -174,15 +171,14 @@
         if (!output_used)
                 return 0;
 
- save_flags(flags);
- cli();
+ spin_lock_irqsave(&lock, flags);
 
         if (qlen && dump_to_midi(tmp_queue[qhead]))
         {
                 qlen--;
                 qhead++;
         }
- restore_flags(flags);
+ spin_unlock_irqrestore(&lock, flags);
         return (qlen > 0) | !(GUS_MIDI_STATUS() & MIDI_XMIT_EMPTY);
 }
 
@@ -226,11 +222,9 @@
 void gus_midi_interrupt(int dummy)
 {
         volatile unsigned char stat, data;
- unsigned long flags;
         int timeout = 10;
 
- save_flags(flags);
- cli();
+ spin_lock(&lock);
 
         while (timeout-- > 0 && (stat = GUS_MIDI_STATUS()) & (MIDI_RCV_FULL | MIDI_XMIT_EMPTY))
         {
@@ -258,5 +252,5 @@
                         }
                 }
         }
- restore_flags(flags);
+ spin_unlock(&lock);
 }

-
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/



This archive was generated by hypermail 2b29 : Sun Sep 15 2002 - 22:00:16 EST