From mboxrd@z Thu Jan 1 00:00:00 1970 From: compudj@krystal.dyndns.org (Mathieu Desnoyers) Date: Tue, 16 Feb 2010 11:47:44 -0500 Subject: [ltt-dev] LTTng0.158 Linux-2629-RT kernel BUG: sleeping function called from invalid context at kernel/rtmutex.c:685 In-Reply-To: References: <1266337450.24271.140.camel@gandalf.stny.rr.com> Message-ID: <20100216164744.GA25115@Krystal> * Thomas Gleixner (tglx at linutronix.de) wrote: > On Tue, 16 Feb 2010, Steven Rostedt wrote: > > > On Tue, 2010-02-16 at 20:47 +0530, naresh kamboju wrote: > > > Hi, > > > > > > After applying LTTng 0.158 patches on 2.6.29-RT with SMP and NON-SMP > > > found BUG on ARM target. > > > LTTng 0.158 patches with 2.6.29 is working fine. > > > > > > Linux kernel: 2.6.29-RT > > > RT patches: patch-2.6.29.6-rt24-broken-out.tar.bz2 > > > http://www.kernel.org/pub/linux/kernel/projects/rt/patch-2.6.29.6-rt24-broken-out.tar.bz2 > > > > > > LTTng 0.158 patches are applied. > > > ARCH: ARM > > > Glibc: 2.9 > > > gcc: 4.3.3 > > > > Do you get this without the LTTng patches applied? > > I bet you wont. > > > > > > > dmesg > > > {{{ > > > BUG: sleeping function called from invalid context at kernel/rtmutex.c:685 > > > in_atomic(): 1, irqs_disabled(): 128, pid: 720, name: lttd > > ----------------------------------------------------------^^^^ > > > > Backtrace: > > > [] (dump_backtrace+0x0/0x10c) from [] (dump_stack+0x18/0x1c) > > > r7:000002ad r6:c045da78 r5:00001116 r4:c04ba400 > > > [] (dump_stack+0x0/0x1c) from [] (__might_sleep+0x120/0x14c) > > > [] (__might_sleep+0x0/0x14c) from [] > > > (rt_spin_lock+0x38/0x68) > > > r7:ce319d04 r6:c0763660 r5:c05107a0 r4:c05107a0 > > > [] (rt_spin_lock+0x0/0x68) from [] > > > (lock_timer_base+0x30/0x54) > > > r4:c05107a0 > > > [] (lock_timer_base+0x0/0x54) from [] (del_timer+0x2c/0x6c) > > > r8:c0023570 r7:ce319d38 r6:00740000 r5:ceb19ca4 r4:c0763660 > > > [] (del_timer+0x0/0x6c) from [] > > > (disable_synthetic_tsc_ipi+0x24/0x30) > > > r5:ceb19ca4 r4:00000001 > > > [] (disable_synthetic_tsc_ipi+0x0/0x30) from [] > > > (generic_smp_call_function_single_interrupt+0x98/0xf4) > > > [] (generic_smp_call_function_single_interrupt+0x0/0xf4) > > > from [] (do_IPI+0xc8/0x15c) > > > [] (do_IPI+0x0/0x15c) from [] (_text+0xc4/0x128) > > The function is called from an IPI. That's a LTTNG problem, not a RT one. I use del_timer in IPI to delete lttng per-cpu timers on all CPUs. I have to do this because timers created with add_timer_on are documented to be incompatible with del_timer_sync(): * Synchronization rules: Callers must prevent restarting of the timer, * otherwise this function is meaningless. It must not be called from * interrupt contexts. The caller must not hold locks which would prevent * completion of the timer's handler. The timer's handler must not call * add_timer_on(). Upon exit the timer is not queued and the handler is * not running on any CPU. So I resort to doing a del_timer within an IPI to delete each local timer. I disable interrupts within the IPI to ensure that a timer interrupt cannot possibly nest in configurations permitting IRQ nesting (editorial question: I think the x86 arch supported such nesting that at some point, is it still the case ?). Any solution in mind for this ? A worker thread maybe ? Thanks, Mathieu > > Thanks, > > tglx > > _______________________________________________ > ltt-dev mailing list > ltt-dev at lists.casi.polymtl.ca > http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev > -- Mathieu Desnoyers OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68