* [Xenomai] rt_intr_wait bug during debugging
@ 2013-09-23 8:48 Paolo Minazzi
2013-09-23 18:25 ` Gilles Chanteperdrix
2013-09-24 7:38 ` Philippe Gerum
0 siblings, 2 replies; 4+ messages in thread
From: Paolo Minazzi @ 2013-09-23 8:48 UTC (permalink / raw)
To: xenomai
Hi to all,
the problem arise when I debug an application that uses an external
interrupt.
Below there is a sample (pseudo) code that show how I can see the problem.
The irq stuff is related on my specific machine, so I think it is not
important
give details about GPIO programming and interrupt clear (CLEAR_IRQ).
To see the problem :
1. I put a breakpoint on the usleep
2. I countinue to send "c" to stop always in the breakpoint.
When all is OK the cnt grows up.
Sometime, after several "c", I encounter the bug.
At this point the cnt is always the same and stops to grow up.
This happen because the irq line is disabled ! I check it seeing the VIC
register.
I verified that if I put only a breakpoint in the
asm("nop")
the irq line in the VIC register is disabled. This means that xenomai
disable the irq line because
I enabled the irq line before with
rt_intr_enable(&int_desc);
When restart with "c", xenomai is able to enable again the irq line.
For some reason xenomai sometimes does not enable irq line anymore and
the code
in blocked in the
rt_intr_wait(&int_desc, TM_INFINITE);
line.
If I enter in the bug condition and manually enable the irq line
(programming the VIC register)
all works again without problem. If I continue my test I will re-enter
in the bug condition ...
Only a dubt : in the xenomai example
http://www.xenomai.org/documentation/xenomai-2.4/html/api/user__irq_8c-example.html#a1
there is not the rt_intr_enable in the irq_server. I don't know if it is
out problem or not.
I tried to debug and I have some log, but for me it is difficult
understand the real source of the
bug. I have a system on which I can see the problem with a minimal effort.
To be clear, there is no problem executing the xenomai application
without debugger.
Regards
Paolo Minazzi
#########################################################################################
void irq_server(void *cookie)
{
while (1)
{
rt_intr_enable(&int_desc);
asm("nop");
rt_intr_wait(&int_desc, TM_INFINITE);
CLEAR_IRQ();
cnt++;
}
}
void InitIrq(void)
{
init_irq_fujitsu();
rt_intr_create(&int_desc, IRQNAME, IRQNUMBER, I_PROPAGATE );
rt_task_create(&server_desc, "Irq2ms", TASK_STKSZ, TASK_PRIO,
TASK_MODE);
rt_task_start(&server_desc, &irq_server, NULL);
enable_irq_fujitsu();
}
int main(int argc, char* argv[])
{
mlockall(MCL_CURRENT|MCL_FUTURE);
rt_timer_set_mode ( 0 );
rt_task_set_mode(0, 0, /* T_WARNSW ,*/ NULL);
MapRegistersARM();
InitIrq();
while(1)
{
printf("[ %4d ]\n",cnt);
======> usleep(10000);
}
}
#########################################################################################
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [Xenomai] rt_intr_wait bug during debugging
2013-09-23 8:48 [Xenomai] rt_intr_wait bug during debugging Paolo Minazzi
@ 2013-09-23 18:25 ` Gilles Chanteperdrix
2013-09-24 7:26 ` Paolo Minazzi
2013-09-24 7:38 ` Philippe Gerum
1 sibling, 1 reply; 4+ messages in thread
From: Gilles Chanteperdrix @ 2013-09-23 18:25 UTC (permalink / raw)
To: Paolo Minazzi; +Cc: xenomai
On 09/23/2013 10:48 AM, Paolo Minazzi wrote:
> Hi to all,
> the problem arise when I debug an application that uses an external
> interrupt.
> Below there is a sample (pseudo) code that show how I can see the problem.
> The irq stuff is related on my specific machine, so I think it is not
> important
> give details about GPIO programming and interrupt clear (CLEAR_IRQ).
Could you try reproducing this issue with a recent I-pipe patch? Say the
I-pipe patch for Linux 3.5 or 3.8?
--
Gilles.
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [Xenomai] rt_intr_wait bug during debugging
2013-09-23 18:25 ` Gilles Chanteperdrix
@ 2013-09-24 7:26 ` Paolo Minazzi
0 siblings, 0 replies; 4+ messages in thread
From: Paolo Minazzi @ 2013-09-24 7:26 UTC (permalink / raw)
Cc: xenomai
Il 23/09/2013 20.25, Gilles Chanteperdrix ha scritto:
> On 09/23/2013 10:48 AM, Paolo Minazzi wrote:
>> Hi to all,
>> the problem arise when I debug an application that uses an external
>> interrupt.
>> Below there is a sample (pseudo) code that show how I can see the problem.
>> The irq stuff is related on my specific machine, so I think it is not
>> important
>> give details about GPIO programming and interrupt clear (CLEAR_IRQ).
> Could you try reproducing this issue with a recent I-pipe patch? Say the
> I-pipe patch for Linux 3.5 or 3.8?
>
>
I see the problem with xenomai 2.5.6, linux kernel 2.6.31.8.
I cannot try with a new i-pipe.
I realize that the issue is very closed to our arm board and our porting
of xenomai.
I think that timers and tasks related to time are more general, while
tasks connected to
irq line are more specific to hardware and porting. So it is difficult
reproduce it.
What I'd like to know if it is normal do it in user space (directly
programming the registers) both
- enable at every cycle the interrupt on the line
- ack the interrupt
The xenomai example you give in the documentation does not show these
steps,
maybe because this should be done in kernel space.
Thanks for support,
Regards
Paolo Minazzi
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Xenomai] rt_intr_wait bug during debugging
2013-09-23 8:48 [Xenomai] rt_intr_wait bug during debugging Paolo Minazzi
2013-09-23 18:25 ` Gilles Chanteperdrix
@ 2013-09-24 7:38 ` Philippe Gerum
1 sibling, 0 replies; 4+ messages in thread
From: Philippe Gerum @ 2013-09-24 7:38 UTC (permalink / raw)
To: Paolo Minazzi; +Cc: xenomai
On 09/23/2013 10:48 AM, Paolo Minazzi wrote:
> Hi to all,
> the problem arise when I debug an application that uses an external
> interrupt.
> Below there is a sample (pseudo) code that show how I can see the problem.
> The irq stuff is related on my specific machine, so I think it is not
> important
> give details about GPIO programming and interrupt clear (CLEAR_IRQ).
>
> To see the problem :
> 1. I put a breakpoint on the usleep
> 2. I countinue to send "c" to stop always in the breakpoint.
>
Unless you enabled non-stop mode for GDB, breakpointing the main thread
will stop all threads, including your IRQ server. Interrupts won't be
acked the way they should, if the relevant code lives in userland. This
may cause all sorts of weird behaviors (*).
This is why we strongly recommend managing interrupt delivery from a
RTDM driver - it does not have to be complex, and NOT from userland.
This driver may then expose an interface to userland for receiving IRQ
notifications (read, ioctl, whatever fits).
(*) You may want to check your kernel log, in case the Xenomai core
decided to disable the interrupt line to prevent an IRQ storm.
--
Philippe.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2013-09-24 7:38 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-09-23 8:48 [Xenomai] rt_intr_wait bug during debugging Paolo Minazzi
2013-09-23 18:25 ` Gilles Chanteperdrix
2013-09-24 7:26 ` Paolo Minazzi
2013-09-24 7:38 ` Philippe Gerum
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.