Re: [GIT, RFC] Killing the Big Kernel Lock

From: Arnd Bergmann
Date: Thu Mar 25 2010 - 06:28:05 EST


On Wednesday 24 March 2010, Andrew Morton wrote:
> On Wed, 24 Mar 2010 22:40:54 +0100 Arnd Bergmann <arnd@xxxxxxxx> wrote:
>
> > I've spent some time continuing the work of the people on Cc and many others
> > to remove the big kernel lock from Linux
>
> <looks inside ptrace.c>
>
> Seems that there might be a few tricksy bits in here. Please do push
> at least the non-obvious parts out to the relevant people.

Sure, that is certainly the plan.

Regarding the ptrace bits, this is one of a handful of places where the BKL
was put in by someone a really long time ago but with the rest of the
series applied, it becomes evident that there is nothing whatsoever that
it serializes with, so removing the BKL here does not make the situation
worse. It could still be a bug that needs to be fixed by adding a new
serialization method no matter if the BKL is there or not.

> It'd be interesting to see the overall diffstat?

Let me give you three separate diffstats. One is for the trivial pushdown of
the BKL into all the ioctl and llseek functions as well as marking all
remaining users as 'depends on BKL' in Kconfig, the second one is for the
TTY layer conversion to the Big TTY Mutex and the third one is all the rest.

Arnd

---
Big TTY Mutex conversion:
drivers/char/Makefile | 2 +
drivers/char/amiserial.c | 16 ++--
drivers/char/cyclades.c | 20 ++--
drivers/char/epca.c | 4 +-
drivers/char/isicom.c | 10 +-
drivers/char/istallion.c | 20 ++--
drivers/char/mxser.c | 10 +-
drivers/char/n_hdlc.c | 16 ++--
drivers/char/n_r3964.c | 10 +-
drivers/char/pty.c | 8 +-
drivers/char/riscom8.c | 8 +-
drivers/char/rocket.c | 8 +-
drivers/char/serial167.c | 4 +-
drivers/char/specialix.c | 10 +-
drivers/char/stallion.c | 12 ++--
drivers/char/sx.c | 12 ++--
drivers/char/synclink.c | 10 ++-
drivers/char/synclink_gt.c | 8 +-
drivers/char/synclinkmp.c | 12 ++--
drivers/char/tty_buffer.c | 2 +-
drivers/char/tty_io.c | 123 +++++++++++++++------------
drivers/char/tty_ioctl.c | 36 ++++----
drivers/char/tty_ldisc.c | 53 +++++++-----
drivers/char/tty_lock.c | 100 ++++++++++++++++++++++
drivers/char/tty_port.c | 6 +-
drivers/char/vc_screen.c | 4 +-
drivers/char/vt.c | 4 +-
drivers/char/vt_ioctl.c | 12 ++--
drivers/isdn/i4l/isdn_common.c | 20 ++--
drivers/isdn/i4l/isdn_tty.c | 8 +-
drivers/net/irda/irtty-sir.c | 5 +-
drivers/net/ppp_generic.c | 29 +++---
drivers/serial/68360serial.c | 4 +-
drivers/serial/crisv10.c | 8 +-
drivers/serial/serial_core.c | 42 +++++-----
drivers/staging/strip/strip.c | 2 +-
drivers/usb/class/cdc-acm.c | 2 +-
drivers/usb/serial/usb-serial.c | 18 ++--
drivers/video/console/vgacon.c | 4 +-
include/linux/init_task.h | 1 +
include/linux/sched.h | 1 +
include/linux/tty.h | 180 +++++++++++++++++++++++++++++++++++++++
kernel/fork.c | 1 +


