Page MenuHomeFreeBSD

D35386.id106628.diff
No OneTemporary

D35386.id106628.diff

Index: sys/x86/include/intr_machdep.h
===================================================================
--- sys/x86/include/intr_machdep.h
+++ sys/x86/include/intr_machdep.h
@@ -140,15 +140,15 @@
#ifdef SMP
void intr_add_cpu(u_int cpu);
#endif
-int intr_add_handler(const char *name, int vector, driver_filter_t filter,
- driver_intr_t handler, void *arg, enum intr_type flags, void **cookiep,
- int domain);
+int intr_add_handler(const char *name, struct intsrc *isrc,
+ driver_filter_t filter, driver_intr_t handler, void *arg,
+ enum intr_type flags, void **cookiep, int domain);
#ifdef SMP
-int intr_bind(u_int vector, u_char cpu);
+int intr_bind(struct intsrc *isrc, u_char cpu);
#endif
-int intr_config_intr(int vector, enum intr_trigger trig,
+int intr_config_intr(struct intsrc *isrc, enum intr_trigger trig,
enum intr_polarity pol);
-int intr_describe(u_int vector, void *ih, const char *descr);
+int intr_describe(struct intsrc *isrc, void *ih, const char *descr);
void intr_execute_handlers(struct intsrc *isrc, struct trapframe *frame);
u_int intr_next_cpu(int domain);
struct intsrc *intr_lookup_source(int vector);
Index: sys/x86/x86/intr_machdep.c
===================================================================
--- sys/x86/x86/intr_machdep.c
+++ sys/x86/x86/intr_machdep.c
@@ -258,16 +258,12 @@
}
int
-intr_add_handler(const char *name, int vector, driver_filter_t filter,
+intr_add_handler(const char *name, struct intsrc *isrc, driver_filter_t filter,
driver_intr_t handler, void *arg, enum intr_type flags, void **cookiep,
int domain)
{
- struct intsrc *isrc;
int error;
- isrc = intr_lookup_source(vector);
- if (isrc == NULL)
- return (EINVAL);
error = intr_event_add_handler(isrc->is_event, name, filter, handler,
arg, intr_priority(flags), flags, cookiep);
if (error == 0) {
@@ -306,13 +302,10 @@
}
int
-intr_config_intr(int vector, enum intr_trigger trig, enum intr_polarity pol)
+intr_config_intr(struct intsrc *isrc, enum intr_trigger trig,
+ enum intr_polarity pol)
{
- struct intsrc *isrc;
- isrc = intr_lookup_source(vector);
- if (isrc == NULL)
- return (EINVAL);
return (isrc->is_pic->pic_config_intr(isrc, trig, pol));
}
@@ -524,14 +517,10 @@
/* Add a description to an active interrupt handler. */
int
-intr_describe(u_int vector, void *ih, const char *descr)
+intr_describe(struct intsrc *isrc, void *ih, const char *descr)
{
- struct intsrc *isrc;
int error;
- isrc = intr_lookup_source(vector);
- if (isrc == NULL)
- return (EINVAL);
error = intr_event_describe_handler(isrc->is_event, ih, descr);
if (error)
return (error);
@@ -632,13 +621,9 @@
/* Attempt to bind the specified IRQ to the specified CPU. */
int
-intr_bind(u_int vector, u_char cpu)
+intr_bind(struct intsrc *isrc, u_char cpu)
{
- struct intsrc *isrc;
- isrc = intr_lookup_source(vector);
- if (isrc == NULL)
- return (EINVAL);
return (intr_event_bind(isrc->is_event, cpu));
}
Index: sys/x86/x86/nexus.c
===================================================================
--- sys/x86/x86/nexus.c
+++ sys/x86/x86/nexus.c
@@ -577,6 +577,7 @@
void *arg, void **cookiep)
{
int error, domain;
+ struct intsrc *isrc;
/* somebody tried to setup an irq that failed to allocate! */
if (irq == NULL)
@@ -595,8 +596,11 @@
if (bus_get_domain(child, &domain) != 0)
domain = 0;
- error = intr_add_handler(device_get_nameunit(child),
- rman_get_start(irq), filter, ihand, arg, flags, cookiep, domain);
+ isrc = intr_lookup_source(rman_get_start(irq));
+ if (isrc == NULL)
+ return (EINVAL);
+ error = intr_add_handler(device_get_nameunit(child), isrc,
+ filter, ihand, arg, flags, cookiep, domain);
if (error == 0)
rman_set_irq_cookie(irq, *cookiep);
@@ -630,7 +634,12 @@
static int
nexus_bind_intr(device_t dev, device_t child, struct resource *irq, int cpu)
{
- return (intr_bind(rman_get_start(irq), cpu));
+ struct intsrc *isrc;
+
+ isrc = intr_lookup_source(rman_get_start(irq));
+ if (isrc == NULL)
+ return (EINVAL);
+ return (intr_bind(isrc, cpu));
}
#endif
@@ -638,15 +647,24 @@
nexus_config_intr(device_t dev, int irq, enum intr_trigger trig,
enum intr_polarity pol)
{
- return (intr_config_intr(irq, trig, pol));
+ struct intsrc *isrc;
+
+ isrc = intr_lookup_source(irq);
+ if (isrc == NULL)
+ return (EINVAL);
+ return (intr_config_intr(isrc, trig, pol));
}
static int
nexus_describe_intr(device_t dev, device_t child, struct resource *irq,
void *cookie, const char *descr)
{
+ struct intsrc *isrc;
- return (intr_describe(rman_get_start(irq), cookie, descr));
+ isrc = intr_lookup_source(rman_get_start(irq));
+ if (isrc == NULL)
+ return (EINVAL);
+ return (intr_describe(isrc, cookie, descr));
}
static struct resource_list *
Index: sys/x86/xen/xen_intr.c
===================================================================
--- sys/x86/xen/xen_intr.c
+++ sys/x86/xen/xen_intr.c
@@ -1204,7 +1204,7 @@
va_start(ap, fmt);
vsnprintf(descr, sizeof(descr), fmt, ap);
va_end(ap);
- return (intr_describe(isrc->xi_vector, isrc->xi_cookie, descr));
+ return (intr_describe(&isrc->xi_intsrc, isrc->xi_cookie, descr));
}
void
@@ -1271,7 +1271,7 @@
if (isrc == NULL || isrc->xi_cookie != NULL)
return (EINVAL);
- error = intr_add_handler(name, isrc->xi_vector,filter, handler, arg,
+ error = intr_add_handler(name, &isrc->xi_intsrc, filter, handler, arg,
flags|INTR_EXCL, &isrc->xi_cookie, 0);
if (error != 0)
printf("%s: %s: add handler failed: %d\n", name, __func__,

File Metadata

Mime Type
text/plain
Expires
Wed, Nov 12, 10:10 AM (10 h, 59 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25205491
Default Alt Text
D35386.id106628.diff (5 KB)

Event Timeline