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
 
 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
 
 
 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.
 
 #
 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
 
 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
 
 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
 
 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
 
 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
 
 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
 
 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
 
 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
 
 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
 
 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
 
        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
 
 config SMB_FS
        tristate "SMB file system support (OBSOLETE, please use CIFS)"
+       depends on BKL # probably unfixable
        depends on INET
        select NLS
        help
 
 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
 
 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
 
 
 #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 */
 
 
 config LOCK_KERNEL
        bool
-       depends on SMP || PREEMPT
+       depends on (SMP || PREEMPT) && BKL
        default y
 
 config INIT_ENV_ARG_LIMIT
 
         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
 
 #
 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
 
 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