git://ftp.safe.ca
/
safe
/
jmp
/
linux-2.6
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'sched/core' into cpus4096
[safe/jmp/linux-2.6]
/
drivers
/
char
/
mbcs.c
diff --git
a/drivers/char/mbcs.c
b/drivers/char/mbcs.c
index
035575c
..
acd8e9e
100644
(file)
--- a/
drivers/char/mbcs.c
+++ b/
drivers/char/mbcs.c
@@
-24,6
+24,7
@@
#include <linux/mm.h>
#include <linux/uio.h>
#include <linux/mutex.h>
#include <linux/mm.h>
#include <linux/uio.h>
#include <linux/mutex.h>
+#include <linux/smp_lock.h>
#include <asm/io.h>
#include <asm/uaccess.h>
#include <asm/system.h>
#include <asm/io.h>
#include <asm/uaccess.h>
#include <asm/system.h>
@@
-310,7
+311,7
@@
do_mbcs_sram_dmawrite(struct mbcs_soft *soft, uint64_t hostAddr,
{
int rv = 0;
{
int rv = 0;
- if (
down
_interruptible(&soft->dmawritelock))
+ if (
mutex_lock
_interruptible(&soft->dmawritelock))
return -ERESTARTSYS;
atomic_set(&soft->dmawrite_done, 0);
return -ERESTARTSYS;
atomic_set(&soft->dmawrite_done, 0);
@@
-336,7
+337,7
@@
do_mbcs_sram_dmawrite(struct mbcs_soft *soft, uint64_t hostAddr,
*off += len;
dmawrite_exit:
*off += len;
dmawrite_exit:
-
up
(&soft->dmawritelock);
+
mutex_unlock
(&soft->dmawritelock);
return rv;
}
return rv;
}
@@
-347,7
+348,7
@@
do_mbcs_sram_dmaread(struct mbcs_soft *soft, uint64_t hostAddr,
{
int rv = 0;
{
int rv = 0;
- if (
down
_interruptible(&soft->dmareadlock))
+ if (
mutex_lock
_interruptible(&soft->dmareadlock))
return -ERESTARTSYS;
atomic_set(&soft->dmawrite_done, 0);
return -ERESTARTSYS;
atomic_set(&soft->dmawrite_done, 0);
@@
-372,7
+373,7
@@
do_mbcs_sram_dmaread(struct mbcs_soft *soft, uint64_t hostAddr,
*off += len;
dmaread_exit:
*off += len;
dmaread_exit:
-
up
(&soft->dmareadlock);
+
mutex_unlock
(&soft->dmareadlock);
return rv;
}
return rv;
}
@@
-382,15
+383,19
@@
static int mbcs_open(struct inode *ip, struct file *fp)
struct mbcs_soft *soft;
int minor;
struct mbcs_soft *soft;
int minor;
+ lock_kernel();
minor = iminor(ip);
minor = iminor(ip);
+ /* Nothing protects access to this list... */
list_for_each_entry(soft, &soft_list, list) {
if (soft->nasid == minor) {
fp->private_data = soft->cxdev;
list_for_each_entry(soft, &soft_list, list) {
if (soft->nasid == minor) {
fp->private_data = soft->cxdev;
+ unlock_kernel();
return 0;
}
}
return 0;
}
}
+ unlock_kernel();
return -ENODEV;
}
return -ENODEV;
}
@@
-763,8
+768,8
@@
static int mbcs_probe(struct cx_dev *dev, const struct cx_device_id *id)
init_waitqueue_head(&soft->dmaread_queue);
init_waitqueue_head(&soft->algo_queue);
init_waitqueue_head(&soft->dmaread_queue);
init_waitqueue_head(&soft->algo_queue);
-
init_MUTEX
(&soft->dmawritelock);
-
init_MUTEX
(&soft->dmareadlock);
+
mutex_init
(&soft->dmawritelock);
+
mutex_init
(&soft->dmareadlock);
mutex_init(&soft->algolock);
mbcs_getdma_init(&soft->getdma);
mutex_init(&soft->algolock);
mbcs_getdma_init(&soft->getdma);