Hi Jürgen, Juergen Beisert wrote: > On Thursday 10 January 2008 14:17, Wolfgang Grandegger wrote: >> Hi Robert, >> >> Robert Schwebel wrote: >>> Wolfgang, >>> >>> On Wed, Jan 09, 2008 at 11:51:07PM +0100, Robert Schwebel wrote: >>>> Throwing in the versions from 2.6.23.3-rt5 doesn't help, the effect >>>> stays the same. So I assume it is a side effect. >>> Can you test the following patch by John Stulz (thanks to John for the >>> quick help on irc!), which fixes the issues on my board: >>> >>> ----------8<---------- >>> Index: linux-2.6.24-rc5/arch/powerpc/kernel/time.c >>> =================================================================== >>> --- linux-2.6.24-rc5.orig/arch/powerpc/kernel/time.c >>> +++ linux-2.6.24-rc5/arch/powerpc/kernel/time.c >>> @@ -773,7 +773,7 @@ void update_vsyscall(struct timespec *wa >>> stamp_xsec = (u64) xtime.tv_nsec * XSEC_PER_SEC; >>> do_div(stamp_xsec, 1000000000); >>> stamp_xsec += (u64) xtime.tv_sec * XSEC_PER_SEC; >>> - update_gtod(clock->cycle_last, stamp_xsec, t2x); >>> + update_gtod(clock->cycle_last-clock->cycle_accumulated, stamp_xsec, >>> t2x); } >>> >>> void update_vsyscall_tz(void) >>> ----------8<---------- >>> >>> With this patch ontop of 2.6.24-rc5-rt1 plus the board support patches >>> for the phyCORE-MPC5200B-tiny, I get this result from cyclictest, again >>> under "(while true; do hackbench 10; done) &" load: >>> >>> T: 0 ( 867) P:80 I: 10000 C: 105002 Min: 31 Act: 48 Avg: >>> 51 Max: 92 >> Unfortunately, it doesn't really help on my Icecube board. >> >> bash-3.00# ./cyclictest -n -p80 -i1000 >> 129.85 93.18 38.05 4/45 6354 >> 130.41 162.23 83.05 3/49 8395 >> T: 0 ( 4621) P:80 I:1000 C: 477097 Min: 25 Act: 64 Avg: 67 Max: >> 286 >> >> bash-3.00# ./hackbench 10 >> Time: 95.402 >> >> Could you run your cyclictest much longer? >> >> And hackbench takes ages, already without running cyclictest: > > Did your read http://lkml.org/lkml/2007/12/7/181 ? Don't know if it is > relevant here. Seems somehow related but my -rt kernel already selects SLAB: $ cat init/Kconfig ... config SLUB bool "SLUB (Unqueued Allocator)" depends on !PREEMPT_RT With SLUB re-enabled I get the attached interesting oops. Wolfgang.
[ 5.287422] BUG: sleeping function called from invalid context IRQ-192(735) at kernel/rtmutex.c:638 [ 5.296678] in_atomic():0 [00000000], irqs_disabled():1 [ 5.302009] Call Trace: [ 5.304501] [c39e1e50] [c000919c] show_stack+0x50/0x190 (unreliable) [ 5.311024] [c39e1e80] [c001b3c4] __might_sleep+0xec/0x110 [ 5.316652] [c39e1e90] [c0207ad8] __lock_text_start+0x88/0xa0 [ 5.322531] [c39e1ea0] [c007c2a8] __slab_alloc+0x3cc/0x644 [ 5.328141] [c39e1ed0] [c007cf70] __kmalloc_track_caller+0xdc/0xe4 [ 5.334461] [c39e1ef0] [c01803e4] __alloc_skb+0x60/0x120 [ 5.339910] [c39e1f10] [c01561c8] mpc52xx_fec_rx_interrupt+0x180/0x308 [ 5.346587] [c39e1f40] [c0051620] handle_IRQ_event+0x6c/0x110 [ 5.352471] [c39e1f70] [c0051fac] thread_simple_irq+0x88/0x114 [ 5.358434] [c39e1f90] [c0052364] do_irqd+0x32c/0x3ac [ 5.363597] [c39e1fd0] [c003ad28] kthread+0x84/0x8c [ 5.368590] [c39e1ff0] [c0010b90] kernel_thread+0x44/0x60