ioctl/llseek pushdown, Kconfig:
43 files changed, 590 insertions(+), 275 deletions(-)
Documentation/DocBook/kernel-hacking.tmpl | 2 +-
Documentation/filesystems/vfs.txt | 3 +-
arch/arm/kernel/etm.c | 1 -
arch/cris/arch-v10/drivers/ds1302.c | 3 -
arch/cris/arch-v10/drivers/gpio.c | 2 -
arch/cris/arch-v10/drivers/i2c.c | 2 -
arch/cris/arch-v10/drivers/pcf8563.c | 3 -
arch/cris/arch-v10/drivers/sync_serial.c | 4 +-
arch/cris/arch-v32/drivers/cryptocop.c | 4 +-
arch/cris/arch-v32/drivers/i2c.c | 2 -
arch/cris/arch-v32/drivers/mach-a3/gpio.c | 2 -
arch/cris/arch-v32/drivers/mach-fs/gpio.c | 2 -
arch/cris/arch-v32/drivers/pcf8563.c | 5 +-
arch/cris/arch-v32/drivers/sync_serial.c | 4 +-
arch/ia64/kernel/perfmon.c | 2 -
arch/ia64/sn/kernel/sn2/sn_hwperf.c | 2 -
arch/m68k/bvme6000/rtc.c | 2 -
arch/m68k/mvme16x/rtc.c | 2 -
arch/powerpc/platforms/iseries/Kconfig | 1 -
arch/s390/Kconfig | 1 -
arch/um/drivers/harddog_kern.c | 2 -
arch/um/drivers/hostaudio_kern.c | 3 -
arch/um/drivers/mmapper_kern.c | 3 -
arch/x86/Kconfig | 3 +-
arch/x86/kvm/Kconfig | 1 -
drivers/block/DAC960.c | 3 +-
drivers/block/Kconfig | 6 +-
drivers/block/paride/pg.c | 2 -
drivers/block/paride/pt.c | 2 -
drivers/block/pktcdvd.c | 3 -
drivers/char/Kconfig | 25 +-
drivers/char/apm-emulation.c | 2 -
drivers/char/applicom.c | 2 -
drivers/char/ds1302.c | 1 -
drivers/char/ds1620.c | 2 -
drivers/char/dtlk.c | 2 -
drivers/char/generic_nvram.c | 2 -
drivers/char/genrtc.c | 2 -
drivers/char/i8k.c | 2 -
drivers/char/ip2/ip2main.c | 1 -
drivers/char/ipmi/Kconfig | 2 -
drivers/char/ipmi/ipmi_devintf.c | 2 -
drivers/char/ipmi/ipmi_watchdog.c | 2 -
drivers/char/istallion.c | 1 -
drivers/char/lp.c | 1 -
drivers/char/mmtimer.c | 1 -
drivers/char/nwflash.c | 1 -
drivers/char/pcmcia/Kconfig | 4 +-
drivers/char/raw.c | 4 -
drivers/char/rio/rio_linux.c | 1 -
drivers/char/stallion.c | 1 -
drivers/char/sx.c | 1 -
drivers/char/uv_mmtimer.c | 1 -
drivers/char/viotape.c | 1 -
drivers/crypto/Kconfig | 2 +-
drivers/firewire/Kconfig | 1 -
drivers/firewire/core-cdev.c | 2 -
drivers/gpu/drm/Kconfig | 5 +-
drivers/gpu/drm/i810/i810_dma.c | 2 -
drivers/gpu/drm/i830/i830_dma.c | 2 -
drivers/hid/Kconfig | 2 +-
drivers/hid/usbhid/Kconfig | 2 +-
drivers/hid/usbhid/hiddev.c | 3 +-
drivers/hwmon/Kconfig | 2 +-
drivers/hwmon/fschmd.c | 2 -
drivers/ide/Kconfig | 1 -
drivers/ide/ide-tape.c | 1 -
drivers/ieee1394/Kconfig | 6 +-
drivers/ieee1394/dv1394.c | 2 -
drivers/ieee1394/raw1394.c | 2 -
drivers/ieee1394/video1394.c | 4 +-
drivers/infiniband/Kconfig | 6 +-
drivers/infiniband/core/ucm.c | 2 -
drivers/infiniband/core/ucma.c | 2 -
drivers/infiniband/core/user_mad.c | 3 -
drivers/infiniband/core/uverbs_main.c | 11 +-
drivers/input/joystick/Kconfig | 2 +-
drivers/input/misc/Kconfig | 13 +-
drivers/input/misc/hp_sdc_rtc.c | 2 -
drivers/input/misc/uinput.c | 1 -
drivers/input/mouse/Kconfig | 4 +-
drivers/input/serio/Kconfig | 1 -
drivers/input/tablet/Kconfig | 8 +-
drivers/input/touchscreen/Kconfig | 2 +-
drivers/isdn/Kconfig | 2 -
drivers/isdn/capi/Kconfig | 2 +-
drivers/isdn/capi/capi.c | 1 -
drivers/isdn/divert/divert_procfs.c | 2 -
drivers/isdn/hardware/eicon/Kconfig | 2 +-
drivers/isdn/hysdn/Kconfig | 2 +-
drivers/isdn/i4l/Kconfig | 1 -
drivers/isdn/i4l/isdn_common.c | 1 -
drivers/isdn/mISDN/Kconfig | 1 -
drivers/isdn/mISDN/timerdev.c | 3 -
drivers/macintosh/Kconfig | 7 +-
drivers/macintosh/ans-lcd.c | 2 -
drivers/macintosh/nvram.c | 2 -
drivers/macintosh/via-pmu.c | 2 -
drivers/media/Kconfig | 5 +-
drivers/media/dvb/bt8xx/Kconfig | 2 +-
drivers/media/dvb/bt8xx/dst_ca.c | 1 -
drivers/media/dvb/dvb-core/dmxdev.c | 3 -
drivers/media/dvb/dvb-core/dvb_ca_en50221.c | 3 -
drivers/media/dvb/dvb-core/dvb_frontend.c | 5 +-
drivers/media/dvb/dvb-core/dvb_net.c | 3 -
drivers/media/dvb/firewire/Kconfig | 2 +-
drivers/media/dvb/firewire/firedtv-ci.c | 3 -
drivers/media/dvb/ttpci/Kconfig | 2 +-
drivers/media/dvb/ttpci/av7110.c | 3 -
drivers/media/dvb/ttpci/av7110_av.c | 5 -
drivers/media/dvb/ttpci/av7110_ca.c | 3 -
drivers/media/video/Kconfig | 13 +-
drivers/media/video/cpia.c | 2 -
drivers/media/video/v4l2-dev.c | 2 -
drivers/message/fusion/Kconfig | 2 +-
drivers/message/i2o/Kconfig | 2 +-
drivers/misc/Kconfig | 2 +-
drivers/mtd/Kconfig | 1 -
drivers/mtd/mtdchar.c | 1 -
drivers/mtd/ubi/Kconfig | 2 +-
drivers/mtd/ubi/cdev.c | 2 -
drivers/net/Kconfig | 1 -
drivers/net/appletalk/Kconfig | 1 -
drivers/net/ppp_generic.c | 4 +-
drivers/net/wan/Kconfig | 2 +-
drivers/net/wireless/Kconfig | 4 +-
drivers/net/wireless/airo.c | 9 -
drivers/net/wireless/ray_cs.c | 3 -
drivers/pci/hotplug/Kconfig | 2 +-
drivers/pcmcia/Kconfig | 3 +-
drivers/platform/x86/Kconfig | 1 -
drivers/pnp/isapnp/Kconfig | 2 +-
drivers/rtc/Kconfig | 1 -
drivers/rtc/rtc-m41t80.c | 1 -
drivers/s390/block/Kconfig | 2 +-
drivers/s390/char/Kconfig | 2 +-
drivers/s390/char/fs3270.c | 1 -
drivers/s390/char/tape_char.c | 2 +-
drivers/s390/cio/chsc_sch.c | 2 -
drivers/s390/crypto/zcrypt_api.c | 1 -
drivers/s390/scsi/zfcp_cfdc.c | 2 -
drivers/sbus/char/envctrl.c | 1 -
drivers/sbus/char/openprom.c | 1 -
drivers/scsi/3w-9xxx.c | 2 -
drivers/scsi/3w-sas.c | 2 -
drivers/scsi/3w-xxxx.c | 2 -
drivers/scsi/Kconfig | 28 +-
drivers/scsi/aacraid/linit.c | 1 -
drivers/scsi/dpt_i2o.c | 2 -
drivers/scsi/gdth.c | 2 -
drivers/scsi/megaraid.c | 2 -
drivers/scsi/megaraid/Kconfig.megaraid | 6 +-
drivers/scsi/megaraid/megaraid_mm.c | 2 -
drivers/scsi/megaraid/megaraid_sas.c | 1 -
drivers/scsi/mpt2sas/Kconfig | 2 +-
drivers/scsi/mpt2sas/mpt2sas_ctl.c | 1 -
drivers/scsi/osd/Kconfig | 2 +-
drivers/scsi/osd/osd_uld.c | 2 -
drivers/scsi/osst.c | 2 -
drivers/scsi/pmcraid.c | 2 -
drivers/scsi/st.c | 1 -
drivers/spi/spidev.c | 2 -
drivers/staging/comedi/comedi_fops.c | 2 -
drivers/staging/dream/pmem.c | 3 -
drivers/staging/dream/qdsp5/audio_aac.c | 2 -
drivers/staging/dream/qdsp5/audio_mp3.c | 2 -
drivers/staging/poch/poch.c | 3 -
drivers/staging/sep/sep_driver.c | 2 -
drivers/staging/vme/devices/vme_user.c | 2 -
drivers/telephony/Kconfig | 2 +-
drivers/telephony/ixj.c | 1 -
drivers/usb/Kconfig | 2 +-
drivers/usb/class/Kconfig | 1 -
drivers/usb/class/usblp.c | 2 -
drivers/usb/gadget/Kconfig | 2 -
drivers/usb/gadget/printer.c | 1 -
drivers/usb/host/Kconfig | 2 +-
drivers/usb/misc/Kconfig | 8 +-
drivers/usb/misc/idmouse.c | 2 -
drivers/usb/misc/iowarrior.c | 1 -
drivers/usb/misc/rio500.c | 1 -
drivers/usb/misc/sisusbvga/Kconfig | 2 +-
fs/adfs/Kconfig | 1 -
fs/afs/Kconfig | 1 -
fs/autofs/Kconfig | 1 -
fs/autofs/root.c | 1 -
fs/autofs4/Kconfig | 1 -
fs/autofs4/dev-ioctl.c | 2 -
fs/btrfs/super.c | 1 -
fs/coda/Kconfig | 1 -
fs/coda/pioctl.c | 3 -
fs/coda/psdev.c | 2 -
fs/ecryptfs/Kconfig | 1 -
fs/ecryptfs/file.c | 2 -
fs/ecryptfs/miscdev.c | 2 -
fs/fat/Kconfig | 3 -
fs/freevxfs/Kconfig | 1 -
fs/hfsplus/Kconfig | 1 -
fs/hfsplus/dir.c | 2 -
fs/hfsplus/inode.c | 2 -
fs/hpfs/Kconfig | 1 -
fs/ioctl.c | 11 +-
fs/isofs/Kconfig | 1 -
fs/jffs2/Kconfig | 1 -
fs/ncpfs/Kconfig | 1 -
fs/ncpfs/dir.c | 2 -
fs/ncpfs/file.c | 1 -
fs/nfs/Kconfig | 2 +-
fs/nfsd/Kconfig | 1 -
fs/ocfs2/Kconfig | 1 -
fs/qnx4/Kconfig | 1 -
fs/read_write.c | 34 +
fs/reiserfs/Kconfig | 1 -
fs/smbfs/Kconfig | 1 -
fs/smbfs/dir.c | 2 -
fs/smbfs/file.c | 1 -
fs/squashfs/Kconfig | 1 -
fs/udf/Kconfig | 1 -
fs/udf/dir.c | 2 -
fs/udf/file.c | 1 -
fs/ufs/Kconfig | 2 +-
include/linux/fs.h | 5 +
kernel/power/Kconfig | 2 +-
lib/Kconfig.debug | 2 +-
lib/kernel_lock.c | 37 +-
net/bluetooth/hidp/Kconfig | 1 -
net/ipx/Kconfig | 1 -
net/irda/Kconfig | 2 +-
net/irda/irnet/Kconfig | 2 +-
net/socket.c | 1 -
net/sunrpc/Kconfig | 4 +-
net/wanrouter/Kconfig | 2 +-
net/x25/Kconfig | 2 +-
sound/Kconfig | 2 +-
sound/core/control.c | 2 -
sound/core/oss/pcm_oss.c | 2 -
sound/core/pcm_native.c | 2 -
sound/core/seq/seq_clientmgr.c | 2 -
sound/oss/au1550_ac97.c | 30 +-
sound/oss/dmasound/dmasound_core.c | 2 -
sound/oss/msnd_pinnacle.c | 2 -
sound/oss/sh_dac_audio.c | 3 -
sound/oss/swarm_cs4297a.c | 3 -
sound/oss/vwsnd.c | 2 -
sound/soc/soc-core.c | 2 -
virt/kvm/kvm_main.c | 1 -
248 files changed, 190 insertions(+), 516 deletions(-)

