Commit 0890b588 authored by Arnd Bergmann's avatar Arnd Bergmann

cris: autoconvert trivial BKL users

All uses of the big kernel lock in the cris architecture
are for ioctl and open functions of character device drivers,
which can be trivially converted to a per-driver mutex.

Most of these are probably unnecessary, so it may make sense
to audit them and eventually remove the extra mutex introduced
by this patch.
Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
Cc: Mikael Starvik <starvik@axis.com>
Cc: Jesper Nilsson <jesper.nilsson@axis.com>
Cc: linux-cris-kernel@axis.com
parent 80eb4a6f
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/miscdevice.h> #include <linux/miscdevice.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/smp_lock.h> #include <linux/mutex.h>
#include <linux/bcd.h> #include <linux/bcd.h>
#include <linux/capability.h> #include <linux/capability.h>
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#define RTC_MAJOR_NR 121 /* local major, change later */ #define RTC_MAJOR_NR 121 /* local major, change later */
static DEFINE_MUTEX(ds1302_mutex);
static const char ds1302_name[] = "ds1302"; static const char ds1302_name[] = "ds1302";
/* The DS1302 might be connected to different bits on different products. /* The DS1302 might be connected to different bits on different products.
...@@ -357,9 +358,9 @@ static long rtc_unlocked_ioctl(struct file *file, unsigned int cmd, unsigned lon ...@@ -357,9 +358,9 @@ static long rtc_unlocked_ioctl(struct file *file, unsigned int cmd, unsigned lon
{ {
int ret; int ret;
lock_kernel(); mutex_lock(&ds1302_mutex);
ret = rtc_ioctl(file, cmd, arg); ret = rtc_ioctl(file, cmd, arg);
unlock_kernel(); mutex_unlock(&ds1302_mutex);
return ret; return ret;
} }
......
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/bcd.h> #include <linux/bcd.h>
#include <linux/mutex.h> #include <linux/mutex.h>
#include <linux/smp_lock.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/system.h> #include <asm/system.h>
...@@ -49,6 +48,7 @@ ...@@ -49,6 +48,7 @@
#define rtc_read(x) i2c_readreg(RTC_I2C_READ, x) #define rtc_read(x) i2c_readreg(RTC_I2C_READ, x)
#define rtc_write(x,y) i2c_writereg(RTC_I2C_WRITE, x, y) #define rtc_write(x,y) i2c_writereg(RTC_I2C_WRITE, x, y)
static DEFINE_MUTEX(pcf8563_mutex);
static DEFINE_MUTEX(rtc_lock); /* Protect state etc */ static DEFINE_MUTEX(rtc_lock); /* Protect state etc */
static const unsigned char days_in_month[] = static const unsigned char days_in_month[] =
...@@ -343,9 +343,9 @@ static long pcf8563_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned ...@@ -343,9 +343,9 @@ static long pcf8563_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned
{ {
int ret; int ret;
lock_kernel(); mutex_lock(&pcf8563_mutex);
return pcf8563_ioctl(filp, cmd, arg); return pcf8563_ioctl(filp, cmd, arg);
unlock_kernel(); mutex_unlock(&pcf8563_mutex);
return ret; return ret;
} }
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/poll.h> #include <linux/poll.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/smp_lock.h> #include <linux/mutex.h>
#include <linux/timer.h> #include <linux/timer.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/dma.h> #include <asm/dma.h>
...@@ -149,6 +149,7 @@ struct sync_port { ...@@ -149,6 +149,7 @@ struct sync_port {
}; };
static DEFINE_MUTEX(sync_serial_mutex);
static int etrax_sync_serial_init(void); static int etrax_sync_serial_init(void);
static void initialize_port(int portnbr); static void initialize_port(int portnbr);
static inline int sync_data_avail(struct sync_port *port); static inline int sync_data_avail(struct sync_port *port);
...@@ -445,7 +446,7 @@ static int sync_serial_open(struct inode *inode, struct file *file) ...@@ -445,7 +446,7 @@ static int sync_serial_open(struct inode *inode, struct file *file)
int mode; int mode;
int err = -EBUSY; int err = -EBUSY;
lock_kernel(); mutex_lock(&sync_serial_mutex);
DEBUG(printk(KERN_DEBUG "Open sync serial port %d\n", dev)); DEBUG(printk(KERN_DEBUG "Open sync serial port %d\n", dev));
if (dev < 0 || dev >= NUMBER_OF_PORTS || !ports[dev].enabled) { if (dev < 0 || dev >= NUMBER_OF_PORTS || !ports[dev].enabled) {
...@@ -626,7 +627,7 @@ static int sync_serial_open(struct inode *inode, struct file *file) ...@@ -626,7 +627,7 @@ static int sync_serial_open(struct inode *inode, struct file *file)
ret = 0; ret = 0;
out: out:
unlock_kernel(); mutex_unlock(&sync_serial_mutex);
return ret; return ret;
} }
...@@ -961,9 +962,9 @@ static long sync_serial_ioctl(struct file *file, ...@@ -961,9 +962,9 @@ static long sync_serial_ioctl(struct file *file,
{ {
long ret; long ret;
lock_kernel(); mutex_lock(&sync_serial_mutex);
ret = sync_serial_ioctl_unlocked(file, cmd, arg); ret = sync_serial_ioctl_unlocked(file, cmd, arg);
unlock_kernel(); mutex_unlock(&sync_serial_mutex);
return ret; return ret;
} }
......
...@@ -3139,9 +3139,9 @@ cryptocop_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) ...@@ -3139,9 +3139,9 @@ cryptocop_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
struct inode *inode = file->f_path.dentry->d_inode; struct inode *inode = file->f_path.dentry->d_inode;
long ret; long ret;
lock_kernel(); mutex_lock(&cryptocop_mutex);
ret = cryptocop_ioctl_unlocked(inode, filp, cmd, arg); ret = cryptocop_ioctl_unlocked(inode, filp, cmd, arg);
unlock_kernel(); mutex_unlock(&cryptocop_mutex);
return ret; return ret;
} }
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/smp_lock.h> #include <linux/mutex.h>
#include <asm/etraxgpio.h> #include <asm/etraxgpio.h>
#include <hwregs/reg_map.h> #include <hwregs/reg_map.h>
...@@ -66,6 +66,7 @@ static int dp_cnt; ...@@ -66,6 +66,7 @@ static int dp_cnt;
#define DP(x) #define DP(x)
#endif #endif
static DEFINE_MUTEX(gpio_mutex);
static char gpio_name[] = "etrax gpio"; static char gpio_name[] = "etrax gpio";
#ifdef CONFIG_ETRAX_VIRTUAL_GPIO #ifdef CONFIG_ETRAX_VIRTUAL_GPIO
...@@ -391,7 +392,7 @@ static int gpio_open(struct inode *inode, struct file *filp) ...@@ -391,7 +392,7 @@ static int gpio_open(struct inode *inode, struct file *filp)
if (!priv) if (!priv)
return -ENOMEM; return -ENOMEM;
lock_kernel(); mutex_lock(&gpio_mutex);
memset(priv, 0, sizeof(*priv)); memset(priv, 0, sizeof(*priv));
priv->minor = p; priv->minor = p;
...@@ -414,7 +415,7 @@ static int gpio_open(struct inode *inode, struct file *filp) ...@@ -414,7 +415,7 @@ static int gpio_open(struct inode *inode, struct file *filp)
spin_unlock_irq(&gpio_lock); spin_unlock_irq(&gpio_lock);
} }
unlock_kernel(); mutex_unlock(&gpio_mutex);
return 0; return 0;
} }
...@@ -667,9 +668,9 @@ static long gpio_ioctl(struct file *file, unsigned int cmd, unsigned long arg) ...@@ -667,9 +668,9 @@ static long gpio_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{ {
long ret; long ret;
lock_kernel(); mutex_lock(&gpio_mutex);
ret = gpio_ioctl_unlocked(file, cmd, arg); ret = gpio_ioctl_unlocked(file, cmd, arg);
unlock_kernel(); mutex_unlock(&gpio_mutex);
return ret; return ret;
} }
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/smp_lock.h> #include <linux/mutex.h>
#include <asm/etraxgpio.h> #include <asm/etraxgpio.h>
#include <hwregs/reg_map.h> #include <hwregs/reg_map.h>
...@@ -64,6 +64,7 @@ static int dp_cnt; ...@@ -64,6 +64,7 @@ static int dp_cnt;
#define DP(x) #define DP(x)
#endif #endif
static DEFINE_MUTEX(gpio_mutex);
static char gpio_name[] = "etrax gpio"; static char gpio_name[] = "etrax gpio";
#if 0 #if 0
...@@ -429,7 +430,7 @@ gpio_open(struct inode *inode, struct file *filp) ...@@ -429,7 +430,7 @@ gpio_open(struct inode *inode, struct file *filp)
if (!priv) if (!priv)
return -ENOMEM; return -ENOMEM;
lock_kernel(); mutex_lock(&gpio_mutex);
memset(priv, 0, sizeof(*priv)); memset(priv, 0, sizeof(*priv));
priv->minor = p; priv->minor = p;
...@@ -450,7 +451,7 @@ gpio_open(struct inode *inode, struct file *filp) ...@@ -450,7 +451,7 @@ gpio_open(struct inode *inode, struct file *filp)
alarmlist = priv; alarmlist = priv;
spin_unlock_irq(&alarm_lock); spin_unlock_irq(&alarm_lock);
unlock_kernel(); mutex_unlock(&gpio_mutex);
return 0; return 0;
} }
...@@ -708,9 +709,9 @@ static long gpio_ioctl(struct file *file, unsigned int cmd, unsigned long arg) ...@@ -708,9 +709,9 @@ static long gpio_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{ {
long ret; long ret;
lock_kernel(); mutex_lock(&gpio_mutex);
ret = gpio_ioctl_unlocked(file, cmd, arg); ret = gpio_ioctl_unlocked(file, cmd, arg);
unlock_kernel(); mutex_unlock(&gpio_mutex);
return ret; return ret;
} }
......
...@@ -24,7 +24,6 @@ ...@@ -24,7 +24,6 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/ioctl.h> #include <linux/ioctl.h>
#include <linux/smp_lock.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/bcd.h> #include <linux/bcd.h>
#include <linux/mutex.h> #include <linux/mutex.h>
...@@ -45,6 +44,7 @@ ...@@ -45,6 +44,7 @@
#define rtc_read(x) i2c_readreg(RTC_I2C_READ, x) #define rtc_read(x) i2c_readreg(RTC_I2C_READ, x)
#define rtc_write(x,y) i2c_writereg(RTC_I2C_WRITE, x, y) #define rtc_write(x,y) i2c_writereg(RTC_I2C_WRITE, x, y)
static DEFINE_MUTEX(pcf8563_mutex);
static DEFINE_MUTEX(rtc_lock); /* Protect state etc */ static DEFINE_MUTEX(rtc_lock); /* Protect state etc */
static const unsigned char days_in_month[] = static const unsigned char days_in_month[] =
...@@ -339,9 +339,9 @@ static long pcf8563_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned ...@@ -339,9 +339,9 @@ static long pcf8563_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned
{ {
int ret; int ret;
lock_kernel(); mutex_lock(&pcf8563_mutex);
return pcf8563_ioctl(filp, cmd, arg); return pcf8563_ioctl(filp, cmd, arg);
unlock_kernel(); mutex_unlock(&pcf8563_mutex);
return ret; return ret;
} }
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/major.h> #include <linux/major.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/smp_lock.h> #include <linux/mutex.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/poll.h> #include <linux/poll.h>
#include <linux/init.h> #include <linux/init.h>
...@@ -145,6 +145,7 @@ typedef struct sync_port ...@@ -145,6 +145,7 @@ typedef struct sync_port
spinlock_t lock; spinlock_t lock;
} sync_port; } sync_port;
static DEFINE_MUTEX(sync_serial_mutex);
static int etrax_sync_serial_init(void); static int etrax_sync_serial_init(void);
static void initialize_port(int portnbr); static void initialize_port(int portnbr);
static inline int sync_data_avail(struct sync_port *port); static inline int sync_data_avail(struct sync_port *port);
...@@ -434,7 +435,7 @@ static int sync_serial_open(struct inode *inode, struct file *file) ...@@ -434,7 +435,7 @@ static int sync_serial_open(struct inode *inode, struct file *file)
reg_dma_rw_cfg cfg = {.en = regk_dma_yes}; reg_dma_rw_cfg cfg = {.en = regk_dma_yes};
reg_dma_rw_intr_mask intr_mask = {.data = regk_dma_yes}; reg_dma_rw_intr_mask intr_mask = {.data = regk_dma_yes};
lock_kernel(); mutex_lock(&sync_serial_mutex);
DEBUG(printk(KERN_DEBUG "Open sync serial port %d\n", dev)); DEBUG(printk(KERN_DEBUG "Open sync serial port %d\n", dev));
if (dev < 0 || dev >= NBR_PORTS || !ports[dev].enabled) if (dev < 0 || dev >= NBR_PORTS || !ports[dev].enabled)
...@@ -583,7 +584,7 @@ static int sync_serial_open(struct inode *inode, struct file *file) ...@@ -583,7 +584,7 @@ static int sync_serial_open(struct inode *inode, struct file *file)
port->busy++; port->busy++;
ret = 0; ret = 0;
out: out:
unlock_kernel(); mutex_unlock(&sync_serial_mutex);
return ret; return ret;
} }
...@@ -966,9 +967,9 @@ static long sync_serial_ioctl(struct file *file, ...@@ -966,9 +967,9 @@ static long sync_serial_ioctl(struct file *file,
{ {
long ret; long ret;
lock_kernel(); mutex_lock(&sync_serial_mutex);
ret = sync_serial_ioctl_unlocked(file, cmd, arg); ret = sync_serial_ioctl_unlocked(file, cmd, arg);
unlock_kernel(); mutex_unlock(&sync_serial_mutex);
return ret; return ret;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment