Skip to content

Commit

Permalink
BKL: introduce CONFIG_BKL.
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
arndb committed Oct 21, 2010
1 parent 7ff52ef commit 6de5bd1
Show file tree
Hide file tree
Showing 21 changed files with 36 additions and 5 deletions.
5 changes: 4 additions & 1 deletion drivers/gpu/drm/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
1 change: 1 addition & 0 deletions drivers/media/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
1 change: 1 addition & 0 deletions drivers/net/appletalk/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions drivers/staging/cx25821/Kconfig
Original file line number Diff line number Diff line change
@@ -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
Expand Down
1 change: 1 addition & 0 deletions drivers/staging/easycap/Kconfig
Original file line number Diff line number Diff line change
@@ -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
Expand Down
1 change: 1 addition & 0 deletions drivers/staging/go7007/Kconfig
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion drivers/staging/usbip/Kconfig
Original file line number Diff line number Diff line change
@@ -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
Expand Down
1 change: 1 addition & 0 deletions fs/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions fs/adfs/Kconfig
Original file line number Diff line number Diff line change
@@ -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
Expand Down
1 change: 1 addition & 0 deletions fs/autofs/Kconfig
Original file line number Diff line number Diff line change
@@ -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
Expand Down
1 change: 1 addition & 0 deletions fs/hpfs/Kconfig
Original file line number Diff line number Diff line change
@@ -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
Expand Down
1 change: 1 addition & 0 deletions fs/nfs/Kconfig
Original file line number Diff line number Diff line change
@@ -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
Expand Down
1 change: 1 addition & 0 deletions fs/nfsd/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions fs/smbfs/Kconfig
Original file line number Diff line number Diff line change
@@ -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
Expand Down
1 change: 1 addition & 0 deletions fs/udf/Kconfig
Original file line number Diff line number Diff line change
@@ -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
Expand Down
1 change: 1 addition & 0 deletions fs/ufs/Kconfig
Original file line number Diff line number Diff line change
@@ -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
Expand Down
7 changes: 5 additions & 2 deletions include/linux/smp_lock.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
2 changes: 1 addition & 1 deletion init/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
9 changes: 9 additions & 0 deletions lib/Kconfig.debug
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions net/ipx/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions net/x25/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 6de5bd1

Please sign in to comment.