* Re: [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U9.3
@ 2004-10-22 18:43 Mark_H_Johnson
2004-10-22 18:49 ` K.R. Foley
0 siblings, 1 reply; 8+ messages in thread
From: Mark_H_Johnson @ 2004-10-22 18:43 UTC (permalink / raw)
To: Ingo Molnar
Cc: linux-kernel, Lee Revell, Rui Nuno Capela, Mark_H_Johnson,
K.R. Foley, Bill Huey, Adam Heath, Florian Schmidt,
Thomas Gleixner, Michal Schmidt, Fernando Pablo Lopez-Lezcano
>i have released the -U9.3 Real-Time Preemption patch, ...
>
It is getting hard to keep up with the updates....
This version built OK and since I noticed it includes fixes for the
parallel port, I added that back to my configuration and built / booted
without any problems. I still see the BUG from:
Oct 22 12:27:50 dws77 kernel: 8139too Fast Ethernet driver 0.9.27
Oct 22 12:27:50 dws77 kernel: eth0: RealTek RTL8139 at 0xdc00,
00:50:bf:39:11:fc, IRQ 11
Oct 22 12:27:50 dws77 kernel: BUG: atomic counter underflow at:
Oct 22 12:27:50 dws77 kernel: [<c02b8f88>] qdisc_destroy+0x98/0xa0 (12)
I saw the messages about fixes for the other network drivers, but
don't forget this one.
Real time stress tests ran more smoothly this time with fewer
odd symptoms but a few new symptoms showed up too. I'll send the
boot log and traces separately. The following summarizes the tests
and results.
[1] X11 stress - very clean, max CPU delay was only 20 usec.
[2] proc stress - very clean, max CPU delay was only 30 usec.
[3] network output stress - only trace much worse than U9.2. An odd
pattern in the graph showing a delay of roughly 400 usec every 5
seconds with a much smaller delay following. There were also a couple
bursts of delays at 90-100 seconds, and 250-260 seconds. Did not
see this pattern on any other test.
[4] network input stress - very clean, max CPU delay was only 80 usec.
[5] disk write stress - very clean, max CPU delay only 70 usec.
[6] disk copy stress - very clean, max CPU delay only 90 usec.
[7] disk read stress - first 25 seconds, had a pattern of roughly 100 usec
CPU delays with a few peaks at 500 usec. After that, was very clean, almost
99.7% of the CPU delays were under 100 usec.
During these tests (total 25-30 minutes) had seven latency traces
over >200 usec. Summary follows:
00 - find_symbol, a single trace line over 400 usec as follows
preemption latency trace v1.0.7 on 2.6.9-rc4-mm1-RT-U9.3
-------------------------------------------------------
latency: 495 us, entries: 9 (9) | [VP:1 KP:1 SP:1 HP:1 #CPUS:2]
-----------------
| task: modprobe/3643, uid:0 nice:-10 policy:0 rt_prio:0
-----------------
=> started at: _spin_lock_irqsave+0x1f/0x80 <c0314f4f>
=> ended at: _spin_unlock_irq+0x1b/0x40 <c031538b>
=======>
00000001 0.000ms (+0.000ms): _spin_lock_irqsave (resolve_symbol)
00000001 0.000ms (+0.447ms): __find_symbol (resolve_symbol)
00010001 0.448ms (+0.000ms): do_nmi (__find_symbol)
00010001 0.448ms (+0.000ms): do_nmi (add_preempt_count)
00010001 0.449ms (+0.042ms): do_nmi (<00200093>)
00000001 0.491ms (+0.000ms): use_module (resolve_symbol)
00000001 0.492ms (+0.001ms): already_uses (use_module)
00000001 0.493ms (+0.000ms): kmem_cache_alloc (use_module)
00000001 0.494ms (+0.000ms): _spin_unlock_irq (resolve_symbol)
01, 02, 03, 05, 06 - flush_tlb
latency: 1815 us, entries: 108 (108) | [VP:1 KP:1 SP:1 HP:1 #CPUS:2]
latency: 8959 us, entries: 180 (180) | [VP:1 KP:1 SP:1 HP:1 #CPUS:2]
latency: 175300 us, entries: 4000 (8116) | [VP:1 KP:1 SP:1 HP:1
#CPUS:2]
latency: 80679 us, entries: 1545 (1545) | [VP:1 KP:1 SP:1 HP:1
#CPUS:2]
latency: 76801 us, entries: 3561 (3561) | [VP:1 KP:1 SP:1 HP:1
#CPUS:2]
This is that symptom I reported before where something gets "stuck"
and one or more clock ticks later, it finally gets freed up. Note that
the real time application did not see any of these delays. It may
be interesting to do another test w/ two real time tasks to see if
these are real or a sampling artifact.
04 - avc_insert, a single > 200 usec trace entry.
preemption latency trace v1.0.7 on 2.6.9-rc4-mm1-RT-U9.3
-------------------------------------------------------
latency: 216 us, entries: 4 (4) | [VP:1 KP:1 SP:1 HP:1 #CPUS:2]
-----------------
| task: fam/2933, uid:0 nice:0 policy:0 rt_prio:0
-----------------
=> started at: _spin_lock_irqsave+0x1f/0x80 <c0314f4f>
=> ended at: _spin_unlock_irqrestore+0x20/0x50 <c0315340>
=======>
00000001 0.000ms (+0.000ms): _spin_lock_irqsave (avc_has_perm_noaudit)
00000001 0.000ms (+0.214ms): avc_insert (avc_has_perm_noaudit)
00000001 0.214ms (+0.000ms): memcpy (avc_has_perm_noaudit)
00000001 0.215ms (+0.000ms): _spin_unlock_irqrestore (avc_has_perm_noaudit)
--Mark
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U9.3
2004-10-22 18:43 [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U9.3 Mark_H_Johnson
@ 2004-10-22 18:49 ` K.R. Foley
2004-10-22 18:58 ` Thomas Gleixner
0 siblings, 1 reply; 8+ messages in thread
From: K.R. Foley @ 2004-10-22 18:49 UTC (permalink / raw)
To: Mark_H_Johnson
Cc: Ingo Molnar, linux-kernel, Lee Revell, Rui Nuno Capela, Bill Huey,
Adam Heath, Florian Schmidt, Thomas Gleixner, Michal Schmidt,
Fernando Pablo Lopez-Lezcano
Mark_H_Johnson@raytheon.com wrote:
>>i have released the -U9.3 Real-Time Preemption patch, ...
>>
>
> It is getting hard to keep up with the updates....
>
> This version built OK and since I noticed it includes fixes for the
> parallel port, I added that back to my configuration and built / booted
> without any problems. I still see the BUG from:
>
> Oct 22 12:27:50 dws77 kernel: 8139too Fast Ethernet driver 0.9.27
> Oct 22 12:27:50 dws77 kernel: eth0: RealTek RTL8139 at 0xdc00,
> 00:50:bf:39:11:fc, IRQ 11
> Oct 22 12:27:50 dws77 kernel: BUG: atomic counter underflow at:
> Oct 22 12:27:50 dws77 kernel: [<c02b8f88>] qdisc_destroy+0x98/0xa0 (12)
>
> I saw the messages about fixes for the other network drivers, but
> don't forget this one.
I still get this also. This is not fixed by the network driver fix, but
I don't think it was expected to be.
>
> Real time stress tests ran more smoothly this time with fewer
> odd symptoms but a few new symptoms showed up too. I'll send the
> boot log and traces separately. The following summarizes the tests
> and results.
>
> [1] X11 stress - very clean, max CPU delay was only 20 usec.
>
> [2] proc stress - very clean, max CPU delay was only 30 usec.
>
> [3] network output stress - only trace much worse than U9.2. An odd
> pattern in the graph showing a delay of roughly 400 usec every 5
> seconds with a much smaller delay following. There were also a couple
> bursts of delays at 90-100 seconds, and 250-260 seconds. Did not
> see this pattern on any other test.
>
> [4] network input stress - very clean, max CPU delay was only 80 usec.
>
> [5] disk write stress - very clean, max CPU delay only 70 usec.
>
> [6] disk copy stress - very clean, max CPU delay only 90 usec.
>
> [7] disk read stress - first 25 seconds, had a pattern of roughly 100 usec
> CPU delays with a few peaks at 500 usec. After that, was very clean, almost
> 99.7% of the CPU delays were under 100 usec.
>
> During these tests (total 25-30 minutes) had seven latency traces
> over >200 usec. Summary follows:
>
> 00 - find_symbol, a single trace line over 400 usec as follows
> preemption latency trace v1.0.7 on 2.6.9-rc4-mm1-RT-U9.3
> -------------------------------------------------------
> latency: 495 us, entries: 9 (9) | [VP:1 KP:1 SP:1 HP:1 #CPUS:2]
> -----------------
> | task: modprobe/3643, uid:0 nice:-10 policy:0 rt_prio:0
> -----------------
> => started at: _spin_lock_irqsave+0x1f/0x80 <c0314f4f>
> => ended at: _spin_unlock_irq+0x1b/0x40 <c031538b>
> =======>
> 00000001 0.000ms (+0.000ms): _spin_lock_irqsave (resolve_symbol)
> 00000001 0.000ms (+0.447ms): __find_symbol (resolve_symbol)
> 00010001 0.448ms (+0.000ms): do_nmi (__find_symbol)
> 00010001 0.448ms (+0.000ms): do_nmi (add_preempt_count)
> 00010001 0.449ms (+0.042ms): do_nmi (<00200093>)
> 00000001 0.491ms (+0.000ms): use_module (resolve_symbol)
> 00000001 0.492ms (+0.001ms): already_uses (use_module)
> 00000001 0.493ms (+0.000ms): kmem_cache_alloc (use_module)
> 00000001 0.494ms (+0.000ms): _spin_unlock_irq (resolve_symbol)
>
> 01, 02, 03, 05, 06 - flush_tlb
> latency: 1815 us, entries: 108 (108) | [VP:1 KP:1 SP:1 HP:1 #CPUS:2]
> latency: 8959 us, entries: 180 (180) | [VP:1 KP:1 SP:1 HP:1 #CPUS:2]
> latency: 175300 us, entries: 4000 (8116) | [VP:1 KP:1 SP:1 HP:1
> #CPUS:2]
> latency: 80679 us, entries: 1545 (1545) | [VP:1 KP:1 SP:1 HP:1
> #CPUS:2]
> latency: 76801 us, entries: 3561 (3561) | [VP:1 KP:1 SP:1 HP:1
> #CPUS:2]
>
> This is that symptom I reported before where something gets "stuck"
> and one or more clock ticks later, it finally gets freed up. Note that
> the real time application did not see any of these delays. It may
> be interesting to do another test w/ two real time tasks to see if
> these are real or a sampling artifact.
>
> 04 - avc_insert, a single > 200 usec trace entry.
>
> preemption latency trace v1.0.7 on 2.6.9-rc4-mm1-RT-U9.3
> -------------------------------------------------------
> latency: 216 us, entries: 4 (4) | [VP:1 KP:1 SP:1 HP:1 #CPUS:2]
> -----------------
> | task: fam/2933, uid:0 nice:0 policy:0 rt_prio:0
> -----------------
> => started at: _spin_lock_irqsave+0x1f/0x80 <c0314f4f>
> => ended at: _spin_unlock_irqrestore+0x20/0x50 <c0315340>
> =======>
> 00000001 0.000ms (+0.000ms): _spin_lock_irqsave (avc_has_perm_noaudit)
> 00000001 0.000ms (+0.214ms): avc_insert (avc_has_perm_noaudit)
> 00000001 0.214ms (+0.000ms): memcpy (avc_has_perm_noaudit)
> 00000001 0.215ms (+0.000ms): _spin_unlock_irqrestore (avc_has_perm_noaudit)
>
> --Mark
>
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U9.3
2004-10-22 18:49 ` K.R. Foley
@ 2004-10-22 18:58 ` Thomas Gleixner
0 siblings, 0 replies; 8+ messages in thread
From: Thomas Gleixner @ 2004-10-22 18:58 UTC (permalink / raw)
To: K.R. Foley
Cc: Mark_H_Johnson, Ingo Molnar, LKML, Lee Revell, Rui Nuno Capela,
Bill Huey, Adam Heath, Florian Schmidt, Michal Schmidt,
Fernando Pablo Lopez-Lezcano
On Fri, 2004-10-22 at 13:49 -0500, K.R. Foley wrote:
> Mark_H_Johnson@raytheon.com wrote:
> >>i have released the -U9.3 Real-Time Preemption patch, ...
> >>
> >
> > It is getting hard to keep up with the updates....
> >
> > This version built OK and since I noticed it includes fixes for the
> > parallel port, I added that back to my configuration and built / booted
> > without any problems. I still see the BUG from:
> >
> > Oct 22 12:27:50 dws77 kernel: 8139too Fast Ethernet driver 0.9.27
> > Oct 22 12:27:50 dws77 kernel: eth0: RealTek RTL8139 at 0xdc00,
> > 00:50:bf:39:11:fc, IRQ 11
> > Oct 22 12:27:50 dws77 kernel: BUG: atomic counter underflow at:
> > Oct 22 12:27:50 dws77 kernel: [<c02b8f88>] qdisc_destroy+0x98/0xa0 (12)
> >
> > I saw the messages about fixes for the other network drivers, but
> > don't forget this one.
>
> I still get this also. This is not fixed by the network driver fix, but
> I don't think it was expected to be.
No, the fix was for the missing pci shutdown in tulip.
This one is something weird, which has to do with kuzdu triggered
load,unload,reload of a module. Not sure what happens there. I would
need more detailed information. Maybe enabling some debug print of the
card driver would reviel whats going on.
tglx
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U9.3
@ 2004-10-22 19:40 Mark_H_Johnson
2004-10-22 19:55 ` Thomas Gleixner
0 siblings, 1 reply; 8+ messages in thread
From: Mark_H_Johnson @ 2004-10-22 19:40 UTC (permalink / raw)
To: tglx
Cc: Bill Huey, Adam Heath, K.R. Foley, LKML, Ingo Molnar,
Florian Schmidt, Fernando Pablo Lopez-Lezcano, Lee Revell,
Rui Nuno Capela, Michal Schmidt
>No, the fix was for the missing pci shutdown in tulip.
I thought the two were related (since I get the failed to shutdown
message right after that traceback. Perhaps the 8139too needs
that same shutdown fix.
--Mark H Johnson
<mailto:Mark_H_Johnson@raytheon.com>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U9.3
2004-10-22 19:40 Mark_H_Johnson
@ 2004-10-22 19:55 ` Thomas Gleixner
0 siblings, 0 replies; 8+ messages in thread
From: Thomas Gleixner @ 2004-10-22 19:55 UTC (permalink / raw)
To: Mark_H_Johnson
Cc: Bill Huey, Adam Heath, K.R. Foley, LKML, Ingo Molnar,
Florian Schmidt, Fernando Pablo Lopez-Lezcano, Lee Revell,
Rui Nuno Capela, Michal Schmidt
On Fri, 2004-10-22 at 14:40 -0500, Mark_H_Johnson@raytheon.com wrote:
> >No, the fix was for the missing pci shutdown in tulip.
> I thought the two were related (since I get the failed to shutdown
> message right after that traceback. Perhaps the 8139too needs
> that same shutdown fix.
The shutdown fix is neccecary, but it is not related to the other
problem. The shutdown message will also happen , if you unload the
module manualy. The patch below fixes only the shutdown warning. For the
other one I need more information.
tglx
---
diff -urN --exclude='*~' 2.6.9-mm1-U10/drivers/net/8139too.c
2.6.9-mm1-U10.work/drivers/net/8139too.c
--- 2.6.9-mm1-U10/drivers/net/8139too.c 2004-10-22 19:10:44.000000000
+0200
+++ 2.6.9-mm1-U10.work/drivers/net/8139too.c 2004-10-22
21:52:19.000000000 +0200
@@ -749,7 +749,7 @@
pci_release_regions (pdev);
free_netdev(dev);
-
+ pci_disable_dev (pdev);
pci_set_drvdata (pdev, NULL);
}
^ permalink raw reply [flat|nested] 8+ messages in thread
* [patch] Real-Time Preemption, -VP-2.6.9-rc4-mm1-U0
@ 2004-10-14 0:24 Ingo Molnar
2004-10-14 14:31 ` [patch] Real-Time Preemption, -VP-2.6.9-rc4-mm1-U1 Ingo Molnar
0 siblings, 1 reply; 8+ messages in thread
From: Ingo Molnar @ 2004-10-14 0:24 UTC (permalink / raw)
To: linux-kernel
Cc: Lee Revell, Rui Nuno Capela, Mark_H_Johnson, K.R. Foley,
Daniel Walker, Bill Huey, Andrew Morton
i'm pleased to announce a significantly improved version of the
Real-Time Preemption (PREEMPT_REALTIME) feature that i have been working
towards in the past couple of weeks.
the patch (against 2.6.9-rc4-mm1) can be downloaded from:
http://redhat.com/~mingo/voluntary-preempt/voluntary-preempt-2.6.9-rc4-mm1-U0
this is i believe the first correct conversion of the Linux kernel to a
fully preemptible (fully mutex-based) preemption model, while still
keeping all locking properties of Linux.
I also think that this feature can and should be integrated into the
upstream kernel sometime in the future. It will need improvements and
fixes and lots of testing, but i believe the basic concept is sound and
inclusion is manageable and desirable. So comments, testing and feedback
is more than welcome!
to recap the conceptual issues that needed solving: the previous patch
already converted a fair portion of spinlocks to mutexes, but that in a
fully preemptible kernel model the following locking primitives are
especially problematic:
- RCU locking
- per-cpu counters and per-cpu variables
- tlb gather/release logic
- seqlocks
- atomic-kmaps
- pte mapping
note that while we tend to think about these as SMP locking primitives,
in a fully preemptible model these locking rules are necessary for
correctness, even on a single-CPU embedded box.
Unfortunately none of the existing preemption patches solve these
problems: they concentrate on UP but these locking rules must not be
ignored on UP either!
(Bill Huey's mutex patch he just released is the one notable exception i
know about, which is also a correct implementation i believe, but it
doesnt attack these locking rules [yet]. Bill's locking hierarchy is i
believe quite similar to the -T9 patch - this i believe is roughly the
best one can get when only using spinlocks as a vehicle.)
In the previous (-T9) version of the Real-Time Preemption patch, the
above locking primitives kept large portions of kernel code
non-preemptable, causing a 'spreadout' of raw spinlocks and
non-preemptible sections to various kernel subsystems.
Another, even more problematic effect was that both network drivers and
block IO drivers got 'contaminated' by raw spinlocks, triggering lots of
per-driver changes and thus limiting testability. It is basically an
opt-in model to correctness which is bad from a maintainance and
upstream acceptance point of view. The -T9 patch was a prime example of
the problems the Linux locking primitives cause in a fully preemptible
kernel model.
To solve all these fundamental problems, i improved/fixed/changed all of
these locking methods to be preemption-friendly. Most of the time it was
necessary to introduce an additional API variant because e.g.
rcu_read_lock() is anonymous (it doesnt identify the data protected), so
i introduced a variant that takes the write-lock as an argument. In the
PREEMPT_REALTIME case we can thus properly serialize on that lock.
For per-cpu variables i introduced a new API variant that creates a
spinlock-array for the per-cpu-variable, and users must make sure the
cpu field doesnt change. Migration to another CPU can happen within the
critical section, but 'statistically' the variable is still per-CPU and
update correctness is fully preserved.
TLB shootdown was the source of another nasty type of critical section:
it keeps preemption disabled during much of the pagetable zapping and
also relies on a per-CPU variable to keep TLB state. The fix for
PREEMPT_REALTIME (on x86) was to implement a simpler but preemptible TLB
flushing method. This necessiated two minor API changes to the generic
TLB shootdown code - pretty straightforward ones.
Atomic kmaps were another source of non-preemptible sections:
pte_map/pte_unmap both used nontrivial functions within and ran for a
long time, creating a lock dependency and a latency problem as well. I
wrapped them via normal kmaps, which thus become preemptible. (The main
reason for atomic kmaps were non-preemptability constraints - but those
are not present in a fully preemptible model.)
seqlocks (used within the VFS and other places) were another problem:
the are now preemptible by default, the same auto-type-detection logic
applies to them as to preemptible/raw spinlocks: switching between a
preemptible and a non-preemptible type is done by changing the
prototype, the locking APIs stay the same.
The improvements to locking allowed the gradual 'pulling out' of all
raw-spinlocks from various kernel subsystems. In the -U0 patch i have
almost completely finished this 'pullout', and as a result the following
kernel subsystems are now completely spinlock-free and 100% mutex-based:
- networking
- IO subsystem
- VFS and lowlevel filesystems
- memory management (except the SLAB allocator lock)
- signal code
- all of drivers/* and sound/*
note: it is important that when PREEMPT_REALTIME is disabled, the old
locking rules apply and there is no performance impact whatsoever. So
what this implements is in essence a compile-time multi-tier locking
architecture enabling 4 types of preemption models:
- stock (casual voluntary kernel preemption)
- CONFIG_PREEMPT_VOLUNTARY (lots of cond_resched() points)
- CONFIG_PREEMPT (involuntary preemption plus spinlocks)
- CONFIG_PREEMPT_REALTIME (everything is a mutex)
these models cover all the variants people are interested in: servers
with almost no latency worries, desktops with ~1msec needs and hard-RT
applications needing both microsecond-range latencies and provable
maximum latencies.
to quantitatively see the effects of these changes to the locking
landscape, here's the output of a script that disassembles the kernel
image and counts the number of actual spin lock/unlock function calls
done versus mutex lock/unlocks:
With PREEMPT_REALTIME disabled, all locks are spinlocks and old
semaphores:
spinlock API calls: 5359 (71.6%)
| old mutex API calls: 2120 (28.3%)
| new mutex API calls: 2 (0%)
all mutex API calls: 2122 (28.3%)
--------------------------------------
lock API calls: 7481 (100.0%)
with the -T9 kernel, which had the 'spread out' locking model, a
considerable portion of spinlocks were replaced by mutexes, but more
than 20% of usage was still spinlocks:
spinlock API calls: 1835 (23.1%)
| old mutex API calls: 2142 (26.9%)
| new mutex API calls: 3961 (49.8%)
all mutex API calls: 6103 (76.8%)
--------------------------------------
lock API calls: 7938 (100.0%)
here are some fresh numbers from Bill Huey's mmLinux kernel:
spinlock API calls: 2452 (30.3%)
all mutex API calls: 5614 (69.6%)
--------------------------------------
lock API calls: 8066 (100.0%)
(his mutex implementation directly falls back to up()/down() so the new
mutexes become part of the old mutexes.)
while i believe that the locking design is fundamentally incomplete in
the MontaVista kernel and thus is not directly comparable to
PREEMPT_REALTIME nor the mmLinux kernel, here are the stats from it
using a similar .config:
spinlock API calls: 1444 (26.1%)
| old mutex API calls: 2095 (37.9%)
| new mutex API calls: 1981 (35.8%)
all mutex API calls: 4076 (73.8%)
--------------------------------------
lock API calls: 5520 (100.0%)
(here it is visible that apparently a significant amount of [i believe
necessary] locking is missing from this kernel.)
finally, here are the stats from the new PREEMPT_REALTIME -U0 kernel:
spinlock API calls: 491 (6.0%)
| old mutex API calls: 2142 (26.2%)
| new mutex API calls: 5536 (67.7%)
all mutex API calls: 7678 (93.9%)
--------------------------------------
lock API calls: 8169 (100.0%)
note that almost all of the remaining spinlocks are held for a short
amount of time and have a finite maximum duration. They involve hardware
access, scheduling and interrupt handling and timers - almost all of
that code has O(1) characteristics.
what this means is that we are approaching hard-real-time domains ...
using what is in essence the stock Linux kernel!
note that priority inheritance is still not part of this patch, but that
effort can now be centralized to the two basic Linux semaphore types,
solving the full spectrum of priority inheritance problems!
the code is still x86-only but only for practical reasons - other
architectures will be covered in the future as well.
to create a -U0 tree from scratch the patching order is:
http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.8.tar.bz2
+ http://kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.9-rc4.bz2
+ http://kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.9-rc4/2.6.9-rc4-mm1/2.6.9-rc4-mm1.bz2
+ http://redhat.com/~mingo/voluntary-preempt/voluntary-preempt-2.6.9-rc4-mm1-U0
Ingo
^ permalink raw reply [flat|nested] 8+ messages in thread* [patch] Real-Time Preemption, -VP-2.6.9-rc4-mm1-U1
2004-10-14 0:24 [patch] Real-Time Preemption, -VP-2.6.9-rc4-mm1-U0 Ingo Molnar
@ 2004-10-14 14:31 ` Ingo Molnar
2004-10-14 23:42 ` [patch] Real-Time Preemption, -VP-2.6.9-rc4-mm1-U2 Ingo Molnar
0 siblings, 1 reply; 8+ messages in thread
From: Ingo Molnar @ 2004-10-14 14:31 UTC (permalink / raw)
To: linux-kernel
Cc: Lee Revell, Rui Nuno Capela, Mark_H_Johnson, K.R. Foley,
Daniel Walker, Bill Huey, Andrew Morton, Adam Heath,
Lorenzo Allegrucci, Dipankar Sarma
i have released the -U1 PREEMPT_REALTIME patch:
http://redhat.com/~mingo/voluntary-preempt/voluntary-preempt-2.6.9-rc4-mm1-U1
this is a strict bugfixes-only release. With -U1 i cannot reproduce any
of the bugs on my testsystems anymore, but take care nevertheless, this
is still experimental code.
Changes since -U0:
- bugfix: fixed the highmem related crash reported by Adam Heath and i
think this could also fix the crash reported by Mark H Johnson.
- bugfix: fixed a number of networking related soft-lockups, caused by
a deadlock scenarios in the ipv4, netfilter and net-xmit locking
code. This could fix the lockup reported by Lorenzo Allegrucci.
- bugfix: enable interrupts in the int3 handler - gdb will otherwise
trigger a kernel debug message.
- cleanup: reworked the RCU API wrappers, we now have the following
variants:
rcu_read_[un]lock_spin(&spinlock)
rcu_read_[un]lock_bh_spin(&spinlock)
rcu_read_[un]lock_sem(&semaphore)
this change was necessary for the network locking fixes.
- debugging helper: SysRq-T will now print the stacktrace of currently
running tasks too. (They might be a bit unreliable occasionally but
very useful to debug deadlocks.)
- configurability fix: disabled the /proc/kernel/softirq_preemption and
hardirq_preemption runtime flags (and the softirq-preempt= and
hardirq-preempt= boot flags) if PREEMPT_REALTIME is enabled - in the
fully preemptible model these must always be on.
there are no known bugs at this moment, so please re-report any issues
you might still encounter.
to create a -U1 tree from scratch the patching order is:
http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.8.tar.bz2
+ http://kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.9-rc4.bz2
+ http://kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.9-rc4/2.6.9-rc4-mm1/2.6.9-rc4-mm1.bz2
+ http://redhat.com/~mingo/voluntary-preempt/voluntary-preempt-2.6.9-rc4-mm1-U1
Ingo
^ permalink raw reply [flat|nested] 8+ messages in thread* [patch] Real-Time Preemption, -VP-2.6.9-rc4-mm1-U2
2004-10-14 14:31 ` [patch] Real-Time Preemption, -VP-2.6.9-rc4-mm1-U1 Ingo Molnar
@ 2004-10-14 23:42 ` Ingo Molnar
2004-10-15 10:26 ` [patch] Real-Time Preemption, -VP-2.6.9-rc4-mm1-U3 Ingo Molnar
0 siblings, 1 reply; 8+ messages in thread
From: Ingo Molnar @ 2004-10-14 23:42 UTC (permalink / raw)
To: linux-kernel
Cc: Lee Revell, Rui Nuno Capela, Mark_H_Johnson, K.R. Foley,
Daniel Walker, Bill Huey, Andrew Morton, Adam Heath,
Lorenzo Allegrucci
i have released the -U2 PREEMPT_REALTIME patch:
http://redhat.com/~mingo/voluntary-preempt/voluntary-preempt-2.6.9-rc4-mm1-U2
this too is a bugfixes-only release, and it is still experimental code.
Changes since -U1:
- bugfix: fix page_lock_anon_vma() crash reported by Adam Heath and
Lorenzo Allegrucci.
- bugfix: fix selinux atomic-schedule warning messages, reported by
Mark H Johnson.
- bugfix: ip_tables atomic-schedule fix, fixes the messages reported by
Daniel Walker and K.R. Foley.
- bugfix: fix warnings/deadlocks in inet_create(), reported by Mark H
Johnson.
- bugfix: fixed a crash-in-shmfs-during-heavy-swapout bug
- bugfix: enable preemption while doing mmdrop() in the scheduler - it
may schedule.
- debugging feature: when PREEMPT_TIMING is enabled then the code also
keeps a trace/stack of preemption enabler EIPs. (if LATENCY_TRACE is
enabled as well then the parent EIP is recorded as well.) Whenever a
stack trace due to atomicity violations is printed, the preemption
stack is printed as well. This makes it much easier to identify the
place that did the illegal preemption-disabling.
to create a -U2 tree from scratch the patching order is:
http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.8.tar.bz2
+ http://kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.9-rc4.bz2
+ http://kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.9-rc4/2.6.9-rc4-mm1/2.6.9-rc4-mm1.bz2
+ http://redhat.com/~mingo/voluntary-preempt/voluntary-preempt-2.6.9-rc4-mm1-U2
Ingo
^ permalink raw reply [flat|nested] 8+ messages in thread
* [patch] Real-Time Preemption, -VP-2.6.9-rc4-mm1-U3
2004-10-14 23:42 ` [patch] Real-Time Preemption, -VP-2.6.9-rc4-mm1-U2 Ingo Molnar
@ 2004-10-15 10:26 ` Ingo Molnar
2004-10-16 15:33 ` [patch] Real-Time Preemption, -VP-2.6.9-rc4-mm1-U4 Ingo Molnar
0 siblings, 1 reply; 8+ messages in thread
From: Ingo Molnar @ 2004-10-15 10:26 UTC (permalink / raw)
To: linux-kernel
Cc: Lee Revell, Rui Nuno Capela, Mark_H_Johnson, K.R. Foley,
Daniel Walker, Bill Huey, Andrew Morton, Adam Heath,
Lorenzo Allegrucci, Andrew Rodland
i have released the -U3 PREEMPT_REALTIME patch:
http://redhat.com/~mingo/voluntary-preempt/voluntary-preempt-2.6.9-rc4-mm1-U3
this is a buildfixes-only release, and it is still experimental code.
Changes since -U2:
- build fix: fixes the latency.c compilation error reported by Adam
Heath.
- build fix: fixes !HIGHMEM compilation, patch from Andrew Rodland
to create a -U3 tree from scratch the patching order is:
http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.8.tar.bz2
+ http://kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.9-rc4.bz2
+ http://kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.9-rc4/2.6.9-rc4-mm1/2.6.9-rc4-mm1.bz2
+ http://redhat.com/~mingo/voluntary-preempt/voluntary-preempt-2.6.9-rc4-mm1-U3
Ingo
^ permalink raw reply [flat|nested] 8+ messages in thread
* [patch] Real-Time Preemption, -VP-2.6.9-rc4-mm1-U4
2004-10-15 10:26 ` [patch] Real-Time Preemption, -VP-2.6.9-rc4-mm1-U3 Ingo Molnar
@ 2004-10-16 15:33 ` Ingo Molnar
2004-10-18 14:50 ` [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U5 Ingo Molnar
0 siblings, 1 reply; 8+ messages in thread
From: Ingo Molnar @ 2004-10-16 15:33 UTC (permalink / raw)
To: linux-kernel
Cc: Lee Revell, Rui Nuno Capela, Mark_H_Johnson, K.R. Foley,
Bill Huey, Adam Heath
i have released the -U4 PREEMPT_REALTIME patch:
http://redhat.com/~mingo/voluntary-preempt/voluntary-preempt-2.6.9-rc4-mm1-U4
this is a fixes-only release, and it is still experimental code.
Changes since -U3:
- crash fix: fix the rtc_lock related crash reported by Bill Huey, the
rtc_lock is now a raw spinlock again.
- crash fix: avoid recursion into timer code when PREEMPT_TIMING is
enabled.
- crash/printout fix: revert some of selinux's locks back to raw
spinlocks. This could fix the problems reported by Mark H. Johnson,
Adam Heath.
- build fix: fix the compilation problems reported by Lee Revell
- debug feature: implemented 'print backtrace on all CPUs' on SMP
systems, SysRq+L will trigger it.
- build cleanup: restructure the debug config options. This should
resolve the build problems and incompatible debug-options
problems reported.
- cleanup: move definitions around, turn on generic rwlocks instead of
the x86-specific version.
i think all bugs that were reported with logs are fixed in -U4. Please
re-report any issue that might remain.
to create a -U4 tree from scratch the patching order is:
http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.8.tar.bz2
+ http://kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.9-rc4.bz2
+ http://kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.9-rc4/2.6.9-rc4-mm1/2.6.9-rc4-mm1.bz2
+ http://redhat.com/~mingo/voluntary-preempt/voluntary-preempt-2.6.9-rc4-mm1-U4
Ingo
^ permalink raw reply [flat|nested] 8+ messages in thread
* [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U5
2004-10-16 15:33 ` [patch] Real-Time Preemption, -VP-2.6.9-rc4-mm1-U4 Ingo Molnar
@ 2004-10-18 14:50 ` Ingo Molnar
2004-10-19 12:46 ` [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U6 Ingo Molnar
0 siblings, 1 reply; 8+ messages in thread
From: Ingo Molnar @ 2004-10-18 14:50 UTC (permalink / raw)
To: linux-kernel
Cc: Lee Revell, Rui Nuno Capela, Mark_H_Johnson, K.R. Foley,
Bill Huey, Adam Heath, Florian Schmidt
i have released the -U5 Real-Time Preemption patch:
http://redhat.com/~mingo/voluntary-preempt/voluntary-preempt-2.6.9-rc4-mm1-U5
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
!PREEMPT_REALTIME though.)
- locking cleanup: converted the IPC code from raw spinlocks & RCU to
spinlock-mutexes.
- 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
section.
- 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:
http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.8.tar.bz2
+ http://kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.9-rc4.bz2
+ http://kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.9-rc4/2.6.9-rc4-mm1/2.6.9-rc4-mm1.bz2
+ http://redhat.com/~mingo/voluntary-preempt/voluntary-preempt-2.6.9-rc4-mm1-U5
Ingo
^ permalink raw reply [flat|nested] 8+ messages in thread
* [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U6
2004-10-18 14:50 ` [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U5 Ingo Molnar
@ 2004-10-19 12:46 ` Ingo Molnar
2004-10-19 18:00 ` [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U7 Ingo Molnar
0 siblings, 1 reply; 8+ messages in thread
From: Ingo Molnar @ 2004-10-19 12:46 UTC (permalink / raw)
To: linux-kernel
Cc: Lee Revell, Rui Nuno Capela, Mark_H_Johnson, K.R. Foley,
Bill Huey, Adam Heath, Florian Schmidt, Thomas Gleixner,
Michal Schmidt, Fernando Pablo Lopez-Lezcano
i have released the -U6 Real-Time Preemption patch:
http://redhat.com/~mingo/realtime-preempt/realtime-preempt-2.6.9-rc4-mm1-U6
this is a fixes-only release.
found and fixed the 'big bug' that was probably the one causing
stability problems for a number of people. There was a small window for
a task double-free race to occur, causing all sorts of crashes later on.
This bug could trigger on UP and SMP systems alike, on SMP being a bit
more frequent.
Also, a common networking deadlock was found and fixed as well, using
the deadlock detector.
Changes since -U5:
- crash bug: fix task double free caused by irq-preemption of
do_exit(). This got introduced in -U5 as part of a simplification of
the zombie-reaping rewrite that the -U series did. That rewrite had an
unrobustness which got triggered by -U5 in a subtle way, opening up a
small window at the end of do_exit() for an interrupt-triggered
preemption to cause a double-free. This could fix some of the crashes
reported by Rui Nuno Capela, Mark H Johnson.
- deadlock bug: fix networking deadlock reported by Matthew L Foster.
Restructured the way the RT-RCU locking of ptype_lock is done - it's
cleaner and more obvious now (besides being correct). This could also
fix the deadlock reported by Michal Schmidt.
- deadlock bug: fix NFS startup breakage related to semaphore abuse,
patch from Thomas Gleixner.
- build bug: fix aha152x.c, based on patch from K.R. Foley.
- build bug: fix compilation error in qla2xxx. (reported by Fernando
Pablo Lopez-Lezcano and Mark H Johnson)
- build bug: fix !PREEMPT_REALTIME compilation error. (reported by
Matthew L Foster)
- build bug: fix ipmi-watchdog compilation error. (reported by Mark H
Johnson)
- tracer fix: if an assert happens within the tracer then we'd get into
infinite recursion. The fix was to correctly nest tracing on/off
points.
- debug enhancement: added a few more asserts to catch underflowing
atomic counters. (this made the task double-free trigger earlier.)
- debug enhancement: extended CONFIG_DEBUG_STACKOVERFLOW to be
mcount()-driven as well. This helps in catching stack overflows much
more reliably than the do_IRQ() based method.
to create a -U6 tree from scratch, the patching order is:
http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.8.tar.bz2
+ http://kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.9-rc4.bz2
+ http://kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.9-rc4/2.6.9-rc4-mm1/2.6.9-rc4-mm1.bz2
+ http://redhat.com/~mingo/realtime-preempt/realtime-preempt-2.6.9-rc4-mm1-U6
Ingo
^ permalink raw reply [flat|nested] 8+ messages in thread
* [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U7
2004-10-19 12:46 ` [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U6 Ingo Molnar
@ 2004-10-19 18:00 ` Ingo Molnar
2004-10-20 9:45 ` [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U8 Ingo Molnar
0 siblings, 1 reply; 8+ messages in thread
From: Ingo Molnar @ 2004-10-19 18:00 UTC (permalink / raw)
To: linux-kernel
Cc: Lee Revell, Rui Nuno Capela, Mark_H_Johnson, K.R. Foley,
Bill Huey, Adam Heath, Florian Schmidt, Thomas Gleixner,
Michal Schmidt, Fernando Pablo Lopez-Lezcano
i have released the -U7 Real-Time Preemption patch:
http://redhat.com/~mingo/realtime-preempt/realtime-preempt-2.6.9-rc4-mm1-U7
this too is a fixes-only release.
Changes since -U6:
- crash fix: turn off 4K stacks when using RWSEM_DEADLOCK_DETECTION,
and tune down the default max # of tasks traced per semaphore. This
increases process-stack size and reduces the footprint of lock
objects. This should fix the bootup crash reported by Rui Nuno
Capela.
- assert fix: fixed an ide-taskfile scheduling-with-irqs-off assert
that Rui's .config triggers.
- assert workaround: disabled PARPORT_1284 for now, this should fix the
assert seen by Mark H Johnson.
- NFS fix: clnt.c fix from Thomas Gleixner
- debugging helper: print stackframe-size in backtraces.
- large-stackframe fix: inflate.c fix
to create a -U7 tree from scratch, the patching order is:
http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.8.tar.bz2
+ http://kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.9-rc4.bz2
+ http://kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.9-rc4/2.6.9-rc4-mm1/2.6.9-rc4-mm1.bz2
+ http://redhat.com/~mingo/realtime-preempt/realtime-preempt-2.6.9-rc4-mm1-U7
Ingo
^ permalink raw reply [flat|nested] 8+ messages in thread
* [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U8
2004-10-19 18:00 ` [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U7 Ingo Molnar
@ 2004-10-20 9:45 ` Ingo Molnar
2004-10-21 13:27 ` [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U9 Ingo Molnar
0 siblings, 1 reply; 8+ messages in thread
From: Ingo Molnar @ 2004-10-20 9:45 UTC (permalink / raw)
To: linux-kernel
Cc: Lee Revell, Rui Nuno Capela, Mark_H_Johnson, K.R. Foley,
Bill Huey, Adam Heath, Florian Schmidt, Thomas Gleixner,
Michal Schmidt, Fernando Pablo Lopez-Lezcano
i have released the -U8 Real-Time Preemption patch:
http://redhat.com/~mingo/realtime-preempt/realtime-preempt-2.6.9-rc4-mm1-U8
this too is a fixes-only release. It includes the many semaphore-abuse
and sleep_on() fixes/improvements from Thomas Gleixner, and it also
includes a couple of semaphore related fixes.
I believe the semaphore fixes should resolve a number of the deadlocks
reported for -U7.
In particular it seems the only sane and reliable way to convert RCU
locking was to allow the following semantics for rwsems: allow reads to
nest, and allow self-read-recursion of a self-write-held semaphore. My
current implementation for this allows semaphore unfairness, but that
can be fixed later on. Most importantly, the RCU to RT-locking
conversions are much more automatic now and map nicely to what the code
is doing upstream. Most of the time they involve a conversion of a
spinlock or semaphore into a rwlock or rwsem. The old code maps to new
code almost automatically, the only manual work needed was to associate
the rcu_read_lock() with the writers-lock that it excludes against,
which is a pretty clear (but not automatic, and hence not automatable)
decision. This way i could convert some more networking code, and
simplify the older changes and hopefully get rid of some deadlocks. The
locking API is still not in its final form, but it's getting closer.
Changes since -U7:
- deadlock fix: sysfs/driver-base semaphore fixes from Thomas Gleixner
- deadlock fix: scsi semaphore fixes from Thomas Gleixner
- NFS sleep_on() fixes from Thomas Gleixner
- rawmidid.c sleep_on() fix from Thomas Gleixner
- [ i've added more wait_for_completion_*() primitives, to ease
conversion of other semaphore-(ab-)using code. ]
- make rwsems self-recursive
- RCU lock conversion: convert rtnl_sem RCU use.
- netfilter deadlock fix - clean up RCU locking.
to create a -U8 tree from scratch, the patching order is:
http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.8.tar.bz2
+ http://kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.9-rc4.bz2
+ http://kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.9-rc4/2.6.9-rc4-mm1/2.6.9-rc4-mm1.bz2
+ http://redhat.com/~mingo/realtime-preempt/realtime-preempt-2.6.9-rc4-mm1-U8
Ingo
^ permalink raw reply [flat|nested] 8+ messages in thread* [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U9
2004-10-20 9:45 ` [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U8 Ingo Molnar
@ 2004-10-21 13:27 ` Ingo Molnar
2004-10-22 13:35 ` [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U9.3 Ingo Molnar
0 siblings, 1 reply; 8+ messages in thread
From: Ingo Molnar @ 2004-10-21 13:27 UTC (permalink / raw)
To: linux-kernel
Cc: Lee Revell, Rui Nuno Capela, Mark_H_Johnson, K.R. Foley,
Bill Huey, Adam Heath, Florian Schmidt, Thomas Gleixner,
Michal Schmidt, Fernando Pablo Lopez-Lezcano
i have released the -U9 Real-Time Preemption patch, which can be
downloaded from:
http://redhat.com/~mingo/realtime-preempt/
this too is a fixes-only release. It includes more driver fixes and
improvements from Thomas Gleixner.
Changes since -U8.1:
- USB semaphore->completion conversion from Thomas Gleixner
- netconsole fixes from Michal Schmidt
- fbcon fixes
- added counted semaphores, this is now used by firewire, XFS and ACPI.
This could fix the firewire breakage - but testing would be welcome.
- PREEMPT_ACTIVE irqs-enabled critical path removal.
- fixed irqs-off raw spinlock primitives on UP: they enabled irqs
before enabling preemption, creating a window for an interrupt to
slip in and increase the critical path.
- made the deadlock detector not crash the current process - it will
just hang. This produces far nicer log output while still not
endangering stability. Also, fixed a bug in the detector that happens
if the trace buffer overflows.
- made the atomic-counter-underflow detector non-fatal as well, for the
same reasons.
to create a -U9 tree from scratch, the patching order is:
http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.8.tar.bz2
+ http://kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.9-rc4.bz2
+ http://kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.9-rc4/2.6.9-rc4-mm1/2.6.9-rc4-mm1.bz2
+ http://redhat.com/~mingo/realtime-preempt/realtime-preempt-2.6.9-rc4-mm1-U9
Ingo
^ permalink raw reply [flat|nested] 8+ messages in thread
* [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U9.3
2004-10-21 13:27 ` [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U9 Ingo Molnar
@ 2004-10-22 13:35 ` Ingo Molnar
2004-10-22 18:41 ` Alexander Batyrshin
0 siblings, 1 reply; 8+ messages in thread
From: Ingo Molnar @ 2004-10-22 13:35 UTC (permalink / raw)
To: linux-kernel
Cc: Lee Revell, Rui Nuno Capela, Mark_H_Johnson, K.R. Foley,
Bill Huey, Adam Heath, Florian Schmidt, Thomas Gleixner,
Michal Schmidt, Fernando Pablo Lopez-Lezcano
i have released the -U9.3 Real-Time Preemption patch, which can be
downloaded from:
http://redhat.com/~mingo/realtime-preempt/
this too is a fixes-only release.
Changes since -U9.2:
- tons more driver/mutex/completion conversion done by Thomas Gleixner
for: ppp, ipmi, parport/ieeee1284, scsi, hotplug, and more.
- iptables/netfilter deadlock fix, this should fix the bug reported by
Michal Schmidt.
- .config housekeeping: disallow the turning off of PREEMPT_BKL when
PREEMPT_REALTIME is on. This solves the build error reported by
Matthew L Foster.
- print the full stacktrace of the current task in the deadlock
detector and dont use show_stack(). This explains some of the weird
partial stackdumps reported.
- some more minor updates to the case when the deadlock detector turns
itself off due to reaching the limit. We kept the spinlock locked.
to create a -U9.3 tree from scratch, the patching order is:
http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.8.tar.bz2
+ http://kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.9-rc4.bz2
+ http://kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.9-rc4/2.6.9-rc4-mm1/2.6.9-rc4-mm1.bz2
+ http://redhat.com/~mingo/realtime-preempt/realtime-preempt-2.6.9-rc4-mm1-U9.3
Ingo
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U9.3
2004-10-22 13:35 ` [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U9.3 Ingo Molnar
@ 2004-10-22 18:41 ` Alexander Batyrshin
2004-10-22 20:08 ` Ingo Molnar
0 siblings, 1 reply; 8+ messages in thread
From: Alexander Batyrshin @ 2004-10-22 18:41 UTC (permalink / raw)
To: Ingo Molnar, Ext-Rt-Dev@Mvista. Com, linux-kernel
Hi Ingo,
U9.3 (defconfig) died with trace:
------------[ cut here ]------------
kernel BUG at kernel/sched.c:784!
invalid operand: 0000 [#1]
PREEMPT SMP
Modules linked in:
CPU: 0
EIP: 0060:[<c011873d>] Not tainted VLI
EFLAGS: 00010002 (2.6.9-rc4-mm1-RT-U9.3)
EIP is at resched_task+0x80/0x8a
eax: 00000001 ebx: c1674000 ecx: dfb578f0 edx: 00000000
esi: c16712c0 edi: 00000000 ebp: c167bc48 esp: c167bc3c
ds: 007b es: 007b ss: 0068 preempt: 00000003
Process ksoftirqd/0 (pid: 3, threadinfo=c167a000 task=c1670660)
Stack: c1403820 c1403820 00000000 c167bc94 c0118b78 c16712c0 c1433820
00000000
00000000 00000000 00000001 00000100 c1433820 c1433820 00000001
00000000
00000000 00000001 00000082 00000001 de9d3e60 00000001 c167bcd8
c0133c7b
Call Trace:
[<c0118b78>] try_to_wake_up+0x1f3/0x26b (20)
[<c0133c7b>] autoremove_wake_function+0x2f/0x57 (76)
[<c011a766>] __wake_up_common+0x3f/0x5e (28)
[<c011a7d0>] __wake_up+0x4b/0x62 (40)
[<c034e08c>] sock_def_readable+0x8e/0x90 (52)
[<c0388dbe>] tcp_child_process+0xe6/0xec (28)
[<c0384df7>] tcp_v4_do_rcv+0x123/0x162 (36)
[<c0134079>] _mutex_lock+0x2c/0x3b (16)
[<c0385513>] tcp_v4_rcv+0x6dd/0x92c (16)
[<c03c0e30>] svc_revisit+0x27/0x154 (48)
[<c0368553>] ip_local_deliver_finish+0x0/0x1b2 (40)
[<c0368609>] ip_local_deliver_finish+0xb6/0x1b2 (4)
[<c0368553>] ip_local_deliver_finish+0x0/0x1b2 (12)
[<c035f607>] nf_hook_slow+0xdc/0x12e (20)
[<c0368553>] ip_local_deliver_finish+0x0/0x1b2 (28)
[<c0368705>] ip_rcv_finish+0x0/0x2b3 (28)
[<c0367fcb>] ip_local_deliver+0x208/0x226 (4)
[<c0368553>] ip_local_deliver_finish+0x0/0x1b2 (24)
[<c0368828>] ip_rcv_finish+0x123/0x2b3 (20)
[<c0368705>] ip_rcv_finish+0x0/0x2b3 (32)
[<c035f607>] nf_hook_slow+0xdc/0x12e (20)
[<c0368705>] ip_rcv_finish+0x0/0x2b3 (28)
[<c036846a>] ip_rcv+0x481/0x56a (32)
[<c0368705>] ip_rcv_finish+0x0/0x2b3 (24)
[<c0354e68>] netif_receive_skb+0x117/0x1dd (28)
[<c0354ff7>] process_backlog+0xc9/0x1cb (36)
[<c03551b2>] net_rx_action+0xb9/0x1ed (48)
[<c01242d9>] ___do_softirq+0xe1/0x130 (36)
[<c0124923>] ksoftirqd+0x0/0xda (40)
[<c01243fb>] _do_softirq+0x4b/0x4d (4)
[<c01249c5>] ksoftirqd+0xa2/0xda (16)
[<c013376d>] kthread+0xb7/0xbd (24)
[<c01336b6>] kthread+0x0/0xbd (28)
[<c0103375>] kernel_thread_helper+0x5/0xb (16)
preempt count: 00000004
. 4-level deep critical section nesting:
.. entry 1: _spin_lock_irqsave+0x1d/0xa5 [<00000000>] / (0x0 [<00000000>])
.. entry 2: _spin_lock+0x19/0x6d [<00000000>] / (0x0 [<00000000>])
.. entry 3: _spin_lock_irqsave+0x1d/0xa5 [<00000000>] / (0x0 [<00000000>])
.. entry 4: print_traces+0x17/0x4e [<00000000>] / (0x0 [<00000000>])
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U9.3
2004-10-22 18:41 ` Alexander Batyrshin
@ 2004-10-22 20:08 ` Ingo Molnar
0 siblings, 0 replies; 8+ messages in thread
From: Ingo Molnar @ 2004-10-22 20:08 UTC (permalink / raw)
To: Alexander Batyrshin; +Cc: Ext-Rt-Dev@Mvista. Com, linux-kernel
how about U10.3? That has the BKL fix too.
Ingo
* Alexander Batyrshin <abatyrshin@ru.mvista.com> wrote:
> Hi Ingo,
> U9.3 (defconfig) died with trace:
>
> ------------[ cut here ]------------
> kernel BUG at kernel/sched.c:784!
> invalid operand: 0000 [#1]
> PREEMPT SMP
> Modules linked in:
> CPU: 0
> EIP: 0060:[<c011873d>] Not tainted VLI
> EFLAGS: 00010002 (2.6.9-rc4-mm1-RT-U9.3)
> EIP is at resched_task+0x80/0x8a
> eax: 00000001 ebx: c1674000 ecx: dfb578f0 edx: 00000000
> esi: c16712c0 edi: 00000000 ebp: c167bc48 esp: c167bc3c
> ds: 007b es: 007b ss: 0068 preempt: 00000003
> Process ksoftirqd/0 (pid: 3, threadinfo=c167a000 task=c1670660)
> Stack: c1403820 c1403820 00000000 c167bc94 c0118b78 c16712c0 c1433820
> 00000000
> 00000000 00000000 00000001 00000100 c1433820 c1433820 00000001
> 00000000
> 00000000 00000001 00000082 00000001 de9d3e60 00000001 c167bcd8
> c0133c7b
> Call Trace:
> [<c0118b78>] try_to_wake_up+0x1f3/0x26b (20)
> [<c0133c7b>] autoremove_wake_function+0x2f/0x57 (76)
> [<c011a766>] __wake_up_common+0x3f/0x5e (28)
> [<c011a7d0>] __wake_up+0x4b/0x62 (40)
> [<c034e08c>] sock_def_readable+0x8e/0x90 (52)
> [<c0388dbe>] tcp_child_process+0xe6/0xec (28)
> [<c0384df7>] tcp_v4_do_rcv+0x123/0x162 (36)
> [<c0134079>] _mutex_lock+0x2c/0x3b (16)
> [<c0385513>] tcp_v4_rcv+0x6dd/0x92c (16)
> [<c03c0e30>] svc_revisit+0x27/0x154 (48)
> [<c0368553>] ip_local_deliver_finish+0x0/0x1b2 (40)
> [<c0368609>] ip_local_deliver_finish+0xb6/0x1b2 (4)
> [<c0368553>] ip_local_deliver_finish+0x0/0x1b2 (12)
> [<c035f607>] nf_hook_slow+0xdc/0x12e (20)
> [<c0368553>] ip_local_deliver_finish+0x0/0x1b2 (28)
> [<c0368705>] ip_rcv_finish+0x0/0x2b3 (28)
> [<c0367fcb>] ip_local_deliver+0x208/0x226 (4)
> [<c0368553>] ip_local_deliver_finish+0x0/0x1b2 (24)
> [<c0368828>] ip_rcv_finish+0x123/0x2b3 (20)
> [<c0368705>] ip_rcv_finish+0x0/0x2b3 (32)
> [<c035f607>] nf_hook_slow+0xdc/0x12e (20)
> [<c0368705>] ip_rcv_finish+0x0/0x2b3 (28)
> [<c036846a>] ip_rcv+0x481/0x56a (32)
> [<c0368705>] ip_rcv_finish+0x0/0x2b3 (24)
> [<c0354e68>] netif_receive_skb+0x117/0x1dd (28)
> [<c0354ff7>] process_backlog+0xc9/0x1cb (36)
> [<c03551b2>] net_rx_action+0xb9/0x1ed (48)
> [<c01242d9>] ___do_softirq+0xe1/0x130 (36)
> [<c0124923>] ksoftirqd+0x0/0xda (40)
> [<c01243fb>] _do_softirq+0x4b/0x4d (4)
> [<c01249c5>] ksoftirqd+0xa2/0xda (16)
> [<c013376d>] kthread+0xb7/0xbd (24)
> [<c01336b6>] kthread+0x0/0xbd (28)
> [<c0103375>] kernel_thread_helper+0x5/0xb (16)
> preempt count: 00000004
> . 4-level deep critical section nesting:
> .. entry 1: _spin_lock_irqsave+0x1d/0xa5 [<00000000>] / (0x0 [<00000000>])
> .. entry 2: _spin_lock+0x19/0x6d [<00000000>] / (0x0 [<00000000>])
> .. entry 3: _spin_lock_irqsave+0x1d/0xa5 [<00000000>] / (0x0 [<00000000>])
> .. entry 4: print_traces+0x17/0x4e [<00000000>] / (0x0 [<00000000>])
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2004-10-22 20:10 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-10-22 18:43 [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U9.3 Mark_H_Johnson
2004-10-22 18:49 ` K.R. Foley
2004-10-22 18:58 ` Thomas Gleixner
-- strict thread matches above, loose matches on Subject: below --
2004-10-22 19:40 Mark_H_Johnson
2004-10-22 19:55 ` Thomas Gleixner
2004-10-14 0:24 [patch] Real-Time Preemption, -VP-2.6.9-rc4-mm1-U0 Ingo Molnar
2004-10-14 14:31 ` [patch] Real-Time Preemption, -VP-2.6.9-rc4-mm1-U1 Ingo Molnar
2004-10-14 23:42 ` [patch] Real-Time Preemption, -VP-2.6.9-rc4-mm1-U2 Ingo Molnar
2004-10-15 10:26 ` [patch] Real-Time Preemption, -VP-2.6.9-rc4-mm1-U3 Ingo Molnar
2004-10-16 15:33 ` [patch] Real-Time Preemption, -VP-2.6.9-rc4-mm1-U4 Ingo Molnar
2004-10-18 14:50 ` [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U5 Ingo Molnar
2004-10-19 12:46 ` [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U6 Ingo Molnar
2004-10-19 18:00 ` [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U7 Ingo Molnar
2004-10-20 9:45 ` [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U8 Ingo Molnar
2004-10-21 13:27 ` [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U9 Ingo Molnar
2004-10-22 13:35 ` [patch] Real-Time Preemption, -RT-2.6.9-rc4-mm1-U9.3 Ingo Molnar
2004-10-22 18:41 ` Alexander Batyrshin
2004-10-22 20:08 ` Ingo Molnar
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).