Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
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;
}
Ejemplo n.º 3
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;
}
Ejemplo n.º 4
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;
}
Ejemplo n.º 5
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;
}