On Wed, 2007-10-17 at 15:14 +0200, CHABAL David wrote:
> :| + *func                 -84    0.389  mask_and_ack_8259A+0x14 
> (__ipipe_ack_level_irq+0x22)
> :| + *func                 -84    0.397  __ipipe_spin_lock_irqsave+0x9 
> (mask_and_ack_8259A+0x29)
> :| # *(0x11)  0x0000000e   -83!  17.062  mask_and_ack_8259A+0xbc 
> (__ipipe_ack_level_irq+0x22)
> :| # *(0x22)  0x0000000e   -66!  23.096  mask_and_ack_8259A+0xca 
> (__ipipe_ack_level_irq+0x22)
> :| # *(0x33)  0x0000000e   -43    0.415  mask_and_ack_8259A+0xf3 
> (__ipipe_ack_level_irq+0x22)
> :| # *func                 -43    0.418 
> __ipipe_spin_unlock_irqrestore+0x9 (mask_and_ack_8259A+0x67)
> :| + *func                 -42    0.397  __ipipe_walk_pipeline+0xa 

Grmmff... I think the PIC on this box has some deep troubles; please try
this patch, in replacement of the previous ipipe_trace_special
instrumentation:

--- 2.6.20-ipipe-1.8-08/arch/i386/kernel/i8259.c~       2007-10-12
18:19:31.000000000 +0200
+++ 2.6.20-ipipe-1.8-08/arch/i386/kernel/i8259.c        2007-10-17
15:42:35.000000000 +0200
@@ -128,7 +128,7 @@
  * This has to be protected by the irq controller spinlock
  * before being called.
  */
-static inline int i8259A_irq_real(unsigned int irq)
+int i8259A_irq_real(unsigned int irq)
 {
        int value;
        int irqmask = 1<<irq;
@@ -174,6 +174,8 @@
         */
        if (cached_irq_mask & irqmask)
                goto spurious_8259A_irq;
+
+       ipipe_trace_special(0x77, irq);
 #ifdef CONFIG_IPIPE
        if (irq == 0) {
                outb(0x60,PIC_MASTER_CMD);      /* 'Specific EOI to master */
@@ -185,18 +187,14 @@
 
 handle_real_irq:
        if (irq & 8) {
-               ipipe_trace_special(0x10, irq);
-               inb(PIC_SLAVE_IMR);     /* DUMMY - (do we need this?) */
-               ipipe_trace_special(0x11, irq);
                outb(cached_slave_mask, PIC_SLAVE_IMR);
                outb(0x60+(irq&7),PIC_SLAVE_CMD);/* 'Specific EOI' to slave */
                outb(0x60+PIC_CASCADE_IR,PIC_MASTER_CMD); /* 'Specific EOI' to
master-IRQ2 */
-               ipipe_trace_special(0x12, irq);
        } else {
-               inb(PIC_MASTER_IMR);    /* DUMMY - (do we need this?) */
                outb(cached_master_mask, PIC_MASTER_IMR);
                outb(0x60+irq,PIC_MASTER_CMD);  /* 'Specific EOI to master */
        }
+       ipipe_trace_special(0x99, irq);
        spin_unlock_irqrestore(&i8259A_lock, flags);
        return;

-- 
Philippe.



_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help

Reply via email to