Staging
v0.8.1
https://github.com/torvalds/linux
Revision ba0084048ab785c2cb1d6cc2cccabe642a5b799a authored by Mark Fasheh on 22 December 2006, 09:06:15 UTC, committed by Linus Torvalds on 22 December 2006, 16:55:46 UTC
Commit 2d7d253548cffdce80f4e03664686e9ccb1b0ed7 ("fix cond_resched() fix")
introduced an 'expected_preempt_count' parameter to __resched_legal() to
fix a bug where it was returning a false negative when called from
cond_resched_lock() and preemption was enabled.

Unfortunately this broke things for when preemption is disabled.
preempt_count() will always return zero, thus failing the check against any
value of expected_preempt_count not equal to zero.  cond_resched_lock() for
example, passes an expected_preempt_count value of 1.

So fix the fix for the cond_resched() fix by skipping the check of
preempt_count() against expected_preempt_count when preemption is disabled.

Credit should go to Sunil Mushran for spotting the bug during testing.

Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>
Acked-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
1 parent 2aea4fb
History
Tip revision: ba0084048ab785c2cb1d6cc2cccabe642a5b799a authored by Mark Fasheh on 22 December 2006, 09:06:15 UTC
[PATCH] Conditionally check expected_preempt_count in __resched_legal()
Tip revision: ba00840
File Mode Size
reed_solomon
zlib_deflate
zlib_inflate
.gitignore -rw-r--r-- 51 bytes
Kconfig -rw-r--r-- 2.0 KB
Kconfig.debug -rw-r--r-- 14.5 KB
Makefile -rw-r--r-- 2.1 KB
audit.c -rw-r--r-- 1020 bytes
bitmap.c -rw-r--r-- 24.0 KB
bitrev.c -rw-r--r-- 2.1 KB
bug.c -rw-r--r-- 4.0 KB
bust_spinlocks.c -rw-r--r-- 905 bytes
cmdline.c -rw-r--r-- 3.5 KB
cpumask.c -rw-r--r-- 972 bytes
crc-ccitt.c -rw-r--r-- 3.0 KB
crc16.c -rw-r--r-- 2.8 KB
crc32.c -rw-r--r-- 15.0 KB
crc32defs.h -rw-r--r-- 1.0 KB
ctype.c -rw-r--r-- 1.3 KB
debug_locks.c -rw-r--r-- 1.1 KB
dec_and_lock.c -rw-r--r-- 806 bytes
div64.c -rw-r--r-- 1.3 KB
dump_stack.c -rw-r--r-- 290 bytes
extable.c -rw-r--r-- 1.9 KB
fault-inject.c -rw-r--r-- 7.5 KB
find_next_bit.c -rw-r--r-- 4.3 KB
gen_crc32table.c -rw-r--r-- 1.8 KB
genalloc.c -rw-r--r-- 5.3 KB
halfmd4.c -rw-r--r-- 2.0 KB
hweight.c -rw-r--r-- 1.6 KB
idr.c -rw-r--r-- 10.9 KB
inflate.c -rw-r--r-- 37.0 KB
int_sqrt.c -rw-r--r-- 533 bytes
iomap.c -rw-r--r-- 6.8 KB
iomap_copy.c -rw-r--r-- 2.1 KB
ioremap.c -rw-r--r-- 2.1 KB
irq_regs.c -rw-r--r-- 578 bytes
kernel_lock.c -rw-r--r-- 4.6 KB
klist.c -rw-r--r-- 6.8 KB
kobject.c -rw-r--r-- 13.3 KB
kobject_uevent.c -rw-r--r-- 7.8 KB
kref.c -rw-r--r-- 1.6 KB
libcrc32c.c -rw-r--r-- 6.5 KB
list_debug.c -rw-r--r-- 2.0 KB
locking-selftest-hardirq.h -rw-r--r-- 207 bytes
locking-selftest-mutex.h -rw-r--r-- 120 bytes
locking-selftest-rlock-hardirq.h -rw-r--r-- 74 bytes
locking-selftest-rlock-softirq.h -rw-r--r-- 74 bytes
locking-selftest-rlock.h -rw-r--r-- 158 bytes
locking-selftest-rsem.h -rw-r--r-- 163 bytes
locking-selftest-softirq.h -rw-r--r-- 207 bytes
locking-selftest-spin-hardirq.h -rw-r--r-- 73 bytes
locking-selftest-spin-softirq.h -rw-r--r-- 73 bytes
locking-selftest-spin.h -rw-r--r-- 118 bytes
locking-selftest-wlock-hardirq.h -rw-r--r-- 74 bytes
locking-selftest-wlock-softirq.h -rw-r--r-- 74 bytes
locking-selftest-wlock.h -rw-r--r-- 158 bytes
locking-selftest-wsem.h -rw-r--r-- 163 bytes
locking-selftest.c -rw-r--r-- 28.6 KB
parser.c -rw-r--r-- 5.8 KB
percpu_counter.c -rw-r--r-- 964 bytes
plist.c -rw-r--r-- 2.8 KB
prio_tree.c -rw-r--r-- 12.2 KB
radix-tree.c -rw-r--r-- 25.1 KB
random32.c -rw-r--r-- 3.6 KB
rbtree.c -rw-r--r-- 8.6 KB
reciprocal_div.c -rw-r--r-- 159 bytes
rwsem-spinlock.c -rw-r--r-- 6.9 KB
rwsem.c -rw-r--r-- 6.4 KB
semaphore-sleepers.c -rw-r--r-- 4.7 KB
sha1.c -rw-r--r-- 2.4 KB
smp_processor_id.c -rw-r--r-- 1.1 KB
sort.c -rw-r--r-- 2.5 KB
spinlock_debug.c -rw-r--r-- 6.8 KB
string.c -rw-r--r-- 12.4 KB
swiotlb.c -rw-r--r-- 22.7 KB
textsearch.c -rw-r--r-- 9.2 KB
ts_bm.c -rw-r--r-- 4.9 KB
ts_fsm.c -rw-r--r-- 10.5 KB
ts_kmp.c -rw-r--r-- 3.8 KB
vsprintf.c -rw-r--r-- 18.8 KB

back to top