bool vmm_devtree_have_attr(const struct vmm_devtree_node *node) { bool ret; irq_flags_t flags; struct vmm_devtree_node *np = (struct vmm_devtree_node *)node; if (!np) { return FALSE; } vmm_read_lock_irqsave_lite(&np->attr_lock, flags); ret = list_empty(&np->attr_list) ? FALSE : TRUE; vmm_read_unlock_irqrestore_lite(&np->attr_lock, flags); return ret; }
struct vmm_host_irq *__vmm_host_irqext_get(unsigned int hirq) { irq_flags_t flags; struct vmm_host_irq *irq = NULL; if (hirq < CONFIG_HOST_IRQ_COUNT) return NULL; hirq -= CONFIG_HOST_IRQ_COUNT; vmm_read_lock_irqsave_lite(&iectrl.lock, flags); if (hirq < iectrl.count) irq = iectrl.irqs[hirq]; vmm_read_unlock_irqrestore_lite(&iectrl.lock, flags); return irq; }
void vmm_host_irqext_debug_dump(struct vmm_chardev *cdev) { int idx = 0; irq_flags_t flags; vmm_read_lock_irqsave_lite(&iectrl.lock, flags); vmm_cprintf(cdev, "%d extended IRQs\n", iectrl.count); vmm_cprintf(cdev, " BITMAP:\n"); for (idx = 0; idx < BITS_TO_LONGS(iectrl.count); ++idx) { if (0 == (idx % 4)) { vmm_cprintf(cdev, "\n %d:", idx); } vmm_cprintf(cdev, " 0x%x", iectrl.bitmap[idx]); } vmm_cprintf(cdev, "\n"); vmm_read_unlock_irqrestore_lite(&iectrl.lock, flags); }