* [PATCH 00/18] Make the big kernel lock optional [not found] <1284493139-7233-1-git-send-email-arnd@arndb.de> @ 2010-09-14 19:40 ` Arnd Bergmann 2010-09-14 19:55 ` [PATCH 10/18] uml: kill big kernel lock Arnd Bergmann ` (8 more replies) 2010-09-14 19:40 ` [PATCH 01/18] hpet: kill BKL, add compat_ioctl Arnd Bergmann ` (8 subsequent siblings) 9 siblings, 9 replies; 21+ messages in thread From: Arnd Bergmann @ 2010-09-14 19:40 UTC (permalink / raw) To: linux-kernel This is a set of simple patches to remove the big kernel lock in some remaining areas and introduce a Kconfig option which I'd like to have included in linux-next and get included in the 2.6.37 merge window. I have a total of five topic branches, which together remove the BKL from all code except those modules which get marked as 'depends on BKL' in the final patch of this series. It's fine if maintainers want to add some of these patches to their own queue, as long as they all make it into linux-next. Stephen, please add git+ssh://master.kernel.org/pub/scm/linux/kernel/git/arnd/bkl.git config Arnd Bergmann (17): hpet: kill BKL, add compat_ioctl proc/pci: kill BKL s390/block: kill the big kernel lock isapnp: BKL removal alpha: kill big kernel lock cris: autoconvert trivial BKL users m68k: remove big kernel lock parisc: remove big kernel lock sh: kill big kernel lock uml: kill big kernel lock tlclk: remove big kernel lock i4l: kill big kernel lock misdn: kill big kernel lock dvb/bt8xx: kill the big kernel lock dvb-core: kill the big kernel lock rtmutex-tester: make it build without BKL BKL: introduce CONFIG_BKL. Al Viro (1): fix rawctl compat ioctls breakage on amd64 and itanic arch/alpha/kernel/osf_sys.c | 5 - arch/alpha/kernel/traps.c | 3 - arch/cris/arch-v10/drivers/ds1302.c | 7 +- arch/cris/arch-v10/drivers/pcf8563.c | 6 +- arch/cris/arch-v10/drivers/sync_serial.c | 11 +- arch/cris/arch-v32/drivers/cryptocop.c | 4 +- arch/cris/arch-v32/drivers/mach-a3/gpio.c | 11 +- arch/cris/arch-v32/drivers/mach-fs/gpio.c | 11 +- arch/cris/arch-v32/drivers/pcf8563.c | 6 +- arch/cris/arch-v32/drivers/sync_serial.c | 11 +- arch/m68k/kernel/sys_m68k.c | 7 +- arch/parisc/kernel/perf.c | 4 - arch/sh/kernel/ptrace_64.c | 9 +- arch/um/drivers/harddog_kern.c | 13 +- arch/um/drivers/hostaudio_kern.c | 8 +- arch/um/drivers/ubd_kern.c | 8 +- arch/um/kernel/exec.c | 2 - drivers/char/hpet.c | 98 +++++++---- drivers/char/raw.c | 243 +++++++++++++++----------- drivers/char/tlclk.c | 6 +- drivers/gpu/drm/Kconfig | 5 +- drivers/isdn/capi/Kconfig | 2 +- drivers/isdn/i4l/isdn_tty.c | 11 +- drivers/isdn/mISDN/stack.c | 7 - drivers/media/Kconfig | 1 + drivers/media/dvb/bt8xx/dst_ca.c | 7 +- drivers/media/dvb/dvb-core/dmxdev.c | 17 +-- drivers/media/dvb/dvb-core/dvb_ca_en50221.c | 8 +- drivers/media/dvb/dvb-core/dvb_net.c | 9 +- drivers/media/dvb/dvb-core/dvbdev.c | 17 +- drivers/net/appletalk/Kconfig | 1 + drivers/pci/proc.c | 4 +- drivers/pnp/isapnp/proc.c | 13 +- drivers/s390/block/dasd.c | 6 - drivers/s390/block/dasd_ioctl.c | 17 +-- drivers/s390/block/dcssblk.c | 5 - drivers/staging/cx25821/Kconfig | 1 + drivers/staging/easycap/Kconfig | 1 + drivers/staging/go7007/Kconfig | 1 + drivers/staging/usbip/Kconfig | 2 +- drivers/usb/gadget/Kconfig | 2 +- fs/Kconfig | 1 + fs/adfs/Kconfig | 1 + fs/afs/Kconfig | 1 + fs/autofs/Kconfig | 1 + fs/autofs4/Kconfig | 1 + fs/ceph/Kconfig | 1 + fs/coda/Kconfig | 1 + fs/compat_ioctl.c | 70 -------- fs/ecryptfs/Kconfig | 1 + fs/freevxfs/Kconfig | 1 + fs/hpfs/Kconfig | 1 + fs/jffs2/Kconfig | 1 + fs/ncpfs/Kconfig | 1 + fs/nfs/Kconfig | 1 + fs/nfsd/Kconfig | 1 + fs/ocfs2/Kconfig | 1 + fs/qnx4/Kconfig | 1 + fs/reiserfs/Kconfig | 1 + fs/smbfs/Kconfig | 1 + fs/squashfs/Kconfig | 1 + fs/udf/Kconfig | 1 + fs/ufs/Kconfig | 1 + include/linux/smp_lock.h | 7 +- init/Kconfig | 2 +- kernel/rtmutex-tester.c | 6 + kernel/trace/Kconfig | 1 + lib/Kconfig.debug | 9 + net/ipx/Kconfig | 1 + net/irda/Kconfig | 1 + net/irda/irnet/Kconfig | 1 + net/x25/Kconfig | 1 + 72 files changed, 355 insertions(+), 375 deletions(-) Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Arjan van de Ven <arjan@linux.intel.com> Cc: Bob Picco <bob.picco@hp.com> Cc: Clemens Ladisch <clemens@ladisch.de> Cc: Geert Uytterhoeven <geert@linux-m68k.org> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Helge Deller <deller@gmx.de> Cc: Ingo Molnar <mingo@elte.hu> Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru> Cc: "James E.J. Bottomley" <jejb@parisc-linux.org> Cc: Jaroslav Kysela <perex@perex.cz> Cc: Jeff Dike <jdike@addtoit.com> Cc: Jesper Nilsson <jesper.nilsson@axis.com> Cc: Jesse Barnes <jbarnes@virtuousgeek.org> Cc: Karsten Keil <isdn@linux-pingi.de> Cc: Kyle McMartin <kyle@mcmartin.ca> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Mark Gross <mark.gross@intel.com> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: Matt Turner <mattst88@gmail.com> Cc: Mauro Carvalho Chehab <mchehab@infradead.org> Cc: Mikael Starvik <starvik@axis.com> Cc: Paul Mundt <lethal@linux-sh.org> Cc: Richard Henderson <rth@twiddle.net> Cc: Roman Zippel <zippel@linux-m68k.org> Cc: Stephen Rothwell <sfr@canb.auug.org.au> Cc: Tejun Heo <tj@kernel.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: linux-alpha@vger.kernel.org Cc: linux-cris-kernel@axis.com Cc: linux-m68k@lists.linux-m68k.org Cc: linux-media@vger.kernel.org Cc: linux-parisc@vger.kernel.org Cc: linux-pci@vger.kernel.org Cc: linux-s390@vger.kernel.org Cc: linux-sh@vger.kernel.org Cc: netdev@vger.kernel.org Cc: user-mode-linux-devel@lists.sourceforge.net ^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH 10/18] uml: kill big kernel lock 2010-09-14 19:40 ` [PATCH 00/18] Make the big kernel lock optional Arnd Bergmann @ 2010-09-14 19:55 ` Arnd Bergmann 2010-09-14 19:55 ` [PATCH 11/18] fix rawctl compat ioctls breakage on amd64 and itanic Arnd Bergmann ` (7 subsequent siblings) 8 siblings, 0 replies; 21+ messages in thread From: Arnd Bergmann @ 2010-09-14 19:55 UTC (permalink / raw) To: linux-kernel Three uml device drivers still use the big kernel lock, but all of them can be safely converted to using a per-driver mutex instead. Most likely this is not even necessary, so after further review these can and should be removed as well. The exec system call no longer requires the BKL either, so remove it from there, too. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Cc: Jeff Dike <jdike@addtoit.com> Cc: user-mode-linux-devel@lists.sourceforge.net --- arch/um/drivers/harddog_kern.c | 13 +++++++------ arch/um/drivers/hostaudio_kern.c | 8 ++++---- arch/um/drivers/ubd_kern.c | 8 ++++---- arch/um/kernel/exec.c | 2 -- 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/arch/um/drivers/harddog_kern.c b/arch/um/drivers/harddog_kern.c index cfcac1f..8603627 100644 --- a/arch/um/drivers/harddog_kern.c +++ b/arch/um/drivers/harddog_kern.c @@ -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; } diff --git a/arch/um/drivers/hostaudio_kern.c b/arch/um/drivers/hostaudio_kern.c index 0c46e39..fde18dc 100644 --- a/arch/um/drivers/hostaudio_kern.c +++ b/arch/um/drivers/hostaudio_kern.c @@ -202,9 +202,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) { @@ -263,9 +263,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) { diff --git a/arch/um/drivers/ubd_kern.c b/arch/um/drivers/ubd_kern.c index 1bcd208..dc73bc8 100644 --- a/arch/um/drivers/ubd_kern.c +++ b/arch/um/drivers/ubd_kern.c @@ -1099,7 +1099,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){ @@ -1118,7 +1118,7 @@ static int ubd_open(struct block_device *bdev, fmode_t mode) err = -EROFS; }*/ out: - unlock_kernel(); + mutex_unlock(&ubd_mutex); return err; } @@ -1126,10 +1126,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; } diff --git a/arch/um/kernel/exec.c b/arch/um/kernel/exec.c index cd145ed..460ce86 100644 --- a/arch/um/kernel/exec.c +++ b/arch/um/kernel/exec.c @@ -78,13 +78,11 @@ long sys_execve(const char __user *file, char __user *__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; } -- 1.7.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 11/18] fix rawctl compat ioctls breakage on amd64 and itanic 2010-09-14 19:40 ` [PATCH 00/18] Make the big kernel lock optional Arnd Bergmann 2010-09-14 19:55 ` [PATCH 10/18] uml: kill big kernel lock Arnd Bergmann @ 2010-09-14 19:55 ` Arnd Bergmann 2010-09-14 19:55 ` [PATCH 12/18] tlclk: remove big kernel lock Arnd Bergmann ` (6 subsequent siblings) 8 siblings, 0 replies; 21+ messages in thread From: Arnd Bergmann @ 2010-09-14 19:55 UTC (permalink / raw) To: linux-kernel From: Al Viro <viro@ZenIV.linux.org.uk> RAW_SETBIND and RAW_GETBIND 32bit versions are fscked in interesting ways. 1) fs/compat_ioctl.c has COMPATIBLE_IOCTL(RAW_SETBIND) followed by HANDLE_IOCTL(RAW_SETBIND, raw_ioctl). The latter is ignored. 2) on amd64 (and itanic) the damn thing is broken - we have int + u64 + u64 and layouts on i386 and amd64 are _not_ the same. raw_ioctl() would work there, but it's never called due to (1). As it is, i386 /sbin/raw definitely doesn't work on amd64 boxen. 3) switching to raw_ioctl() as is would *not* work on e.g. sparc64 and ppc64, which would be rather sad, seeing that normal userland there is 32bit. The thing is, slapping __packed on the struct in question does not DTRT - it eliminates *all* padding. The real solution is to use compat_u64. 4) of course, all that stuff has no business being outside of raw.c in the first place - there should be ->compat_ioctl() for /dev/rawctl instead of messing with compat_ioctl.c. [akpm@linux-foundation.org: coding-style fixes] [arnd@arndb.de: port to 2.6.36] Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Arnd Bergmann <arnd@arndb.de> --- drivers/char/raw.c | 243 ++++++++++++++++++++++++++++++---------------------- fs/compat_ioctl.c | 70 --------------- 2 files changed, 140 insertions(+), 173 deletions(-) diff --git a/drivers/char/raw.c b/drivers/char/raw.c index b38942f..24b2b91 100644 --- a/drivers/char/raw.c +++ b/drivers/char/raw.c @@ -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; + return blkdev_ioctl(bdev, 0, command, arg); +} + +static int bind_set(int number, u64 major, u64 minor) +{ + dev_t dev = MKDEV(major, minor); + struct raw_device_data *rawdev; + int err = 0; - lock_kernel(); - ret = blkdev_ioctl(bdev, 0, command, arg); - unlock_kernel(); + if (number <= 0 || number >= MAX_RAW_MINORS) + return -EINVAL; - return ret; + 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 void bind_device(struct raw_config_request *rq) +static int bind_get(int number, dev_t *dev) { - 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); + 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,105 +210,78 @@ 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 */ + err = bind_get(rq.raw_minor, &dev); + if (err) + return err; - if (copy_from_user(&rq, (void __user *) arg, sizeof(rq))) { - err = -EFAULT; - goto out; - } + rq.block_major = MAJOR(dev); + rq.block_minor = MINOR(dev); - 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; + if (copy_to_user((void __user *)arg, &rq, sizeof(rq))) + return -EFAULT; + + return 0; } -out: - unlock_kernel(); - return err; + + 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, @@ -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, }; diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c index 03e59aa..d0ad09d 100644 --- a/fs/compat_ioctl.c +++ b/fs/compat_ioctl.c @@ -599,69 +599,6 @@ static int do_smb_getmountuid(unsigned int fd, unsigned int cmd, #define HIDPGETCONNLIST _IOR('H', 210, int) #define HIDPGETCONNINFO _IOR('H', 211, int) -#ifdef CONFIG_BLOCK -struct raw32_config_request -{ - compat_int_t raw_minor; - __u64 block_major; - __u64 block_minor; -} __attribute__((packed)); - -static int get_raw32_request(struct raw_config_request *req, struct raw32_config_request __user *user_req) -{ - int ret; - - if (!access_ok(VERIFY_READ, user_req, sizeof(struct raw32_config_request))) - return -EFAULT; - - ret = __get_user(req->raw_minor, &user_req->raw_minor); - ret |= __get_user(req->block_major, &user_req->block_major); - ret |= __get_user(req->block_minor, &user_req->block_minor); - - return ret ? -EFAULT : 0; -} - -static int set_raw32_request(struct raw_config_request *req, struct raw32_config_request __user *user_req) -{ - int ret; - - if (!access_ok(VERIFY_WRITE, user_req, sizeof(struct raw32_config_request))) - return -EFAULT; - - ret = __put_user(req->raw_minor, &user_req->raw_minor); - ret |= __put_user(req->block_major, &user_req->block_major); - ret |= __put_user(req->block_minor, &user_req->block_minor); - - return ret ? -EFAULT : 0; -} - -static int raw_ioctl(unsigned fd, unsigned cmd, - struct raw32_config_request __user *user_req) -{ - int ret; - - switch (cmd) { - case RAW_SETBIND: - default: { /* RAW_GETBIND */ - struct raw_config_request req; - mm_segment_t oldfs = get_fs(); - - if ((ret = get_raw32_request(&req, user_req))) - return ret; - - set_fs(KERNEL_DS); - ret = sys_ioctl(fd,cmd,(unsigned long)&req); - set_fs(oldfs); - - if ((!ret) && (cmd == RAW_GETBIND)) { - ret = set_raw32_request(&req, user_req); - } - break; - } - } - return ret; -} -#endif /* CONFIG_BLOCK */ struct serial_struct32 { compat_int_t type; @@ -1262,9 +1199,6 @@ COMPATIBLE_IOCTL(SOUND_MIXER_PRIVATE5) COMPATIBLE_IOCTL(SOUND_MIXER_GETLEVELS) COMPATIBLE_IOCTL(SOUND_MIXER_SETLEVELS) COMPATIBLE_IOCTL(OSS_GETVERSION) -/* Raw devices */ -COMPATIBLE_IOCTL(RAW_SETBIND) -COMPATIBLE_IOCTL(RAW_GETBIND) /* SMB ioctls which do not need any translations */ COMPATIBLE_IOCTL(SMB_IOC_NEWCONN) /* Watchdog */ @@ -1523,10 +1457,6 @@ static long do_ioctl_trans(int fd, unsigned int cmd, case MTIOCGET32: case MTIOCPOS32: return mt_ioctl_trans(fd, cmd, argp); - /* Raw devices */ - case RAW_SETBIND: - case RAW_GETBIND: - return raw_ioctl(fd, cmd, argp); #endif /* One SMB ioctl needs translations. */ #define SMB_IOC_GETMOUNTUID_32 _IOR('u', 1, compat_uid_t) -- 1.7.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 12/18] tlclk: remove big kernel lock 2010-09-14 19:40 ` [PATCH 00/18] Make the big kernel lock optional Arnd Bergmann 2010-09-14 19:55 ` [PATCH 10/18] uml: kill big kernel lock Arnd Bergmann 2010-09-14 19:55 ` [PATCH 11/18] fix rawctl compat ioctls breakage on amd64 and itanic Arnd Bergmann @ 2010-09-14 19:55 ` Arnd Bergmann 2010-09-14 19:55 ` [PATCH 13/18] i4l: kill " Arnd Bergmann ` (5 subsequent siblings) 8 siblings, 0 replies; 21+ messages in thread From: Arnd Bergmann @ 2010-09-14 19:55 UTC (permalink / raw) To: linux-kernel This driver already has a global mutex, so let's just use that in the open function instead of the BKL. It may not even be needed there, but this patch should have the smallest impact. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Cc: Mark Gross <mark.gross@intel.com> --- drivers/char/tlclk.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/char/tlclk.c b/drivers/char/tlclk.c index 80ea6bc..e32cbf0 100644 --- a/drivers/char/tlclk.c +++ b/drivers/char/tlclk.c @@ -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; } -- 1.7.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 13/18] i4l: kill big kernel lock 2010-09-14 19:40 ` [PATCH 00/18] Make the big kernel lock optional Arnd Bergmann ` (2 preceding siblings ...) 2010-09-14 19:55 ` [PATCH 12/18] tlclk: remove big kernel lock Arnd Bergmann @ 2010-09-14 19:55 ` Arnd Bergmann 2010-09-14 19:55 ` [PATCH 14/18] misdn: " Arnd Bergmann ` (4 subsequent siblings) 8 siblings, 0 replies; 21+ messages in thread From: Arnd Bergmann @ 2010-09-14 19:55 UTC (permalink / raw) To: linux-kernel The isdn4linux driver uses the big kernel lock only to serialize access to a few fields in its own modem_info structure. The easiest replacement is a driver-wide mutex. More fine-grained locking would be more appropriate here, but likely harder to implement. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Cc: Karsten Keil <isdn@linux-pingi.de> Cc: netdev@vger.kernel.org --- drivers/isdn/i4l/isdn_tty.c | 11 ++++++----- 1 files changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/isdn/i4l/isdn_tty.c b/drivers/isdn/i4l/isdn_tty.c index 51dc60d..981f7ab 100644 --- a/drivers/isdn/i4l/isdn_tty.c +++ b/drivers/isdn/i4l/isdn_tty.c @@ -14,7 +14,7 @@ #include <linux/isdn.h> #include <linux/slab.h> #include <linux/delay.h> -#include <linux/smp_lock.h> +#include <linux/mutex.h> #include "isdn_common.h" #include "isdn_tty.h" #ifdef CONFIG_ISDN_AUDIO @@ -28,6 +28,7 @@ /* Prototypes */ +static DEFINE_MUTEX(modem_info_mutex); static int isdn_tty_edit_at(const char *, int, modem_info *); static void isdn_tty_check_esc(const u_char *, u_char, int, int *, u_long *); static void isdn_tty_modem_reset_regs(modem_info *, int); @@ -1354,14 +1355,14 @@ isdn_tty_tiocmget(struct tty_struct *tty, struct file *file) if (tty->flags & (1 << TTY_IO_ERROR)) return -EIO; - lock_kernel(); + mutex_lock(&modem_info_mutex); #ifdef ISDN_DEBUG_MODEM_IOCTL printk(KERN_DEBUG "ttyI%d ioctl TIOCMGET\n", info->line); #endif control = info->mcr; status = info->msr; - unlock_kernel(); + mutex_unlock(&modem_info_mutex); return ((control & UART_MCR_RTS) ? TIOCM_RTS : 0) | ((control & UART_MCR_DTR) ? TIOCM_DTR : 0) | ((status & UART_MSR_DCD) ? TIOCM_CAR : 0) @@ -1385,7 +1386,7 @@ isdn_tty_tiocmset(struct tty_struct *tty, struct file *file, printk(KERN_DEBUG "ttyI%d ioctl TIOCMxxx: %x %x\n", info->line, set, clear); #endif - lock_kernel(); + mutex_lock(&modem_info_mutex); if (set & TIOCM_RTS) info->mcr |= UART_MCR_RTS; if (set & TIOCM_DTR) { @@ -1407,7 +1408,7 @@ isdn_tty_tiocmset(struct tty_struct *tty, struct file *file, isdn_tty_modem_hup(info, 1); } } - unlock_kernel(); + mutex_unlock(&modem_info_mutex); return 0; } -- 1.7.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 14/18] misdn: kill big kernel lock 2010-09-14 19:40 ` [PATCH 00/18] Make the big kernel lock optional Arnd Bergmann ` (3 preceding siblings ...) 2010-09-14 19:55 ` [PATCH 13/18] i4l: kill " Arnd Bergmann @ 2010-09-14 19:55 ` Arnd Bergmann 2010-09-14 19:55 ` [PATCH 15/18] dvb/bt8xx: kill the " Arnd Bergmann ` (3 subsequent siblings) 8 siblings, 0 replies; 21+ messages in thread From: Arnd Bergmann @ 2010-09-14 19:55 UTC (permalink / raw) To: linux-kernel The use of the big kernel lock in misdn is completely bogus, so let's just remove it. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Cc: Karsten Keil <isdn@linux-pingi.de> Cc: netdev@vger.kernel.org --- drivers/isdn/mISDN/stack.c | 7 ------- 1 files changed, 0 insertions(+), 7 deletions(-) diff --git a/drivers/isdn/mISDN/stack.c b/drivers/isdn/mISDN/stack.c index b159bd5..a5b632e 100644 --- a/drivers/isdn/mISDN/stack.c +++ b/drivers/isdn/mISDN/stack.c @@ -18,7 +18,6 @@ #include <linux/slab.h> #include <linux/mISDNif.h> #include <linux/kthread.h> -#include <linux/smp_lock.h> #include "core.h" static u_int *debug; @@ -205,13 +204,7 @@ mISDNStackd(void *data) struct mISDNstack *st = data; int err = 0; -#ifdef CONFIG_SMP - lock_kernel(); -#endif sigfillset(¤t->blocked); -#ifdef CONFIG_SMP - unlock_kernel(); -#endif if (*debug & DEBUG_MSG_THREAD) printk(KERN_DEBUG "mISDNStackd %s started\n", dev_name(&st->dev->dev)); -- 1.7.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 15/18] dvb/bt8xx: kill the big kernel lock 2010-09-14 19:40 ` [PATCH 00/18] Make the big kernel lock optional Arnd Bergmann ` (4 preceding siblings ...) 2010-09-14 19:55 ` [PATCH 14/18] misdn: " Arnd Bergmann @ 2010-09-14 19:55 ` Arnd Bergmann 2010-09-14 19:55 ` [PATCH 16/18] dvb-core: " Arnd Bergmann ` (2 subsequent siblings) 8 siblings, 0 replies; 21+ messages in thread From: Arnd Bergmann @ 2010-09-14 19:55 UTC (permalink / raw) To: linux-kernel The bt8xx driver only uses the big kernel lock in its dst_ca_ioctl function and never to serialize against other code, so we can trivially replace it with a private mutex. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Cc: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab <mchehab@infradead.org> --- drivers/media/dvb/bt8xx/dst_ca.c | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/media/dvb/bt8xx/dst_ca.c b/drivers/media/dvb/bt8xx/dst_ca.c index cf87051..d75788b 100644 --- a/drivers/media/dvb/bt8xx/dst_ca.c +++ b/drivers/media/dvb/bt8xx/dst_ca.c @@ -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; } -- 1.7.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 16/18] dvb-core: kill the big kernel lock 2010-09-14 19:40 ` [PATCH 00/18] Make the big kernel lock optional Arnd Bergmann ` (5 preceding siblings ...) 2010-09-14 19:55 ` [PATCH 15/18] dvb/bt8xx: kill the " Arnd Bergmann @ 2010-09-14 19:55 ` Arnd Bergmann 2010-09-14 19:55 ` [PATCH 17/18] rtmutex-tester: make it build without BKL Arnd Bergmann 2010-09-14 19:55 ` [PATCH 18/18] BKL: introduce CONFIG_BKL Arnd Bergmann 8 siblings, 0 replies; 21+ messages in thread From: Arnd Bergmann @ 2010-09-14 19:55 UTC (permalink / raw) To: linux-kernel The dvb core only uses the big kernel lock in the open and ioctl functions, which means it can be replaced with a dvb specific mutex. Fortunately, all the ioctl functions go through dvb_usercopy, so we can move the serialization in there. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Cc: Mauro Carvalho Chehab <mchehab@infradead.org> Cc: linux-media@vger.kernel.org --- drivers/media/dvb/dvb-core/dmxdev.c | 17 ++--------------- drivers/media/dvb/dvb-core/dvb_ca_en50221.c | 8 +------- drivers/media/dvb/dvb-core/dvb_net.c | 9 +-------- drivers/media/dvb/dvb-core/dvbdev.c | 17 +++++++---------- 4 files changed, 11 insertions(+), 40 deletions(-) diff --git a/drivers/media/dvb/dvb-core/dmxdev.c b/drivers/media/dvb/dvb-core/dmxdev.c index 0042306..2de13b0 100644 --- a/drivers/media/dvb/dvb-core/dmxdev.c +++ b/drivers/media/dvb/dvb-core/dmxdev.c @@ -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) diff --git a/drivers/media/dvb/dvb-core/dvb_ca_en50221.c b/drivers/media/dvb/dvb-core/dvb_ca_en50221.c index cb97e6b..1723a98 100644 --- a/drivers/media/dvb/dvb-core/dvb_ca_en50221.c +++ b/drivers/media/dvb/dvb-core/dvb_ca_en50221.c @@ -1259,13 +1259,7 @@ static int dvb_ca_en50221_io_do_ioctl(struct file *file, static long dvb_ca_en50221_io_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { - int ret; - - lock_kernel(); - ret = dvb_usercopy(file, cmd, arg, dvb_ca_en50221_io_do_ioctl); - unlock_kernel(); - - return ret; + return dvb_usercopy(file, cmd, arg, dvb_ca_en50221_io_do_ioctl); } diff --git a/drivers/media/dvb/dvb-core/dvb_net.c b/drivers/media/dvb/dvb-core/dvb_net.c index 6c3a8a0..a080322 100644 --- a/drivers/media/dvb/dvb-core/dvb_net.c +++ b/drivers/media/dvb/dvb-core/dvb_net.c @@ -59,7 +59,6 @@ #include <linux/netdevice.h> #include <linux/etherdevice.h> #include <linux/dvb/net.h> -#include <linux/smp_lock.h> #include <linux/uio.h> #include <asm/uaccess.h> #include <linux/crc32.h> @@ -1445,13 +1444,7 @@ static int dvb_net_do_ioctl(struct file *file, static long dvb_net_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { - int ret; - - lock_kernel(); - ret = dvb_usercopy(file, cmd, arg, dvb_net_do_ioctl); - unlock_kernel(); - - return ret; + return dvb_usercopy(file, cmd, arg, dvb_net_do_ioctl); } static int dvb_net_close(struct inode *inode, struct file *file) diff --git a/drivers/media/dvb/dvb-core/dvbdev.c b/drivers/media/dvb/dvb-core/dvbdev.c index b915c39..28f486e 100644 --- a/drivers/media/dvb/dvb-core/dvbdev.c +++ b/drivers/media/dvb/dvb-core/dvbdev.c @@ -32,9 +32,9 @@ #include <linux/fs.h> #include <linux/cdev.h> #include <linux/mutex.h> -#include <linux/smp_lock.h> #include "dvbdev.h" +static DEFINE_MUTEX(dvbdev_mutex); static int dvbdev_debug; module_param(dvbdev_debug, int, 0644); @@ -68,7 +68,7 @@ static int dvb_device_open(struct inode *inode, struct file *file) { struct dvb_device *dvbdev; - lock_kernel(); + mutex_lock(&dvbdev_mutex); down_read(&minor_rwsem); dvbdev = dvb_minors[iminor(inode)]; @@ -91,12 +91,12 @@ static int dvb_device_open(struct inode *inode, struct file *file) } fops_put(old_fops); up_read(&minor_rwsem); - unlock_kernel(); + mutex_unlock(&dvbdev_mutex); return err; } fail: up_read(&minor_rwsem); - unlock_kernel(); + mutex_unlock(&dvbdev_mutex); return -ENODEV; } @@ -158,7 +158,6 @@ long dvb_generic_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { struct dvb_device *dvbdev = file->private_data; - int ret; if (!dvbdev) return -ENODEV; @@ -166,11 +165,7 @@ long dvb_generic_ioctl(struct file *file, if (!dvbdev->kernel_ioctl) return -EINVAL; - lock_kernel(); - ret = dvb_usercopy(file, cmd, arg, dvbdev->kernel_ioctl); - unlock_kernel(); - - return ret; + return dvb_usercopy(file, cmd, arg, dvbdev->kernel_ioctl); } EXPORT_SYMBOL(dvb_generic_ioctl); @@ -421,8 +416,10 @@ int dvb_usercopy(struct file *file, } /* call driver */ + mutex_lock(&dvbdev_mutex); if ((err = func(file, cmd, parg)) == -ENOIOCTLCMD) err = -EINVAL; + mutex_unlock(&dvbdev_mutex); if (err < 0) goto out; -- 1.7.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 17/18] rtmutex-tester: make it build without BKL 2010-09-14 19:40 ` [PATCH 00/18] Make the big kernel lock optional Arnd Bergmann ` (6 preceding siblings ...) 2010-09-14 19:55 ` [PATCH 16/18] dvb-core: " Arnd Bergmann @ 2010-09-14 19:55 ` Arnd Bergmann 2010-09-14 19:55 ` [PATCH 18/18] BKL: introduce CONFIG_BKL Arnd Bergmann 8 siblings, 0 replies; 21+ messages in thread From: Arnd Bergmann @ 2010-09-14 19:55 UTC (permalink / raw) To: linux-kernel The big kernel lock is going away, so make sure that if it is disabled by Kconfig, we do not try to validate it, which would result in compile errors. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@elte.hu> Cc: Arjan van de Ven <arjan@linux.intel.com> Cc: Andrew Morton <akpm@linux-foundation.org> --- kernel/rtmutex-tester.c | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/kernel/rtmutex-tester.c b/kernel/rtmutex-tester.c index a56f629..66cb89b 100644 --- a/kernel/rtmutex-tester.c +++ b/kernel/rtmutex-tester.c @@ -76,7 +76,9 @@ static int handle_op(struct test_thread_data *td, int lockwakeup) } if (!lockwakeup && td->bkl == 4) { +#ifdef CONFIG_LOCK_KERNEL unlock_kernel(); +#endif td->bkl = 0; } return 0; @@ -133,14 +135,18 @@ static int handle_op(struct test_thread_data *td, int lockwakeup) if (td->bkl) return 0; td->bkl = 1; +#ifdef CONFIG_LOCK_KERNEL lock_kernel(); +#endif td->bkl = 4; return 0; case RTTEST_UNLOCKBKL: if (td->bkl != 4) break; +#ifdef CONFIG_LOCK_KERNEL unlock_kernel(); +#endif td->bkl = 0; return 0; -- 1.7.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 18/18] BKL: introduce CONFIG_BKL. 2010-09-14 19:40 ` [PATCH 00/18] Make the big kernel lock optional Arnd Bergmann ` (7 preceding siblings ...) 2010-09-14 19:55 ` [PATCH 17/18] rtmutex-tester: make it build without BKL Arnd Bergmann @ 2010-09-14 19:55 ` Arnd Bergmann 8 siblings, 0 replies; 21+ messages in thread From: Arnd Bergmann @ 2010-09-14 19:55 UTC (permalink / raw) To: linux-kernel With all the patches we have queued in the BKL removal tree, only a few dozen modules are left that actually rely on the BKL, and even there are lots of low-hanging fruit. We need to decide what to do about them, this patch illustrates one of the options: Every user of the BKL is marked as 'depends on BKL' in Kconfig, and the CONFIG_BKL becomes a user-visible option. If it gets disabled, no BKL using module can be built any more and the BKL code itself is compiled out. The one exception is file locking, which is practically always enabled and does a 'select BKL' instead. This effectively forces CONFIG_BKL to be enabled until we have solved the fs/lockd mess and can apply the patch that removes the BKL from fs/locks.c. Signed-off-by: Arnd Bergmann <arnd@arndb.de> --- drivers/gpu/drm/Kconfig | 5 ++++- drivers/isdn/capi/Kconfig | 2 +- drivers/media/Kconfig | 1 + drivers/net/appletalk/Kconfig | 1 + drivers/staging/cx25821/Kconfig | 1 + drivers/staging/easycap/Kconfig | 1 + drivers/staging/go7007/Kconfig | 1 + drivers/staging/usbip/Kconfig | 2 +- drivers/usb/gadget/Kconfig | 2 +- fs/Kconfig | 1 + fs/adfs/Kconfig | 1 + fs/afs/Kconfig | 1 + fs/autofs/Kconfig | 1 + fs/autofs4/Kconfig | 1 + fs/ceph/Kconfig | 1 + fs/coda/Kconfig | 1 + fs/ecryptfs/Kconfig | 1 + fs/freevxfs/Kconfig | 1 + fs/hpfs/Kconfig | 1 + fs/jffs2/Kconfig | 1 + fs/ncpfs/Kconfig | 1 + fs/nfs/Kconfig | 1 + fs/nfsd/Kconfig | 1 + fs/ocfs2/Kconfig | 1 + fs/qnx4/Kconfig | 1 + fs/reiserfs/Kconfig | 1 + fs/smbfs/Kconfig | 1 + fs/squashfs/Kconfig | 1 + fs/udf/Kconfig | 1 + fs/ufs/Kconfig | 1 + include/linux/smp_lock.h | 7 +++++-- init/Kconfig | 2 +- kernel/trace/Kconfig | 1 + lib/Kconfig.debug | 9 +++++++++ net/ipx/Kconfig | 1 + net/irda/Kconfig | 1 + net/irda/irnet/Kconfig | 1 + net/x25/Kconfig | 1 + 38 files changed, 53 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig index 4cab0c6..b755301 100644 --- a/drivers/gpu/drm/Kconfig +++ b/drivers/gpu/drm/Kconfig @@ -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, may become BROKEN_ON_SMP + 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 diff --git a/drivers/isdn/capi/Kconfig b/drivers/isdn/capi/Kconfig index a168e8a..bb40d8d 100644 --- a/drivers/isdn/capi/Kconfig +++ b/drivers/isdn/capi/Kconfig @@ -35,7 +35,7 @@ config ISDN_CAPI_CAPI20 config ISDN_CAPI_CAPIFS_BOOL bool "CAPI2.0 filesystem support (DEPRECATED)" - depends on ISDN_CAPI_MIDDLEWARE && ISDN_CAPI_CAPI20 + depends on ISDN_CAPI_MIDDLEWARE && ISDN_CAPI_CAPI20 && BKL help This option provides a special file system, similar to /dev/pts with device nodes for the special ttys established by using the diff --git a/drivers/media/Kconfig b/drivers/media/Kconfig index a28541b..bad2ced 100644 --- a/drivers/media/Kconfig +++ b/drivers/media/Kconfig @@ -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. diff --git a/drivers/net/appletalk/Kconfig b/drivers/net/appletalk/Kconfig index 0a0e0cd..abe967a 100644 --- a/drivers/net/appletalk/Kconfig +++ b/drivers/net/appletalk/Kconfig @@ -3,6 +3,7 @@ # config ATALK tristate "Appletalk protocol support" + depends on BKL # used in net/appletalk/ddp.c, probably fixable select LLC ---help--- AppleTalk is the protocol that Apple computers can use to communicate diff --git a/drivers/staging/cx25821/Kconfig b/drivers/staging/cx25821/Kconfig index df7756a..813cb35 100644 --- a/drivers/staging/cx25821/Kconfig +++ b/drivers/staging/cx25821/Kconfig @@ -1,6 +1,7 @@ config VIDEO_CX25821 tristate "Conexant cx25821 support" depends on DVB_CORE && VIDEO_DEV && PCI && I2C && INPUT + depends on BKL # please fix select I2C_ALGOBIT select VIDEO_BTCX select VIDEO_TVEEPROM diff --git a/drivers/staging/easycap/Kconfig b/drivers/staging/easycap/Kconfig index bd96f39..9d5fe4d 100644 --- a/drivers/staging/easycap/Kconfig +++ b/drivers/staging/easycap/Kconfig @@ -1,6 +1,7 @@ config EASYCAP tristate "EasyCAP USB ID 05e1:0408 support" depends on USB && VIDEO_DEV + depends on BKL # please fix ---help--- This is an integrated audio/video driver for EasyCAP cards with diff --git a/drivers/staging/go7007/Kconfig b/drivers/staging/go7007/Kconfig index e47f683..75fa468 100644 --- a/drivers/staging/go7007/Kconfig +++ b/drivers/staging/go7007/Kconfig @@ -1,6 +1,7 @@ config VIDEO_GO7007 tristate "WIS GO7007 MPEG encoder support" depends on VIDEO_DEV && PCI && I2C && INPUT + depends on BKL # please fix depends on SND select VIDEOBUF_DMA_SG select VIDEO_IR diff --git a/drivers/staging/usbip/Kconfig b/drivers/staging/usbip/Kconfig index 2c1d10a..b11ec37 100644 --- a/drivers/staging/usbip/Kconfig +++ b/drivers/staging/usbip/Kconfig @@ -1,6 +1,6 @@ config USB_IP_COMMON tristate "USB IP support (EXPERIMENTAL)" - depends on USB && NET && EXPERIMENTAL + depends on USB && NET && EXPERIMENTAL && BKL default N ---help--- This enables pushing USB packets over IP to allow remote diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig index cd27f9b..4de1fc6 100644 --- a/drivers/usb/gadget/Kconfig +++ b/drivers/usb/gadget/Kconfig @@ -697,7 +697,7 @@ config USB_ETH_EEM config USB_GADGETFS tristate "Gadget Filesystem (EXPERIMENTAL)" - depends on EXPERIMENTAL + depends on EXPERIMENTAL && BKL help This driver provides a filesystem based API that lets user mode programs implement a single-configuration USB device, including diff --git a/fs/Kconfig b/fs/Kconfig index 3d18530..56f20ee 100644 --- a/fs/Kconfig +++ b/fs/Kconfig @@ -50,6 +50,7 @@ endif # BLOCK config FILE_LOCKING bool "Enable POSIX file locking API" if EMBEDDED default y + select BKL help This option enables standard file locking support, required for filesystems like NFS and for the flock() system diff --git a/fs/adfs/Kconfig b/fs/adfs/Kconfig index e55182a..1dd5f34 100644 --- a/fs/adfs/Kconfig +++ b/fs/adfs/Kconfig @@ -1,6 +1,7 @@ config ADFS_FS tristate "ADFS file system support (EXPERIMENTAL)" depends on BLOCK && EXPERIMENTAL + depends on BKL # need to fix help The Acorn Disc Filing System is the standard file system of the RiscOS operating system which runs on Acorn's ARM-based Risc PC diff --git a/fs/afs/Kconfig b/fs/afs/Kconfig index 8f975f2..06e305c 100644 --- a/fs/afs/Kconfig +++ b/fs/afs/Kconfig @@ -1,6 +1,7 @@ config AFS_FS tristate "Andrew File System support (AFS) (EXPERIMENTAL)" depends on INET && EXPERIMENTAL + depends on BKL # need to fix select AF_RXRPC select DNS_RESOLVER help diff --git a/fs/autofs/Kconfig b/fs/autofs/Kconfig index 5f3bea9..480e210 100644 --- a/fs/autofs/Kconfig +++ b/fs/autofs/Kconfig @@ -1,5 +1,6 @@ config AUTOFS_FS tristate "Kernel automounter support" + depends on BKL # unfixable, just use autofs4 help The automounter is a tool to automatically mount remote file systems on demand. This implementation is partially kernel-based to reduce diff --git a/fs/autofs4/Kconfig b/fs/autofs4/Kconfig index 1204d63..a639b21 100644 --- a/fs/autofs4/Kconfig +++ b/fs/autofs4/Kconfig @@ -1,5 +1,6 @@ config AUTOFS4_FS tristate "Kernel automounter version 4 support (also supports v3)" + depends on BKL # need to fix help The automounter is a tool to automatically mount remote file systems on demand. This implementation is partially kernel-based to reduce diff --git a/fs/ceph/Kconfig b/fs/ceph/Kconfig index bc87b9c..5172f09 100644 --- a/fs/ceph/Kconfig +++ b/fs/ceph/Kconfig @@ -1,6 +1,7 @@ config CEPH_FS tristate "Ceph distributed file system (EXPERIMENTAL)" depends on INET && EXPERIMENTAL + depends on BKL # need to fix select LIBCRC32C select CRYPTO_AES help diff --git a/fs/coda/Kconfig b/fs/coda/Kconfig index c0e5a7f..ee99c5c 100644 --- a/fs/coda/Kconfig +++ b/fs/coda/Kconfig @@ -1,6 +1,7 @@ config CODA_FS tristate "Coda file system support (advanced network fs)" depends on INET + depends on BKL # probably unfixable, will become BROKEN_ON_SMP help Coda is an advanced network file system, similar to NFS in that it enables you to mount file systems of a remote server and access them diff --git a/fs/ecryptfs/Kconfig b/fs/ecryptfs/Kconfig index 1cd6d9d..ddfdfb5 100644 --- a/fs/ecryptfs/Kconfig +++ b/fs/ecryptfs/Kconfig @@ -1,6 +1,7 @@ config ECRYPT_FS tristate "eCrypt filesystem layer support (EXPERIMENTAL)" depends on EXPERIMENTAL && KEYS && CRYPTO + depends on BKL # need to fix select CRYPTO_ECB select CRYPTO_CBC select CRYPTO_MD5 diff --git a/fs/freevxfs/Kconfig b/fs/freevxfs/Kconfig index 8dc1cd5..3632242 100644 --- a/fs/freevxfs/Kconfig +++ b/fs/freevxfs/Kconfig @@ -1,6 +1,7 @@ config VXFS_FS tristate "FreeVxFS file system support (VERITAS VxFS(TM) compatible)" depends on BLOCK + depends on BKL # lookup/readdir, need to fix help FreeVxFS is a file system driver that support the VERITAS VxFS(TM) file system format. VERITAS VxFS(TM) is the standard file system diff --git a/fs/hpfs/Kconfig b/fs/hpfs/Kconfig index 56bd15c..a1f68ea 100644 --- a/fs/hpfs/Kconfig +++ b/fs/hpfs/Kconfig @@ -1,6 +1,7 @@ config HPFS_FS tristate "OS/2 HPFS file system support" depends on BLOCK + depends on BKL # probably unfixable, will become BROKEN_ON_SMP help OS/2 is IBM's operating system for PC's, the same as Warp, and HPFS is the file system used for organizing files on OS/2 hard disk diff --git a/fs/jffs2/Kconfig b/fs/jffs2/Kconfig index 6ae169c..b9afb6e 100644 --- a/fs/jffs2/Kconfig +++ b/fs/jffs2/Kconfig @@ -1,6 +1,7 @@ config JFFS2_FS tristate "Journalling Flash File System v2 (JFFS2) support" select CRC32 + depends on BKL # from pushdown, need to fix depends on MTD help JFFS2 is the second generation of the Journalling Flash File System diff --git a/fs/ncpfs/Kconfig b/fs/ncpfs/Kconfig index c931cf2..d0ed28d 100644 --- a/fs/ncpfs/Kconfig +++ b/fs/ncpfs/Kconfig @@ -3,6 +3,7 @@ # config NCP_FS tristate "NCP file system support (to mount NetWare volumes)" + depends on BKL depends on IPX!=n || INET help NCP (NetWare Core Protocol) is a protocol that runs over IPX and is diff --git a/fs/nfs/Kconfig b/fs/nfs/Kconfig index 6c2aad4..10b9524 100644 --- a/fs/nfs/Kconfig +++ b/fs/nfs/Kconfig @@ -1,6 +1,7 @@ config NFS_FS tristate "NFS client support" depends on INET && FILE_LOCKING + depends on BKL # fix as soon as lockd is done select LOCKD select SUNRPC select NFS_ACL_SUPPORT if NFS_V3_ACL diff --git a/fs/nfsd/Kconfig b/fs/nfsd/Kconfig index 95932f5..429d4a1 100644 --- a/fs/nfsd/Kconfig +++ b/fs/nfsd/Kconfig @@ -2,6 +2,7 @@ config NFSD tristate "NFS server support" depends on INET depends on FILE_LOCKING + depends on BKL # fix as soon as lockd is done select LOCKD select SUNRPC select EXPORTFS diff --git a/fs/ocfs2/Kconfig b/fs/ocfs2/Kconfig index 0d84066..20a1f1b 100644 --- a/fs/ocfs2/Kconfig +++ b/fs/ocfs2/Kconfig @@ -1,5 +1,6 @@ config OCFS2_FS tristate "OCFS2 file system support" + depends on BKL # from pushdown, need to fix depends on NET && SYSFS select CONFIGFS_FS select JBD2 diff --git a/fs/qnx4/Kconfig b/fs/qnx4/Kconfig index 5f60899..1b86b15 100644 --- a/fs/qnx4/Kconfig +++ b/fs/qnx4/Kconfig @@ -1,5 +1,6 @@ config QNX4FS_FS tristate "QNX4 file system support (read only)" + depends on BKL # need to fix or will become BROKEN_ON_SMP depends on BLOCK help This is the file system used by the real-time operating systems diff --git a/fs/reiserfs/Kconfig b/fs/reiserfs/Kconfig index 513f431..342a59d 100644 --- a/fs/reiserfs/Kconfig +++ b/fs/reiserfs/Kconfig @@ -1,5 +1,6 @@ config REISERFS_FS tristate "Reiserfs support" + depends on BKL # trivial select CRC32 help Stores not just filenames but the files themselves in a balanced diff --git a/fs/smbfs/Kconfig b/fs/smbfs/Kconfig index e668127..2bc24a8 100644 --- a/fs/smbfs/Kconfig +++ b/fs/smbfs/Kconfig @@ -1,5 +1,6 @@ config SMB_FS tristate "SMB file system support (OBSOLETE, please use CIFS)" + depends on BKL # probably unfixable depends on INET select NLS help diff --git a/fs/squashfs/Kconfig b/fs/squashfs/Kconfig index e5f63da..33dbe68 100644 --- a/fs/squashfs/Kconfig +++ b/fs/squashfs/Kconfig @@ -1,6 +1,7 @@ config SQUASHFS tristate "SquashFS 4.0 - Squashed file system support" depends on BLOCK + depends on BKL # trivial to fix select ZLIB_INFLATE help Saying Y here includes support for SquashFS 4.0 (a Compressed diff --git a/fs/udf/Kconfig b/fs/udf/Kconfig index 0e0e99b..f8def3c 100644 --- a/fs/udf/Kconfig +++ b/fs/udf/Kconfig @@ -1,5 +1,6 @@ config UDF_FS tristate "UDF file system support" + depends on BKL # needs serious work to remove select CRC_ITU_T help This is the new file system used on some CD-ROMs and DVDs. Say Y if diff --git a/fs/ufs/Kconfig b/fs/ufs/Kconfig index e4f10a4..5061244 100644 --- a/fs/ufs/Kconfig +++ b/fs/ufs/Kconfig @@ -1,6 +1,7 @@ config UFS_FS tristate "UFS file system support (read only)" depends on BLOCK + depends on BKL # probably unfixable, will become BROKEN_ON_SMP help BSD and derivate versions of Unix (such as SunOS, FreeBSD, NetBSD, OpenBSD and NeXTstep) use a file system called UFS. Some System V diff --git a/include/linux/smp_lock.h b/include/linux/smp_lock.h index 2ea1dd1..291f721 100644 --- a/include/linux/smp_lock.h +++ b/include/linux/smp_lock.h @@ -54,12 +54,15 @@ static inline void cycle_kernel_lock(void) #else +#ifdef CONFIG_BKL /* provoke build bug if not set */ #define lock_kernel() #define unlock_kernel() -#define release_kernel_lock(task) do { } while(0) #define cycle_kernel_lock() do { } while(0) -#define reacquire_kernel_lock(task) 0 #define kernel_locked() 1 +#endif /* CONFIG_BKL */ + +#define release_kernel_lock(task) do { } while(0) +#define reacquire_kernel_lock(task) 0 #endif /* CONFIG_LOCK_KERNEL */ #endif /* __LINUX_SMPLOCK_H */ diff --git a/init/Kconfig b/init/Kconfig index 2de5b1c..2005a1d 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -64,7 +64,7 @@ config BROKEN_ON_SMP config LOCK_KERNEL bool - depends on SMP || PREEMPT + depends on (SMP || PREEMPT) && BKL default y config INIT_ENV_ARG_LIMIT diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig index 538501c..65d4023 100644 --- a/kernel/trace/Kconfig +++ b/kernel/trace/Kconfig @@ -327,6 +327,7 @@ config BLK_DEV_IO_TRACE bool "Support for tracing block IO actions" depends on SYSFS depends on BLOCK + depends on BKL # please use bd_mutex instead select RELAY select DEBUG_FS select TRACEPOINTS diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 1b4afd2..088eea1 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -461,6 +461,15 @@ config DEBUG_MUTEXES This feature allows mutex semantics violations to be detected and reported. +config BKL + bool "Big Kernel Lock" if (SMP || PREEMPT) + default y + help + This is the traditional lock that is used in old code instead + of proper locking. All drivers that use the BKL should depend + on this symbol. + Say Y here unless you are working on removing the BKL. + config DEBUG_LOCK_ALLOC bool "Lock debugging: detect incorrect freeing of live locks" depends on DEBUG_KERNEL && TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT diff --git a/net/ipx/Kconfig b/net/ipx/Kconfig index e9ad006..02549cb 100644 --- a/net/ipx/Kconfig +++ b/net/ipx/Kconfig @@ -3,6 +3,7 @@ # config IPX tristate "The IPX protocol" + depends on BKL # should be fixable select LLC ---help--- This is support for the Novell networking protocol, IPX, commonly diff --git a/net/irda/Kconfig b/net/irda/Kconfig index c8671a7..073243f 100644 --- a/net/irda/Kconfig +++ b/net/irda/Kconfig @@ -4,6 +4,7 @@ menuconfig IRDA depends on NET && !S390 + depends on BKL # should be fixable tristate "IrDA (infrared) subsystem support" select CRC_CCITT ---help--- diff --git a/net/irda/irnet/Kconfig b/net/irda/irnet/Kconfig index 28c557f..b1e68c1 100644 --- a/net/irda/irnet/Kconfig +++ b/net/irda/irnet/Kconfig @@ -1,6 +1,7 @@ config IRNET tristate "IrNET protocol" depends on IRDA && PPP + depends on BKL # might need to lock against AF_IRDA help Say Y here if you want to build support for the IrNET protocol. To compile it as a module, choose M here: the module will be diff --git a/net/x25/Kconfig b/net/x25/Kconfig index e6759c9..2196e55 100644 --- a/net/x25/Kconfig +++ b/net/x25/Kconfig @@ -5,6 +5,7 @@ config X25 tristate "CCITT X.25 Packet Layer (EXPERIMENTAL)" depends on EXPERIMENTAL + depends on BKL # should be fixable ---help--- X.25 is a set of standardized network protocols, similar in scope to frame relay; the one physical line from your box to the X.25 network -- 1.7.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 01/18] hpet: kill BKL, add compat_ioctl [not found] <1284493139-7233-1-git-send-email-arnd@arndb.de> 2010-09-14 19:40 ` [PATCH 00/18] Make the big kernel lock optional Arnd Bergmann @ 2010-09-14 19:40 ` Arnd Bergmann 2010-09-14 19:40 ` [PATCH 02/18] proc/pci: kill BKL Arnd Bergmann ` (7 subsequent siblings) 9 siblings, 0 replies; 21+ messages in thread From: Arnd Bergmann @ 2010-09-14 19:40 UTC (permalink / raw) To: linux-kernel hpet uses the big kernel lock in its ioctl and open functions. Replace this with a private mutex to be sure. Since we're already touching the ioctl function, add the compat_ioctl version as well -- all commands except HPET_INFO are compatible and that one is easy to add. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Cc: Clemens Ladisch <clemens@ladisch.de> Cc: Bob Picco <bob.picco@hp.com> --- drivers/char/hpet.c | 98 +++++++++++++++++++++++++++++++++------------------ 1 files changed, 64 insertions(+), 34 deletions(-) diff --git a/drivers/char/hpet.c b/drivers/char/hpet.c index a0a1829..a4eee32 100644 --- a/drivers/char/hpet.c +++ b/drivers/char/hpet.c @@ -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, -- 1.7.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 02/18] proc/pci: kill BKL [not found] <1284493139-7233-1-git-send-email-arnd@arndb.de> 2010-09-14 19:40 ` [PATCH 00/18] Make the big kernel lock optional Arnd Bergmann 2010-09-14 19:40 ` [PATCH 01/18] hpet: kill BKL, add compat_ioctl Arnd Bergmann @ 2010-09-14 19:40 ` Arnd Bergmann 2010-09-14 19:40 ` [PATCH 03/18] s390/block: kill the big kernel lock Arnd Bergmann ` (6 subsequent siblings) 9 siblings, 0 replies; 21+ messages in thread From: Arnd Bergmann @ 2010-09-14 19:40 UTC (permalink / raw) To: linux-kernel All operations in the pci procfs ioctl functions are atomic, so no lock is needed here. Also add a compat_ioctl method, since all the commands are compatible in 32 bit mode. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Cc: Jesse Barnes <jbarnes@virtuousgeek.org> Cc: Tejun Heo <tj@kernel.org> Cc: linux-pci@vger.kernel.org --- drivers/pci/proc.c | 4 +--- 1 files changed, 1 insertions(+), 3 deletions(-) diff --git a/drivers/pci/proc.c b/drivers/pci/proc.c index 01f0306..297b72c 100644 --- a/drivers/pci/proc.c +++ b/drivers/pci/proc.c @@ -212,8 +212,6 @@ static long proc_bus_pci_ioctl(struct file *file, unsigned int cmd, #endif /* HAVE_PCI_MMAP */ int ret = 0; - lock_kernel(); - switch (cmd) { case PCIIOC_CONTROLLER: ret = pci_domain_nr(dev->bus); @@ -242,7 +240,6 @@ static long proc_bus_pci_ioctl(struct file *file, unsigned int cmd, break; }; - unlock_kernel(); return ret; } @@ -306,6 +303,7 @@ static const struct file_operations proc_bus_pci_operations = { .read = proc_bus_pci_read, .write = proc_bus_pci_write, .unlocked_ioctl = proc_bus_pci_ioctl, + .compat_ioctl = proc_bus_pci_ioctl, #ifdef HAVE_PCI_MMAP .open = proc_bus_pci_open, .release = proc_bus_pci_release, -- 1.7.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 03/18] s390/block: kill the big kernel lock [not found] <1284493139-7233-1-git-send-email-arnd@arndb.de> ` (2 preceding siblings ...) 2010-09-14 19:40 ` [PATCH 02/18] proc/pci: kill BKL Arnd Bergmann @ 2010-09-14 19:40 ` Arnd Bergmann 2010-09-14 19:40 ` [PATCH 04/18] isapnp: BKL removal Arnd Bergmann ` (5 subsequent siblings) 9 siblings, 0 replies; 21+ messages in thread From: Arnd Bergmann @ 2010-09-14 19:40 UTC (permalink / raw) To: linux-kernel The dasd and dcssblk drivers gained the big kernel lock in the recent pushdown from the block layer, but they don't really need it, so remove the calls without a replacement. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: linux-s390@vger.kernel.org --- drivers/s390/block/dasd.c | 6 ------ drivers/s390/block/dasd_ioctl.c | 17 ++--------------- drivers/s390/block/dcssblk.c | 5 ----- 3 files changed, 2 insertions(+), 26 deletions(-) diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c index 8373ca0..38e6fa9 100644 --- a/drivers/s390/block/dasd.c +++ b/drivers/s390/block/dasd.c @@ -21,7 +21,6 @@ #include <linux/hdreg.h> #include <linux/async.h> #include <linux/mutex.h> -#include <linux/smp_lock.h> #include <asm/ccwdev.h> #include <asm/ebcdic.h> @@ -2236,7 +2235,6 @@ static int dasd_open(struct block_device *bdev, fmode_t mode) if (!block) return -ENODEV; - lock_kernel(); base = block->base; atomic_inc(&block->open_count); if (test_bit(DASD_FLAG_OFFLINE, &base->flags)) { @@ -2271,14 +2269,12 @@ static int dasd_open(struct block_device *bdev, fmode_t mode) goto out; } - unlock_kernel(); return 0; out: module_put(base->discipline->owner); unlock: atomic_dec(&block->open_count); - unlock_kernel(); return rc; } @@ -2286,10 +2282,8 @@ static int dasd_release(struct gendisk *disk, fmode_t mode) { struct dasd_block *block = disk->private_data; - lock_kernel(); atomic_dec(&block->open_count); module_put(block->base->discipline->owner); - unlock_kernel(); return 0; } diff --git a/drivers/s390/block/dasd_ioctl.c b/drivers/s390/block/dasd_ioctl.c index 1557214..26075e9 100644 --- a/drivers/s390/block/dasd_ioctl.c +++ b/drivers/s390/block/dasd_ioctl.c @@ -16,7 +16,6 @@ #include <linux/major.h> #include <linux/fs.h> #include <linux/blkpg.h> -#include <linux/smp_lock.h> #include <linux/slab.h> #include <asm/compat.h> #include <asm/ccwdev.h> @@ -370,9 +369,8 @@ static int dasd_ioctl_readall_cmb(struct dasd_block *block, unsigned int cmd, return ret; } -static int -dasd_do_ioctl(struct block_device *bdev, fmode_t mode, - unsigned int cmd, unsigned long arg) +int dasd_ioctl(struct block_device *bdev, fmode_t mode, + unsigned int cmd, unsigned long arg) { struct dasd_block *block = bdev->bd_disk->private_data; void __user *argp; @@ -430,14 +428,3 @@ dasd_do_ioctl(struct block_device *bdev, fmode_t mode, return -EINVAL; } } - -int dasd_ioctl(struct block_device *bdev, fmode_t mode, - unsigned int cmd, unsigned long arg) -{ - int rc; - - lock_kernel(); - rc = dasd_do_ioctl(bdev, mode, cmd, arg); - unlock_kernel(); - return rc; -} diff --git a/drivers/s390/block/dcssblk.c b/drivers/s390/block/dcssblk.c index 2bd72aa..9b43ae9 100644 --- a/drivers/s390/block/dcssblk.c +++ b/drivers/s390/block/dcssblk.c @@ -14,7 +14,6 @@ #include <linux/init.h> #include <linux/slab.h> #include <linux/blkdev.h> -#include <linux/smp_lock.h> #include <linux/completion.h> #include <linux/interrupt.h> #include <linux/platform_device.h> @@ -776,7 +775,6 @@ dcssblk_open(struct block_device *bdev, fmode_t mode) struct dcssblk_dev_info *dev_info; int rc; - lock_kernel(); dev_info = bdev->bd_disk->private_data; if (NULL == dev_info) { rc = -ENODEV; @@ -786,7 +784,6 @@ dcssblk_open(struct block_device *bdev, fmode_t mode) bdev->bd_block_size = 4096; rc = 0; out: - unlock_kernel(); return rc; } @@ -797,7 +794,6 @@ dcssblk_release(struct gendisk *disk, fmode_t mode) struct segment_info *entry; int rc; - lock_kernel(); if (!dev_info) { rc = -ENODEV; goto out; @@ -815,7 +811,6 @@ dcssblk_release(struct gendisk *disk, fmode_t mode) up_write(&dcssblk_devices_sem); rc = 0; out: - unlock_kernel(); return rc; } -- 1.7.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 04/18] isapnp: BKL removal [not found] <1284493139-7233-1-git-send-email-arnd@arndb.de> ` (3 preceding siblings ...) 2010-09-14 19:40 ` [PATCH 03/18] s390/block: kill the big kernel lock Arnd Bergmann @ 2010-09-14 19:40 ` Arnd Bergmann 2010-09-15 9:31 ` Will Newton 2010-09-14 19:40 ` [PATCH 05/18] alpha: kill big kernel lock Arnd Bergmann ` (4 subsequent siblings) 9 siblings, 1 reply; 21+ messages in thread From: Arnd Bergmann @ 2010-09-14 19:40 UTC (permalink / raw) To: linux-kernel Remove BKL use from isapnp_proc_bus_lseek(), like was done for proc_bus_pci_lseek() a long time ago and recently for Zorro by Geert Uytterhoeven. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Cc: Geert Uytterhoeven <geert@linux-m68k.org> Cc: Jaroslav Kysela <perex@perex.cz> --- drivers/pnp/isapnp/proc.c | 13 +++++++------ 1 files changed, 7 insertions(+), 6 deletions(-) diff --git a/drivers/pnp/isapnp/proc.c b/drivers/pnp/isapnp/proc.c index 3f94eda..4249999 100644 --- a/drivers/pnp/isapnp/proc.c +++ b/drivers/pnp/isapnp/proc.c @@ -31,8 +31,9 @@ static struct proc_dir_entry *isapnp_proc_bus_dir = NULL; static loff_t isapnp_proc_bus_lseek(struct file *file, loff_t off, int whence) { loff_t new = -1; + struct inode *inode = file->f_path.dentry->d_inode; - lock_kernel(); + mutex_lock(&inode->i_mutex); switch (whence) { case 0: new = off; @@ -45,11 +46,11 @@ static loff_t isapnp_proc_bus_lseek(struct file *file, loff_t off, int whence) break; } if (new < 0 || new > 256) { - unlock_kernel(); - return -EINVAL; - } - unlock_kernel(); - return (file->f_pos = new); + new = -EINVAL; + else + file->f_pos = new; + mutex_unlock(&inode->i_mutex); + return new; } static ssize_t isapnp_proc_bus_read(struct file *file, char __user * buf, -- 1.7.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH 04/18] isapnp: BKL removal 2010-09-14 19:40 ` [PATCH 04/18] isapnp: BKL removal Arnd Bergmann @ 2010-09-15 9:31 ` Will Newton 0 siblings, 0 replies; 21+ messages in thread From: Will Newton @ 2010-09-15 9:31 UTC (permalink / raw) To: Arnd Bergmann; +Cc: linux-kernel On Tue, Sep 14, 2010 at 8:40 PM, Arnd Bergmann <arnd@arndb.de> wrote: > diff --git a/drivers/pnp/isapnp/proc.c b/drivers/pnp/isapnp/proc.c > index 3f94eda..4249999 100644 > --- a/drivers/pnp/isapnp/proc.c > +++ b/drivers/pnp/isapnp/proc.c > @@ -31,8 +31,9 @@ static struct proc_dir_entry *isapnp_proc_bus_dir = NULL; > static loff_t isapnp_proc_bus_lseek(struct file *file, loff_t off, int whence) > { > loff_t new = -1; > + struct inode *inode = file->f_path.dentry->d_inode; > > - lock_kernel(); > + mutex_lock(&inode->i_mutex); > switch (whence) { > case 0: > new = off; > @@ -45,11 +46,11 @@ static loff_t isapnp_proc_bus_lseek(struct file *file, loff_t off, int whence) > break; > } > if (new < 0 || new > 256) { Mismatched brackets here? > - unlock_kernel(); > - return -EINVAL; > - } > - unlock_kernel(); > - return (file->f_pos = new); > + new = -EINVAL; > + else > + file->f_pos = new; > + mutex_unlock(&inode->i_mutex); > + return new; > } > ^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH 05/18] alpha: kill big kernel lock [not found] <1284493139-7233-1-git-send-email-arnd@arndb.de> ` (4 preceding siblings ...) 2010-09-14 19:40 ` [PATCH 04/18] isapnp: BKL removal Arnd Bergmann @ 2010-09-14 19:40 ` Arnd Bergmann 2010-09-14 19:40 ` [PATCH 06/18] cris: autoconvert trivial BKL users Arnd Bergmann ` (3 subsequent siblings) 9 siblings, 0 replies; 21+ messages in thread From: Arnd Bergmann @ 2010-09-14 19:40 UTC (permalink / raw) To: linux-kernel All uses of the BKL on alpha are totally bogus, nothing is really protected by this. Remove the remaining users so we don't have to mark alpha as 'depends on BKL'. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Cc: Richard Henderson <rth@twiddle.net> Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru> Cc: Matt Turner <mattst88@gmail.com> Cc: linux-alpha@vger.kernel.org --- arch/alpha/kernel/osf_sys.c | 5 ----- arch/alpha/kernel/traps.c | 3 --- 2 files changed, 0 insertions(+), 8 deletions(-) diff --git a/arch/alpha/kernel/osf_sys.c b/arch/alpha/kernel/osf_sys.c index 5d1e6d6..49225dd 100644 --- a/arch/alpha/kernel/osf_sys.c +++ b/arch/alpha/kernel/osf_sys.c @@ -15,7 +15,6 @@ #include <linux/kernel.h> #include <linux/mm.h> #include <linux/smp.h> -#include <linux/smp_lock.h> #include <linux/stddef.h> #include <linux/syscalls.h> #include <linux/unistd.h> @@ -69,7 +68,6 @@ SYSCALL_DEFINE4(osf_set_program_attributes, unsigned long, text_start, { struct mm_struct *mm; - lock_kernel(); mm = current->mm; mm->end_code = bss_start + bss_len; mm->start_brk = bss_start + bss_len; @@ -78,7 +76,6 @@ SYSCALL_DEFINE4(osf_set_program_attributes, unsigned long, text_start, printk("set_program_attributes(%lx %lx %lx %lx)\n", text_start, text_len, bss_start, bss_len); #endif - unlock_kernel(); return 0; } @@ -517,7 +514,6 @@ SYSCALL_DEFINE2(osf_proplist_syscall, enum pl_code, code, long error; int __user *min_buf_size_ptr; - lock_kernel(); switch (code) { case PL_SET: if (get_user(error, &args->set.nbytes)) @@ -547,7 +543,6 @@ SYSCALL_DEFINE2(osf_proplist_syscall, enum pl_code, code, error = -EOPNOTSUPP; break; }; - unlock_kernel(); return error; } diff --git a/arch/alpha/kernel/traps.c b/arch/alpha/kernel/traps.c index b14f015..0414e02 100644 --- a/arch/alpha/kernel/traps.c +++ b/arch/alpha/kernel/traps.c @@ -13,7 +13,6 @@ #include <linux/sched.h> #include <linux/tty.h> #include <linux/delay.h> -#include <linux/smp_lock.h> #include <linux/module.h> #include <linux/init.h> #include <linux/kallsyms.h> @@ -623,7 +622,6 @@ do_entUna(void * va, unsigned long opcode, unsigned long reg, return; } - lock_kernel(); printk("Bad unaligned kernel access at %016lx: %p %lx %lu\n", pc, va, opcode, reg); do_exit(SIGSEGV); @@ -646,7 +644,6 @@ got_exception: * Yikes! No one to forward the exception to. * Since the registers are in a weird format, dump them ourselves. */ - lock_kernel(); printk("%s(%d): unhandled unaligned exception\n", current->comm, task_pid_nr(current)); -- 1.7.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 06/18] cris: autoconvert trivial BKL users [not found] <1284493139-7233-1-git-send-email-arnd@arndb.de> ` (5 preceding siblings ...) 2010-09-14 19:40 ` [PATCH 05/18] alpha: kill big kernel lock Arnd Bergmann @ 2010-09-14 19:40 ` Arnd Bergmann 2010-09-14 19:40 ` [PATCH 07/18] m68k: remove big kernel lock Arnd Bergmann ` (2 subsequent siblings) 9 siblings, 0 replies; 21+ messages in thread From: Arnd Bergmann @ 2010-09-14 19:40 UTC (permalink / raw) To: linux-kernel 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: Arnd Bergmann <arnd@arndb.de> Cc: Mikael Starvik <starvik@axis.com> Cc: Jesper Nilsson <jesper.nilsson@axis.com> Cc: linux-cris-kernel@axis.com --- arch/cris/arch-v10/drivers/ds1302.c | 7 ++++--- arch/cris/arch-v10/drivers/pcf8563.c | 6 +++--- arch/cris/arch-v10/drivers/sync_serial.c | 11 ++++++----- arch/cris/arch-v32/drivers/cryptocop.c | 4 ++-- arch/cris/arch-v32/drivers/mach-a3/gpio.c | 11 ++++++----- arch/cris/arch-v32/drivers/mach-fs/gpio.c | 11 ++++++----- arch/cris/arch-v32/drivers/pcf8563.c | 6 +++--- arch/cris/arch-v32/drivers/sync_serial.c | 11 ++++++----- 8 files changed, 36 insertions(+), 31 deletions(-) diff --git a/arch/cris/arch-v10/drivers/ds1302.c b/arch/cris/arch-v10/drivers/ds1302.c index 8842756..4b92ad0 100644 --- a/arch/cris/arch-v10/drivers/ds1302.c +++ b/arch/cris/arch-v10/drivers/ds1302.c @@ -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; } diff --git a/arch/cris/arch-v10/drivers/pcf8563.c b/arch/cris/arch-v10/drivers/pcf8563.c index 7dcb1f8..2f1dded 100644 --- a/arch/cris/arch-v10/drivers/pcf8563.c +++ b/arch/cris/arch-v10/drivers/pcf8563.c @@ -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; } diff --git a/arch/cris/arch-v10/drivers/sync_serial.c b/arch/cris/arch-v10/drivers/sync_serial.c index ee2dd43..3d9fa07 100644 --- a/arch/cris/arch-v10/drivers/sync_serial.c +++ b/arch/cris/arch-v10/drivers/sync_serial.c @@ -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; } diff --git a/arch/cris/arch-v32/drivers/cryptocop.c b/arch/cris/arch-v32/drivers/cryptocop.c index b07646a..0973d5a 100644 --- a/arch/cris/arch-v32/drivers/cryptocop.c +++ b/arch/cris/arch-v32/drivers/cryptocop.c @@ -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; } diff --git a/arch/cris/arch-v32/drivers/mach-a3/gpio.c b/arch/cris/arch-v32/drivers/mach-a3/gpio.c index 2dcd27a..50d1885 100644 --- a/arch/cris/arch-v32/drivers/mach-a3/gpio.c +++ b/arch/cris/arch-v32/drivers/mach-a3/gpio.c @@ -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; } diff --git a/arch/cris/arch-v32/drivers/mach-fs/gpio.c b/arch/cris/arch-v32/drivers/mach-fs/gpio.c index 5ec8a7d..de8dca0 100644 --- a/arch/cris/arch-v32/drivers/mach-fs/gpio.c +++ b/arch/cris/arch-v32/drivers/mach-fs/gpio.c @@ -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; } diff --git a/arch/cris/arch-v32/drivers/pcf8563.c b/arch/cris/arch-v32/drivers/pcf8563.c index bef6eb5..bdcac9d 100644 --- a/arch/cris/arch-v32/drivers/pcf8563.c +++ b/arch/cris/arch-v32/drivers/pcf8563.c @@ -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; } diff --git a/arch/cris/arch-v32/drivers/sync_serial.c b/arch/cris/arch-v32/drivers/sync_serial.c index ca248f3..a01ae9f 100644 --- a/arch/cris/arch-v32/drivers/sync_serial.c +++ b/arch/cris/arch-v32/drivers/sync_serial.c @@ -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; } -- 1.7.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 07/18] m68k: remove big kernel lock [not found] <1284493139-7233-1-git-send-email-arnd@arndb.de> ` (6 preceding siblings ...) 2010-09-14 19:40 ` [PATCH 06/18] cris: autoconvert trivial BKL users Arnd Bergmann @ 2010-09-14 19:40 ` Arnd Bergmann 2010-09-14 19:40 ` [PATCH 08/18] parisc: " Arnd Bergmann 2010-09-14 19:40 ` [PATCH 09/18] sh: kill " Arnd Bergmann 9 siblings, 0 replies; 21+ messages in thread From: Arnd Bergmann @ 2010-09-14 19:40 UTC (permalink / raw) To: linux-kernel The cache flush code only locks against itself, so there is no excuse to use the BKL here. This replaces it with a local mutex in order to maintain serialization of flushes. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Cc: Geert Uytterhoeven <geert@linux-m68k.org> Cc: Roman Zippel <zippel@linux-m68k.org> Cc: linux-m68k@lists.linux-m68k.org --- arch/m68k/kernel/sys_m68k.c | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-) diff --git a/arch/m68k/kernel/sys_m68k.c b/arch/m68k/kernel/sys_m68k.c index 2f431ec..f6aec52 100644 --- a/arch/m68k/kernel/sys_m68k.c +++ b/arch/m68k/kernel/sys_m68k.c @@ -12,7 +12,7 @@ #include <linux/mm.h> #include <linux/fs.h> #include <linux/smp.h> -#include <linux/smp_lock.h> +#include <linux/mutex.h> #include <linux/sem.h> #include <linux/msg.h> #include <linux/shm.h> @@ -374,10 +374,11 @@ cache_flush_060 (unsigned long addr, int scope, int cache, unsigned long len) asmlinkage int sys_cacheflush (unsigned long addr, int scope, int cache, unsigned long len) { + static DEFINE_MUTEX(cacheflush_mutex); struct vm_area_struct *vma; int ret = -EINVAL; - lock_kernel(); + mutex_lock(&cacheflush_mutex); if (scope < FLUSH_SCOPE_LINE || scope > FLUSH_SCOPE_ALL || cache & ~FLUSH_CACHE_BOTH) goto out; @@ -446,7 +447,7 @@ sys_cacheflush (unsigned long addr, int scope, int cache, unsigned long len) } } out: - unlock_kernel(); + mutex_unlock(&cacheflush_mutex); return ret; } -- 1.7.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 08/18] parisc: remove big kernel lock [not found] <1284493139-7233-1-git-send-email-arnd@arndb.de> ` (7 preceding siblings ...) 2010-09-14 19:40 ` [PATCH 07/18] m68k: remove big kernel lock Arnd Bergmann @ 2010-09-14 19:40 ` Arnd Bergmann 2010-09-14 19:40 ` [PATCH 09/18] sh: kill " Arnd Bergmann 9 siblings, 0 replies; 21+ messages in thread From: Arnd Bergmann @ 2010-09-14 19:40 UTC (permalink / raw) To: linux-kernel The parisc version of the perf code is sufficiently protected by its own spinlock, no need to use the BKL. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Cc: Kyle McMartin <kyle@mcmartin.ca> Cc: Helge Deller <deller@gmx.de> Cc: "James E.J. Bottomley" <jejb@parisc-linux.org> Cc: linux-parisc@vger.kernel.org --- arch/parisc/kernel/perf.c | 4 ---- 1 files changed, 0 insertions(+), 4 deletions(-) diff --git a/arch/parisc/kernel/perf.c b/arch/parisc/kernel/perf.c index f9f6783..ba0c053 100644 --- a/arch/parisc/kernel/perf.c +++ b/arch/parisc/kernel/perf.c @@ -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; } -- 1.7.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 09/18] sh: kill big kernel lock [not found] <1284493139-7233-1-git-send-email-arnd@arndb.de> ` (8 preceding siblings ...) 2010-09-14 19:40 ` [PATCH 08/18] parisc: " Arnd Bergmann @ 2010-09-14 19:40 ` Arnd Bergmann 9 siblings, 0 replies; 21+ messages in thread From: Arnd Bergmann @ 2010-09-14 19:40 UTC (permalink / raw) To: linux-kernel The only BKL user in arch/sh protects a single bit, so we can trivially replace it with test_and_set_bit. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Cc: Paul Mundt <lethal@linux-sh.org> Cc: linux-sh@vger.kernel.org --- arch/sh/kernel/ptrace_64.c | 9 +++------ 1 files changed, 3 insertions(+), 6 deletions(-) diff --git a/arch/sh/kernel/ptrace_64.c b/arch/sh/kernel/ptrace_64.c index 5fd644d..178b6b0 100644 --- a/arch/sh/kernel/ptrace_64.c +++ b/arch/sh/kernel/ptrace_64.c @@ -20,7 +20,7 @@ #include <linux/sched.h> #include <linux/mm.h> #include <linux/smp.h> -#include <linux/smp_lock.h> +#include <linux/bitops.h> #include <linux/errno.h> #include <linux/ptrace.h> #include <linux/user.h> @@ -395,10 +395,9 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) asmlinkage int sh64_ptrace(long request, long pid, long addr, long data) { #define WPC_DBRMODE 0x0d104008 - static int first_call = 1; + static unsigned long first_call; - lock_kernel(); - if (first_call) { + if (!test_and_set_bit(0, &first_call)) { /* Set WPC.DBRMODE to 0. This makes all debug events get * delivered through RESVEC, i.e. into the handlers in entry.S. * (If the kernel was downloaded using a remote gdb, WPC.DBRMODE @@ -408,9 +407,7 @@ asmlinkage int sh64_ptrace(long request, long pid, long addr, long data) * the remote gdb.) */ printk("DBRMODE set to 0 to permit native debugging\n"); poke_real_address_q(WPC_DBRMODE, 0); - first_call = 0; } - unlock_kernel(); return sys_ptrace(request, pid, addr, data); } -- 1.7.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 00/18] Make the big kernel lock optional @ 2010-09-14 19:34 Arnd Bergmann 2010-09-14 19:35 ` [PATCH 15/18] dvb/bt8xx: kill the big kernel lock Arnd Bergmann 0 siblings, 1 reply; 21+ messages in thread From: Arnd Bergmann @ 2010-09-14 19:34 UTC (permalink / raw) To: arnd Cc: linux-sh, Roman Zippel, linux-pci, Heiko Carstens, Bob Picco, Jaroslav Kysela, Stephen Rothwell, Jesper Nilsson, Mark Gross, Helge Deller, James E.J. Bottomley, Geert Uytterhoeven, Matt Turner, linux-media, user-mode-linux-devel, linux-s390, Clemens Ladisch, Jeff Dike, Mauro Carvalho Chehab, Mikael Starvik, Tejun Heo, linux-m68k, Ivan Kokshaysky, Jesse Barnes, Thomas This is a set of simple patches to remove the big kernel lock in some remaining areas and introduce a Kconfig option which I'd like to have included in linux-next and get included in the 2.6.37 merge window. I have a total of five topic branches, which together remove the BKL from all code except those modules which get marked as 'depends on BKL' in the final patch of this series. It's fine if maintainers want to add some of these patches to their own queue, as long as they all make it into linux-next. Stephen, please add git+ssh://master.kernel.org/pub/scm/linux/kernel/git/arnd/bkl.git config Arnd Bergmann (17): hpet: kill BKL, add compat_ioctl proc/pci: kill BKL s390/block: kill the big kernel lock isapnp: BKL removal alpha: kill big kernel lock cris: autoconvert trivial BKL users m68k: remove big kernel lock parisc: remove big kernel lock sh: kill big kernel lock uml: kill big kernel lock tlclk: remove big kernel lock i4l: kill big kernel lock misdn: kill big kernel lock dvb/bt8xx: kill the big kernel lock dvb-core: kill the big kernel lock rtmutex-tester: make it build without BKL BKL: introduce CONFIG_BKL. Al Viro (1): fix rawctl compat ioctls breakage on amd64 and itanic arch/alpha/kernel/osf_sys.c | 5 - arch/alpha/kernel/traps.c | 3 - arch/cris/arch-v10/drivers/ds1302.c | 7 +- arch/cris/arch-v10/drivers/pcf8563.c | 6 +- arch/cris/arch-v10/drivers/sync_serial.c | 11 +- arch/cris/arch-v32/drivers/cryptocop.c | 4 +- arch/cris/arch-v32/drivers/mach-a3/gpio.c | 11 +- arch/cris/arch-v32/drivers/mach-fs/gpio.c | 11 +- arch/cris/arch-v32/drivers/pcf8563.c | 6 +- arch/cris/arch-v32/drivers/sync_serial.c | 11 +- arch/m68k/kernel/sys_m68k.c | 7 +- arch/parisc/kernel/perf.c | 4 - arch/sh/kernel/ptrace_64.c | 9 +- arch/um/drivers/harddog_kern.c | 13 +- arch/um/drivers/hostaudio_kern.c | 8 +- arch/um/drivers/ubd_kern.c | 8 +- arch/um/kernel/exec.c | 2 - drivers/char/hpet.c | 98 +++++++---- drivers/char/raw.c | 243 +++++++++++++++----------- drivers/char/tlclk.c | 6 +- drivers/gpu/drm/Kconfig | 5 +- drivers/isdn/capi/Kconfig | 2 +- drivers/isdn/i4l/isdn_tty.c | 11 +- drivers/isdn/mISDN/stack.c | 7 - drivers/media/Kconfig | 1 + drivers/media/dvb/bt8xx/dst_ca.c | 7 +- drivers/media/dvb/dvb-core/dmxdev.c | 17 +-- drivers/media/dvb/dvb-core/dvb_ca_en50221.c | 8 +- drivers/media/dvb/dvb-core/dvb_net.c | 9 +- drivers/media/dvb/dvb-core/dvbdev.c | 17 +- drivers/net/appletalk/Kconfig | 1 + drivers/pci/proc.c | 4 +- drivers/pnp/isapnp/proc.c | 13 +- drivers/s390/block/dasd.c | 6 - drivers/s390/block/dasd_ioctl.c | 17 +-- drivers/s390/block/dcssblk.c | 5 - drivers/staging/cx25821/Kconfig | 1 + drivers/staging/easycap/Kconfig | 1 + drivers/staging/go7007/Kconfig | 1 + drivers/staging/usbip/Kconfig | 2 +- drivers/usb/gadget/Kconfig | 2 +- fs/Kconfig | 1 + fs/adfs/Kconfig | 1 + fs/afs/Kconfig | 1 + fs/autofs/Kconfig | 1 + fs/autofs4/Kconfig | 1 + fs/ceph/Kconfig | 1 + fs/coda/Kconfig | 1 + fs/compat_ioctl.c | 70 -------- fs/ecryptfs/Kconfig | 1 + fs/freevxfs/Kconfig | 1 + fs/hpfs/Kconfig | 1 + fs/jffs2/Kconfig | 1 + fs/ncpfs/Kconfig | 1 + fs/nfs/Kconfig | 1 + fs/nfsd/Kconfig | 1 + fs/ocfs2/Kconfig | 1 + fs/qnx4/Kconfig | 1 + fs/reiserfs/Kconfig | 1 + fs/smbfs/Kconfig | 1 + fs/squashfs/Kconfig | 1 + fs/udf/Kconfig | 1 + fs/ufs/Kconfig | 1 + include/linux/smp_lock.h | 7 +- init/Kconfig | 2 +- kernel/rtmutex-tester.c | 6 + kernel/trace/Kconfig | 1 + lib/Kconfig.debug | 9 + net/ipx/Kconfig | 1 + net/irda/Kconfig | 1 + net/irda/irnet/Kconfig | 1 + net/x25/Kconfig | 1 + 72 files changed, 355 insertions(+), 375 deletions(-) Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Arjan van de Ven <arjan@linux.intel.com> Cc: Bob Picco <bob.picco@hp.com> Cc: Clemens Ladisch <clemens@ladisch.de> Cc: Geert Uytterhoeven <geert@linux-m68k.org> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Helge Deller <deller@gmx.de> Cc: Ingo Molnar <mingo@elte.hu> Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru> Cc: "James E.J. Bottomley" <jejb@parisc-linux.org> Cc: Jaroslav Kysela <perex@perex.cz> Cc: Jeff Dike <jdike@addtoit.com> Cc: Jesper Nilsson <jesper.nilsson@axis.com> Cc: Jesse Barnes <jbarnes@virtuousgeek.org> Cc: Karsten Keil <isdn@linux-pingi.de> Cc: Kyle McMartin <kyle@mcmartin.ca> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Mark Gross <mark.gross@intel.com> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: Matt Turner <mattst88@gmail.com> Cc: Mauro Carvalho Chehab <mchehab@infradead.org> Cc: Mikael Starvik <starvik@axis.com> Cc: Paul Mundt <lethal@linux-sh.org> Cc: Richard Henderson <rth@twiddle.net> Cc: Roman Zippel <zippel@linux-m68k.org> Cc: Stephen Rothwell <sfr@canb.auug.org.au> Cc: Tejun Heo <tj@kernel.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: linux-alpha@vger.kernel.org Cc: linux-cris-kernel@axis.com Cc: linux-m68k@lists.linux-m68k.org Cc: linux-media@vger.kernel.org Cc: linux-parisc@vger.kernel.org Cc: linux-pci@vger.kernel.org Cc: linux-s390@vger.kernel.org Cc: linux-sh@vger.kernel.org Cc: netdev@vger.kernel.org Cc: user-mode-linux-devel@lists.sourceforge.net ------------------------------------------------------------------------------ Start uncovering the many advantages of virtual appliances and start using them to simplify application deployment and accelerate your shift to cloud computing. http://p.sf.net/sfu/novell-sfdev2dev ^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH 15/18] dvb/bt8xx: kill the big kernel lock 2010-09-14 19:34 [PATCH 00/18] Make the big kernel lock optional Arnd Bergmann @ 2010-09-14 19:35 ` Arnd Bergmann 0 siblings, 0 replies; 21+ messages in thread From: Arnd Bergmann @ 2010-09-14 19:35 UTC (permalink / raw) To: arnd; +Cc: linux-media, Mauro Carvalho Chehab The bt8xx driver only uses the big kernel lock in its dst_ca_ioctl function and never to serialize against other code, so we can trivially replace it with a private mutex. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Cc: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab <mchehab@infradead.org> --- drivers/media/dvb/bt8xx/dst_ca.c | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/media/dvb/bt8xx/dst_ca.c b/drivers/media/dvb/bt8xx/dst_ca.c index cf87051..d75788b 100644 --- a/drivers/media/dvb/bt8xx/dst_ca.c +++ b/drivers/media/dvb/bt8xx/dst_ca.c @@ -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; } -- 1.7.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
end of thread, other threads:[~2010-09-15 9:31 UTC | newest] Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <1284493139-7233-1-git-send-email-arnd@arndb.de> 2010-09-14 19:40 ` [PATCH 00/18] Make the big kernel lock optional Arnd Bergmann 2010-09-14 19:55 ` [PATCH 10/18] uml: kill big kernel lock Arnd Bergmann 2010-09-14 19:55 ` [PATCH 11/18] fix rawctl compat ioctls breakage on amd64 and itanic Arnd Bergmann 2010-09-14 19:55 ` [PATCH 12/18] tlclk: remove big kernel lock Arnd Bergmann 2010-09-14 19:55 ` [PATCH 13/18] i4l: kill " Arnd Bergmann 2010-09-14 19:55 ` [PATCH 14/18] misdn: " Arnd Bergmann 2010-09-14 19:55 ` [PATCH 15/18] dvb/bt8xx: kill the " Arnd Bergmann 2010-09-14 19:55 ` [PATCH 16/18] dvb-core: " Arnd Bergmann 2010-09-14 19:55 ` [PATCH 17/18] rtmutex-tester: make it build without BKL Arnd Bergmann 2010-09-14 19:55 ` [PATCH 18/18] BKL: introduce CONFIG_BKL Arnd Bergmann 2010-09-14 19:40 ` [PATCH 01/18] hpet: kill BKL, add compat_ioctl Arnd Bergmann 2010-09-14 19:40 ` [PATCH 02/18] proc/pci: kill BKL Arnd Bergmann 2010-09-14 19:40 ` [PATCH 03/18] s390/block: kill the big kernel lock Arnd Bergmann 2010-09-14 19:40 ` [PATCH 04/18] isapnp: BKL removal Arnd Bergmann 2010-09-15 9:31 ` Will Newton 2010-09-14 19:40 ` [PATCH 05/18] alpha: kill big kernel lock Arnd Bergmann 2010-09-14 19:40 ` [PATCH 06/18] cris: autoconvert trivial BKL users Arnd Bergmann 2010-09-14 19:40 ` [PATCH 07/18] m68k: remove big kernel lock Arnd Bergmann 2010-09-14 19:40 ` [PATCH 08/18] parisc: " Arnd Bergmann 2010-09-14 19:40 ` [PATCH 09/18] sh: kill " Arnd Bergmann 2010-09-14 19:34 [PATCH 00/18] Make the big kernel lock optional Arnd Bergmann 2010-09-14 19:35 ` [PATCH 15/18] dvb/bt8xx: kill the big kernel lock Arnd Bergmann
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.