Page MenuHomeFreeBSD

D30935.id98418.diff
No OneTemporary

D30935.id98418.diff

Index: sys/xen/xen_intr.c
===================================================================
--- sys/xen/xen_intr.c
+++ sys/xen/xen_intr.c
@@ -281,7 +281,7 @@
if (isrc != NULL) {
mtx_unlock(&xen_intr_x86_lock);
- return (isrc);
+ goto out;
}
if (xen_intr_auto_vector_count >= NR_EVENT_CHANNELS) {
@@ -309,6 +309,18 @@
return (NULL);
}
+out:
+#ifdef SMP
+ if (type == EVTCHN_TYPE_PORT) {
+ /*
+ * By default all interrupts are assigned to vCPU#0
+ * unless specified otherwise, so shuffle them to balance
+ * the interrupt load.
+ */
+ isrc->xi_cpu = intr_next_cpu(0);
+ }
+#endif
+
return (isrc);
}
@@ -410,12 +422,15 @@
#ifdef SMP
if (type == EVTCHN_TYPE_PORT) {
+ u_int cpu = isrc->xi_cpu;
+
+ isrc->xi_cpu = 0;
/*
* By default all interrupts are assigned to vCPU#0
* unless specified otherwise, so shuffle them to balance
* the interrupt load.
*/
- xen_intr_assign_cpu(isrc, intr_next_cpu(0));
+ xen_intr_assign_cpu(isrc, cpu);
}
#endif

File Metadata

Mime Type
text/plain
Expires
Sun, Dec 29, 2:14 AM (7 h, 5 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
15627154
Default Alt Text
D30935.id98418.diff (1011 B)

Event Timeline