You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'config' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/bkl
* 'config' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/bkl: BKL: introduce CONFIG_BKL. dabusb: remove the BKL sunrpc: remove the big kernel lock init/main.c: remove BKL notations blktrace: remove the big kernel lock rtmutex-tester: make it build without BKL dvb-core: kill the big kernel lock dvb/bt8xx: kill the big kernel lock tlclk: remove big kernel lock fix rawctl compat ioctls breakage on amd64 and itanic uml: kill big kernel lock parisc: remove big kernel lock cris: autoconvert trivial BKL users alpha: kill big kernel lock isapnp: BKL removal s390/block: kill the big kernel lock hpet: kill BKL, add compat_ioctl
This commit is contained in:
@@ -19,7 +19,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/miscdevice.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/smp_lock.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/bcd.h>
|
||||
#include <linux/capability.h>
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
|
||||
#define RTC_MAJOR_NR 121 /* local major, change later */
|
||||
|
||||
static DEFINE_MUTEX(ds1302_mutex);
|
||||
static const char ds1302_name[] = "ds1302";
|
||||
|
||||
/* 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
|
||||
{
|
||||
int ret;
|
||||
|
||||
lock_kernel();
|
||||
mutex_lock(&ds1302_mutex);
|
||||
ret = rtc_ioctl(file, cmd, arg);
|
||||
unlock_kernel();
|
||||
mutex_unlock(&ds1302_mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -27,7 +27,6 @@
|
||||
#include <linux/delay.h>
|
||||
#include <linux/bcd.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/smp_lock.h>
|
||||
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/system.h>
|
||||
@@ -49,6 +48,7 @@
|
||||
#define rtc_read(x) i2c_readreg(RTC_I2C_READ, x)
|
||||
#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 const unsigned char days_in_month[] =
|
||||
@@ -343,9 +343,9 @@ static long pcf8563_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned
|
||||
{
|
||||
int ret;
|
||||
|
||||
lock_kernel();
|
||||
mutex_lock(&pcf8563_mutex);
|
||||
return pcf8563_ioctl(filp, cmd, arg);
|
||||
unlock_kernel();
|
||||
mutex_unlock(&pcf8563_mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/poll.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/smp_lock.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/timer.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/dma.h>
|
||||
@@ -149,6 +149,7 @@ struct sync_port {
|
||||
};
|
||||
|
||||
|
||||
static DEFINE_MUTEX(sync_serial_mutex);
|
||||
static int etrax_sync_serial_init(void);
|
||||
static void initialize_port(int portnbr);
|
||||
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)
|
||||
int mode;
|
||||
int err = -EBUSY;
|
||||
|
||||
lock_kernel();
|
||||
mutex_lock(&sync_serial_mutex);
|
||||
DEBUG(printk(KERN_DEBUG "Open sync serial port %d\n", dev));
|
||||
|
||||
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)
|
||||
ret = 0;
|
||||
|
||||
out:
|
||||
unlock_kernel();
|
||||
mutex_unlock(&sync_serial_mutex);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -961,9 +962,9 @@ static long sync_serial_ioctl(struct file *file,
|
||||
{
|
||||
long ret;
|
||||
|
||||
lock_kernel();
|
||||
mutex_lock(&sync_serial_mutex);
|
||||
ret = sync_serial_ioctl_unlocked(file, cmd, arg);
|
||||
unlock_kernel();
|
||||
mutex_unlock(&sync_serial_mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -3139,9 +3139,9 @@ cryptocop_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
|
||||
struct inode *inode = file->f_path.dentry->d_inode;
|
||||
long ret;
|
||||
|
||||
lock_kernel();
|
||||
mutex_lock(&cryptocop_mutex);
|
||||
ret = cryptocop_ioctl_unlocked(inode, filp, cmd, arg);
|
||||
unlock_kernel();
|
||||
mutex_unlock(&cryptocop_mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/smp_lock.h>
|
||||
#include <linux/mutex.h>
|
||||
|
||||
#include <asm/etraxgpio.h>
|
||||
#include <hwregs/reg_map.h>
|
||||
@@ -66,6 +66,7 @@ static int dp_cnt;
|
||||
#define DP(x)
|
||||
#endif
|
||||
|
||||
static DEFINE_MUTEX(gpio_mutex);
|
||||
static char gpio_name[] = "etrax gpio";
|
||||
|
||||
#ifdef CONFIG_ETRAX_VIRTUAL_GPIO
|
||||
@@ -391,7 +392,7 @@ static int gpio_open(struct inode *inode, struct file *filp)
|
||||
if (!priv)
|
||||
return -ENOMEM;
|
||||
|
||||
lock_kernel();
|
||||
mutex_lock(&gpio_mutex);
|
||||
memset(priv, 0, sizeof(*priv));
|
||||
|
||||
priv->minor = p;
|
||||
@@ -414,7 +415,7 @@ static int gpio_open(struct inode *inode, struct file *filp)
|
||||
spin_unlock_irq(&gpio_lock);
|
||||
}
|
||||
|
||||
unlock_kernel();
|
||||
mutex_unlock(&gpio_mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -667,9 +668,9 @@ static long gpio_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
long ret;
|
||||
|
||||
lock_kernel();
|
||||
mutex_lock(&gpio_mutex);
|
||||
ret = gpio_ioctl_unlocked(file, cmd, arg);
|
||||
unlock_kernel();
|
||||
mutex_unlock(&gpio_mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/smp_lock.h>
|
||||
#include <linux/mutex.h>
|
||||
|
||||
#include <asm/etraxgpio.h>
|
||||
#include <hwregs/reg_map.h>
|
||||
@@ -64,6 +64,7 @@ static int dp_cnt;
|
||||
#define DP(x)
|
||||
#endif
|
||||
|
||||
static DEFINE_MUTEX(gpio_mutex);
|
||||
static char gpio_name[] = "etrax gpio";
|
||||
|
||||
#if 0
|
||||
@@ -429,7 +430,7 @@ gpio_open(struct inode *inode, struct file *filp)
|
||||
if (!priv)
|
||||
return -ENOMEM;
|
||||
|
||||
lock_kernel();
|
||||
mutex_lock(&gpio_mutex);
|
||||
memset(priv, 0, sizeof(*priv));
|
||||
|
||||
priv->minor = p;
|
||||
@@ -450,7 +451,7 @@ gpio_open(struct inode *inode, struct file *filp)
|
||||
alarmlist = priv;
|
||||
spin_unlock_irq(&alarm_lock);
|
||||
|
||||
unlock_kernel();
|
||||
mutex_unlock(&gpio_mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -708,9 +709,9 @@ static long gpio_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
long ret;
|
||||
|
||||
lock_kernel();
|
||||
mutex_lock(&gpio_mutex);
|
||||
ret = gpio_ioctl_unlocked(file, cmd, arg);
|
||||
unlock_kernel();
|
||||
mutex_unlock(&gpio_mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -24,7 +24,6 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/ioctl.h>
|
||||
#include <linux/smp_lock.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/bcd.h>
|
||||
#include <linux/mutex.h>
|
||||
@@ -45,6 +44,7 @@
|
||||
#define rtc_read(x) i2c_readreg(RTC_I2C_READ, x)
|
||||
#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 const unsigned char days_in_month[] =
|
||||
@@ -339,9 +339,9 @@ static long pcf8563_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned
|
||||
{
|
||||
int ret;
|
||||
|
||||
lock_kernel();
|
||||
mutex_lock(&pcf8563_mutex);
|
||||
return pcf8563_ioctl(filp, cmd, arg);
|
||||
unlock_kernel();
|
||||
mutex_unlock(&pcf8563_mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
#include <linux/errno.h>
|
||||
#include <linux/major.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/smp_lock.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/poll.h>
|
||||
#include <linux/init.h>
|
||||
@@ -145,6 +145,7 @@ typedef struct sync_port
|
||||
spinlock_t lock;
|
||||
} sync_port;
|
||||
|
||||
static DEFINE_MUTEX(sync_serial_mutex);
|
||||
static int etrax_sync_serial_init(void);
|
||||
static void initialize_port(int portnbr);
|
||||
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)
|
||||
reg_dma_rw_cfg cfg = {.en = 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));
|
||||
|
||||
if (dev < 0 || dev >= NBR_PORTS || !ports[dev].enabled)
|
||||
@@ -583,7 +584,7 @@ static int sync_serial_open(struct inode *inode, struct file *file)
|
||||
port->busy++;
|
||||
ret = 0;
|
||||
out:
|
||||
unlock_kernel();
|
||||
mutex_unlock(&sync_serial_mutex);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -966,9 +967,9 @@ static long sync_serial_ioctl(struct file *file,
|
||||
{
|
||||
long ret;
|
||||
|
||||
lock_kernel();
|
||||
mutex_lock(&sync_serial_mutex);
|
||||
ret = sync_serial_ioctl_unlocked(file, cmd, arg);
|
||||
unlock_kernel();
|
||||
mutex_unlock(&sync_serial_mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -46,7 +46,6 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/proc_fs.h>
|
||||
#include <linux/miscdevice.h>
|
||||
#include <linux/smp_lock.h>
|
||||
#include <linux/spinlock.h>
|
||||
|
||||
#include <asm/uaccess.h>
|
||||
@@ -261,16 +260,13 @@ printk("Preparing to start counters\n");
|
||||
*/
|
||||
static int perf_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
lock_kernel();
|
||||
spin_lock(&perf_lock);
|
||||
if (perf_enabled) {
|
||||
spin_unlock(&perf_lock);
|
||||
unlock_kernel();
|
||||
return -EBUSY;
|
||||
}
|
||||
perf_enabled = 1;
|
||||
spin_unlock(&perf_lock);
|
||||
unlock_kernel();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
#include <linux/miscdevice.h>
|
||||
#include <linux/watchdog.h>
|
||||
#include <linux/reboot.h>
|
||||
#include <linux/smp_lock.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <asm/uaccess.h>
|
||||
@@ -50,6 +50,7 @@
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
static DEFINE_MUTEX(harddog_mutex);
|
||||
static DEFINE_SPINLOCK(lock);
|
||||
static int timer_alive;
|
||||
static int harddog_in_fd = -1;
|
||||
@@ -66,7 +67,7 @@ static int harddog_open(struct inode *inode, struct file *file)
|
||||
int err = -EBUSY;
|
||||
char *sock = NULL;
|
||||
|
||||
lock_kernel();
|
||||
mutex_lock(&harddog_mutex);
|
||||
spin_lock(&lock);
|
||||
if(timer_alive)
|
||||
goto err;
|
||||
@@ -83,11 +84,11 @@ static int harddog_open(struct inode *inode, struct file *file)
|
||||
|
||||
timer_alive = 1;
|
||||
spin_unlock(&lock);
|
||||
unlock_kernel();
|
||||
mutex_unlock(&harddog_mutex);
|
||||
return nonseekable_open(inode, file);
|
||||
err:
|
||||
spin_unlock(&lock);
|
||||
unlock_kernel();
|
||||
mutex_unlock(&harddog_mutex);
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -153,9 +154,9 @@ static long harddog_ioctl(struct file *file,
|
||||
{
|
||||
long ret;
|
||||
|
||||
lock_kernel();
|
||||
mutex_lock(&harddog_mutex);
|
||||
ret = harddog_ioctl_unlocked(file, cmd, arg);
|
||||
unlock_kernel();
|
||||
mutex_unlock(&harddog_mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
#include "linux/slab.h"
|
||||
#include "linux/sound.h"
|
||||
#include "linux/soundcard.h"
|
||||
#include "linux/smp_lock.h"
|
||||
#include "linux/mutex.h"
|
||||
#include "asm/uaccess.h"
|
||||
#include "init.h"
|
||||
#include "os.h"
|
||||
@@ -63,6 +63,8 @@ static int set_mixer(char *name, int *add)
|
||||
__uml_setup("mixer=", set_mixer, "mixer=<mixer device>\n" MIXER_HELP);
|
||||
#endif
|
||||
|
||||
static DEFINE_MUTEX(hostaudio_mutex);
|
||||
|
||||
/* /dev/dsp file operations */
|
||||
|
||||
static ssize_t hostaudio_read(struct file *file, char __user *buffer,
|
||||
@@ -198,9 +200,9 @@ static int hostaudio_open(struct inode *inode, struct file *file)
|
||||
w = 1;
|
||||
|
||||
kparam_block_sysfs_write(dsp);
|
||||
lock_kernel();
|
||||
mutex_lock(&hostaudio_mutex);
|
||||
ret = os_open_file(dsp, of_set_rw(OPENFLAGS(), r, w), 0);
|
||||
unlock_kernel();
|
||||
mutex_unlock(&hostaudio_mutex);
|
||||
kparam_unblock_sysfs_write(dsp);
|
||||
|
||||
if (ret < 0) {
|
||||
@@ -259,9 +261,9 @@ static int hostmixer_open_mixdev(struct inode *inode, struct file *file)
|
||||
w = 1;
|
||||
|
||||
kparam_block_sysfs_write(mixer);
|
||||
lock_kernel();
|
||||
mutex_lock(&hostaudio_mutex);
|
||||
ret = os_open_file(mixer, of_set_rw(OPENFLAGS(), r, w), 0);
|
||||
unlock_kernel();
|
||||
mutex_unlock(&hostaudio_mutex);
|
||||
kparam_unblock_sysfs_write(mixer);
|
||||
|
||||
if (ret < 0) {
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
#include "linux/mm.h"
|
||||
#include "linux/slab.h"
|
||||
#include "linux/vmalloc.h"
|
||||
#include "linux/smp_lock.h"
|
||||
#include "linux/mutex.h"
|
||||
#include "linux/blkpg.h"
|
||||
#include "linux/genhd.h"
|
||||
#include "linux/spinlock.h"
|
||||
@@ -100,6 +100,7 @@ static inline void ubd_set_bit(__u64 bit, unsigned char *data)
|
||||
#define DRIVER_NAME "uml-blkdev"
|
||||
|
||||
static DEFINE_MUTEX(ubd_lock);
|
||||
static DEFINE_MUTEX(ubd_mutex); /* replaces BKL, might not be needed */
|
||||
|
||||
static int ubd_open(struct block_device *bdev, fmode_t mode);
|
||||
static int ubd_release(struct gendisk *disk, fmode_t mode);
|
||||
@@ -1101,7 +1102,7 @@ static int ubd_open(struct block_device *bdev, fmode_t mode)
|
||||
struct ubd *ubd_dev = disk->private_data;
|
||||
int err = 0;
|
||||
|
||||
lock_kernel();
|
||||
mutex_lock(&ubd_mutex);
|
||||
if(ubd_dev->count == 0){
|
||||
err = ubd_open_dev(ubd_dev);
|
||||
if(err){
|
||||
@@ -1120,7 +1121,7 @@ static int ubd_open(struct block_device *bdev, fmode_t mode)
|
||||
err = -EROFS;
|
||||
}*/
|
||||
out:
|
||||
unlock_kernel();
|
||||
mutex_unlock(&ubd_mutex);
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -1128,10 +1129,10 @@ static int ubd_release(struct gendisk *disk, fmode_t mode)
|
||||
{
|
||||
struct ubd *ubd_dev = disk->private_data;
|
||||
|
||||
lock_kernel();
|
||||
mutex_lock(&ubd_mutex);
|
||||
if(--ubd_dev->count == 0)
|
||||
ubd_close_dev(ubd_dev);
|
||||
unlock_kernel();
|
||||
mutex_unlock(&ubd_mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -78,13 +78,11 @@ long sys_execve(const char __user *file, const char __user *const __user *argv,
|
||||
long error;
|
||||
char *filename;
|
||||
|
||||
lock_kernel();
|
||||
filename = getname(file);
|
||||
error = PTR_ERR(filename);
|
||||
if (IS_ERR(filename)) goto out;
|
||||
error = execve1(filename, argv, env);
|
||||
putname(filename);
|
||||
out:
|
||||
unlock_kernel();
|
||||
return error;
|
||||
}
|
||||
|
||||
+64
-34
@@ -30,6 +30,7 @@
|
||||
#include <linux/bcd.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/compat.h>
|
||||
#include <linux/clocksource.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
@@ -67,6 +68,7 @@
|
||||
#define read_counter(MC) readl(MC)
|
||||
#endif
|
||||
|
||||
static DEFINE_MUTEX(hpet_mutex); /* replaces BKL */
|
||||
static u32 hpet_nhpet, hpet_max_freq = HPET_USER_FREQ;
|
||||
|
||||
/* This clocksource driver currently only works on ia64 */
|
||||
@@ -250,7 +252,7 @@ static int hpet_open(struct inode *inode, struct file *file)
|
||||
if (file->f_mode & FMODE_WRITE)
|
||||
return -EINVAL;
|
||||
|
||||
lock_kernel();
|
||||
mutex_lock(&hpet_mutex);
|
||||
spin_lock_irq(&hpet_lock);
|
||||
|
||||
for (devp = NULL, hpetp = hpets; hpetp && !devp; hpetp = hpetp->hp_next)
|
||||
@@ -264,7 +266,7 @@ static int hpet_open(struct inode *inode, struct file *file)
|
||||
|
||||
if (!devp) {
|
||||
spin_unlock_irq(&hpet_lock);
|
||||
unlock_kernel();
|
||||
mutex_unlock(&hpet_mutex);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
@@ -272,7 +274,7 @@ static int hpet_open(struct inode *inode, struct file *file)
|
||||
devp->hd_irqdata = 0;
|
||||
devp->hd_flags |= HPET_OPEN;
|
||||
spin_unlock_irq(&hpet_lock);
|
||||
unlock_kernel();
|
||||
mutex_unlock(&hpet_mutex);
|
||||
|
||||
hpet_timer_set_irq(devp);
|
||||
|
||||
@@ -429,22 +431,6 @@ static int hpet_release(struct inode *inode, struct file *file)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int hpet_ioctl_common(struct hpet_dev *, int, unsigned long, int);
|
||||
|
||||
static long hpet_ioctl(struct file *file, unsigned int cmd,
|
||||
unsigned long arg)
|
||||
{
|
||||
struct hpet_dev *devp;
|
||||
int ret;
|
||||
|
||||
devp = file->private_data;
|
||||
lock_kernel();
|
||||
ret = hpet_ioctl_common(devp, cmd, arg, 0);
|
||||
unlock_kernel();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int hpet_ioctl_ieon(struct hpet_dev *devp)
|
||||
{
|
||||
struct hpet_timer __iomem *timer;
|
||||
@@ -553,7 +539,8 @@ static inline unsigned long hpet_time_div(struct hpets *hpets,
|
||||
}
|
||||
|
||||
static int
|
||||
hpet_ioctl_common(struct hpet_dev *devp, int cmd, unsigned long arg, int kernel)
|
||||
hpet_ioctl_common(struct hpet_dev *devp, int cmd, unsigned long arg,
|
||||
struct hpet_info *info)
|
||||
{
|
||||
struct hpet_timer __iomem *timer;
|
||||
struct hpet __iomem *hpet;
|
||||
@@ -594,23 +581,15 @@ hpet_ioctl_common(struct hpet_dev *devp, int cmd, unsigned long arg, int kernel)
|
||||
break;
|
||||
case HPET_INFO:
|
||||
{
|
||||
struct hpet_info info;
|
||||
|
||||
if (devp->hd_ireqfreq)
|
||||
info.hi_ireqfreq =
|
||||
info->hi_ireqfreq =
|
||||
hpet_time_div(hpetp, devp->hd_ireqfreq);
|
||||
else
|
||||
info.hi_ireqfreq = 0;
|
||||
info.hi_flags =
|
||||
info->hi_ireqfreq = 0;
|
||||
info->hi_flags =
|
||||
readq(&timer->hpet_config) & Tn_PER_INT_CAP_MASK;
|
||||
info.hi_hpet = hpetp->hp_which;
|
||||
info.hi_timer = devp - hpetp->hp_dev;
|
||||
if (kernel)
|
||||
memcpy((void *)arg, &info, sizeof(info));
|
||||
else
|
||||
if (copy_to_user((void __user *)arg, &info,
|
||||
sizeof(info)))
|
||||
err = -EFAULT;
|
||||
info->hi_hpet = hpetp->hp_which;
|
||||
info->hi_timer = devp - hpetp->hp_dev;
|
||||
break;
|
||||
}
|
||||
case HPET_EPI:
|
||||
@@ -636,7 +615,7 @@ hpet_ioctl_common(struct hpet_dev *devp, int cmd, unsigned long arg, int kernel)
|
||||
devp->hd_flags &= ~HPET_PERIODIC;
|
||||
break;
|
||||
case HPET_IRQFREQ:
|
||||
if (!kernel && (arg > hpet_max_freq) &&
|
||||
if ((arg > hpet_max_freq) &&
|
||||
!capable(CAP_SYS_RESOURCE)) {
|
||||
err = -EACCES;
|
||||
break;
|
||||
@@ -653,12 +632,63 @@ hpet_ioctl_common(struct hpet_dev *devp, int cmd, unsigned long arg, int kernel)
|
||||
return err;
|
||||
}
|
||||
|
||||
static long
|
||||
hpet_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct hpet_info info;
|
||||
int err;
|
||||
|
||||
mutex_lock(&hpet_mutex);
|
||||
err = hpet_ioctl_common(file->private_data, cmd, arg, &info);
|
||||
mutex_unlock(&hpet_mutex);
|
||||
|
||||
if ((cmd == HPET_INFO) && !err &&
|
||||
(copy_to_user((void __user *)arg, &info, sizeof(info))))
|
||||
err = -EFAULT;
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_COMPAT
|
||||
struct compat_hpet_info {
|
||||
compat_ulong_t hi_ireqfreq; /* Hz */
|
||||
compat_ulong_t hi_flags; /* information */
|
||||
unsigned short hi_hpet;
|
||||
unsigned short hi_timer;
|
||||
};
|
||||
|
||||
static long
|
||||
hpet_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct hpet_info info;
|
||||
int err;
|
||||
|
||||
mutex_lock(&hpet_mutex);
|
||||
err = hpet_ioctl_common(file->private_data, cmd, arg, &info);
|
||||
mutex_unlock(&hpet_mutex);
|
||||
|
||||
if ((cmd == HPET_INFO) && !err) {
|
||||
struct compat_hpet_info __user *u = compat_ptr(arg);
|
||||
if (put_user(info.hi_ireqfreq, &u->hi_ireqfreq) ||
|
||||
put_user(info.hi_flags, &u->hi_flags) ||
|
||||
put_user(info.hi_hpet, &u->hi_hpet) ||
|
||||
put_user(info.hi_timer, &u->hi_timer))
|
||||
err = -EFAULT;
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
#endif
|
||||
|
||||
static const struct file_operations hpet_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.llseek = no_llseek,
|
||||
.read = hpet_read,
|
||||
.poll = hpet_poll,
|
||||
.unlocked_ioctl = hpet_ioctl,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = hpet_compat_ioctl,
|
||||
#endif
|
||||
.open = hpet_open,
|
||||
.release = hpet_release,
|
||||
.fasync = hpet_fasync,
|
||||
|
||||
+144
-107
@@ -19,8 +19,8 @@
|
||||
#include <linux/cdev.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/smp_lock.h>
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/compat.h>
|
||||
|
||||
#include <asm/uaccess.h>
|
||||
|
||||
@@ -55,7 +55,6 @@ static int raw_open(struct inode *inode, struct file *filp)
|
||||
return 0;
|
||||
}
|
||||
|
||||
lock_kernel();
|
||||
mutex_lock(&raw_mutex);
|
||||
|
||||
/*
|
||||
@@ -82,7 +81,6 @@ static int raw_open(struct inode *inode, struct file *filp)
|
||||
bdev->bd_inode->i_mapping;
|
||||
filp->private_data = bdev;
|
||||
mutex_unlock(&raw_mutex);
|
||||
unlock_kernel();
|
||||
return 0;
|
||||
|
||||
out2:
|
||||
@@ -91,7 +89,6 @@ out1:
|
||||
blkdev_put(bdev, filp->f_mode);
|
||||
out:
|
||||
mutex_unlock(&raw_mutex);
|
||||
unlock_kernel();
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -125,20 +122,84 @@ static long
|
||||
raw_ioctl(struct file *filp, unsigned int command, unsigned long arg)
|
||||
{
|
||||
struct block_device *bdev = filp->private_data;
|
||||
int ret;
|
||||
|
||||
lock_kernel();
|
||||
ret = blkdev_ioctl(bdev, 0, command, arg);
|
||||
unlock_kernel();
|
||||
|
||||
return ret;
|
||||
return blkdev_ioctl(bdev, 0, command, arg);
|
||||
}
|
||||
|
||||
static void bind_device(struct raw_config_request *rq)
|
||||
static int bind_set(int number, u64 major, u64 minor)
|
||||
{
|
||||
device_destroy(raw_class, MKDEV(RAW_MAJOR, rq->raw_minor));
|
||||
device_create(raw_class, NULL, MKDEV(RAW_MAJOR, rq->raw_minor), NULL,
|
||||
"raw%d", rq->raw_minor);
|
||||
dev_t dev = MKDEV(major, minor);
|
||||
struct raw_device_data *rawdev;
|
||||
int err = 0;
|
||||
|
||||
if (number <= 0 || number >= MAX_RAW_MINORS)
|
||||
return -EINVAL;
|
||||
|
||||
if (MAJOR(dev) != major || MINOR(dev) != minor)
|
||||
return -EINVAL;
|
||||
|
||||
rawdev = &raw_devices[number];
|
||||
|
||||
/*
|
||||
* This is like making block devices, so demand the
|
||||
* same capability
|
||||
*/
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
return -EPERM;
|
||||
|
||||
/*
|
||||
* For now, we don't need to check that the underlying
|
||||
* block device is present or not: we can do that when
|
||||
* the raw device is opened. Just check that the
|
||||
* major/minor numbers make sense.
|
||||
*/
|
||||
|
||||
if (MAJOR(dev) == 0 && dev != 0)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&raw_mutex);
|
||||
if (rawdev->inuse) {
|
||||
mutex_unlock(&raw_mutex);
|
||||
return -EBUSY;
|
||||
}
|
||||
if (rawdev->binding) {
|
||||
bdput(rawdev->binding);
|
||||
module_put(THIS_MODULE);
|
||||
}
|
||||
if (!dev) {
|
||||
/* unbind */
|
||||
rawdev->binding = NULL;
|
||||
device_destroy(raw_class, MKDEV(RAW_MAJOR, number));
|
||||
} else {
|
||||
rawdev->binding = bdget(dev);
|
||||
if (rawdev->binding == NULL) {
|
||||
err = -ENOMEM;
|
||||
} else {
|
||||
dev_t raw = MKDEV(RAW_MAJOR, number);
|
||||
__module_get(THIS_MODULE);
|
||||
device_destroy(raw_class, raw);
|
||||
device_create(raw_class, NULL, raw, NULL,
|
||||
"raw%d", number);
|
||||
}
|
||||
}
|
||||
mutex_unlock(&raw_mutex);
|
||||
return err;
|
||||
}
|
||||
|
||||
static int bind_get(int number, dev_t *dev)
|
||||
{
|
||||
struct raw_device_data *rawdev;
|
||||
struct block_device *bdev;
|
||||
|
||||
if (number <= 0 || number >= MAX_RAW_MINORS)
|
||||
return -EINVAL;
|
||||
|
||||
rawdev = &raw_devices[number];
|
||||
|
||||
mutex_lock(&raw_mutex);
|
||||
bdev = rawdev->binding;
|
||||
*dev = bdev ? bdev->bd_dev : 0;
|
||||
mutex_unlock(&raw_mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -149,106 +210,79 @@ static long raw_ctl_ioctl(struct file *filp, unsigned int command,
|
||||
unsigned long arg)
|
||||
{
|
||||
struct raw_config_request rq;
|
||||
struct raw_device_data *rawdev;
|
||||
int err = 0;
|
||||
dev_t dev;
|
||||
int err;
|
||||
|
||||
lock_kernel();
|
||||
switch (command) {
|
||||
case RAW_SETBIND:
|
||||
if (copy_from_user(&rq, (void __user *) arg, sizeof(rq)))
|
||||
return -EFAULT;
|
||||
|
||||
return bind_set(rq.raw_minor, rq.block_major, rq.block_minor);
|
||||
|
||||
case RAW_GETBIND:
|
||||
if (copy_from_user(&rq, (void __user *) arg, sizeof(rq)))
|
||||
return -EFAULT;
|
||||
|
||||
/* First, find out which raw minor we want */
|
||||
|
||||
if (copy_from_user(&rq, (void __user *) arg, sizeof(rq))) {
|
||||
err = -EFAULT;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (rq.raw_minor <= 0 || rq.raw_minor >= MAX_RAW_MINORS) {
|
||||
err = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
rawdev = &raw_devices[rq.raw_minor];
|
||||
|
||||
if (command == RAW_SETBIND) {
|
||||
dev_t dev;
|
||||
|
||||
/*
|
||||
* This is like making block devices, so demand the
|
||||
* same capability
|
||||
*/
|
||||
if (!capable(CAP_SYS_ADMIN)) {
|
||||
err = -EPERM;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/*
|
||||
* For now, we don't need to check that the underlying
|
||||
* block device is present or not: we can do that when
|
||||
* the raw device is opened. Just check that the
|
||||
* major/minor numbers make sense.
|
||||
*/
|
||||
|
||||
dev = MKDEV(rq.block_major, rq.block_minor);
|
||||
if ((rq.block_major == 0 && rq.block_minor != 0) ||
|
||||
MAJOR(dev) != rq.block_major ||
|
||||
MINOR(dev) != rq.block_minor) {
|
||||
err = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
mutex_lock(&raw_mutex);
|
||||
if (rawdev->inuse) {
|
||||
mutex_unlock(&raw_mutex);
|
||||
err = -EBUSY;
|
||||
goto out;
|
||||
}
|
||||
if (rawdev->binding) {
|
||||
bdput(rawdev->binding);
|
||||
module_put(THIS_MODULE);
|
||||
}
|
||||
if (rq.block_major == 0 && rq.block_minor == 0) {
|
||||
/* unbind */
|
||||
rawdev->binding = NULL;
|
||||
device_destroy(raw_class,
|
||||
MKDEV(RAW_MAJOR, rq.raw_minor));
|
||||
} else {
|
||||
rawdev->binding = bdget(dev);
|
||||
if (rawdev->binding == NULL)
|
||||
err = -ENOMEM;
|
||||
else {
|
||||
__module_get(THIS_MODULE);
|
||||
bind_device(&rq);
|
||||
}
|
||||
}
|
||||
mutex_unlock(&raw_mutex);
|
||||
} else {
|
||||
struct block_device *bdev;
|
||||
|
||||
mutex_lock(&raw_mutex);
|
||||
bdev = rawdev->binding;
|
||||
if (bdev) {
|
||||
rq.block_major = MAJOR(bdev->bd_dev);
|
||||
rq.block_minor = MINOR(bdev->bd_dev);
|
||||
} else {
|
||||
rq.block_major = rq.block_minor = 0;
|
||||
}
|
||||
mutex_unlock(&raw_mutex);
|
||||
if (copy_to_user((void __user *)arg, &rq, sizeof(rq))) {
|
||||
err = -EFAULT;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
err = -EINVAL;
|
||||
break;
|
||||
}
|
||||
out:
|
||||
unlock_kernel();
|
||||
err = bind_get(rq.raw_minor, &dev);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
rq.block_major = MAJOR(dev);
|
||||
rq.block_minor = MINOR(dev);
|
||||
|
||||
if (copy_to_user((void __user *)arg, &rq, sizeof(rq)))
|
||||
return -EFAULT;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_COMPAT
|
||||
struct raw32_config_request {
|
||||
compat_int_t raw_minor;
|
||||
compat_u64 block_major;
|
||||
compat_u64 block_minor;
|
||||
};
|
||||
|
||||
static long raw_ctl_compat_ioctl(struct file *file, unsigned int cmd,
|
||||
unsigned long arg)
|
||||
{
|
||||
struct raw32_config_request __user *user_req = compat_ptr(arg);
|
||||
struct raw32_config_request rq;
|
||||
dev_t dev;
|
||||
int err = 0;
|
||||
|
||||
switch (cmd) {
|
||||
case RAW_SETBIND:
|
||||
if (copy_from_user(&rq, user_req, sizeof(rq)))
|
||||
return -EFAULT;
|
||||
|
||||
return bind_set(rq.raw_minor, rq.block_major, rq.block_minor);
|
||||
|
||||
case RAW_GETBIND:
|
||||
if (copy_from_user(&rq, user_req, sizeof(rq)))
|
||||
return -EFAULT;
|
||||
|
||||
err = bind_get(rq.raw_minor, &dev);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
rq.block_major = MAJOR(dev);
|
||||
rq.block_minor = MINOR(dev);
|
||||
|
||||
if (copy_to_user(user_req, &rq, sizeof(rq)))
|
||||
return -EFAULT;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
#endif
|
||||
|
||||
static const struct file_operations raw_fops = {
|
||||
.read = do_sync_read,
|
||||
.aio_read = generic_file_aio_read,
|
||||
@@ -263,6 +297,9 @@ static const struct file_operations raw_fops = {
|
||||
|
||||
static const struct file_operations raw_ctl_fops = {
|
||||
.unlocked_ioctl = raw_ctl_ioctl,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = raw_ctl_compat_ioctl,
|
||||
#endif
|
||||
.open = raw_open,
|
||||
.owner = THIS_MODULE,
|
||||
};
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/smp_lock.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/sysfs.h>
|
||||
#include <linux/device.h>
|
||||
@@ -206,7 +206,7 @@ static int tlclk_open(struct inode *inode, struct file *filp)
|
||||
{
|
||||
int result;
|
||||
|
||||
lock_kernel();
|
||||
mutex_lock(&tlclk_mutex);
|
||||
if (test_and_set_bit(0, &useflags)) {
|
||||
result = -EBUSY;
|
||||
/* this legacy device is always one per system and it doesn't
|
||||
@@ -229,7 +229,7 @@ static int tlclk_open(struct inode *inode, struct file *filp)
|
||||
inb(TLCLK_REG6); /* Clear interrupt events */
|
||||
|
||||
out:
|
||||
unlock_kernel();
|
||||
mutex_unlock(&tlclk_mutex);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -73,7 +73,8 @@ source "drivers/gpu/drm/radeon/Kconfig"
|
||||
|
||||
config DRM_I810
|
||||
tristate "Intel I810"
|
||||
depends on DRM && AGP && AGP_INTEL
|
||||
# BKL usage in order to avoid AB-BA deadlocks, may become BROKEN_ON_SMP
|
||||
depends on DRM && AGP && AGP_INTEL && BKL
|
||||
help
|
||||
Choose this option if you have an Intel I810 graphics card. If M is
|
||||
selected, the module will be called i810. AGP support is required
|
||||
@@ -86,6 +87,8 @@ choice
|
||||
|
||||
config DRM_I830
|
||||
tristate "i830 driver"
|
||||
# BKL usage in order to avoid AB-BA deadlocks, i830 may get removed
|
||||
depends on BKL
|
||||
help
|
||||
Choose this option if you have a system that has Intel 830M, 845G,
|
||||
852GM, 855GM or 865G integrated graphics. If M is selected, the
|
||||
|
||||
@@ -19,6 +19,7 @@ comment "Multimedia core support"
|
||||
|
||||
config VIDEO_DEV
|
||||
tristate "Video For Linux"
|
||||
depends on BKL # used in many drivers for ioctl handling, need to kill
|
||||
---help---
|
||||
V4L core support for video capture and overlay devices, webcams and
|
||||
AM/FM radio cards.
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/smp_lock.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/dvb/ca.h>
|
||||
#include "dvbdev.h"
|
||||
@@ -52,6 +52,7 @@
|
||||
} while(0)
|
||||
|
||||
|
||||
static DEFINE_MUTEX(dst_ca_mutex);
|
||||
static unsigned int verbose = 5;
|
||||
module_param(verbose, int, 0644);
|
||||
MODULE_PARM_DESC(verbose, "verbose startup messages, default is 1 (yes)");
|
||||
@@ -564,7 +565,7 @@ static long dst_ca_ioctl(struct file *file, unsigned int cmd, unsigned long ioct
|
||||
void __user *arg = (void __user *)ioctl_arg;
|
||||
int result = 0;
|
||||
|
||||
lock_kernel();
|
||||
mutex_lock(&dst_ca_mutex);
|
||||
dvbdev = file->private_data;
|
||||
state = (struct dst_state *)dvbdev->priv;
|
||||
p_ca_message = kmalloc(sizeof (struct ca_msg), GFP_KERNEL);
|
||||
@@ -652,7 +653,7 @@ static long dst_ca_ioctl(struct file *file, unsigned int cmd, unsigned long ioct
|
||||
kfree (p_ca_slot_info);
|
||||
kfree (p_ca_caps);
|
||||
|
||||
unlock_kernel();
|
||||
mutex_unlock(&dst_ca_mutex);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
#include <linux/slab.h>
|
||||
#include <linux/vmalloc.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/smp_lock.h>
|
||||
#include <linux/poll.h>
|
||||
#include <linux/ioctl.h>
|
||||
#include <linux/wait.h>
|
||||
@@ -1088,13 +1087,7 @@ static int dvb_demux_do_ioctl(struct file *file,
|
||||
static long dvb_demux_ioctl(struct file *file, unsigned int cmd,
|
||||
unsigned long arg)
|
||||
{
|
||||
int ret;
|
||||
|
||||
lock_kernel();
|
||||
ret = dvb_usercopy(file, cmd, arg, dvb_demux_do_ioctl);
|
||||
unlock_kernel();
|
||||
|
||||
return ret;
|
||||
return dvb_usercopy(file, cmd, arg, dvb_demux_do_ioctl);
|
||||
}
|
||||
|
||||
static unsigned int dvb_demux_poll(struct file *file, poll_table *wait)
|
||||
@@ -1186,13 +1179,7 @@ static int dvb_dvr_do_ioctl(struct file *file,
|
||||
static long dvb_dvr_ioctl(struct file *file,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
int ret;
|
||||
|
||||
lock_kernel();
|
||||
ret = dvb_usercopy(file, cmd, arg, dvb_dvr_do_ioctl);
|
||||
unlock_kernel();
|
||||
|
||||
return ret;
|
||||
return dvb_usercopy(file, cmd, arg, dvb_dvr_do_ioctl);
|
||||
}
|
||||
|
||||
static unsigned int dvb_dvr_poll(struct file *file, poll_table *wait)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user