aboutsummaryrefslogtreecommitdiffstats
path: root/sound/oss/rme96xx.c
diff options
context:
space:
mode:
authorAnton Altaparmakov <aia21@hera.kernel.org>2006-03-23 17:05:47 +0000
committerAnton Altaparmakov <aia21@hera.kernel.org>2006-03-23 17:05:47 +0000
commita05ba4561fa3ad8b64a27577d0d38c190f60f762 (patch)
tree5eb7561113e006b7bad0bef50dec6821962b1b36 /sound/oss/rme96xx.c
parent74293759002aa7db0179158c20676a034614577b (diff)
parentb0e6e962992b76580f4900b166a337bad7c1e81b (diff)
downloadkernel_samsung_tuna-a05ba4561fa3ad8b64a27577d0d38c190f60f762.zip
kernel_samsung_tuna-a05ba4561fa3ad8b64a27577d0d38c190f60f762.tar.gz
kernel_samsung_tuna-a05ba4561fa3ad8b64a27577d0d38c190f60f762.tar.bz2
Merge branch 'master' of /home/aia21/ntfs-2.6/
Diffstat (limited to 'sound/oss/rme96xx.c')
-rw-r--r--sound/oss/rme96xx.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/sound/oss/rme96xx.c b/sound/oss/rme96xx.c
index faa0b79..a1ec9d1 100644
--- a/sound/oss/rme96xx.c
+++ b/sound/oss/rme96xx.c
@@ -58,6 +58,7 @@ TODO:
#include <linux/interrupt.h>
#include <linux/poll.h>
#include <linux/wait.h>
+#include <linux/mutex.h>
#include <asm/dma.h>
#include <asm/page.h>
@@ -326,7 +327,7 @@ typedef struct _rme96xx_info {
/* waiting and locking */
wait_queue_head_t wait;
- struct semaphore open_sem;
+ struct mutex open_mutex;
wait_queue_head_t open_wait;
} dma[RME96xx_MAX_DEVS];
@@ -842,7 +843,7 @@ static void busmaster_free(void* ptr,int size) {
static int rme96xx_dmabuf_init(rme96xx_info * s,struct dmabuf* dma,int ioffset,int ooffset) {
- init_MUTEX(&dma->open_sem);
+ mutex_init(&dma->open_mutex);
init_waitqueue_head(&dma->open_wait);
init_waitqueue_head(&dma->wait);
dma->s = s;
@@ -1469,21 +1470,21 @@ static int rme96xx_open(struct inode *in, struct file *f)
dma = &s->dma[devnum];
f->private_data = dma;
/* wait for device to become free */
- down(&dma->open_sem);
+ mutex_lock(&dma->open_mutex);
while (dma->open_mode & f->f_mode) {
if (f->f_flags & O_NONBLOCK) {
- up(&dma->open_sem);
+ mutex_unlock(&dma->open_mutex);
return -EBUSY;
}
add_wait_queue(&dma->open_wait, &wait);
__set_current_state(TASK_INTERRUPTIBLE);
- up(&dma->open_sem);
+ mutex_unlock(&dma->open_mutex);
schedule();
remove_wait_queue(&dma->open_wait, &wait);
set_current_state(TASK_RUNNING);
if (signal_pending(current))
return -ERESTARTSYS;
- down(&dma->open_sem);
+ mutex_lock(&dma->open_mutex);
}
COMM ("hardware open")
@@ -1492,7 +1493,7 @@ static int rme96xx_open(struct inode *in, struct file *f)
dma->open_mode |= (f->f_mode & (FMODE_READ | FMODE_WRITE));
dma->opened = 1;
- up(&dma->open_sem);
+ mutex_unlock(&dma->open_mutex);
DBG(printk("device num %d open finished\n",devnum));
return 0;
@@ -1524,7 +1525,7 @@ static int rme96xx_release(struct inode *in, struct file *file)
}
wake_up(&dma->open_wait);
- up(&dma->open_sem);
+ mutex_unlock(&dma->open_mutex);
return 0;
}