Linus Torvalds
8e3e076c5a
BKL: revert back to the old spinlock implementation
...
The generic semaphore rewrite had a huge performance regression on AIM7
(and potentially other BKL-heavy benchmarks) because the generic
semaphores had been rewritten to be simple to understand and fair. The
latter, in particular, turns a semaphore-based BKL implementation into a
mess of scheduling.
The attempt to fix the performance regression failed miserably (see the
previous commit 00b41ec261 'Revert
"semaphore: fix"'), and so for now the simple and sane approach is to
instead just go back to the old spinlock-based BKL implementation that
never had any issues like this.
This patch also has the advantage of being reported to fix the
regression completely according to Yanmin Zhang, unlike the semaphore
hack which still left a couple percentage point regression.
As a spinlock, the BKL obviously has the potential to be a latency
issue, but it's not really any different from any other spinlock in that
respect. We do want to get rid of the BKL asap, but that has been the
plan for several years.
These days, the biggest users are in the tty layer (open/release in
particular) and Alan holds out some hope:
"tty release is probably a few months away from getting cured - I'm
afraid it will almost certainly be the very last user of the BKL in
tty to get fixed as it depends on everything else being sanely locked."
so while we're not there yet, we do have a plan of action.
Tested-by: Yanmin Zhang <yanmin_zhang@linux.intel.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: Matthew Wilcox <matthew@wil.cx>
Cc: Alexander Viro <viro@ftp.linux.org.uk>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-05-10 20:58:02 -07:00
..
lzo
lzo: fix typo in decompressor
2008-04-10 15:34:05 -07:00
reed_solomon
lib: Remove unnecessary inclusions of asm/semaphore.h
2008-04-18 22:17:17 -04:00
zlib_deflate
lib/: Spelling fixes
2008-02-03 17:48:52 +02:00
zlib_inflate
[ZLIB]: Fix external builds of zlib_inflate code.
2007-10-11 22:17:20 -07:00
.gitignore
Add some basic .gitignore files
2005-10-18 08:26:15 -07:00
argv_split.c
LIB: Replace inappropriate include of <linux/bug.h>
2007-10-20 00:26:10 +02:00
audit.c
[PATCH] audit signal recipients
2007-05-11 05:38:25 -04:00
bitmap.c
mempolicy: add bitmap_onto() and bitmap_fold() operations
2008-04-28 08:58:19 -07:00
bitrev.c
[PATCH] add MODULE_* attributes to bit reversal library
2006-12-10 10:07:52 -08:00
bug.c
generic bug: use show_regs() instead of dump_stack()
2007-07-16 09:05:51 -07:00
bust_spinlocks.c
handle recursive calls to bust_spinlocks()
2007-10-17 08:42:56 -07:00
check_signature.c
uninline check_signature()
2007-07-16 09:05:50 -07:00
cmdline.c
[PATCH] Numerous fixes to kernel-doc info in source files.
2007-02-11 10:51:32 -08:00
cpumask.c
Safer nr_node_ids and nr_node_ids determination and initial values
2007-05-07 12:12:51 -07:00
crc-ccitt.c
[PATCH] kernel-doc for lib/crc*.c
2006-06-25 10:01:20 -07:00
crc-itu-t.c
CRC ITU-T V.41
2007-05-10 18:24:13 +02:00
crc7.c
CRC7 support
2007-07-17 10:23:04 -07:00
crc16.c
[PATCH] kernel-doc for lib/crc*.c
2006-06-25 10:01:20 -07:00
crc32.c
lib/: Spelling fixes
2008-02-03 17:48:52 +02:00
crc32defs.h
ctype.c
debug_locks.c
[PATCH] lockdep: better lock debugging
2006-07-03 15:27:01 -07:00
debugobjects.c
infrastructure to debug (dynamic) objects
2008-04-30 08:29:53 -07:00
dec_and_lock.c
[PATCH] atomic: dec_and_lock use atomic primitives
2006-01-08 20:13:48 -08:00
devres.c
[POWERPC] devres: Add devm_ioremap_prot()
2008-05-05 16:47:14 +10:00
div64.c
rename div64_64 to div64_u64
2008-05-01 08:03:58 -07:00
dump_stack.c
extable.c
lib/extable.c: remove an expensive integer divide in search_extable()
2008-02-06 10:41:08 -08:00
fault-inject.c
libfs: allow error return from simple attributes
2008-02-08 09:22:34 -08:00
find_next_bit.c
bitops: remove "optimizations"
2008-04-29 08:11:16 -07:00
gen_crc32table.c
genalloc.c
Slab allocators: Replace explicit zeroing with __GFP_ZERO
2007-07-17 10:23:02 -07:00
halfmd4.c
hexdump.c
hexdump: don't print bytes with bit 7 set
2007-11-29 09:24:53 -08:00
hweight.c
remove asm/bitops.h includes
2007-10-19 11:53:41 -07:00
idr.c
idr: fix idr_remove()
2008-05-01 08:04:00 -07:00
inflate.c
lib/inflate.c: handle failed malloc()
2008-04-29 08:06:02 -07:00
int_sqrt.c
[PATCH] lib: Fix bug in int_sqrt() for 64 bit longs
2006-02-03 08:32:08 -08:00
iomap.c
iomap: fix 64 bits resources on 32 bits
2008-04-29 08:06:02 -07:00
iomap_copy.c
[PATCH] add __iowrite64_copy
2006-06-20 20:24:58 -07:00
iommu-helper.c
iommu: export iommu_is_span_boundary helper function
2008-03-04 16:35:17 -08:00
ioremap.c
lib/ioremap.c should #include <linux/io.h>
2007-10-17 08:42:50 -07:00
irq_regs.c
[PATCH] irq_reqs: export __irq_regs
2006-10-06 08:53:40 -07:00
kasprintf.c
lib: move kasprintf to a separate file
2007-07-31 15:39:39 -07:00
Kconfig
x86, bitops: select the generic bitmap search functions
2008-04-26 19:21:17 +02:00
Kconfig.debug
debugobjects: add timer specific object debugging code
2008-04-30 08:29:53 -07:00
Kconfig.kgdb
kgdb: kconfig fix xconfig/menuconfig element
2008-05-05 07:13:21 -05:00
kernel_lock.c
BKL: revert back to the old spinlock implementation
2008-05-10 20:58:02 -07:00
klist.c
klist: fix coding style errors in klist.h and klist.c
2008-04-30 16:52:58 -07:00
kobject.c
kobject: do not copy vargs, just pass them around
2008-04-30 16:52:48 -07:00
kobject_uevent.c
lib: replace remaining __FUNCTION__ occurrences
2008-04-30 08:29:54 -07:00
kref.c
kref: add kref_set()
2008-01-24 20:40:05 -08:00
libcrc32c.c
[LIB] crc32c: Keep intermediate crc state in cpu order
2007-11-08 21:34:09 +08:00
list_debug.c
[PATCH] More list debugging context
2006-12-07 08:39:35 -08:00
lmb.c
[POWERPC] Provide walk_memory_resource() for powerpc
2008-04-29 15:57:53 +10:00
locking-selftest-hardirq.h
[PATCH] lockdep: locking API self tests
2006-07-03 15:27:03 -07:00
locking-selftest-mutex.h
[PATCH] lockdep: locking API self tests
2006-07-03 15:27:03 -07:00
locking-selftest-rlock-hardirq.h
[PATCH] lockdep: locking API self tests
2006-07-03 15:27:03 -07:00
locking-selftest-rlock-softirq.h
[PATCH] lockdep: locking API self tests
2006-07-03 15:27:03 -07:00
locking-selftest-rlock.h
[PATCH] lockdep: locking API self tests
2006-07-03 15:27:03 -07:00
locking-selftest-rsem.h
[PATCH] lockdep: locking API self tests
2006-07-03 15:27:03 -07:00
locking-selftest-softirq.h
[PATCH] lockdep: locking API self tests
2006-07-03 15:27:03 -07:00
locking-selftest-spin-hardirq.h
[PATCH] lockdep: locking API self tests
2006-07-03 15:27:03 -07:00
locking-selftest-spin-softirq.h
[PATCH] lockdep: locking API self tests
2006-07-03 15:27:03 -07:00
locking-selftest-spin.h
[PATCH] lockdep: locking API self tests
2006-07-03 15:27:03 -07:00
locking-selftest-wlock-hardirq.h
[PATCH] lockdep: locking API self tests
2006-07-03 15:27:03 -07:00
locking-selftest-wlock-softirq.h
[PATCH] lockdep: locking API self tests
2006-07-03 15:27:03 -07:00
locking-selftest-wlock.h
[PATCH] lockdep: locking API self tests
2006-07-03 15:27:03 -07:00
locking-selftest-wsem.h
[PATCH] lockdep: locking API self tests
2006-07-03 15:27:03 -07:00
locking-selftest.c
[PATCH] lockdep: show more details about self-test failures
2006-12-07 08:39:43 -08:00
Makefile
infrastructure to debug (dynamic) objects
2008-04-30 08:29:53 -07:00
parser.c
[AFS]: Make the match_*() functions take const options.
2007-05-03 03:10:39 -07:00
percpu_counter.c
mm: bdi: export BDI attributes in sysfs
2008-04-30 08:29:49 -07:00
plist.c
[PATCH] pi-futex: add plist implementation
2006-06-27 17:32:46 -07:00
prio_heap.c
Fix cpusets update_cpumask
2007-10-19 11:53:41 -07:00
prio_tree.c
proportions.c
mm: bdi: allow setting a maximum for the bdi dirty limit
2008-04-30 08:29:50 -07:00
radix-tree.c
Remove set_migrateflags()
2008-04-28 08:58:17 -07:00
random32.c
[NET]: srandom32 fixes for networking v2
2008-04-03 14:07:02 -07:00
ratelimit.c
isolate ratelimit from printk.c for other use
2008-04-29 08:06:06 -07:00
rbtree.c
[PATCH] rbtree: fixed reversed RB_EMPTY_NODE and rb_next/prev
2006-09-30 20:26:56 +02:00
reciprocal_div.c
[PATCH] SLAB: use a multiply instead of a divide in obj_to_index()
2006-12-13 09:05:49 -08:00
rwsem-spinlock.c
lib: remove fastcall from lib/*
2008-02-08 09:22:31 -08:00
rwsem.c
x86: fix UML and -regparm=3
2008-01-30 13:33:00 +01:00
scatterlist.c
[SCSI] block: add sg buffer copy helper functions
2008-04-07 12:15:45 -05:00
sha1.c
[PATCH] Numerous fixes to kernel-doc info in source files.
2007-02-11 10:51:32 -08:00
smp_processor_id.c
debug_smp_processor_id() fixlets
2008-02-06 10:41:09 -08:00
sort.c
lib/sort.c optimization
2007-10-17 08:42:52 -07:00
spinlock_debug.c
Use helpers to obtain task pid in printks
2007-10-19 11:53:43 -07:00
string.c
Add a new sysfs_streq() string comparison function
2008-05-01 08:03:59 -07:00
swiotlb.c
dma/ia64: update ia64 machvecs, swiotlb.c
2008-04-29 08:06:12 -07:00
textsearch.c
[TEXTSEARCH]: Do not allow zero length patterns in the textsearch infrastructure
2007-12-01 00:03:52 +11:00
ts_bm.c
[TEXTSEARCH]: Fix Boyer Moore initialization bug
2006-08-22 14:33:58 -07:00
ts_fsm.c
[PATCH] lib/ts_fsm.c: constify structs
2006-09-29 09:18:23 -07:00
ts_kmp.c
Remove obsolete #include <linux/config.h>
2006-06-30 19:25:36 +02:00
vsprintf.c
lib/vsprintf.c: fix bug omitting minus sign of numbers (module_param)
2008-02-23 17:12:14 -08:00