BKL: introduce CONFIG_BKL.
authorArnd Bergmann <arnd@arndb.de>
Sat, 11 Sep 2010 16:00:57 +0000 (18:00 +0200)
committerArnd Bergmann <arnd@arndb.de>
Thu, 21 Oct 2010 13:44:13 +0000 (15:44 +0200)
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>
21 files changed:
drivers/gpu/drm/Kconfig
drivers/media/Kconfig
drivers/net/appletalk/Kconfig
drivers/staging/cx25821/Kconfig
drivers/staging/easycap/Kconfig
drivers/staging/go7007/Kconfig
drivers/staging/usbip/Kconfig
fs/Kconfig
fs/adfs/Kconfig
fs/autofs/Kconfig
fs/hpfs/Kconfig
fs/nfs/Kconfig
fs/nfsd/Kconfig
fs/smbfs/Kconfig
fs/udf/Kconfig
fs/ufs/Kconfig
include/linux/smp_lock.h
init/Kconfig
lib/Kconfig.debug
net/ipx/Kconfig
net/x25/Kconfig

index 4cab0c6397e34654086f57433e1de471d1d87b30..7af443672626d7429fdff1bdcbe1d2d44f5d4b48 100644 (file)
@@ -73,7 +73,8 @@ source "drivers/gpu/drm/radeon/Kconfig"
 
 config DRM_I810
        tristate "Intel I810"
-       depends on DRM && AGP && AGP_INTEL
+       # BKL usage in order to avoid AB-BA deadlocks, may become BROKEN_ON_SMP
+       depends on DRM && AGP && AGP_INTEL && BKL
        help
          Choose this option if you have an Intel I810 graphics card.  If M is
          selected, the module will be called i810.  AGP support is required
@@ -86,6 +87,8 @@ choice
 
 config DRM_I830
        tristate "i830 driver"
+       # BKL usage in order to avoid AB-BA deadlocks, i830 may get removed
+       depends on BKL
        help
          Choose this option if you have a system that has Intel 830M, 845G,
          852GM, 855GM or 865G integrated graphics.  If M is selected, the
index a28541b2b1a219e5a2804f20201191f1ff98c953..bad2cedb8d96886cec38af4b0003c476fbdd11f9 100644 (file)
@@ -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.
index 0a0e0cd81a23a1fd5a16581fca361d7742bfaed4..20f97e7017ceffa5bc85f87f77036d679bc1355e 100644 (file)
@@ -3,6 +3,7 @@
 #
 config ATALK
        tristate "Appletalk protocol support"
+       depends on BKL # waiting to be removed from net/appletalk/ddp.c
        select LLC
        ---help---
          AppleTalk is the protocol that Apple computers can use to communicate
index df7756a95fadee7c8168ca1b1f72a9f11dae6e2c..813cb355ac01645069461b022b165f79054b3ab6 100644 (file)
@@ -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
index bd96f39f2735b375cdeeda41e62b1ef2fac4b314..9d5fe4ddc30a8154f62f0e3e52451a3f69bc39e1 100644 (file)
@@ -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
index e47f683a323e0fb1d2d1a21e45557605eabf6603..75fa46805527c94313b20a89bb9ce4b5c781be58 100644 (file)
@@ -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
index 2c1d10acb8b52c6022461d9babb48c521f4bb93b..b11ec379b5c248ea75e7bed01c0d5aef6b23ce01 100644 (file)
@@ -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
index 3d185308ec883bd0c06be0d151385c65e15b3353..65781de44fc0e04998d3daa2bee8b51e215d9844 100644 (file)
@@ -50,6 +50,7 @@ endif # BLOCK
 config FILE_LOCKING
        bool "Enable POSIX file locking API" if EMBEDDED
        default y
+       select BKL # while lockd still uses it.
        help
          This option enables standard file locking support, required
           for filesystems like NFS and for the flock() system
index e55182a7460535a6cd79fbb5f1e709ce069c86d8..1dd5f34b3cf2bbcd885f144495f1ec2d5a799439 100644 (file)
@@ -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
index 5f3bea90911e5a81238bbee7765b6be54dddc996..480e210c83ab1f46ea9ee9a0b326d46132290c78 100644 (file)
@@ -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
index 56bd15c5bf6cffee6cdd2e36c379eeb42c22d604..63b6f56323187256685dbaf669398fd186b4ef4b 100644 (file)
@@ -1,6 +1,7 @@
 config HPFS_FS
        tristate "OS/2 HPFS file system support"
        depends on BLOCK
+       depends on BKL # nontrivial to fix
        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
index 6c2aad49d7318054b57c22b58c6b4eaa0be50178..10b9524bb90848952600917d56ca3412d48faa01 100644 (file)
@@ -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
index 95932f523aef2b2b7ef4686b8bb4a18383b4a395..429d4a14227688940f7a0395d171fc0506e173e8 100644 (file)
@@ -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
index e668127c8b2e7bcd5fdab9aaab08ffc10ce6e163..2bc24a8c40390417d2537cd8518dc58ecd9eda2d 100644 (file)
@@ -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
index 0e0e99bd6bcefcb9c12c15485a3d0a43888e97db..f8def3c8ea4c49f9a3cd823b1af03c3264d4e2ef 100644 (file)
@@ -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
index e4f10a40768a436d1b50a133c68b1668679d7541..30c8f223253d29f7b67f2c2e72a483b1ffdec7b9 100644 (file)
@@ -1,6 +1,7 @@
 config UFS_FS
        tristate "UFS file system support (read only)"
        depends on BLOCK
+       depends on BKL # probably fixable
        help
          BSD and derivate versions of Unix (such as SunOS, FreeBSD, NetBSD,
          OpenBSD and NeXTstep) use a file system called UFS. Some System V
index 2ea1dd1ba21cedc1cdf7f9f0c74d939641d0e5b1..291f721144c2e23c51e4fbb92288f89e6b68dc11 100644 (file)
@@ -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 */
index 2de5b1cbadd9e47138f879d23cc4d2d5066d32d7..2005a1d499280b162e84cb5a960d747bb4d972b7 100644 (file)
@@ -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
index 1b4afd2e6ca089de0babdacc5781426ef118da5c..088eea1c2bef2058fb147366c4a812f5f0de2334 100644 (file)
@@ -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
index e9ad0062fbb6a8df3e13182597176016657695b6..02549cb2c3282f5a04ad70214a5cf3f95d1538bf 100644 (file)
@@ -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
index e6759c9660bb2507b0c3f8d40d2630e16f773980..2196e55e4f6147021f1b5a6a70123ed4effad881 100644 (file)
@@ -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