The rest:
arch/arm/lib/uaccess_with_memcpy.c | 1 +
arch/x86/configs/x86_64_defconfig | 29 +-
arch/x86/kernel/microcode_core.c | 6 +-
block/bsg.c | 2 -
block/compat_ioctl.c | 8 +-
block/ioctl.c | 24 +-
drivers/block/DAC960.c | 4 +-
drivers/block/aoe/aoechr.c | 6 +-
drivers/block/cciss.c | 4 +-
drivers/block/paride/pg.c | 4 +-
drivers/block/paride/pt.c | 16 +-
drivers/char/briq_panel.c | 1 +
drivers/char/dsp56k.c | 1 +
drivers/char/hpet.c | 96 +++--
drivers/char/mwave/mwavedd.c | 1 +
drivers/char/nvram.c | 7 +-
drivers/char/pcmcia/cm4000_cs.c | 1 +
drivers/char/pcmcia/cm4040_cs.c | 1 +
drivers/char/random.c | 2 +
drivers/char/snsc.c | 1 +
drivers/char/tlclk.c | 1 +
drivers/char/toshiba.c | 1 +
drivers/char/xilinx_hwicap/xilinx_hwicap.c | 1 +
drivers/gpu/vga/vgaarb.c | 4 +-
drivers/hid/hidraw.c | 1 +
drivers/input/serio/serio_raw.c | 1 +
drivers/isdn/capi/capifs.c | 10 +-
drivers/md/dm-ioctl.c | 2 +
drivers/media/dvb/dvb-core/dvbdev.c | 1 +
drivers/misc/phantom.c | 1 +
drivers/pci/proc.c | 4 +-
drivers/pcmcia/pcmcia_ioctl.c | 23 +-
drivers/sbus/char/display7seg.c | 1 +
drivers/sbus/char/jsflash.c | 20 +-
drivers/scsi/aacraid/linit.c | 1 +
drivers/scsi/ch.c | 1 +
drivers/scsi/sg.c | 22 +-
drivers/usb/core/file.c | 1 +
drivers/usb/core/inode.c | 5 +
drivers/usb/gadget/inode.c | 12 +-
drivers/usb/misc/usblcd.c | 1 +
drivers/usb/mon/mon_bin.c | 14 +-
drivers/watchdog/cpwd.c | 1 +
fs/adfs/super.c | 8 +-
fs/affs/super.c | 14 +-
fs/afs/super.c | 5 +
fs/autofs/root.c | 67 +++-
fs/autofs4/root.c | 69 +++-
fs/bad_inode.c | 4 +
fs/bfs/inode.c | 7 +-
fs/block_dev.c | 20 +-
fs/cifs/cifsfs.c | 9 +-
fs/coda/inode.c | 8 +-
fs/compat_ioctl.c | 43 +--
fs/ecryptfs/main.c | 4 +
fs/exec.c | 6 -
fs/exofs/super.c | 1 -
fs/ext2/inode.c | 5 +-
fs/ext2/super.c | 58 ++-
fs/ext3/super.c | 12 -
fs/ext4/super.c | 11 -
fs/fat/dir.c | 11 +-
fs/fat/fat.h | 2 +-
fs/fat/file.c | 33 ++-
fs/fat/namei_msdos.c | 7 +-
fs/fat/namei_vfat.c | 7 +-
fs/freevxfs/vxfs_lookup.c | 1 +
fs/freevxfs/vxfs_super.c | 7 +-
fs/hfs/super.c | 6 +-
fs/hfsplus/super.c | 5 -
fs/hpfs/super.c | 8 +-
fs/hppfs/hppfs.c | 2 +-
fs/ioctl.c | 2 +
fs/isofs/dir.c | 1 +
fs/isofs/inode.c | 8 +-
fs/jffs2/super.c | 11 +-
fs/jfs/super.c | 22 +-
fs/locks.c | 110 +++--
fs/namespace.c | 2 -
fs/ncpfs/inode.c | 8 +-
fs/nfs/super.c | 24 +
fs/nilfs2/ioctl.c | 1 -
fs/nilfs2/super.c | 10 -
fs/ntfs/super.c | 24 +-
fs/ocfs2/stack_user.c | 1 +
fs/ocfs2/super.c | 5 +
fs/proc/base.c | 10 +-
fs/proc/inode.c | 8 +-
fs/qnx4/dir.c | 1 +
fs/qnx4/inode.c | 8 +-
fs/read_write.c | 8 +
fs/reiserfs/super.c | 4 +
fs/smbfs/inode.c | 5 +
fs/squashfs/super.c | 6 +
fs/super.c | 3 -
fs/udf/super.c | 8 +-
fs/ufs/super.c | 5 +
include/linux/auto_fs.h | 1 +
include/linux/blkdev.h | 6 +
include/linux/ext2_fs_sb.h | 6 +
include/linux/fs.h | 2 +
include/linux/sched.h | 2 +
include/linux/smp_lock.h | 57 ++-
init/main.c | 5 -
kernel/cgroup.c | 4 -
kernel/perf_event.c | 2 +
kernel/ptrace.c | 10 -
kernel/sched.c | 17 +
kernel/trace/blktrace.c | 14 +-
kernel/trace/trace.c | 8 -
lib/Kconfig.debug | 17 +
lib/Makefile | 4 +
lib/kernel_lock.c | 104 +-----
lib/kernel_lock_core.c | 307 +++++++++++++
net/sunrpc/cache.c | 30 +-
net/sunrpc/rpc_pipe.c | 9 +-
sound/core/timer.c | 5 +-
sound/sound_core.c | 1 +
virt/kvm/kvm_main.c | 6 +
120 files changed, 1156 insertions(+), 540 deletions(-)

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/