A bit more info: Interrupt numbers are 0x15 (txeob) and 0x16 (rxeob). I've added some printk, and at the point where the DHCP message is sent out, I get:
DHCP: sending class identifier "hydra_temp" stalled stage <- printed in __ipipe_walk_pipeline (see below) __ipipe_grab_irq 15 <- printed at the beginning of __ipipe_grab_irq ready to walk 15 <- printed at the finalize:, before __ipipe_walk_pipeline is called stalled stage <- printed in __ipipe_walk_pipeline (see below) __ipipe_grab_irq 16 <- printed at the beginning of __ipipe_grab_irq ready to walk 16 <- printed at the finalize:, before __ipipe_walk_pipeline is called stalled stage <- see below stalled stage <- etc ipipe_cpudom_var != 0 next_domain == this_domain stalled stage So, while I don't pretend to understand this yet, it looks like the interrupts are coming into ipipe, but perhaps not getting delivered for some reason? Steve void __ipipe_walk_pipeline(struct list_head *pos) { struct ipipe_domain *this_domain = ipipe_current_domain, *next_domain; while (pos != &__ipipe_pipeline) { next_domain = list_entry(pos, struct ipipe_domain, p_link); if (test_bit(IPIPE_STALL_FLAG, &ipipe_cpudom_var(next_domain, status))) { printk("stalled stage\n"); break; /* Stalled stage -- do not go further. */ } if (ipipe_cpudom_var(next_domain, irqpend_himask) != 0) { printk("ipipe_cpudom_var != 0\n"); if (next_domain == this_domain) { printk("next_domain == this_domain\n"); __ipipe_sync_pipeline(IPIPE_IRQMASK_ANY); } else { printk("next_domain != this_domain\n"); ipipe_cpudom_var(this_domain, evsync) = 0; ipipe_current_domain = next_domain; ipipe_suspend_domain(); /* Sync stage and propagate interrupts. */ if (ipipe_current_domain == next_domain) ipipe_current_domain = this_domain; /* * Otherwise, something changed the current domain under our * feet recycling the register set; do not override the new * domain. */ if (ipipe_cpudom_var(this_domain, irqpend_himask) != 0 && !test_bit(IPIPE_STALL_FLAG, &ipipe_cpudom_var(this_domain, status))) { printk("recycling the register set\n"); __ipipe_sync_pipeline(IPIPE_IRQMASK_ANY); } } break; } else if (next_domain == this_domain) { printk("ipipe_cpudom_var == 0\n"); printk("next_domain == this_domain\n"); break; } pos = next_domain->p_link.next; } } _______________________________________________ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core