Page MenuHomeFreeBSD

D30725.diff
No OneTemporary

D30725.diff

Index: sys/xen/xen_intr.c
===================================================================
--- sys/xen/xen_intr.c
+++ sys/xen/xen_intr.c
@@ -702,6 +702,8 @@
int error;
struct evtchn_bind_ipi bind_ipi = { .vcpu = vcpu_id };
+ mtx_assert(&xen_intr_isrc_lock, MA_OWNED);
+
error = HYPERVISOR_event_channel_op(EVTCHNOP_bind_ipi,
&bind_ipi);
if (error != 0)
@@ -722,6 +724,8 @@
struct evtchn_bind_virq bind_virq = { .virq = isrc->xi_virq,
.vcpu = vcpu_id };
+ mtx_assert(&xen_intr_isrc_lock, MA_OWNED);
+
error = HYPERVISOR_event_channel_op(EVTCHNOP_bind_virq,
&bind_virq);
if (error != 0)
@@ -736,6 +740,8 @@
int cpu = isrc->xi_cpu;
int error;
+ mtx_assert(&xen_intr_isrc_lock, MA_OWNED);
+
switch (isrc->xi_type) {
case EVTCHN_TYPE_IPI:
xen_rebind_ipi(isrc);
@@ -782,6 +788,9 @@
for (i = 0; i < nitems(s->evtchn_mask); i++)
atomic_store_rel_long(&s->evtchn_mask[i], ~0);
+ /* Protect xen_intr_port_to_isrc[] / ->xi_port */
+ mtx_lock(&xen_intr_isrc_lock);
+
/* Clear existing port mappings */
for (isrc_idx = 0; isrc_idx < NR_EVENT_CHANNELS; ++isrc_idx)
if (xen_intr_port_to_isrc[isrc_idx] != NULL)
@@ -818,6 +827,9 @@
cur = next;
} while (cur != NULL);
}
+
+ /* Done with xen_intr_port_to_isrc[] / ->xi_port */
+ mtx_unlock(&xen_intr_isrc_lock);
}
/**

File Metadata

Mime Type
text/plain
Expires
Fri, Sep 27, 11:21 PM (21 h, 52 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
12946485
Default Alt Text
D30725.diff (1 KB)

Event Timeline