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 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; }
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 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; }
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; }