diff options
author | Anton Altaparmakov <aia21@hera.kernel.org> | 2006-03-23 17:05:47 +0000 |
---|---|---|
committer | Anton Altaparmakov <aia21@hera.kernel.org> | 2006-03-23 17:05:47 +0000 |
commit | a05ba4561fa3ad8b64a27577d0d38c190f60f762 (patch) | |
tree | 5eb7561113e006b7bad0bef50dec6821962b1b36 /sound/oss/rme96xx.c | |
parent | 74293759002aa7db0179158c20676a034614577b (diff) | |
parent | b0e6e962992b76580f4900b166a337bad7c1e81b (diff) | |
download | kernel_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.c | 17 |
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; } |