drivers: autoconvert trivial BKL users to private mutex
authorArnd Bergmann <arnd@arndb.de>
Wed, 2 Jun 2010 12:28:52 +0000 (14:28 +0200)
committerArnd Bergmann <arnd@arndb.de>
Tue, 5 Oct 2010 13:01:04 +0000 (15:01 +0200)
All these files use the big kernel lock in a trivial
way to serialize their private file operations,
typically resulting from an earlier semi-automatic
pushdown from VFS.

None of these drivers appears to want to lock against
other code, and they all use the BKL as the top-level
lock in their file operations, meaning that there
is no lock-order inversion problem.

Consequently, we can remove the BKL completely,
replacing it with a per-file mutex in every case.
Using a scripted approach means we can avoid
typos.

These drivers do not seem to be under active
maintainance from my brief investigation. Apologies
to those maintainers that I have missed.

file=$1
name=$2
if grep -q lock_kernel ${file} ; then
    if grep -q 'include.*linux.mutex.h' ${file} ; then
            sed -i '/include.*<linux\/smp_lock.h>/d' ${file}
    else
            sed -i 's/include.*<linux\/smp_lock.h>.*$/include <linux\/mutex.h>/g' ${file}
    fi
    sed -i ${file} \
        -e "/^#include.*linux.mutex.h/,$ {
                1,/^\(static\|int\|long\)/ {
                     /^\(static\|int\|long\)/istatic DEFINE_MUTEX(${name}_mutex);

} }"  \
    -e "s/\(un\)*lock_kernel\>[ ]*()/mutex_\1lock(\&${name}_mutex)/g" \
    -e '/[      ]*cycle_kernel_lock();/d'
else
    sed -i -e '/include.*\<smp_lock.h\>/d' ${file}  \
                -e '/cycle_kernel_lock()/d'
fi

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
35 files changed:
drivers/block/paride/pg.c
drivers/block/paride/pt.c
drivers/char/apm-emulation.c
drivers/char/applicom.c
drivers/char/ds1302.c
drivers/char/ds1620.c
drivers/char/dsp56k.c
drivers/char/dtlk.c
drivers/char/generic_nvram.c
drivers/char/genrtc.c
drivers/char/i8k.c
drivers/char/ip2/ip2main.c
drivers/char/lp.c
drivers/char/mbcs.c
drivers/char/mmtimer.c
drivers/char/mwave/mwavedd.c
drivers/char/nvram.c
drivers/char/nwflash.c
drivers/char/pcmcia/cm4000_cs.c
drivers/char/pcmcia/cm4040_cs.c
drivers/char/ppdev.c
drivers/char/rio/rio_linux.c
drivers/char/snsc.c
drivers/char/toshiba.c
drivers/char/viotape.c
drivers/char/xilinx_hwicap/xilinx_hwicap.c
drivers/hwmon/fschmd.c
drivers/hwmon/w83793.c
drivers/input/misc/hp_sdc_rtc.c
drivers/misc/phantom.c
drivers/pci/hotplug/cpqphp_sysfs.c
drivers/rtc/rtc-m41t80.c
drivers/sbus/char/jsflash.c
drivers/telephony/ixj.c
drivers/watchdog/cpwd.c

index c397b3ddba9b8676293bf773edfa90b29cf3101d..bed29cb9e6d97f71a56921b25f09127592eb3634 100644 (file)
@@ -162,7 +162,7 @@ enum {D_PRT, D_PRO, D_UNI, D_MOD, D_SLV, D_DLY};
 #include <linux/pg.h>
 #include <linux/device.h>
 #include <linux/sched.h>       /* current, TASK_* */
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 #include <linux/jiffies.h>
 
 #include <asm/uaccess.h>
@@ -193,6 +193,7 @@ module_param_array(drive3, int, NULL, 0);
 
 #define ATAPI_IDENTIFY         0x12
 
+static DEFINE_MUTEX(pg_mutex);
 static int pg_open(struct inode *inode, struct file *file);
 static int pg_release(struct inode *inode, struct file *file);
 static ssize_t pg_read(struct file *filp, char __user *buf,
@@ -518,7 +519,7 @@ static int pg_open(struct inode *inode, struct file *file)
        struct pg *dev = &devices[unit];
        int ret = 0;
 
-       lock_kernel();
+       mutex_lock(&pg_mutex);
        if ((unit >= PG_UNITS) || (!dev->present)) {
                ret = -ENODEV;
                goto out;
@@ -547,7 +548,7 @@ static int pg_open(struct inode *inode, struct file *file)
        file->private_data = dev;
 
 out:
-       unlock_kernel();
+       mutex_unlock(&pg_mutex);
        return ret;
 }
 
index bc5825fdeaabcfa297e9d00ffe1be1e8ade921fe..e4dda282e0a62a64ef6e15508e5da91417f6840d 100644 (file)
@@ -146,7 +146,7 @@ static int (*drives[4])[6] = {&drive0, &drive1, &drive2, &drive3};
 #include <linux/mtio.h>
 #include <linux/device.h>
 #include <linux/sched.h>       /* current, TASK_*, schedule_timeout() */
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 
 #include <asm/uaccess.h>
 
@@ -189,6 +189,7 @@ module_param_array(drive3, int, NULL, 0);
 #define ATAPI_MODE_SENSE       0x1a
 #define ATAPI_LOG_SENSE                0x4d
 
+static DEFINE_MUTEX(pt_mutex);
 static int pt_open(struct inode *inode, struct file *file);
 static long pt_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
 static int pt_release(struct inode *inode, struct file *file);
@@ -650,9 +651,9 @@ static int pt_open(struct inode *inode, struct file *file)
        struct pt_unit *tape = pt + unit;
        int err;
 
-       lock_kernel();
+       mutex_lock(&pt_mutex);
        if (unit >= PT_UNITS || (!tape->present)) {
-               unlock_kernel();
+               mutex_unlock(&pt_mutex);
                return -ENODEV;
        }
 
@@ -681,12 +682,12 @@ static int pt_open(struct inode *inode, struct file *file)
        }
 
        file->private_data = tape;
-       unlock_kernel();
+       mutex_unlock(&pt_mutex);
        return 0;
 
 out:
        atomic_inc(&tape->available);
-       unlock_kernel();
+       mutex_unlock(&pt_mutex);
        return err;
 }
 
