Index: sys/compat/linuxkpi/common/include/linux/interrupt.h =================================================================== --- sys/compat/linuxkpi/common/include/linux/interrupt.h +++ sys/compat/linuxkpi/common/include/linux/interrupt.h @@ -100,8 +100,9 @@ irqe->arg = arg; irqe->handler = handler; irqe->irq = irq; - error = bus_setup_intr(dev->bsddev, res, INTR_TYPE_NET | INTR_MPSAFE, - NULL, linux_irq_handler, irqe, &irqe->tag); + error = bus_setup_intr(dev->bsddev, res, + INTR_TYPE_LKPI | INTR_MPSAFE, NULL, + linux_irq_handler, irqe, &irqe->tag); if (error) { bus_release_resource(dev->bsddev, SYS_RES_IRQ, rid, irqe->res); kfree(irqe); @@ -124,8 +125,9 @@ irqe = linux_irq_ent(dev, irq); if (irqe == NULL || irqe->tag != NULL) return -EINVAL; - return -bus_setup_intr(dev->bsddev, irqe->res, INTR_TYPE_NET | INTR_MPSAFE, - NULL, linux_irq_handler, irqe, &irqe->tag); + return -bus_setup_intr(dev->bsddev, irqe->res, + INTR_TYPE_LKPI | INTR_MPSAFE, NULL, + linux_irq_handler, irqe, &irqe->tag); } static inline void Index: sys/kern/kern_intr.c =================================================================== --- sys/kern/kern_intr.c +++ sys/kern/kern_intr.c @@ -119,9 +119,7 @@ { u_char pri; - flags &= (INTR_TYPE_TTY | INTR_TYPE_BIO | INTR_TYPE_NET | - INTR_TYPE_CAM | INTR_TYPE_MISC | INTR_TYPE_CLK | INTR_TYPE_AV); - switch (flags) { + switch (flags & INTR_TYPE_MASK) { case INTR_TYPE_TTY: pri = PI_TTY; break; @@ -129,6 +127,7 @@ pri = PI_DISK; break; case INTR_TYPE_NET: + case INTR_TYPE_LKPI: pri = PI_NET; break; case INTR_TYPE_CAM: @@ -144,11 +143,10 @@ pri = PI_DULL; /* don't care */ break; default: - /* We didn't specify an interrupt level. */ - panic("intr_priority: no interrupt type in flags"); + /* No interrupt level specified. */ + panic("intr_priority: Unsupported flags(0x%08x)", flags); } - - return pri; + return (pri); } /* @@ -592,7 +590,7 @@ ih->ih_flags |= IH_MPSAFE; if (flags & INTR_ENTROPY) ih->ih_flags |= IH_ENTROPY; - if (flags & INTR_TYPE_NET) + if ((flags & INTR_TYPE_MASK) == INTR_TYPE_NET) ih->ih_flags |= IH_NET; /* We can only have one exclusive handler in a event. */ Index: sys/sys/bus.h =================================================================== --- sys/sys/bus.h +++ sys/sys/bus.h @@ -265,13 +265,16 @@ * to reflect what sort of devices are underneath. */ enum intr_type { + INTR_TYPE_RESERVED = 0, INTR_TYPE_TTY = 1, INTR_TYPE_BIO = 2, - INTR_TYPE_NET = 4, - INTR_TYPE_CAM = 8, - INTR_TYPE_MISC = 16, - INTR_TYPE_CLK = 32, - INTR_TYPE_AV = 64, + INTR_TYPE_NET = 3, + INTR_TYPE_CAM = 4, + INTR_TYPE_MISC = 5, + INTR_TYPE_CLK = 6, + INTR_TYPE_AV = 7, + INTR_TYPE_LKPI = 8, + INTR_TYPE_MASK = 127, INTR_EXCL = 256, /* exclusive interrupt */ INTR_MPSAFE = 512, /* this interrupt is SMP safe */ INTR_ENTROPY = 1024, /* this interrupt provides entropy */ Index: sys/sys/param.h =================================================================== --- sys/sys/param.h +++ sys/sys/param.h @@ -60,7 +60,7 @@ * in the range 5 to 9. */ #undef __FreeBSD_version -#define __FreeBSD_version 1300077 /* Master, propagated to newvers */ +#define __FreeBSD_version 1300078 /* Master, propagated to newvers */ /* * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,