summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/kern/subr_intr.c15
-rw-r--r--sys/sys/intr.h1
2 files changed, 16 insertions, 0 deletions
diff --git a/sys/kern/subr_intr.c b/sys/kern/subr_intr.c
index f3724880c959..e1431d55d9d3 100644
--- a/sys/kern/subr_intr.c
+++ b/sys/kern/subr_intr.c
@@ -934,6 +934,21 @@ intr_resolve_irq(device_t dev, intptr_t xref, struct intr_map_data *data,
}
}
+bool
+intr_is_per_cpu(struct resource *res)
+{
+ u_int res_id;
+ struct intr_irqsrc *isrc;
+
+ res_id = (u_int)rman_get_start(res);
+ isrc = intr_map_get_isrc(res_id);
+
+ if (isrc == NULL)
+ panic("Attempt to get isrc for non-active resource id: %u\n",
+ res_id);
+ return ((isrc->isrc_flags & INTR_ISRCF_PPI) != 0);
+}
+
int
intr_activate_irq(device_t dev, struct resource *res)
{
diff --git a/sys/sys/intr.h b/sys/sys/intr.h
index 74e2ae195b92..3b68799330b1 100644
--- a/sys/sys/intr.h
+++ b/sys/sys/intr.h
@@ -113,6 +113,7 @@ int intr_pic_deregister(device_t, intptr_t);
int intr_pic_claim_root(device_t, intptr_t, intr_irq_filter_t *, void *, u_int);
struct intr_pic *intr_pic_add_handler(device_t, struct intr_pic *,
intr_child_irq_filter_t *, void *, uintptr_t, uintptr_t);
+bool intr_is_per_cpu(struct resource *);
extern device_t intr_irq_root_dev;