static int apc_vfile_show(struct xnvfile_regular_iterator *it, void *data) { int cpu, apc; /* We assume the entire output fits in a single page. */ xnvfile_puts(it, "APC "); for_each_realtime_cpu(cpu) xnvfile_printf(it, " CPU%d", cpu); for (apc = 0; apc < BITS_PER_LONG; apc++) { if (!test_bit(apc, &cobalt_pipeline.apc_map)) continue; /* Not hooked. */ xnvfile_printf(it, "\n%3d: ", apc); for_each_realtime_cpu(cpu) xnvfile_printf(it, "%12lu", per_cpu(cobalt_machine_cpudata, cpu).apc_shots[apc]); if (cobalt_pipeline.apc_table[apc].name) xnvfile_printf(it, " (%s)", cobalt_pipeline.apc_table[apc].name); } xnvfile_putc(it, '\n'); return 0; }
static int faults_vfile_show(struct xnvfile_regular_iterator *it, void *data) { int cpu, trap; xnvfile_puts(it, "TRAP "); for_each_realtime_cpu(cpu) xnvfile_printf(it, " CPU%d", cpu); for (trap = 0; cobalt_machine.fault_labels[trap]; trap++) { if (*cobalt_machine.fault_labels[trap] == '\0') continue; xnvfile_printf(it, "\n%3d: ", trap); for_each_realtime_cpu(cpu) xnvfile_printf(it, "%12u", per_cpu(cobalt_machine_cpudata, cpu).faults[trap]); xnvfile_printf(it, " (%s)", cobalt_machine.fault_labels[trap]); } xnvfile_putc(it, '\n'); return 0; }
static int irq_vfile_show(struct xnvfile_regular_iterator *it, void *data) { int cpu, irq; /* FIXME: We assume the entire output fits in a single page. */ xnvfile_puts(it, "IRQ "); for_each_online_cpu(cpu) xnvfile_printf(it, " CPU%d", cpu); for (irq = 0; irq < XNARCH_NR_IRQS; irq++) { if (rthal_irq_handler(&rthal_domain, irq) == NULL) continue; xnvfile_printf(it, "\n%3d:", irq); for_each_online_cpu(cpu) { xnvfile_printf(it, "%12lu", rthal_cpudata_irq_hits(&rthal_domain, cpu, irq)); } format_irq_proc(irq, it); } xnvfile_putc(it, '\n'); return 0; }
static inline int format_irq_proc(unsigned int irq, struct xnvfile_regular_iterator *it) { struct xnintr *intr; spl_t s; 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; } if (irq == RTHAL_CRITICAL_IPI) { xnvfile_puts(it, " [sync]"); return 0; } #endif /* CONFIG_SMP */ if (rthal_virtual_irq_p(irq)) { xnvfile_puts(it, " [virtual]"); return 0; } xnlock_get_irqsave(&intrlock, s); intr = xnintr_shirq_first(irq); if (intr) { xnvfile_puts(it, " "); do { xnvfile_putc(it, ' '); xnvfile_puts(it, intr->name); intr = xnintr_shirq_next(intr); } while (intr); } xnlock_put_irqrestore(&intrlock, s); return 0; }
static inline int format_irq_proc(unsigned int irq, struct xnvfile_regular_iterator *it) { struct xnintr *intr; if (irq == XNARCH_TIMER_IRQ) { xnvfile_puts(it, " [timer]"); return 0; } #ifdef CONFIG_SMP if (irq == RTHAL_RESCHEDULE_IPI) { xnvfile_puts(it, " [reschedule]"); return 0; } if (irq == RTHAL_CRITICAL_IPI) { xnvfile_puts(it, " [sync]"); return 0; } #endif /* CONFIG_SMP */ if (rthal_virtual_irq_p(irq)) { xnvfile_puts(it, " [virtual]"); return 0; } down(&intrlock); intr = xnintr_shirq_first(irq); if (intr) { xnvfile_puts(it, " "); do { xnvfile_putc(it, ' '); xnvfile_puts(it, intr->name); intr = xnintr_shirq_next(intr); } while (intr); } up(&intrlock); return 0; }