static void xlp_post_ithread(void *source) { struct xlp_intrsrc *src = source; nlm_pic_ack(xlp_pic_base, xlp_irq_to_irt(src->irq)); }
static void xlp_post_filter(void *source) { struct xlp_intrsrc *src = source; if (src->busack) src->busack(src->irq); nlm_pic_ack(xlp_pic_base, xlp_irq_to_irt(src->irq)); }
/* * This function programs the ITE on the IRT entry on all online nodes * @m : CPU mask resulting from xlp_closest_match_cpumask() call */ void xlp_set_cpumask_on_node(u8 node, const struct cpumask *m, int irq) { u8 ite; u64 val; int irt = xlp_irq_to_irt(irq); int rvec = xlp_rvec_from_irq(irq); //dump_all_ites(); ite = xlp_closest_match_cpumask(node, m); printk(KERN_DEBUG "[ite.c] Using PIC ITE %d for IRQ %d (IRT %d)\n", ite, irq, irt); /* xlp_pic_init() has set default values. Override them */ val = XLP_IRTENT_ENABLE | XLP_IRTENT_SCH_LCL | XLP_IRTENT_RVEC(rvec) | XLP_IRTENT_DB(ite); nlh_pic_w64r(node, XLP_PIC_IRT_ENTRY(irt), val); //fdebug("Setting up mask: Wrote %#llx to (%d)%#llx\n", val, irt, XLP_PIC_IRT_ENTRY(irt)); return; }