lkml.org 
[lkml]   [2002]   [Sep]   [22]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
DateSat, 21 Sep 2002 22:44:49 +0200
Subject[PATCH] 11/11 sound/oss replace cli()
FromPeter Waechtler <>
--- vanilla-2.5.36/sound/oss/wf_midi.c	2002-04-20 18:25:22.000000000 
+0200
+++ linux-2.5-cli-oss/sound/oss/wf_midi.c	2002-08-16 12:43:47.000000000 
+0200
@@ -50,6 +50,7 @@
   */

  #include <linux/init.h>
+#include <linux/spinlock.h>
  #include "sound_config.h"

  #include <linux/wavefront.h>
@@ -79,6 +80,7 @@
  static struct wf_mpu_config *virt_dev = &devs[1];

  static void start_uart_mode (void);
+static spinlock_t lock=SPIN_LOCK_UNLOCKED;

  #define	OUTPUT_READY	0x40
  #define	INPUT_AVAIL	0x80
@@ -365,8 +367,8 @@
  	}

  	if (mi->m_busy) return;
+	spin_lock(&lock);
  	mi->m_busy = 1;
-	sti ();

  	if (!input_dev) {
  		input_dev = physical_dev;
@@ -406,6 +408,7 @@
  	} while (input_avail() && n-- > 0);

  	mi->m_busy = 0;
+	spin_unlock(&lock);
  }

  static int
@@ -486,18 +489,17 @@
  		for (timeout = 30000; timeout > 0 && !output_ready ();
  		     timeout--);

-		save_flags (flags);
-		cli ();
+		spin_lock_irqsave(&lock,flags);

  		if (!output_ready ()) {
  			printk (KERN_WARNING "WF-MPU: Send switch "
  				"byte timeout\n");
-			restore_flags (flags);
+			spin_unlock_irqrestore(&lock,flags);
  			return 0;
  		}

  		write_data (switchch);
-		restore_flags (flags);
+		spin_unlock_irqrestore(&lock,flags);
  	}

  	lastoutdev = dev;
@@ -511,16 +513,15 @@

  	for (timeout = 30000; timeout > 0 && !output_ready (); timeout--);

-	save_flags (flags);
-	cli ();
+	spin_lock_irqsave(&lock,flags);
  	if (!output_ready ()) {
+		spin_unlock_irqrestore(&lock,flags);
  		printk (KERN_WARNING "WF-MPU: Send data timeout\n");
-		restore_flags (flags);
  		return 0;
  	}

  	write_data (midi_byte);
-	restore_flags (flags);
+	spin_unlock_irqrestore(&lock,flags);

  	return 1;
  }
@@ -768,14 +769,13 @@
  {
  	unsigned long flags;

-	save_flags (flags);
-	cli();
+	spin_lock_irqsave(&lock,flags);

  	wf_mpu_close (virt_dev->devno);
  	/* no synth on virt_dev, so no need to call wf_mpu_synth_close() */
  	phys_dev->isvirtual = 0;

-	restore_flags (flags);
+	spin_unlock_irqrestore(&lock,flags);

  	return 0;
  }
@@ -858,8 +858,7 @@
  	int             ok, i;
  	unsigned long   flags;

-	save_flags (flags);
-	cli ();
+	spin_lock_irqsave(&lock,flags);

  	/* XXX fix me */

@@ -875,6 +874,6 @@
  		}
  	}

-	restore_flags (flags);
+	spin_unlock_irqrestore(&lock,flags);
  }
  #endif
-
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 12:29    [from the cache]
©2003-2008