|| ||Ingo Molnar <firstname.lastname@example.org>|
|| ||[patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U5|
|| ||Mon, 18 Oct 2004 16:50:08 +0200|
|| ||Lee Revell <email@example.com>,
Rui Nuno Capela <firstname.lastname@example.org>,
Mark_H_Johnson@Raytheon.com, "K.R. Foley" <email@example.com>,
Bill Huey <firstname.lastname@example.org>, Adam Heath <email@example.com>,
Florian Schmidt <firstname.lastname@example.org>|
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 email@example.com
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/