@@ -704,15 +705,15 @@ static long pt_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
                switch (mtop.mt_op) {
 
                case MTREW:
-                       lock_kernel();
+                       mutex_lock(&pt_mutex);
                        pt_rewind(tape);
-                       unlock_kernel();
+                       mutex_unlock(&pt_mutex);
                        return 0;
 
                case MTWEOF:
-                       lock_kernel();
+                       mutex_lock(&pt_mutex);
                        pt_write_fm(tape);
-                       unlock_kernel();
+                       mutex_unlock(&pt_mutex);
                        return 0;
 
                default:
index 033e1505fca9fe3ea2fee9b2b064578ad45637f4..6a420baea2680ee9ef2c611f3ad1c56c1660a7a5 100644 (file)
@@ -13,7 +13,7 @@
 #include <linux/module.h>
 #include <linux/poll.h>
 #include <linux/slab.h>
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
 #include <linux/miscdevice.h>
@@ -126,6 +126,7 @@ struct apm_user {
 /*
  * Local variables
  */
+static DEFINE_MUTEX(apm_mutex);
 static atomic_t suspend_acks_pending = ATOMIC_INIT(0);
 static atomic_t userspace_notification_inhibit = ATOMIC_INIT(0);
 static int apm_disabled;
@@ -274,7 +275,7 @@ apm_ioctl(struct file *filp, u_int cmd, u_long arg)
        if (!as->suser || !as->writer)
                return -EPERM;
 
-       lock_kernel();
+       mutex_lock(&apm_mutex);
        switch (cmd) {
        case APM_IOC_SUSPEND:
                mutex_lock(&state_lock);
@@ -335,7 +336,7 @@ apm_ioctl(struct file *filp, u_int cmd, u_long arg)
                mutex_unlock(&state_lock);
                break;
        }
-       unlock_kernel();
+       mutex_unlock(&apm_mutex);
 
        return err;
 }
@@ -370,7 +371,7 @@ static int apm_open(struct inode * inode, struct file * filp)
 {
        struct apm_user *as;
 
-       lock_kernel();
+       mutex_lock(&apm_mutex);
        as = kzalloc(sizeof(*as), GFP_KERNEL);
        if (as) {
                /*
@@ -390,7 +391,7 @@ static int apm_open(struct inode * inode, struct file * filp)
 
                filp->private_data = as;
        }
-       unlock_kernel();
+       mutex_unlock(&apm_mutex);
 
        return as ? 0 : -ENOMEM;
 }
index f4ae0e0fb631b522f1b02a0a4ea68e2f98df0897..e7ba774beda6b8598a47dd77faf52e5283437037 100644 (file)
@@ -26,7 +26,7 @@
 #include <linux/sched.h>
 #include <linux/slab.h>
 #include <linux/errno.h>
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 #include <linux/miscdevice.h>
 #include <linux/pci.h>
 #include <linux/wait.h>
@@ -60,6 +60,7 @@
 #define PCI_DEVICE_ID_APPLICOM_PCI2000PFB     0x0003
 #endif
 
+static DEFINE_MUTEX(ac_mutex);
 static char *applicom_pci_devnames[] = {
        "PCI board",
        "PCI2000IBS / PCI2000CAN",
@@ -707,7 +708,7 @@ static long ac_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
        if (IS_ERR(adgl))
                return PTR_ERR(adgl);
 
-       lock_kernel();  
+       mutex_lock(&ac_mutex);  
        IndexCard = adgl->num_card-1;
         
        if(cmd != 6 && ((IndexCard >= MAX_BOARD) || !apbs[IndexCard].RamIO)) {
@@ -717,7 +718,7 @@ static long ac_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
                        warncount--;
                }
                kfree(adgl);
-               unlock_kernel();
+               mutex_unlock(&ac_mutex);
                return -EINVAL;
        }
 
@@ -835,7 +836,7 @@ static long ac_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
        }
        Dummy = readb(apbs[IndexCard].RamIO + VERS);
        kfree(adgl);
-       unlock_kernel();
+       mutex_unlock(&ac_mutex);
        return 0;
 }
 
index 170693c93c73d275fceb2c310c41df8a323c9297..e3d72aa3cbd2fa1f322c62f4fc0da7e233b33b60 100644 (file)
@@ -20,7 +20,7 @@
 #include <linux/miscdevice.h>
 #include <linux/delay.h>
 #include <linux/bcd.h>
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 #include <linux/uaccess.h>
 #include <linux/io.h>
 
@@ -32,6 +32,7 @@
 
 #define RTC_MAJOR_NR 121 /* local major, change later */
 
+static DEFINE_MUTEX(rtc_mutex);
 static const char ds1302_name[] = "ds1302";
 
 /* Send 8 bits. */
@@ -164,9 +165,9 @@ static long rtc_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
                        struct rtc_time rtc_tm;
 
                        memset(&rtc_tm, 0, sizeof (struct rtc_time));
-                       lock_kernel();
+                       mutex_lock(&rtc_mutex);
                        get_rtc_time(&rtc_tm);
-                       unlock_kernel();
+                       mutex_unlock(&rtc_mutex);
                        if (copy_to_user((struct rtc_time*)arg, &rtc_tm, sizeof(struct rtc_time)))
                                return -EFAULT;
                        return 0;
@@ -218,7 +219,7 @@ static long rtc_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
                        mon = bin2bcd(mon);
                        yrs = bin2bcd(yrs);
 
-                       lock_kernel();
+                       mutex_lock(&rtc_mutex);
                        local_irq_save(flags);
                        CMOS_WRITE(yrs, RTC_YEAR);
                        CMOS_WRITE(mon, RTC_MONTH);
@@ -227,7 +228,7 @@ static long rtc_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
                        CMOS_WRITE(min, RTC_MINUTES);
                        CMOS_WRITE(sec, RTC_SECONDS);
                        local_irq_restore(flags);
-                       unlock_kernel();
+                       mutex_unlock(&rtc_mutex);
 
                        /* Notice that at this point, the RTC is updated but
                         * the kernel is still running with the old time.
@@ -247,10 +248,10 @@ static long rtc_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
                        if(copy_from_user(&tcs_val, (int*)arg, sizeof(int)))
                                return -EFAULT;
 
-                       lock_kernel();
+                       mutex_lock(&rtc_mutex);
                        tcs_val = RTC_TCR_PATTERN | (tcs_val & 0x0F);
                        ds1302_writereg(RTC_TRICKLECHARGER, tcs_val);
-                       unlock_kernel();
+                       mutex_unlock(&rtc_mutex);
                        return 0;
                }
                default:
index dbee8688f75ceafddfd80a5be5b7dcf8affd7140..9aa1fd059aea47115113a7cc599350211f52db1c 100644 (file)
@@ -8,7 +8,7 @@
 #include <linux/proc_fs.h>
 #include <linux/capability.h>
 #include <linux/init.h>
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 
 #include <mach/hardware.h>
 #include <asm/mach-types.h>
@@ -34,6 +34,7 @@
 #define CFG_CPU                        2
 #define CFG_1SHOT              1
 
+static DEFINE_MUTEX(ds1620_mutex);
 static const char *fan_state[] = { "off", "on", "on (hardwired)" };
 
 /*
@@ -210,7 +211,6 @@ static void ds1620_read_state(struct therm *therm)
 
 static int ds1620_open(struct inode *inode, struct file *file)
 {
-       cycle_kernel_lock();
        return nonseekable_open(inode, file);
 }
 
@@ -321,9 +321,9 @@ ds1620_unlocked_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 {
        int ret;
 
-       lock_kernel();
+       mutex_lock(&ds1620_mutex);
        ret = ds1620_ioctl(file, cmd, arg);
-       unlock_kernel();
+       mutex_unlock(&ds1620_mutex);
 
        return ret;
 }
index 8a1b28a10ef0af184e4ff4e03e9eaaf4783f97ca..b3c756227e39d5c90ffe3e76da86cf579f43a4fb 100644 (file)
@@ -32,7 +32,7 @@
 #include <linux/mm.h>
 #include <linux/init.h>
 #include <linux/device.h>
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 #include <linux/firmware.h>
 #include <linux/platform_device.h>
 #include <linux/uaccess.h>     /* For put_user and get_user */
@@ -94,6 +94,7 @@
        } \
 }
 
+static DEFINE_MUTEX(dsp56k_mutex);
 static struct dsp56k_device {
        unsigned long in_use;
        long maxio, timeout;
@@ -330,9 +331,9 @@ static long dsp56k_ioctl(struct file *file, unsigned int cmd,
                        if (len > DSP56K_MAX_BINARY_LENGTH) {
                                return -EINVAL;
                        }
-                       lock_kernel();
+                       mutex_lock(&dsp56k_mutex);
                        r = dsp56k_upload(bin, len);
-                       unlock_kernel();
+                       mutex_unlock(&dsp56k_mutex);
                        if (r < 0) {
                                return r;
                        }
@@ -342,16 +343,16 @@ static long dsp56k_ioctl(struct file *file, unsigned int cmd,
                case DSP56K_SET_TX_WSIZE:
                        if (arg > 4 || arg < 1)
                                return -EINVAL;
-                       lock_kernel();
+                       mutex_lock(&dsp56k_mutex);
                        dsp56k.tx_wsize = (int) arg;
-                       unlock_kernel();
+                       mutex_unlock(&dsp56k_mutex);
                        break;
                case DSP56K_SET_RX_WSIZE:
                        if (arg > 4 || arg < 1)
                                return -EINVAL;
-                       lock_kernel();
+                       mutex_lock(&dsp56k_mutex);
                        dsp56k.rx_wsize = (int) arg;
-                       unlock_kernel();
+                       mutex_unlock(&dsp56k_mutex);
                        break;
                case DSP56K_HOST_FLAGS:
                {
@@ -363,7 +364,7 @@ static long dsp56k_ioctl(struct file *file, unsigned int cmd,
                        if(get_user(out, &hf->out) < 0)
                                return -EFAULT;
 
-                       lock_kernel();
+                       mutex_lock(&dsp56k_mutex);
                        if ((dir & 0x1) && (out & 0x1))
                                dsp56k_host_interface.icr |= DSP56K_ICR_HF0;
                        else if (dir & 0x1)
@@ -378,16 +379,16 @@ static long dsp56k_ioctl(struct file *file, unsigned int cmd,
                        if (dsp56k_host_interface.icr & DSP56K_ICR_HF1) status |= 0x2;
                        if (dsp56k_host_interface.isr & DSP56K_ISR_HF2) status |= 0x4;
                        if (dsp56k_host_interface.isr & DSP56K_ISR_HF3) status |= 0x8;
-                       unlock_kernel();
+                       mutex_unlock(&dsp56k_mutex);
                        return put_user(status, &hf->status);
                }
                case DSP56K_HOST_CMD:
                        if (arg > 31 || arg < 0)
                                return -EINVAL;
-                       lock_kernel();
+                       mutex_lock(&dsp56k_mutex);
                        dsp56k_host_interface.cvr = (u_char)((arg & DSP56K_CVR_HV_MASK) |
                                                             DSP56K_CVR_HC);
-                       unlock_kernel();
+                       mutex_unlock(&dsp56k_mutex);
                        break;
                default:
                        return -EINVAL;
@@ -427,7 +428,7 @@ static int dsp56k_open(struct inode *inode, struct file *file)
        int dev = iminor(inode) & 0x0f;
        int ret = 0;
 
-       lock_kernel();
+       mutex_lock(&dsp56k_mutex);
        switch(dev)
        {
        case DSP56K_DEV_56001:
@@ -454,7 +455,7 @@ static int dsp56k_open(struct inode *inode, struct file *file)
                ret = -ENODEV;
        }
 out:
-       unlock_kernel();
+       mutex_unlock(&dsp56k_mutex);
        return ret;
 }
 
index e3859d4eaead6e67552cdc3d2f24412a8a31067b..8dd040a945d444ded631729d367e2d59f8e4014d 100644 (file)
@@ -57,7 +57,7 @@
 #include <linux/ioport.h>      /* for request_region */
 #include <linux/delay.h>       /* for loops_per_jiffy */
 #include <linux/sched.h>
-#include <linux/smp_lock.h>    /* cycle_kernel_lock() */
+#include <linux/mutex.h>
 #include <asm/io.h>            /* for inb_p, outb_p, inb, outb, etc. */
 #include <asm/uaccess.h>       /* for get_user, etc. */
 #include <linux/wait.h>                /* for wait_queue */
@@ -73,6 +73,7 @@
 #define TRACE_RET ((void) 0)
 #endif                         /* TRACING */
 
+static DEFINE_MUTEX(dtlk_mutex);
 static void dtlk_timer_tick(unsigned long data);
 
 static int dtlk_major;
@@ -275,9 +276,9 @@ static long dtlk_ioctl(struct file *file,
        switch (cmd) {
 
        case DTLK_INTERROGATE:
-               lock_kernel();
+               mutex_lock(&dtlk_mutex);
                sp = dtlk_interrogate();
-               unlock_kernel();
+               mutex_unlock(&dtlk_mutex);
                if (copy_to_user(argp, sp, sizeof(struct dtlk_settings)))
                        return -EINVAL;
                return 0;
@@ -296,7 +297,6 @@ static int dtlk_open(struct inode *inode, struct file *file)
 {
        TRACE_TEXT("(dtlk_open");
 
-       cycle_kernel_lock();
        nonseekable_open(inode, file);
        switch (iminor(inode)) {
        case DTLK_MINOR:
index 82b5a88a82d77d5351d1b1d413c4b123a382544f..0e941b57482e7d1021d409320e9184148888412b 100644 (file)
@@ -19,7 +19,7 @@
 #include <linux/miscdevice.h>
 #include <linux/fcntl.h>
 #include <linux/init.h>
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 #include <asm/uaccess.h>
 #include <asm/nvram.h>
 #ifdef CONFIG_PPC_PMAC
@@ -28,6 +28,7 @@
 
 #define NVRAM_SIZE     8192
 
+static DEFINE_MUTEX(nvram_mutex);
 static ssize_t nvram_len;
 
 static loff_t nvram_llseek(struct file *file, loff_t offset, int origin)
@@ -120,9 +121,9 @@ static long nvram_unlocked_ioctl(struct file *file, unsigned int cmd, unsigned l
 {
        int ret;
 
-       lock_kernel();
+       mutex_lock(&nvram_mutex);
        ret = nvram_ioctl(file, cmd, arg);
-       unlock_kernel();
+       mutex_unlock(&nvram_mutex);
 
        return ret;
 }
index b6c2cc167c11fd39ce485f72281c79fa4e98bdd7..2aa69f97360d01ff894e76ce017b30ec9dcba44e 100644 (file)
@@ -52,7 +52,7 @@
 #include <linux/init.h>
 #include <linux/poll.h>
 #include <linux/proc_fs.h>
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 #include <linux/workqueue.h>
 
 #include <asm/uaccess.h>
@@ -66,6 +66,7 @@
  *     ioctls.
  */
 
+static DEFINE_MUTEX(gen_rtc_mutex);
 static DECLARE_WAIT_QUEUE_HEAD(gen_rtc_wait);
 
 /*
@@ -337,9 +338,9 @@ static long gen_rtc_unlocked_ioctl(struct file *file, unsigned int cmd,
 {
        int ret;
 
-       lock_kernel();
+       mutex_lock(&gen_rtc_mutex);
        ret = gen_rtc_ioctl(file, cmd, arg);
-       unlock_kernel();
+       mutex_unlock(&gen_rtc_mutex);
 
        return ret;
 }
@@ -352,16 +353,16 @@ static long gen_rtc_unlocked_ioctl(struct file *file, unsigned int cmd,
 
 static int gen_rtc_open(struct inode *inode, struct file *file)
 {
-       lock_kernel();
+       mutex_lock(&gen_rtc_mutex);
        if (gen_rtc_status & RTC_IS_OPEN) {
-               unlock_kernel();
+               mutex_unlock(&gen_rtc_mutex);
                return -EBUSY;
        }
 
        gen_rtc_status |= RTC_IS_OPEN;
        gen_rtc_irq_data = 0;
        irq_active = 0;
-       unlock_kernel();
+       mutex_unlock(&gen_rtc_mutex);
 
        return 0;
 }
index 4cd8b227c11f378336d46601318eae5471f6ec66..3bc0eef88717136342564976a8e18aa534732284 100644 (file)
@@ -23,7 +23,7 @@
 #include <linux/seq_file.h>
 #include <linux/dmi.h>
 #include <linux/capability.h>
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 #include <asm/uaccess.h>
 #include <asm/io.h>
 
@@ -56,6 +56,7 @@
 
 #define I8K_TEMPERATURE_BUG    1
 
+static DEFINE_MUTEX(i8k_mutex);
 static char bios_version[4];
 
 MODULE_AUTHOR("Massimo Dal Zotto (dz@debian.org)");
@@ -399,9 +400,9 @@ static long i8k_ioctl(struct file *fp, unsigned int cmd, unsigned long arg)
 {
        long ret;
 
-       lock_kernel();
+       mutex_lock(&i8k_mutex);
        ret = i8k_ioctl_unlocked(fp, cmd, arg);
-       unlock_kernel();
+       mutex_unlock(&i8k_mutex);
 
        return ret;
 }
index d4b71e8d0d23a13648be2e55f60f606f55b99edd..dfbdf49d1e8047b3d27ab2e80566f0fa5e64ebb7 100644 (file)
@@ -98,7 +98,7 @@
 #include <linux/major.h>
 #include <linux/wait.h>
 #include <linux/device.h>
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 #include <linux/firmware.h>
 #include <linux/platform_device.h>
 
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
 
+static DEFINE_MUTEX(ip2_mutex);
 static const struct file_operations ip2mem_proc_fops;
 static const struct file_operations ip2_proc_fops;
 
@@ -2897,7 +2898,7 @@ ip2_ipl_ioctl (struct file *pFile, UINT cmd, ULONG arg )
        printk (KERN_DEBUG "IP2IPL: ioctl cmd %d, arg %ld\n", cmd, arg );
 #endif
 
-       lock_kernel();
+       mutex_lock(&ip2_mutex);
 
        switch ( iplminor ) {
        case 0:     // IPL device
@@ -2961,7 +2962,7 @@ ip2_ipl_ioctl (struct file *pFile, UINT cmd, ULONG arg )
                rc = -ENODEV;
                break;
        }
-       unlock_kernel();
+       mutex_unlock(&ip2_mutex);
        return rc;
 }
 
@@ -2982,7 +2983,6 @@ ip2_ipl_open( struct inode *pInode, struct file *pFile )
 #ifdef IP2DEBUG_IPL
        printk (KERN_DEBUG "IP2IPL: open\n" );
 #endif
-       cycle_kernel_lock();
        return 0;
 }
 
index 938a3a2738866c71e42b7d8112b29966cdf3417c..598d278db0588137138cdebfa533ce508114c2ba 100644 (file)
 #include <linux/device.h>
 #include <linux/wait.h>
 #include <linux/jiffies.h>
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 #include <linux/compat.h>
 
 #include <linux/parport.h>
 /* if you have more than 8 printers, remember to increase LP_NO */
 #define LP_NO 8
 
+static DEFINE_MUTEX(lp_mutex);
 static struct lp_struct lp_table[LP_NO];
 
 static unsigned int lp_count = 0;
@@ -493,7 +494,7 @@ static int lp_open(struct inode * inode, struct file * file)
        unsigned int minor = iminor(inode);
        int ret = 0;
 
-       lock_kernel();
+       mutex_lock(&lp_mutex);
        if (minor >= LP_NO) {
                ret = -ENXIO;
                goto out;
@@ -554,7 +555,7 @@ static int lp_open(struct inode * inode, struct file * file)
        lp_release_parport (&lp_table[minor]);
        lp_table[minor].current_mode = IEEE1284_MODE_COMPAT;
 out:
-       unlock_kernel();
+       mutex_unlock(&lp_mutex);
        return ret;
 }
 
@@ -680,7 +681,7 @@ static long lp_ioctl(struct file *file, unsigned int cmd,
        int ret;
 
        minor = iminor(file->f_path.dentry->d_inode);
-       lock_kernel();
+       mutex_lock(&lp_mutex);
        switch (cmd) {
        case LPSETTIMEOUT:
                if (copy_from_user(&par_timeout, (void __user *)arg,
@@ -694,7 +695,7 @@ static long lp_ioctl(struct file *file, unsigned int cmd,
                ret = lp_do_ioctl(minor, cmd, arg, (void __user *)arg);
                break;
        }
-       unlock_kernel();
+       mutex_unlock(&lp_mutex);
 
        return ret;
 }
@@ -709,7 +710,7 @@ static long lp_compat_ioctl(struct file *file, unsigned int cmd,
        int ret;
 
        minor = iminor(file->f_path.dentry->d_inode);
-       lock_kernel();
+       mutex_lock(&lp_mutex);
        switch (cmd) {
        case LPSETTIMEOUT:
                tc = compat_ptr(arg);
@@ -730,7 +731,7 @@ static long lp_compat_ioctl(struct file *file, unsigned int cmd,
                ret = lp_do_ioctl(minor, cmd, arg, compat_ptr(arg));
                break;
        }
-       unlock_kernel();
+       mutex_unlock(&lp_mutex);
 
        return ret;
 }
index 83bef4efe37636869f418756462516d00a4f3ccd..1aeaaba680d22e1e943995efeff6b0ed671c5fe8 100644 (file)
@@ -25,7 +25,6 @@
 #include <linux/mm.h>
 #include <linux/uio.h>
 #include <linux/mutex.h>
-#include <linux/smp_lock.h>
 #include <linux/slab.h>
 #include <asm/io.h>
 #include <asm/uaccess.h>
@@ -42,6 +41,7 @@
 #else
 #define DBG(fmt...)
 #endif
+static DEFINE_MUTEX(mbcs_mutex);
 static int mbcs_major;
 
 static LIST_HEAD(soft_list);
@@ -385,19 +385,19 @@ static int mbcs_open(struct inode *ip, struct file *fp)
        struct mbcs_soft *soft;
        int minor;
 
-       lock_kernel();
+       mutex_lock(&mbcs_mutex);
        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;
-                       unlock_kernel();
+                       mutex_unlock(&mbcs_mutex);
                        return 0;
                }
        }
 
-       unlock_kernel();
+       mutex_unlock(&mbcs_mutex);
        return -ENODEV;
 }
 
index ea7c99fa978f9e8d2877ba8a783daeef5214cc5c..fe4697844ec10bebe9132fb1c121aa3b2653db5c 100644 (file)
@@ -32,7 +32,7 @@
 #include <linux/interrupt.h>
 #include <linux/time.h>
 #include <linux/math64.h>
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 #include <linux/slab.h>
 
 #include <asm/uaccess.h>
@@ -59,6 +59,7 @@ extern unsigned long sn_rtc_cycles_per_second;
 
 #define rtc_time()              (*RTC_COUNTER_ADDR)
 
+static DEFINE_MUTEX(mmtimer_mutex);
 static long mmtimer_ioctl(struct file *file, unsigned int cmd,
                                                unsigned long arg);
 static int mmtimer_mmap(struct file *file, struct vm_area_struct *vma);
@@ -371,7 +372,7 @@ static long mmtimer_ioctl(struct file *file, unsigned int cmd,
 {
        int ret = 0;
 
-       lock_kernel();
+       mutex_lock(&mmtimer_mutex);
 
        switch (cmd) {
        case MMTIMER_GETOFFSET: /* offset of the counter */
@@ -414,7 +415,7 @@ static long mmtimer_ioctl(struct file *file, unsigned int cmd,
                ret = -ENOTTY;
                break;
        }
-       unlock_kernel();
+       mutex_unlock(&mmtimer_mutex);
        return ret;
 }
 
index a4ec50c950722410e9cd6dc99b72b76edf11fb2b..e5df26b56d593cabbf5f7fac6a03b0be4ecf8add 100644 (file)
@@ -56,7 +56,7 @@
 #include <linux/serial.h>
 #include <linux/sched.h>
 #include <linux/spinlock.h>
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 #include <linux/delay.h>
 #include <linux/serial_8250.h>
 #include "smapi.h"
@@ -73,6 +73,7 @@ MODULE_LICENSE("GPL");
 * checks are made against other devices (ie. superio) for conflicts.
 * We'll depend on users using the tpctl utility to do that for now
 */
+static DEFINE_MUTEX(mwave_mutex);
 int mwave_debug = 0;
 int mwave_3780i_irq = 0;
 int mwave_3780i_io = 0;
@@ -101,7 +102,6 @@ static int mwave_open(struct inode *inode, struct file *file)
        PRINTK_2(TRACE_MWAVE,
                "mwavedd::mwave_open, exit return retval %x\n", retval);
 
-       cycle_kernel_lock();
        return retval;
 }
 
@@ -136,9 +136,9 @@ static long mwave_ioctl(struct file *file, unsigned int iocmd,
                        PRINTK_1(TRACE_MWAVE,
                                "mwavedd::mwave_ioctl, IOCTL_MW_RESET"
                                " calling tp3780I_ResetDSP\n");
-                       lock_kernel();
+                       mutex_lock(&mwave_mutex);
                        retval = tp3780I_ResetDSP(&pDrvData->rBDData);
-                       unlock_kernel();
+                       mutex_unlock(&mwave_mutex);
                        PRINTK_2(TRACE_MWAVE,
                                "mwavedd::mwave_ioctl, IOCTL_MW_RESET"
                                " retval %x from tp3780I_ResetDSP\n",
@@ -149,9 +149,9 @@ static long mwave_ioctl(struct file *file, unsigned int iocmd,
                        PRINTK_1(TRACE_MWAVE,
                                "mwavedd::mwave_ioctl, IOCTL_MW_RUN"
                                " calling tp3780I_StartDSP\n");
-                       lock_kernel();
+                       mutex_lock(&mwave_mutex);
                        retval = tp3780I_StartDSP(&pDrvData->rBDData);
-                       unlock_kernel();
+                       mutex_unlock(&mwave_mutex);
                        PRINTK_2(TRACE_MWAVE,
                                "mwavedd::mwave_ioctl, IOCTL_MW_RUN"
                                " retval %x from tp3780I_StartDSP\n",
@@ -165,10 +165,10 @@ static long mwave_ioctl(struct file *file, unsigned int iocmd,
                                "mwavedd::mwave_ioctl,"
                                " IOCTL_MW_DSP_ABILITIES calling"
                                " tp3780I_QueryAbilities\n");
-                       lock_kernel();
+                       mutex_lock(&mwave_mutex);
                        retval = tp3780I_QueryAbilities(&pDrvData->rBDData,
                                        &rAbilities);
-                       unlock_kernel();
+                       mutex_unlock(&mwave_mutex);
                        PRINTK_2(TRACE_MWAVE,
                                "mwavedd::mwave_ioctl, IOCTL_MW_DSP_ABILITIES"
                                " retval %x from tp3780I_QueryAbilities\n",
@@ -199,13 +199,13 @@ static long mwave_ioctl(struct file *file, unsigned int iocmd,
                                "mwavedd::mwave_ioctl IOCTL_MW_READ_DATA,"
                                " size %lx, ioarg %lx pusBuffer %p\n",
                                rReadData.ulDataLength, ioarg, pusBuffer);
-                       lock_kernel();
+                       mutex_lock(&mwave_mutex);
                        retval = tp3780I_ReadWriteDspDStore(&pDrvData->rBDData,
                                        iocmd,
                                        pusBuffer,
                                        rReadData.ulDataLength,
                                        rReadData.usDspAddress);
-                       unlock_kernel();
+                       mutex_unlock(&mwave_mutex);
                }
                        break;
        
@@ -223,12 +223,12 @@ static long mwave_ioctl(struct file *file, unsigned int iocmd,
                                " size %lx, ioarg %lx pusBuffer %p\n",
                                rReadData.ulDataLength / 2, ioarg,
                                pusBuffer);
-                       lock_kernel();
+                       mutex_lock(&mwave_mutex);
                        retval = tp3780I_ReadWriteDspDStore(&pDrvData->rBDData,
                                iocmd, pusBuffer,
                                rReadData.ulDataLength / 2,
                                rReadData.usDspAddress);
-                       unlock_kernel();
+                       mutex_unlock(&mwave_mutex);
                }
                        break;
        
@@ -246,12 +246,12 @@ static long mwave_ioctl(struct file *file, unsigned int iocmd,
                                " size %lx, ioarg %lx pusBuffer %p\n",
                                rWriteData.ulDataLength, ioarg,
                                pusBuffer);
-                       lock_kernel();
+                       mutex_lock(&mwave_mutex);
                        retval = tp3780I_ReadWriteDspDStore(&pDrvData->rBDData,
                                        iocmd, pusBuffer,
                                        rWriteData.ulDataLength,
                                        rWriteData.usDspAddress);
-                       unlock_kernel();
+                       mutex_unlock(&mwave_mutex);
                }
                        break;
        
@@ -269,12 +269,12 @@ static long mwave_ioctl(struct file *file, unsigned int iocmd,
                                " size %lx, ioarg %lx pusBuffer %p\n",
                                rWriteData.ulDataLength, ioarg,
                                pusBuffer);
-                       lock_kernel();
+                       mutex_lock(&mwave_mutex);
                        retval = tp3780I_ReadWriteDspIStore(&pDrvData->rBDData,
                                        iocmd, pusBuffer,
                                        rWriteData.ulDataLength,
                                        rWriteData.usDspAddress);
-                       unlock_kernel();
+                       mutex_unlock(&mwave_mutex);
                }
                        break;
        
@@ -295,10 +295,10 @@ static long mwave_ioctl(struct file *file, unsigned int iocmd,
                                ipcnum,
                                pDrvData->IPCs[ipcnum].usIntCount);
 
-                       lock_kernel();
+                       mutex_lock(&mwave_mutex);
                        pDrvData->IPCs[ipcnum].bIsHere = FALSE;
                        pDrvData->IPCs[ipcnum].bIsEnabled = TRUE;
-                       unlock_kernel();
+                       mutex_unlock(&mwave_mutex);
        
                        PRINTK_2(TRACE_MWAVE,
                                "mwavedd::mwave_ioctl IOCTL_MW_REGISTER_IPC"
@@ -323,7 +323,7 @@ static long mwave_ioctl(struct file *file, unsigned int iocmd,
                                ipcnum,
                                pDrvData->IPCs[ipcnum].usIntCount);
        
-                       lock_kernel();
+                       mutex_lock(&mwave_mutex);
                        if (pDrvData->IPCs[ipcnum].bIsEnabled == TRUE) {
                                DECLARE_WAITQUEUE(wait, current);
 
@@ -364,7 +364,7 @@ static long mwave_ioctl(struct file *file, unsigned int iocmd,
                                        " processing\n",
                                        ipcnum);
                        }
-                       unlock_kernel();
+                       mutex_unlock(&mwave_mutex);
                }
                        break;
        
@@ -383,14 +383,14 @@ static long mwave_ioctl(struct file *file, unsigned int iocmd,
                                                ipcnum);
                                return -EINVAL;
                        }
-                       lock_kernel();
+                       mutex_lock(&mwave_mutex);
                        if (pDrvData->IPCs[ipcnum].bIsEnabled == TRUE) {
                                pDrvData->IPCs[ipcnum].bIsEnabled = FALSE;
                                if (pDrvData->IPCs[ipcnum].bIsHere == TRUE) {
                                        wake_up_interruptible(&pDrvData->IPCs[ipcnum].ipc_wait_queue);
                                }
                        }
-                       unlock_kernel();
+                       mutex_unlock(&mwave_mutex);
                }
                        break;
        
index 66d2917b003f6361080e063323d88dca49fd623f..166f1e7aaa7ee844c4a36b8950cb9f343e0f5c82 100644 (file)
 #include <linux/spinlock.h>
 #include <linux/io.h>
 #include <linux/uaccess.h>
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 
 #include <asm/system.h>
 
+static DEFINE_MUTEX(nvram_mutex);
 static DEFINE_SPINLOCK(nvram_state_lock);
 static int nvram_open_cnt;     /* #times opened */
 static int nvram_open_mode;    /* special open modes */
@@ -308,7 +309,7 @@ static long nvram_ioctl(struct file *file, unsigned int cmd,
                if (!capable(CAP_SYS_ADMIN))
                        return -EACCES;
 
-               lock_kernel();
+               mutex_lock(&nvram_mutex);
                spin_lock_irq(&rtc_lock);
 
                for (i = 0; i < NVRAM_BYTES; ++i)
@@ -316,7 +317,7 @@ static long nvram_ioctl(struct file *file, unsigned int cmd,
                __nvram_set_checksum();
 
                spin_unlock_irq(&rtc_lock);
-               unlock_kernel();
+               mutex_unlock(&nvram_mutex);
                return 0;
 
        case NVRAM_SETCKS:
@@ -325,11 +326,11 @@ static long nvram_ioctl(struct file *file, unsigned int cmd,
                if (!capable(CAP_SYS_ADMIN))
                        return -EACCES;
 
-               lock_kernel();
+               mutex_lock(&nvram_mutex);
                spin_lock_irq(&rtc_lock);
                __nvram_set_checksum();
                spin_unlock_irq(&rtc_lock);
-               unlock_kernel();
+               mutex_unlock(&nvram_mutex);
                return 0;
 
        default:
index 043a1c7b86beefb3438976f3512230b9571278c3..a12f52400dbc5ed6ef65885ff7dc80052ed49ad6 100644 (file)
@@ -25,7 +25,6 @@
 #include <linux/spinlock.h>
 #include <linux/rwsem.h>
 #include <linux/init.h>
-#include <linux/smp_lock.h>
 #include <linux/mutex.h>
 #include <linux/jiffies.h>
 
@@ -41,6 +40,7 @@
 
 #define        NWFLASH_VERSION "6.4"
 
+static DEFINE_MUTEX(flash_mutex);
 static void kick_open(void);
 static int get_flash_id(void);
 static int erase_block(int nBlock);
@@ -96,7 +96,7 @@ static int get_flash_id(void)
 
 static long flash_ioctl(struct file *filep, unsigned int cmd, unsigned long arg)
 {
-       lock_kernel();
+       mutex_lock(&flash_mutex);
        switch (cmd) {
        case CMD_WRITE_DISABLE:
                gbWriteBase64Enable = 0;
@@ -114,10 +114,10 @@ static long flash_ioctl(struct file *filep, unsigned int cmd, unsigned long arg)
        default:
                gbWriteBase64Enable = 0;
                gbWriteEnable = 0;
-               unlock_kernel();
+               mutex_unlock(&flash_mutex);
                return -EINVAL;
        }
-       unlock_kernel();
+       mutex_unlock(&flash_mutex);
        return 0;
 }
 
@@ -282,7 +282,7 @@ static loff_t flash_llseek(struct file *file, loff_t offset, int orig)
 {
        loff_t ret;
 
-       lock_kernel();
+       mutex_lock(&flash_mutex);
        if (flashdebug)
                printk(KERN_DEBUG "flash_llseek: offset=0x%X, orig=0x%X.\n",
                       (unsigned int) offset, orig);
@@ -317,7 +317,7 @@ static loff_t flash_llseek(struct file *file, loff_t offset, int orig)
        default:
                ret = -EINVAL;
        }
-       unlock_kernel();
+       mutex_unlock(&flash_mutex);
        return ret;
 }
 
index ec73d9f6d9ed92c9fa527718ff44871bd7d64669..7d091b68d247aa27429f0431963e2a0b744a2003 100644 (file)
@@ -30,7 +30,7 @@
 #include <linux/fs.h>
 #include <linux/delay.h>
 #include <linux/bitrev.h>
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 #include <linux/uaccess.h>
 #include <linux/io.h>
 
@@ -55,6 +55,7 @@
                           __func__ , ## args);         \
        } while (0)
 
+static DEFINE_MUTEX(cmm_mutex);
 static char *version = "cm4000_cs.c v2.4.0gm6 - All bugs added by Harald Welte";
 
 #define        T_1SEC          (HZ)
@@ -1418,7 +1419,7 @@ static long cmm_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
               iminor(inode), ioctl_names[_IOC_NR(cmd)]);
 #endif
 
-       lock_kernel();
+       mutex_lock(&cmm_mutex);
        rc = -ENODEV;
        link = dev_table[iminor(inode)];
        if (!pcmcia_dev_present(link)) {
@@ -1626,7 +1627,7 @@ static long cmm_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
                rc = -ENOTTY;
        }
 out:
-       unlock_kernel();
+       mutex_unlock(&cmm_mutex);
        return rc;
 }
 
@@ -1640,7 +1641,7 @@ static int cmm_open(struct inode *inode, struct file *filp)
        if (minor >= CM4000_MAX_DEV)
                return -ENODEV;
 
-       lock_kernel();
+       mutex_lock(&cmm_mutex);
        link = dev_table[minor];
        if (link == NULL || !pcmcia_dev_present(link)) {
                ret = -ENODEV;
@@ -1685,7 +1686,7 @@ static int cmm_open(struct inode *inode, struct file *filp)
        DEBUGP(2, dev, "<- cmm_open\n");
        ret = nonseekable_open(inode, filp);
 out:
-       unlock_kernel();
+       mutex_unlock(&cmm_mutex);
        return ret;
 }
 
index 815cde1d0570e86d4ba0e8970ef60248997a3302..04c0a895740ebb9ed09ff03400360cf3bcb7e194 100644 (file)
@@ -24,7 +24,7 @@
 #include <linux/fs.h>
 #include <linux/delay.h>
 #include <linux/poll.h>
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 #include <linux/wait.h>
 #include <asm/uaccess.h>
 #include <asm/io.h>
@@ -49,6 +49,7 @@
                           __func__ , ## args);         \
        } while (0)
 
+static DEFINE_MUTEX(cm4040_mutex);
 static char *version =
 "OMNIKEY CardMan 4040 v1.1.0gm5 - All bugs added by Harald Welte";
 
@@ -444,7 +445,7 @@ static int cm4040_open(struct inode *inode, struct file *filp)
        if (minor >= CM_MAX_DEV)
                return -ENODEV;
 
-       lock_kernel();
+       mutex_lock(&cm4040_mutex);
        link = dev_table[minor];
        if (link == NULL || !pcmcia_dev_present(link)) {
                ret = -ENODEV;
@@ -473,7 +474,7 @@ static int cm4040_open(struct inode *inode, struct file *filp)
        DEBUGP(2, dev, "<- cm4040_open (successfully)\n");
        ret = nonseekable_open(inode, filp);
 out:
-       unlock_kernel();
+       mutex_unlock(&cm4040_mutex);
        return ret;
 }
 
index 02abfddce45a192ceccae3d71f3008ba7d329767..723152d978a9482ac3c1e48c2724894a9d6cceb4 100644 (file)
@@ -67,7 +67,7 @@
 #include <linux/slab.h>
 #include <linux/major.h>
 #include <linux/ppdev.h>
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 #include <linux/uaccess.h>
 
 #define PP_VERSION "ppdev: user-space parallel port driver"
@@ -97,6 +97,7 @@ struct pp_struct {
 /* ROUND_UP macro from fs/select.c */
 #define ROUND_UP(x,y) (((x)+(y)-1)/(y))
 
+static DEFINE_MUTEX(pp_do_mutex);
 static inline void pp_enable_irq (struct pp_struct *pp)
 {
        struct parport *port = pp->pdev->port;
@@ -630,9 +631,9 @@ static int pp_do_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 static long pp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 {
        long ret;
-       lock_kernel();
+       mutex_lock(&pp_do_mutex);
        ret = pp_do_ioctl(file, cmd, arg);
-       unlock_kernel();
+       mutex_unlock(&pp_do_mutex);
        return ret;
 }
 
@@ -641,7 +642,6 @@ static int pp_open (struct inode * inode, struct file * file)
        unsigned int minor = iminor(inode);
        struct pp_struct *pp;
 
-       cycle_kernel_lock();
        if (minor >= PARPORT_MAX)
                return -ENXIO;
 
index d58c2eb07f07aaad25a568095ccaab7d3e53f686..e06a5977fdb2933db756c8af5ff8c652d598748d 100644 (file)
@@ -44,7 +44,7 @@
 #include <linux/delay.h>
 #include <linux/pci.h>
 #include <linux/slab.h>
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 #include <linux/miscdevice.h>
 #include <linux/init.h>
 
@@ -122,6 +122,7 @@ more than 512 ports.... */
 
 
 /* These constants are derived from SCO Source */
+static DEFINE_MUTEX(rio_fw_mutex);
 static struct Conf
  RIOConf = {
        /* locator */ "RIO Config here",
@@ -566,9 +567,9 @@ static long rio_fw_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
        func_enter();
 
        /* The "dev" argument isn't used. */
-       lock_kernel();
+       mutex_lock(&rio_fw_mutex);
        rc = riocontrol(p, 0, cmd, arg, capable(CAP_SYS_ADMIN));
-       unlock_kernel();
+       mutex_unlock(&rio_fw_mutex);
 
        func_exit();
        return rc;
index 32b74de18f5face7e590ac25fc955aef373c6247..208e25731dfe386daa7b858f436d81aeb26ee712 100644 (file)
@@ -21,7 +21,7 @@
 #include <linux/poll.h>
 #include <linux/module.h>
 #include <linux/slab.h>
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 #include <asm/sn/io.h>
 #include <asm/sn/sn_sal.h>
 #include <asm/sn/module.h>
@@ -34,6 +34,7 @@
 #define SCDRV_BUFSZ    2048
 #define SCDRV_TIMEOUT  1000
 
+static DEFINE_MUTEX(scdrv_mutex);
 static irqreturn_t
 scdrv_interrupt(int irq, void *subch_data)
 {
@@ -105,7 +106,7 @@ scdrv_open(struct inode *inode, struct file *file)
        file->private_data = sd;
 
        /* hook this subchannel up to the system controller interrupt */
-       lock_kernel();
+       mutex_lock(&scdrv_mutex);
        rv = request_irq(SGI_UART_VECTOR, scdrv_interrupt,
                         IRQF_SHARED | IRQF_DISABLED,
                         SYSCTL_BASENAME, sd);
@@ -113,10 +114,10 @@ scdrv_open(struct inode *inode, struct file *file)
                ia64_sn_irtr_close(sd->sd_nasid, sd->sd_subch);
                kfree(sd);
                printk("%s: irq request failed (%d)\n", __func__, rv);
-               unlock_kernel();
+               mutex_unlock(&scdrv_mutex);
                return -EBUSY;
        }
-       unlock_kernel();
+       mutex_unlock(&scdrv_mutex);
        return 0;
 }
 
index f8bc79f6de34875cba7ac1e74e9110ff3c236d53..f8f09ab0b170403c180913926c5ec2977b264484 100644 (file)
@@ -68,7 +68,7 @@
 #include <linux/stat.h>
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 #include <linux/toshiba.h>
 
 #define TOSH_MINOR_DEV 181
@@ -78,6 +78,7 @@ MODULE_AUTHOR("Jonathan Buzzard <jonathan@buzzard.org.uk>");
 MODULE_DESCRIPTION("Toshiba laptop SMM driver");
 MODULE_SUPPORTED_DEVICE("toshiba");
 
+static DEFINE_MUTEX(tosh_mutex);
 static int tosh_fn;
 module_param_named(fn, tosh_fn, int, 0);
 MODULE_PARM_DESC(fn, "User specified Fn key detection port");
@@ -274,16 +275,16 @@ static long tosh_ioctl(struct file *fp, unsigned int cmd, unsigned long arg)
                                return -EINVAL;
 
                        /* do we need to emulate the fan ? */
-                       lock_kernel();
+                       mutex_lock(&tosh_mutex);
                        if (tosh_fan==1) {
                                if (((ax==0xf300) || (ax==0xf400)) && (bx==0x0004)) {
                                        err = tosh_emulate_fan(&regs);
-                                       unlock_kernel();
+                                       mutex_unlock(&tosh_mutex);
                                        break;
                                }
                        }
                        err = tosh_smm(&regs);
-                       unlock_kernel();
+                       mutex_unlock(&tosh_mutex);
                        break;
                default:
                        return -EINVAL;
index 42f7fa442ff80653c3cbabf9c80bd1b2e05de28d..6f954a808b65bb3375624c1f0d1ed1dcc3d0635f 100644 (file)
@@ -46,7 +46,7 @@
 #include <linux/completion.h>
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 #include <linux/slab.h>
 
 #include <asm/uaccess.h>
@@ -64,6 +64,7 @@
 #define VIOTAPE_KERN_WARN      KERN_WARNING "viotape: "
 #define VIOTAPE_KERN_INFO      KERN_INFO "viotape: "
 
+static DEFINE_MUTEX(proc_viotape_mutex);
 static int viotape_numdev;
 
 /*
@@ -684,9 +685,9 @@ static long viotap_unlocked_ioctl(struct file *file,
 {
        long rc;
 
-       lock_kernel();
+       mutex_lock(&proc_viotape_mutex);
        rc = viotap_ioctl(file->f_path.dentry->d_inode, file, cmd, arg);
-       unlock_kernel();
+       mutex_unlock(&proc_viotape_mutex);
        return rc;
 }
 
@@ -700,7 +701,7 @@ static int viotap_open(struct inode *inode, struct file *file)
        if (op == NULL)
                return -ENOMEM;
 
-       lock_kernel();
+       mutex_lock(&proc_viotape_mutex);
        get_dev_info(file->f_path.dentry->d_inode, &devi);
 
        /* Note: We currently only support one mode! */
@@ -731,7 +732,7 @@ static int viotap_open(struct inode *inode, struct file *file)
 
 free_op:
        free_op_struct(op);
-       unlock_kernel();
+       mutex_unlock(&proc_viotape_mutex);
        return ret;
 }
 
index b663d573aad99ed5257f9ab324d566309e70ac37..d985204d76fedce821d2b8f54e35d6cecf424649 100644 (file)
@@ -81,7 +81,6 @@
 #include <linux/poll.h>
 #include <linux/proc_fs.h>
 #include <linux/mutex.h>
-#include <linux/smp_lock.h>
 #include <linux/sysctl.h>
 #include <linux/fs.h>
 #include <linux/cdev.h>
 #define HWICAP_DEVICES 1
 
 /* An array, which is set to true when the device is registered. */
+static DEFINE_MUTEX(hwicap_mutex);
 static bool probed_devices[HWICAP_DEVICES];
 static struct mutex icap_sem;
 
@@ -502,7 +502,7 @@ static int hwicap_open(struct inode *inode, struct file *file)
        struct hwicap_drvdata *drvdata;
        int status;
 
-       lock_kernel();
+       mutex_lock(&hwicap_mutex);
        drvdata = container_of(inode->i_cdev, struct hwicap_drvdata, cdev);
 
        status = mutex_lock_interruptible(&drvdata->sem);
@@ -528,7 +528,7 @@ static int hwicap_open(struct inode *inode, struct file *file)
  error:
        mutex_unlock(&drvdata->sem);
  out:
-       unlock_kernel();
+       mutex_unlock(&hwicap_mutex);
        return status;
 }
 
index b7ca2a9676cf8b62aab21fa7a04d205457828c6e..d4d4ca65d3716f61c21008ff1d390e54aa256e86 100644 (file)
@@ -38,7 +38,6 @@
 #include <linux/i2c.h>
 #include <linux/hwmon.h>
 #include <linux/hwmon-sysfs.h>
-#include <linux/smp_lock.h>
 #include <linux/err.h>
 #include <linux/mutex.h>
 #include <linux/sysfs.h>
@@ -50,6 +49,7 @@
 #include <linux/kref.h>
 
 /* Addresses to scan */
+static DEFINE_MUTEX(watchdog_mutex);
 static const unsigned short normal_i2c[] = { 0x73, I2C_CLIENT_END };
 
 /* Insmod parameters */
@@ -858,7 +858,7 @@ static long watchdog_ioctl(struct file *filp, unsigned int cmd, unsigned long ar
        int i, ret = 0;
        struct fschmd_data *data = filp->private_data;
 
-       lock_kernel();
+       mutex_lock(&watchdog_mutex);
        switch (cmd) {
        case WDIOC_GETSUPPORT:
                ident.firmware_version = data->revision;
@@ -915,7 +915,7 @@ static long watchdog_ioctl(struct file *filp, unsigned int cmd, unsigned long ar
        default:
                ret = -ENOTTY;
        }
-       unlock_kernel();
+       mutex_unlock(&watchdog_mutex);
        return ret;
 }
 
index 697202e278917db50ca07c84aa92feb503e1e109..8e540ada47d27aaf8f78c6ee5b0c513407d80d1a 100644 (file)
@@ -35,7 +35,6 @@
 #include <linux/slab.h>
 #include <linux/i2c.h>
 #include <linux/hwmon.h>
-#include <linux/smp_lock.h>
 #include <linux/hwmon-vid.h>
 #include <linux/hwmon-sysfs.h>
 #include <linux/err.h>
@@ -52,6 +51,7 @@
 #define WATCHDOG_TIMEOUT 2     /* 2 minute default timeout */
 
 /* Addresses to scan */
+static DEFINE_MUTEX(watchdog_mutex);
 static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f,
                                                I2C_CLIENT_END };
 
@@ -1333,7 +1333,7 @@ static long watchdog_ioctl(struct file *filp, unsigned int cmd,
        int val, ret = 0;
        struct w83793_data *data = filp->private_data;
 
-       lock_kernel();
+       mutex_lock(&watchdog_mutex);
        switch (cmd) {
        case WDIOC_GETSUPPORT:
                if (!nowayout)
@@ -1387,7 +1387,7 @@ static long watchdog_ioctl(struct file *filp, unsigned int cmd,
        default:
                ret = -ENOTTY;
        }
-       unlock_kernel();
+       mutex_unlock(&watchdog_mutex);
        return ret;
 }
 
index c19066479057ff3567d7168c38922e0fd0b84da3..07337061b2eb941d7d005c3455a60eeb49c0c7db 100644 (file)
@@ -43,7 +43,7 @@
 #include <linux/proc_fs.h>
 #include <linux/poll.h>
 #include <linux/rtc.h>
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 #include <linux/semaphore.h>
 
 MODULE_AUTHOR("Brian S. Julin <bri@calyx.com>");
@@ -52,6 +52,7 @@ MODULE_LICENSE("Dual BSD/GPL");
 
 #define RTC_VERSION "1.10d"
 
+static DEFINE_MUTEX(hp_sdc_rtc_mutex);
 static unsigned long epoch = 2000;
 
 static struct semaphore i8042tregs;
@@ -665,9 +666,9 @@ static long hp_sdc_rtc_unlocked_ioctl(struct file *file,
 {
        int ret;
 
-       lock_kernel();
+       mutex_lock(&hp_sdc_rtc_mutex);
        ret = hp_sdc_rtc_ioctl(file, cmd, arg);
-       unlock_kernel();
+       mutex_unlock(&hp_sdc_rtc_mutex);
 
        return ret;
 }
index 75ee0d3f6f457707d79cbf5f5d021469710eb06d..3712e5077e257ff565b2b973f44eb311ad5251eb 100644 (file)
@@ -24,7 +24,7 @@
 #include <linux/slab.h>
 #include <linux/phantom.h>
 #include <linux/sched.h>
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 
 #include <asm/atomic.h>
 #include <asm/io.h>
@@ -38,6 +38,7 @@
 #define PHB_RUNNING            1
 #define PHB_NOT_OH             2
 
+static DEFINE_MUTEX(phantom_mutex);
 static struct class *phantom_class;
 static int phantom_major;
 
@@ -215,17 +216,17 @@ static int phantom_open(struct inode *inode, struct file *file)
        struct phantom_device *dev = container_of(inode->i_cdev,
                        struct phantom_device, cdev);
 
-       lock_kernel();
+       mutex_lock(&phantom_mutex);
        nonseekable_open(inode, file);
 
        if (mutex_lock_interruptible(&dev->open_lock)) {
-               unlock_kernel();
+               mutex_unlock(&phantom_mutex);
                return -ERESTARTSYS;
        }
 
        if (dev->opened) {
                mutex_unlock(&dev->open_lock);
-               unlock_kernel();
+               mutex_unlock(&phantom_mutex);
                return -EINVAL;
        }
 
@@ -236,7 +237,7 @@ static int phantom_open(struct inode *inode, struct file *file)
        atomic_set(&dev->counter, 0);
        dev->opened++;
        mutex_unlock(&dev->open_lock);
-       unlock_kernel();
+       mutex_unlock(&phantom_mutex);
        return 0;
 }
 
index 56215322930ad143c5d0d3adba42823d70f77c12..4cb30447a4860cf684155f18c79faad88f3989c6 100644 (file)
 #include <linux/workqueue.h>
 #include <linux/pci.h>
 #include <linux/pci_hotplug.h>
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 #include <linux/debugfs.h>
 #include "cpqphp.h"
 
+static DEFINE_MUTEX(cpqphp_mutex);
 static int show_ctrl (struct controller *ctrl, char *buf)
 {
        char *out = buf;
@@ -147,7 +148,7 @@ static int open(struct inode *inode, struct file *file)
        struct ctrl_dbg *dbg;
        int retval = -ENOMEM;
 
-       lock_kernel();
+       mutex_lock(&cpqphp_mutex);
        dbg = kmalloc(sizeof(*dbg), GFP_KERNEL);
        if (!dbg)
                goto exit;
@@ -160,7 +161,7 @@ static int open(struct inode *inode, struct file *file)
        file->private_data = dbg;
        retval = 0;
 exit:
-       unlock_kernel();
+       mutex_unlock(&cpqphp_mutex);
        return retval;
 }
 
@@ -169,7 +170,7 @@ static loff_t lseek(struct file *file, loff_t off, int whence)
        struct ctrl_dbg *dbg;
        loff_t new = -1;
 
-       lock_kernel();
+       mutex_lock(&cpqphp_mutex);
        dbg = file->private_data;
 
        switch (whence) {
@@ -181,10 +182,10 @@ static loff_t lseek(struct file *file, loff_t off, int whence)
                break;
        }
        if (new < 0 || new > dbg->size) {
-               unlock_kernel();
+               mutex_unlock(&cpqphp_mutex);
                return -EINVAL;
        }
-       unlock_kernel();
+       mutex_unlock(&cpqphp_mutex);
        return (file->f_pos = new);
 }
 
index d60557cae8ef4fdadadb10b343125f174cb7508d..512dca16a42c4446045b8acfbde6a1daa5dc4ea2 100644 (file)
@@ -20,7 +20,7 @@
 #include <linux/module.h>
 #include <linux/rtc.h>
 #include <linux/slab.h>
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 #include <linux/string.h>
 #ifdef CONFIG_RTC_DRV_M41T80_WDT
 #include <linux/fs.h>
@@ -68,6 +68,7 @@
 
 #define DRV_VERSION "0.05"
 
+static DEFINE_MUTEX(m41t80_rtc_mutex);
 static const struct i2c_device_id m41t80_id[] = {
        { "m41t62", M41T80_FEATURE_SQ | M41T80_FEATURE_SQ_ALT },
        { "m41t65", M41T80_FEATURE_HT | M41T80_FEATURE_WD },
@@ -677,9 +678,9 @@ static long wdt_unlocked_ioctl(struct file *file, unsigned int cmd,
 {
        int ret;
 
-       lock_kernel();
+       mutex_lock(&m41t80_rtc_mutex);
        ret = wdt_ioctl(file, cmd, arg);
-       unlock_kernel();
+       mutex_unlock(&m41t80_rtc_mutex);
 
        return ret;
 }
@@ -693,16 +694,16 @@ static long wdt_unlocked_ioctl(struct file *file, unsigned int cmd,
 static int wdt_open(struct inode *inode, struct file *file)
 {
        if (MINOR(inode->i_rdev) == WATCHDOG_MINOR) {
-               lock_kernel();
+               mutex_lock(&m41t80_rtc_mutex);
                if (test_and_set_bit(0, &wdt_is_open)) {
-                       unlock_kernel();
+                       mutex_unlock(&m41t80_rtc_mutex);
                        return -EBUSY;
                }
                /*
                 *      Activate
                 */
                wdt_is_open = 1;
-               unlock_kernel();
+               mutex_unlock(&m41t80_rtc_mutex);
                return nonseekable_open(inode, file);
        }
        return -ENODEV;
index 4942050dc5b6f0ea795d62e992368669ab1f6f6a..13f48e28a1e1f3b8e4c80c73d9cfecb9eb50c077 100644 (file)
@@ -27,7 +27,7 @@
  */
 
 #include <linux/module.h>
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 #include <linux/types.h>
 #include <linux/errno.h>
 #include <linux/miscdevice.h>
@@ -68,6 +68,8 @@
 #define JSF_PART_BITS   2      /* 2 bits of minors to cover JSF_NPART */
 #define JSF_PART_MASK   0x3    /* 2 bits mask */
 
+static DEFINE_MUTEX(jsf_mutex);
+
 /*
  * Access functions.
  * We could ioremap(), but it's easier this way.
@@ -225,7 +227,7 @@ static loff_t jsf_lseek(struct file * file, loff_t offset, int orig)
 {
        loff_t ret;
 
-       lock_kernel();
+       mutex_lock(&jsf_mutex);
        switch (orig) {
                case 0:
                        file->f_pos = offset;
@@ -238,7 +240,7 @@ static loff_t jsf_lseek(struct file * file, loff_t offset, int orig)
                default:
                        ret = -EINVAL;
        }
-       unlock_kernel();
+       mutex_unlock(&jsf_mutex);
        return ret;
 }
 
@@ -384,18 +386,18 @@ static int jsf_ioctl_program(void __user *arg)
 
 static long jsf_ioctl(struct file *f, unsigned int cmd, unsigned long arg)
 {
-       lock_kernel();
+       mutex_lock(&jsf_mutex);
        int error = -ENOTTY;
        void __user *argp = (void __user *)arg;
 
        if (!capable(CAP_SYS_ADMIN)) {
-               unlock_kernel();
+               mutex_unlock(&jsf_mutex);
                return -EPERM;
        }
        switch (cmd) {
        case JSFLASH_IDENT:
                if (copy_to_user(argp, &jsf0.id, JSFIDSZ)) {
-                       unlock_kernel();
+                       mutex_unlock(&jsf_mutex);
                        return -EFAULT;
                }
                break;
@@ -407,7 +409,7 @@ static long jsf_ioctl(struct file *f, unsigned int cmd, unsigned long arg)
                break;
        }
 
-       unlock_kernel();
+       mutex_unlock(&jsf_mutex);
        return error;
 }
 
@@ -418,17 +420,17 @@ static int jsf_mmap(struct file * file, struct vm_area_struct * vma)
 
 static int jsf_open(struct inode * inode, struct file * filp)
 {
-       lock_kernel();
+       mutex_lock(&jsf_mutex);
        if (jsf0.base == 0) {
-               unlock_kernel();
+               mutex_unlock(&jsf_mutex);
                return -ENXIO;
        }
        if (test_and_set_bit(0, (void *)&jsf0.busy) != 0) {
-               unlock_kernel();
+               mutex_unlock(&jsf_mutex);
                return -EBUSY;
        }
 
-       unlock_kernel();
+       mutex_unlock(&jsf_mutex);
        return 0;       /* XXX What security? */
 }
 
index b53deee25d74d525faa4692e3539af0cd3ceb369..b1e469983b1dde5d6b2a63f5f80af2015b8113ff 100644 (file)
 #include <linux/fs.h>          /* everything... */
 #include <linux/errno.h>       /* error codes */
 #include <linux/slab.h>
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 #include <linux/mm.h>
 #include <linux/ioport.h>
 #include <linux/interrupt.h>
 #define TYPE(inode) (iminor(inode) >> 4)
 #define NUM(inode) (iminor(inode) & 0xf)
 
+static DEFINE_MUTEX(ixj_mutex);
 static int ixjdebug;
 static int hertz = HZ;
 static int samplerate = 100;
@@ -6655,9 +6656,9 @@ static long do_ixj_ioctl(struct file *file_p, unsigned int cmd, unsigned long ar
 static long ixj_ioctl(struct file *file_p, unsigned int cmd, unsigned long arg)
 {
        long ret;
-       lock_kernel();
+       mutex_lock(&ixj_mutex);
        ret = do_ixj_ioctl(file_p, cmd, arg);
-       unlock_kernel();
+       mutex_unlock(&ixj_mutex);
        return ret;
 }
 
index 566343b3c131fc3f6d3ce17b6bc7bd1e2c724ac4..b7d96e6236a17f929627f8fd714422f3a7c048bd 100644 (file)
@@ -25,7 +25,7 @@
 #include <linux/ioport.h>
 #include <linux/timer.h>
 #include <linux/slab.h>
-#include <linux/smp_lock.h>
+#include <linux/mutex.h>
 #include <linux/io.h>
 #include <linux/of.h>
 #include <linux/of_device.h>
@@ -89,6 +89,7 @@ struct cpwd {
        } devs[WD_NUMDEVS];
 };
 
+static DEFINE_MUTEX(cpwd_mutex);
 static struct cpwd *cpwd_device;
 
 /* Sun uses Altera PLD EPF8820ATC144-4
@@ -368,7 +369,7 @@ static int cpwd_open(struct inode *inode, struct file *f)
 {
        struct cpwd *p = cpwd_device;
 
-       lock_kernel();
+       mutex_lock(&cpwd_mutex);
        switch (iminor(inode)) {
        case WD0_MINOR:
        case WD1_MINOR:
@@ -376,7 +377,7 @@ static int cpwd_open(struct inode *inode, struct file *f)
                break;
 
        default:
-               unlock_kernel();
+               mutex_unlock(&cpwd_mutex);
                return -ENODEV;
        }
 
@@ -386,13 +387,13 @@ static int cpwd_open(struct inode *inode, struct file *f)
                                IRQF_SHARED, DRIVER_NAME, p)) {
                        printk(KERN_ERR PFX "Cannot register IRQ %d\n",
                                p->irq);
-                       unlock_kernel();
+                       mutex_unlock(&cpwd_mutex);
                        return -EBUSY;
                }
                p->initialized = true;
        }
 
-       unlock_kernel();
+       mutex_unlock(&cpwd_mutex);
 
        return nonseekable_open(inode, f);
 }
@@ -482,9 +483,9 @@ static long cpwd_compat_ioctl(struct file *file, unsigned int cmd,
        case WIOCSTART:
        case WIOCSTOP:
        case WIOCGSTAT:
-               lock_kernel();
+               mutex_lock(&cpwd_mutex);
                rval = cpwd_ioctl(file, cmd, arg);
-               unlock_kernel();
+               mutex_unlock(&cpwd_mutex);
                break;
 
        /* everything else is handled by the generic compat layer */