Module: xenomai-jki
Branch: for-upstream
Commit: 77bc6be1ae17c63b8ca66f2e9338b61a8eb38eda
URL:    
http://git.xenomai.org/?p=xenomai-jki.git;a=commit;h=77bc6be1ae17c63b8ca66f2e9338b61a8eb38eda

Author: Jan Kiszka <jan.kis...@siemens.com>
Date:   Fri Jan  4 20:32:17 2013 +0100

intr: Fix output of timer interrupts in /proc/xenomai/{irq,stat}

XNARCH_TIMER_IRQ works on the current CPU, we need to check all CPUs if
a given IRQ serves there as timer. Also, properly decode RTHAL_TIMER_IPI
when listing IRQs.

Signed-off-by: Jan Kiszka <jan.kis...@siemens.com>

---

 include/asm-generic/hal.h    |    2 ++
 include/asm-generic/system.h |    1 +
 ksrc/nucleus/intr.c          |   18 ++++++++++++++++--
 3 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/include/asm-generic/hal.h b/include/asm-generic/hal.h
index 8c667d7..b05cffa 100644
--- a/include/asm-generic/hal.h
+++ b/include/asm-generic/hal.h
@@ -62,10 +62,12 @@
 #define RTHAL_HRTIMER_IPI      IPIPE_HRTIMER_IPI
 #define RTHAL_RESCHEDULE_IPI   IPIPE_RESCHEDULE_IPI
 #define RTHAL_CRITICAL_IPI     IPIPE_CRITICAL_IPI
+#define RTHAL_PERCPU_TIMER_IRQ(cpu) per_cpu(ipipe_percpu.hrtimer_irq, cpu)
 #else /* !I-pipe core */
 #define RTHAL_HRTIMER_IPI      IPIPE_SERVICE_IPI0
 #define RTHAL_RESCHEDULE_IPI   IPIPE_SERVICE_IPI1
 #define RTHAL_CRITICAL_IPI     IPIPE_CRITICAL_IPI
+#define RTHAL_PERCPU_TIMER_IRQ(cpu) RTHAL_TIMER_IRQ
 #endif /* !I-pipe core */
 
 enum rthal_ktimer_mode { /* <!> Must follow enum clock_event_mode */
diff --git a/include/asm-generic/system.h b/include/asm-generic/system.h
index 4ab2e05..25bd83f 100644
--- a/include/asm-generic/system.h
+++ b/include/asm-generic/system.h
@@ -233,6 +233,7 @@ static inline int xnlock_dbg_release(xnlock_t *lock)
 
 #define XNARCH_NR_IRQS                 RTHAL_NR_IRQS
 #define XNARCH_TIMER_IRQ               RTHAL_TIMER_IRQ
+#define XNARCH_PERCPU_TIMER_IRQ(cpu)   RTHAL_PERCPU_TIMER_IRQ(cpu)
 #define XNARCH_TIMER_DEVICE            RTHAL_TIMER_DEVICE
 #define XNARCH_CLOCK_DEVICE            RTHAL_CLOCK_DEVICE
 
diff --git a/ksrc/nucleus/intr.c b/ksrc/nucleus/intr.c
index ba61f31..b63b3cd 100644
--- a/ksrc/nucleus/intr.c
+++ b/ksrc/nucleus/intr.c
@@ -914,6 +914,16 @@ int xnintr_query_init(xnintr_iterator_t *iterator)
        return xnintr_count;
 }
 
+static bool xnintr_is_timer_irq(int irq)
+{
+       int cpu;
+
+       for_each_online_cpu(cpu)
+               if (irq == XNARCH_PERCPU_TIMER_IRQ(cpu))
+                       return true;
+       return false;
+}
+
 int xnintr_query_next(int irq, xnintr_iterator_t *iterator, char *name_buf)
 {
        xnintr_t *intr;
@@ -934,7 +944,7 @@ int xnintr_query_next(int irq, xnintr_iterator_t *iterator, 
char *name_buf)
        }
 
        if (!iterator->prev) {
-               if (irq == XNARCH_TIMER_IRQ)
+               if (xnintr_is_timer_irq(irq))
                        intr = &nkclock;
                else
                        intr = xnintr_shirq_first(irq);
@@ -985,12 +995,16 @@ static inline int format_irq_proc(unsigned int irq,
        struct xnintr *intr;
        spl_t s;
 
-       if (irq == XNARCH_TIMER_IRQ) {
+       if (xnintr_is_timer_irq(irq)) {
                xnvfile_puts(it, "         [timer]");
                return 0;
        }
 
 #ifdef CONFIG_SMP
+       if (irq == RTHAL_TIMER_IPI) {
+               xnvfile_puts(it, "         [timer-ipi]");
+               return 0;
+       }
        if (irq == RTHAL_RESCHEDULE_IPI) {
                xnvfile_puts(it, "         [reschedule]");
                return 0;


_______________________________________________
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git

Reply via email to