lkml.org 
[lkml]   [2002]   [Sep]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
Subject[PATCH] 1/10 sound/oss/gus_midi.c - convert cli to spinlocks
From
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/

\
 
 \ /
  Last update: 2005-03-22 13:28    [W:0.025 / U:1.212 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site