diff options
author | Michal Meloun <mmel@FreeBSD.org> | 2020-12-14 09:49:07 +0000 |
---|---|---|
committer | Michal Meloun <mmel@FreeBSD.org> | 2020-12-14 09:49:07 +0000 |
commit | c73fde307204392c25a0d3d664278321ec65aa3c (patch) | |
tree | 60acd2584e988017a74ff7022cf57d361439e1f4 | |
parent | 39543d1f4459715351d287eaa78d556012ed3e4e (diff) | |
download | src-test2-c73fde307204392c25a0d3d664278321ec65aa3c.tar.gz src-test2-c73fde307204392c25a0d3d664278321ec65aa3c.zip |
MFC r367447:
Add a method to determine whether given interrupt is per CPU or not.
Notes
Notes:
svn path=/stable/12/; revision=368628
-rw-r--r-- | sys/kern/subr_intr.c | 15 | ||||
-rw-r--r-- | sys/sys/intr.h | 1 |
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; |