* [PATCH 00/12] autoconvert trivial BKL users to private mutex @ 2010-07-11 21:18 Arnd Bergmann 2010-07-11 21:19 ` [PATCH 10/12] mac: " Arnd Bergmann 0 siblings, 1 reply; 2+ messages in thread From: Arnd Bergmann @ 2010-07-11 21:18 UTC (permalink / raw) To: linux-kernel Cc: devel, Jesper Nilsson, linux-usb, Arnd Bergmann, Corey Minyard, linux-cris-kernel, Frederic Weisbecker, Greg Kroah-Hartman, Karsten Keil, Mauro Carvalho Chehab, linux-scsi, linuxppc-dev, James E.J. Bottomley, linux-mtd, John Kacur, netdev, linux-media, openipmi-developer, David S. Miller, David Woodhouse This is a repost of an earlier patch to remove those users of the big kernel lock that can be converted to a mutex using a simple script. The only use of the BKL is in file operations that are called without any other lock, so the new mutex is the top-level serialization and cannot introduce any AB-BA deadlock. Please apply to the respective maintainer trees if the patches look good. Arnd Bergmann (12): staging: autoconvert trivial BKL users to private mutex isdn: autoconvert trivial BKL users to private mutex scsi: autoconvert trivial BKL users to private mutex media: autoconvert trivial BKL users to private mutex usb: autoconvert trivial BKL users to private mutex net: autoconvert trivial BKL users to private mutex cris: autoconvert trivial BKL users to private mutex sbus: autoconvert trivial BKL users to private mutex mtd: autoconvert trivial BKL users to private mutex mac: autoconvert trivial BKL users to private mutex ipmi: autoconvert trivial BKL users to private mutex drivers: autoconvert trivial BKL users to private mutex arch/cris/arch-v10/drivers/eeprom.c | 2 - arch/cris/arch-v10/drivers/i2c.c | 2 - arch/cris/arch-v32/drivers/cryptocop.c | 2 - arch/cris/arch-v32/drivers/i2c.c | 12 ++++---- drivers/block/paride/pg.c | 7 ++-- drivers/block/paride/pt.c | 19 ++++++------ drivers/char/apm-emulation.c | 11 ++++--- drivers/char/applicom.c | 9 +++-- drivers/char/ds1302.c | 15 +++++---- drivers/char/ds1620.c | 8 ++-- drivers/char/dsp56k.c | 27 +++++++++-------- drivers/char/dtlk.c | 8 ++-- drivers/char/generic_nvram.c | 7 ++-- drivers/char/genrtc.c | 13 ++++---- drivers/char/i8k.c | 7 ++-- drivers/char/ip2/ip2main.c | 8 ++-- drivers/char/ipmi/ipmi_devintf.c | 14 ++++---- drivers/char/ipmi/ipmi_watchdog.c | 8 ++-- drivers/char/lp.c | 15 +++++---- drivers/char/mbcs.c | 8 ++-- drivers/char/mmtimer.c | 7 ++-- drivers/char/mwave/mwavedd.c | 44 ++++++++++++++-------------- drivers/char/nvram.c | 11 ++++--- drivers/char/nwflash.c | 12 ++++---- drivers/char/pcmcia/cm4000_cs.c | 11 ++++--- drivers/char/pcmcia/cm4040_cs.c | 7 ++-- drivers/char/ppdev.c | 8 ++-- drivers/char/rio/rio_linux.c | 7 ++-- drivers/char/snsc.c | 9 +++-- drivers/char/toshiba.c | 9 +++-- drivers/char/viotape.c | 11 ++++--- drivers/char/xilinx_hwicap/xilinx_hwicap.c | 6 ++-- drivers/hwmon/fschmd.c | 6 ++-- drivers/hwmon/w83793.c | 6 ++-- drivers/input/misc/hp_sdc_rtc.c | 7 ++-- drivers/isdn/capi/capi.c | 6 ++-- drivers/isdn/divert/divert_procfs.c | 7 ++-- drivers/isdn/hardware/eicon/divamnt.c | 7 ++-- drivers/isdn/hardware/eicon/divasi.c | 2 - drivers/isdn/hardware/eicon/divasmain.c | 2 - drivers/isdn/hysdn/hysdn_procconf.c | 21 +++++++------ drivers/isdn/hysdn/hysdn_proclog.c | 15 +++++---- drivers/isdn/i4l/isdn_common.c | 27 +++++++++-------- drivers/isdn/mISDN/timerdev.c | 7 ++-- drivers/macintosh/adb.c | 10 +++--- drivers/macintosh/smu.c | 6 ++-- drivers/macintosh/via-pmu.c | 11 ++++--- drivers/media/dvb/bt8xx/dst_ca.c | 7 ++-- drivers/media/video/cx88/cx88-blackbird.c | 13 ++++---- drivers/media/video/dabusb.c | 18 ++++++------ drivers/media/video/se401.c | 9 +++-- drivers/media/video/stradis.c | 9 +++-- drivers/media/video/usbvideo/vicam.c | 14 ++++---- drivers/message/fusion/mptctl.c | 15 +++++---- drivers/message/i2o/i2o_config.c | 23 +++++++------- drivers/misc/phantom.c | 11 ++++--- drivers/mtd/mtdchar.c | 15 +++++---- drivers/net/ppp_generic.c | 19 ++++++------ drivers/net/wan/cosa.c | 10 +++--- drivers/pci/hotplug/cpqphp_sysfs.c | 13 ++++---- drivers/rtc/rtc-m41t80.c | 13 ++++---- drivers/sbus/char/display7seg.c | 8 ++-- drivers/sbus/char/envctrl.c | 2 - drivers/sbus/char/flash.c | 15 +++++---- drivers/sbus/char/openprom.c | 15 +++++---- drivers/sbus/char/uctrl.c | 7 ++-- drivers/scsi/3w-9xxx.c | 7 ++-- drivers/scsi/3w-sas.c | 7 ++-- drivers/scsi/3w-xxxx.c | 9 ++--- drivers/scsi/aacraid/linit.c | 15 +++++---- drivers/scsi/ch.c | 8 ++-- drivers/scsi/dpt_i2o.c | 18 ++++++------ drivers/scsi/gdth.c | 11 ++++--- drivers/scsi/megaraid.c | 8 ++-- drivers/scsi/megaraid/megaraid_mm.c | 8 ++-- drivers/scsi/megaraid/megaraid_sas.c | 2 - drivers/scsi/mpt2sas/mpt2sas_ctl.c | 11 ++++--- drivers/scsi/osst.c | 15 +++++---- drivers/scsi/scsi_tgt_if.c | 2 - drivers/scsi/sg.c | 11 ++++--- drivers/staging/crystalhd/crystalhd_lnx.c | 9 +++-- drivers/staging/dt3155/dt3155_drv.c | 6 ++- drivers/staging/vme/devices/vme_user.c | 7 ++-- drivers/telephony/ixj.c | 7 ++-- drivers/usb/gadget/printer.c | 7 ++-- drivers/usb/misc/iowarrior.c | 15 +++++---- drivers/usb/misc/rio500.c | 15 +++++---- drivers/usb/misc/usblcd.c | 16 +++++----- drivers/watchdog/cpwd.c | 15 +++++---- fs/hfsplus/ioctl.c | 11 ++++--- net/wanrouter/wanmain.c | 7 ++-- net/wanrouter/wanproc.c | 7 ++-- 92 files changed, 505 insertions(+), 469 deletions(-) Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Corey Minyard <minyard@acm.org> Cc: "David S. Miller" <davem@davemloft.net> Cc: David Woodhouse <David.Woodhouse@intel.com> Cc: Greg Kroah-Hartman <gregkh@suse.de> Cc: "James E.J. Bottomley" <James.Bottomley@suse.de> Cc: Jesper Nilsson <jesper.nilsson@axis.com> Cc: Karsten Keil <isdn@linux-pingi.de> Cc: Mauro Carvalho Chehab <mchehab@infradead.org> Cc: netdev@vger.kernel.org Cc: openipmi-developer@lists.sourceforge.net Cc: devel@driverdev.osuosl.org Cc: linux-cris-kernel@axis.com Cc: linux-media@vger.kernel.org Cc: linux-mtd@lists.infradead.org Cc: linuxppc-dev@ozlabs.org Cc: linux-scsi@vger.kernel.org Cc: linux-usb@vger.kernel.org ^ permalink raw reply [flat|nested] 2+ messages in thread
* [PATCH 10/12] mac: autoconvert trivial BKL users to private mutex 2010-07-11 21:18 [PATCH 00/12] autoconvert trivial BKL users to private mutex Arnd Bergmann @ 2010-07-11 21:19 ` Arnd Bergmann 0 siblings, 0 replies; 2+ messages in thread From: Arnd Bergmann @ 2010-07-11 21:19 UTC (permalink / raw) To: linux-kernel; +Cc: John Kacur, Frederic Weisbecker, linuxppc-dev, Arnd Bergmann All these files use the big kernel lock in a trivial way to serialize their private file operations, typically resulting from an earlier semi-automatic pushdown from VFS. None of these drivers appears to want to lock against other code, and they all use the BKL as the top-level lock in their file operations, meaning that there is no lock-order inversion problem. Consequently, we can remove the BKL completely, replacing it with a per-file mutex in every case. Using a scripted approach means we can avoid typos. file=$1 name=$2 if grep -q lock_kernel ${file} ; then if grep -q 'include.*linux.mutex.h' ${file} ; then sed -i '/include.*<linux\/smp_lock.h>/d' ${file} else sed -i 's/include.*<linux\/smp_lock.h>.*$/include <linux\/mutex.h>/g' ${file} fi sed -i ${file} \ -e "/^#include.*linux.mutex.h/,$ { 1,/^\(static\|int\|long\)/ { /^\(static\|int\|long\)/istatic DEFINE_MUTEX(${name}_mutex); } }" \ -e "s/\(un\)*lock_kernel\>[ ]*()/mutex_\1lock(\&${name}_mutex)/g" \ -e '/[ ]*cycle_kernel_lock();/d' else sed -i -e '/include.*\<smp_lock.h\>/d' ${file} \ -e '/cycle_kernel_lock()/d' fi Signed-off-by: Arnd Bergmann <arnd@arndb.de> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: linuxppc-dev@ozlabs.org --- drivers/macintosh/adb.c | 10 +++++----- drivers/macintosh/smu.c | 6 +++--- drivers/macintosh/via-pmu.c | 11 ++++++----- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/drivers/macintosh/adb.c b/drivers/macintosh/adb.c index 1c4ee6e..e75e3be 100644 --- a/drivers/macintosh/adb.c +++ b/drivers/macintosh/adb.c @@ -24,7 +24,6 @@ #include <linux/fs.h> #include <linux/mm.h> #include <linux/sched.h> -#include <linux/smp_lock.h> #include <linux/adb.h> #include <linux/cuda.h> #include <linux/pmu.h> @@ -55,6 +54,7 @@ extern struct adb_driver adb_iop_driver; extern struct adb_driver via_pmu_driver; extern struct adb_driver macio_adb_driver; +static DEFINE_MUTEX(adb_mutex); static struct adb_driver *adb_driver_list[] = { #ifdef CONFIG_ADB_MACII &via_macii_driver, @@ -647,7 +647,7 @@ static int adb_open(struct inode *inode, struct file *file) struct adbdev_state *state; int ret = 0; - lock_kernel(); + mutex_lock(&adb_mutex); if (iminor(inode) > 0 || adb_controller == NULL) { ret = -ENXIO; goto out; @@ -665,7 +665,7 @@ static int adb_open(struct inode *inode, struct file *file) state->inuse = 1; out: - unlock_kernel(); + mutex_unlock(&adb_mutex); return ret; } @@ -674,7 +674,7 @@ static int adb_release(struct inode *inode, struct file *file) struct adbdev_state *state = file->private_data; unsigned long flags; - lock_kernel(); + mutex_lock(&adb_mutex); if (state) { file->private_data = NULL; spin_lock_irqsave(&state->lock, flags); @@ -687,7 +687,7 @@ static int adb_release(struct inode *inode, struct file *file) spin_unlock_irqrestore(&state->lock, flags); } } - unlock_kernel(); + mutex_unlock(&adb_mutex); return 0; } diff --git a/drivers/macintosh/smu.c b/drivers/macintosh/smu.c index 2506c95..8775dd4 100644 --- a/drivers/macintosh/smu.c +++ b/drivers/macintosh/smu.c @@ -19,7 +19,6 @@ * the userland interface */ -#include <linux/smp_lock.h> #include <linux/types.h> #include <linux/kernel.h> #include <linux/device.h> @@ -97,6 +96,7 @@ struct smu_device { * I don't think there will ever be more than one SMU, so * for now, just hard code that */ +static DEFINE_MUTEX(smu_mutex); static struct smu_device *smu; static DEFINE_MUTEX(smu_part_access); static int smu_irq_inited; @@ -1095,12 +1095,12 @@ static int smu_open(struct inode *inode, struct file *file) pp->mode = smu_file_commands; init_waitqueue_head(&pp->wait); - lock_kernel(); + mutex_lock(&smu_mutex); spin_lock_irqsave(&smu_clist_lock, flags); list_add(&pp->list, &smu_clist); spin_unlock_irqrestore(&smu_clist_lock, flags); file->private_data = pp; - unlock_kernel(); + mutex_unlock(&smu_mutex); return 0; } diff --git a/drivers/macintosh/via-pmu.c b/drivers/macintosh/via-pmu.c index 3d4fc0f..28e4822 100644 --- a/drivers/macintosh/via-pmu.c +++ b/drivers/macintosh/via-pmu.c @@ -18,7 +18,7 @@ * */ #include <stdarg.h> -#include <linux/smp_lock.h> +#include <linux/mutex.h> #include <linux/types.h> #include <linux/errno.h> #include <linux/kernel.h> @@ -72,6 +72,7 @@ /* How many iterations between battery polls */ #define BATTERY_POLLING_COUNT 2 +static DEFINE_MUTEX(pmu_info_proc_mutex); static volatile unsigned char __iomem *via; /* VIA registers - spaced 0x200 bytes apart */ @@ -2076,7 +2077,7 @@ pmu_open(struct inode *inode, struct file *file) pp->rb_get = pp->rb_put = 0; spin_lock_init(&pp->lock); init_waitqueue_head(&pp->wait); - lock_kernel(); + mutex_lock(&pmu_info_proc_mutex); spin_lock_irqsave(&all_pvt_lock, flags); #if defined(CONFIG_INPUT_ADBHID) && defined(CONFIG_PMAC_BACKLIGHT) pp->backlight_locker = 0; @@ -2084,7 +2085,7 @@ pmu_open(struct inode *inode, struct file *file) list_add(&pp->list, &all_pmu_pvt); spin_unlock_irqrestore(&all_pvt_lock, flags); file->private_data = pp; - unlock_kernel(); + mutex_unlock(&pmu_info_proc_mutex); return 0; } @@ -2341,9 +2342,9 @@ static long pmu_unlocked_ioctl(struct file *filp, { int ret; - lock_kernel(); + mutex_lock(&pmu_info_proc_mutex); ret = pmu_ioctl(filp, cmd, arg); - unlock_kernel(); + mutex_unlock(&pmu_info_proc_mutex); return ret; } -- 1.7.1 ^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2010-07-11 21:19 UTC | newest] Thread overview: 2+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-07-11 21:18 [PATCH 00/12] autoconvert trivial BKL users to private mutex Arnd Bergmann 2010-07-11 21:19 ` [PATCH 10/12] mac: " Arnd Bergmann
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox