[lkml]   [2004]   [Oct]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
Subject[patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U5

i have released the -U5 Real-Time Preemption patch:

this is a release intended to increase stability, but since it also
includes new debug features and related cleanups it might introduce new
regressions. Be careful.

there are two big changes:

- debug feature: automatic semaphore/rwsem deadlock detection, based on
the code from Igor Manyilov and Bill Huey.

this is a very nice feature that should help in debugging the remaining
deadlocks. The deadlock detection feature has already helped me fix a
bug that was causing hangs in the VFS, so it's really useful.

- generic semaphore implementation

the generic semaphore implementation (which uses rwsems) makes it
possible to use the deadlock detection mechanism for all the mutex types
we currently have: semaphores, rw-semaphores, spinlock-mutexes and
rwlock-mutexes. Another benefit is that PREEMPT_REALTIME becomes much
more portable this way. (although it's still x86-only at the moment.)

other changes since -U4:

- crash fix: fixed a possible "unbound recursion upon IRQ entry" bug.
introduced preempt_schedule_irq() which now schedules without
enabling interrupts again, preventing new IRQs from hitting this
task again and triggering preemption. This might fix the
'infinite stackdumps' problem Rui Nuno Capela was seeing.

- deadlock fix: is_subdir()'s PREEMPT_REALTIME locking was buggy. This
could perhaps fix the other problem reported by Rui Nuno Capela.

- i8253_lock fixes: apm, hd.c, gameport.c and analog.c were all
improperly importing the variable while overriding the prototype.
This fixes the bug reported by Florian Schmidt.

- possible crash fix: one particular lock in selinux has to be
mutex-based, because while held it calls other mutex-using code.

- two more selinux locks converted to raw spinlocks, because they were
called from within raw-critical sections.

- debug feature: enforce interrupts-enabled upon schedule().
(Note that this does not break sleep_on() because sleep_on() does not
disable interrupts in the PREEMPT_REALTIME mode. It might break with

- locking cleanup: converted the IPC code from raw spinlocks & RCU to

- code cleanup: cleaned up the generic rwsem code.

- debug feature: implemented /proc/sys/kernel/trace_verbose runtime
flag (default:0), which enables a much more verbose printout in
/proc/latency_trace. This trace format can be useful in e.g.
debugging timestamp weirdnesses.

- irqs-off fix: there was one codepath where irqd would call schedule()
with interrupts disabled.

- debug feature: the NMI entries in the latency trace now also include
the last-observed-EFLAGS value. Can be useful in figuring out what a
certain CPU is doing and why.

- cleanup: fixed preemption-off ordering: often the spinlock (and
scheduler) code would re-enable preemption and interrupts in the
wrong order, opening up a small window for an interrupt handler to
fit in and increase the latency of that almost-finished critical

- cleanup: consolidated various bug-printouts. It should now be easy to
find whether anything bad happens even amongst lots of preempt-timing
printouts: 'dmesg | grep BUG'.

to create a -U5 tree from scratch, the patching order is:

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to
More majordomo info at
Please read the FAQ at

 \ /
  Last update: 2005-03-22 14:07    [W:0.868 / U:5.876 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site