lkml.org 
[lkml]   [2010]   [Mar]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [GIT, RFC] Killing the Big Kernel Lock
    Date
    On Wednesday 24 March 2010, Andrew Morton wrote:
    > On Wed, 24 Mar 2010 22:40:54 +0100 Arnd Bergmann <arnd@arndb.de> 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(-)



    \
     
     \ /
      Last update: 2010-03-25 11:31    [W:4.226 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site