Page MenuHomeFreeBSD

D30648.id90435.diff
No OneTemporary

D30648.id90435.diff

Index: sys/xen/xen_intr.c
===================================================================
--- sys/xen/xen_intr.c
+++ sys/xen/xen_intr.c
@@ -116,17 +116,21 @@
#define is_valid_evtchn(x) ((x) != XEN_INVALID_EVTCHN)
+struct xen_arch_isrc {
+ struct intsrc xai_intsrc; /* @TOP -> *xen_arch_isrc */
+ int xai_vector; /* Global isrc vector number */
+};
+
+typedef struct xen_arch_isrc xen_arch_isrc_t;
+
struct xenisrc {
- struct intsrc xi_intsrc;
+ xen_arch_isrc_t xi_arch; /* @TOP -> *xi_arch=*xenisrc */
enum evtchn_type xi_type;
int xi_cpu; /* VCPU for delivery. */
- int xi_vector; /* Global isrc vector number. */
evtchn_port_t xi_port;
int xi_virq;
void *xi_cookie;
u_int xi_close:1; /* close on unbind? */
- u_int xi_activehi:1;
- u_int xi_edgetrigger:1;
u_int xi_masked:1;
volatile u_int xi_refcount;
};
@@ -285,7 +289,7 @@
isrc = (struct xenisrc *)intr_lookup_source(vector);
if (isrc != NULL
&& isrc->xi_type == EVTCHN_TYPE_UNBOUND) {
- KASSERT(isrc->xi_intsrc.is_handlers == 0,
+ KASSERT(isrc->xi_arch.xai_intsrc.is_handlers == 0,
("Free evtchn still has handlers"));
isrc->xi_type = type;
return (isrc);
@@ -327,10 +331,10 @@
mtx_unlock(&xen_intr_isrc_lock);
isrc = malloc(sizeof(*isrc), M_XENINTR, M_WAITOK | M_ZERO);
- isrc->xi_intsrc.is_pic = &xen_intr_pic;
- isrc->xi_vector = vector;
+ isrc->xi_arch.xai_intsrc.is_pic = &xen_intr_pic;
+ isrc->xi_arch.xai_vector = vector;
isrc->xi_type = type;
- intr_register_source(&isrc->xi_intsrc);
+ intr_register_source(&isrc->xi_arch.xai_intsrc);
mtx_lock(&xen_intr_isrc_lock);
return (isrc);
@@ -348,7 +352,7 @@
{
mtx_lock(&xen_intr_isrc_lock);
- KASSERT(isrc->xi_intsrc.is_handlers == 0,
+ KASSERT(isrc->xi_arch.xai_intsrc.is_handlers == 0,
("Release called, but xenisrc still in use"));
evtchn_mask_port(isrc->xi_port);
evtchn_clear_port(isrc->xi_port);
@@ -432,7 +436,7 @@
* unless specified otherwise, so shuffle them to balance
* the interrupt load.
*/
- xen_intr_assign_cpu(&isrc->xi_intsrc, intr_next_cpu(0));
+ xen_intr_assign_cpu(&isrc->xi_arch.xai_intsrc, intr_next_cpu(0));
}
#endif
@@ -571,7 +575,7 @@
("Received unexpected event on vCPU#%d, event bound to vCPU#%d",
PCPU_GET(cpuid), isrc->xi_cpu));
- intr_execute_handlers(&isrc->xi_intsrc, trap_frame);
+ intr_execute_handlers(&isrc->xi_arch.xai_intsrc, trap_frame);
/*
* If this is the final port processed,
@@ -731,7 +735,7 @@
isrc->xi_cpu = 0;
#ifdef SMP
- error = xen_intr_assign_cpu(&isrc->xi_intsrc,
+ error = xen_intr_assign_cpu(&isrc->xi_arch.xai_intsrc,
cpu_apic_ids[cpu]);
if (error)
panic("unable to bind xen intr#%d to CPU#%d: %d",
@@ -826,7 +830,7 @@
{
struct xenisrc *isrc = (struct xenisrc *)base_isrc;
- return (isrc->xi_vector);
+ return (isrc->xi_arch.xai_vector);
}
/**
@@ -1124,7 +1128,7 @@
#ifdef SMP
if (error == 0)
- error = intr_event_bind(isrc->xi_intsrc.is_event, cpu);
+ error = intr_event_bind(isrc->xi_arch.xai_intsrc.is_event, cpu);
#endif
if (error != 0) {
@@ -1144,7 +1148,7 @@
* masks manually so events can't fire on the wrong cpu
* during AP startup.
*/
- xen_intr_assign_cpu(&isrc->xi_intsrc, cpu_apic_ids[cpu]);
+ xen_intr_assign_cpu(&isrc->xi_arch.xai_intsrc, cpu_apic_ids[cpu]);
}
#endif
@@ -1201,7 +1205,7 @@
* masks manually so events can't fire on the wrong cpu
* during AP startup.
*/
- xen_intr_assign_cpu(&isrc->xi_intsrc, cpu_apic_ids[cpu]);
+ xen_intr_assign_cpu(&isrc->xi_arch.xai_intsrc, cpu_apic_ids[cpu]);
}
/*
@@ -1230,7 +1234,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_arch.xai_vector, isrc->xi_cookie, descr));
}
void
@@ -1297,7 +1301,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_arch.xai_vector,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
Tue, May 19, 12:32 AM (18 h, 34 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33279696
Default Alt Text
D30648.id90435.diff (4 KB)

Event Timeline