On Sat, Dec 06, 2014 at 02:19:27PM +0000, Stoidner, Christoph wrote:
> 
> Hi at all,
> 
> I am using linux 3.10.18 and ipipe-core-3.10.18-arm-1 on a Freescale i.MX28. 
> I have also merged PREEMPT RT rt14 into the kernel. FCSE is disabled.
> 
> I have enabled several debug options in the kernel. When a started program 
> exits I get the message below:
> 
> [   33.187104] BUG: sleeping function called from invalid context at 
> kernel/rtmutex.c:659
> [   33.187125] in_atomic(): 1, irqs_disabled(): 128, pid: 87, name: 
> [   33.187138] 1 lock held by /87:
> [   33.187213]  #0:  (rcu_read_lock){......}, at: [<c002add8>] 
> __lock_task_sighand+0x24/0xf4
> [   33.187232] Preemption disabled at:[<  (null)>]   (null)
> [   33.187237] 
> [   33.187262] CPU: 0 PID: 87 Comm:  Not tainted 
> 3.10.18-rt14-arvero-rev01-ipipe #2
> [   33.187337] [<c0013110>] (unwind_backtrace+0x0/0xf0) from [<c001158c>] 
> (show_stack+0x10/0x14)
> [   33.187398] [<c001158c>] (show_stack+0x10/0x14) from [<c04a0b70>] 
> (rt_spin_lock+0x20/0x64)
> [   33.187444] [<c04a0b70>] (rt_spin_lock+0x20/0x64) from [<c002ae28>] 
> (__lock_task_sighand+0x74/0xf4)
> [   33.187479] [<c002ae28>] (__lock_task_sighand+0x74/0xf4) from [<c002aecc>] 
> (do_send_sig_info+0x24/0x64)
> [   33.187522] [<c002aecc>] (do_send_sig_info+0x24/0x64) from [<c00b0878>] 
> (lostage_handler+0xf8/0x128)
> [   33.187568] [<c00b0878>] (lostage_handler+0xf8/0x128) from [<c0073860>] 
> (rthal_apc_handler+0x60/0x84)
> [   33.187615] [<c0073860>] (rthal_apc_handler+0x60/0x84) from [<c0066a58>] 
> (__ipipe_do_sync_stage+0x1f8/0x288)
> [   33.187655] [<c0066a58>] (__ipipe_do_sync_stage+0x1f8/0x288) from 
> [<c00145c0>] (__ipipe_syscall_root+0xf4/0x13c)
> [   33.187694] [<c00145c0>] (__ipipe_syscall_root+0xf4/0x13c) from 
> [<c000ea34>] (vector_swi+0x54/0x74)
> 
> For me it seems as I have done something wrong when merging spinlocks of 
> PREEMPT RT and ipipe. Isn't rt_spin_lock() allowed to be called within that 
> context? Does anyone has an idea why?

>From what I understand of Xenomai 2.6 code (if this is the version
you are using), normally, the apc should be invoked from the
rthal_apc_thread context, not from rthal_apc_handler.

The virq handler should be rthal_apc_kicker, which wakes up the
process.

This code is #ifdef CONFIG_PREEMPT_RT, is not CONFIG_PREEMPT_RT
defined in your kernel ?

-- 
                                            Gilles.

_______________________________________________
Xenomai mailing list
[email protected]
http://www.xenomai.org/mailman/listinfo/xenomai

Reply via email to