Exemplo 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;
}
Exemplo n.º 2
0
Arquivo: proc.c Projeto: ArcEye/RTAI
static void *named_begin(struct xnvfile_regular_iterator *it)
{
	struct vfile_device_data *priv = xnvfile_iterator_priv(it);
	struct list_head *devlist;
	loff_t pos = 0;

	priv->devmap = rtdm_named_devices;
	priv->hmax = devname_hashtab_size;
	priv->h = 0;

	devlist = next_devlist(priv);
	if (devlist == NULL)
		return NULL;	/* All devlists empty. */

	priv->curr = devlist->next;	/* Skip head. */

	/*
	 * priv->curr now points to the first device; advance to the requested
	 * position from there.
	 */
	while (priv->curr && pos++ < it->pos)
		priv->curr = next_dev(it);

	if (pos == 1)
		/* Output the header once, only if some device follows. */
		xnvfile_puts(it, "Hash\tName\t\t\t\tDriver\t\t/proc\n");

	return priv->curr;
}
Exemplo n.º 3
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;
}
Exemplo n.º 4
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;
}
Exemplo n.º 5
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;
}
Exemplo n.º 6
0
Arquivo: proc.c Projeto: ArcEye/RTAI
static int openfd_show(struct xnvfile_regular_iterator *it, void *data)
{
	struct rtdm_dev_context *context;
	struct rtdm_device *device;
	struct rtdm_process owner;
	int close_lock_count, fd;
	spl_t s;

	if (data == NULL) {
		xnvfile_puts(it, "Index\tLocked\tDevice\t\t\t\tOwner [PID]\n");
		return 0;
	}

	fd = (int)it->pos - 1;

	xnlock_get_irqsave(&rt_fildes_lock, s);

	context = fildes_table[fd].context;
	if (context == NULL) {
		xnlock_put_irqrestore(&rt_fildes_lock, s);
		return VFILE_SEQ_SKIP;
	}

	close_lock_count = atomic_read(&context->close_lock_count);
	device = context->device;
	if (context->reserved.owner)
		memcpy(&owner, context->reserved.owner, sizeof(owner));
	else {
		strcpy(owner.name, "<kernel>");
		owner.pid = -1;
	}

	xnlock_put_irqrestore(&rt_fildes_lock, s);

	xnvfile_printf(it, "%d\t%d\t%-31s %s [%d]\n", fd,
		       close_lock_count,
		       (device->device_flags & RTDM_NAMED_DEVICE) ?
		       device->device_name : device->proc_name,
		       owner.name, owner.pid);
	return 0;
}
Exemplo n.º 7
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;
}