Page MenuHomeFreeBSD

D30598.1777151939.diff
No OneTemporary

Size
2 KB
Referenced Files
None
Subscribers
None

D30598.1777151939.diff

Index: sys/xen/xen_intr.c
===================================================================
--- sys/xen/xen_intr.c
+++ sys/xen/xen_intr.c
@@ -686,16 +686,6 @@
panic("unable to rebind xen IPI: %d", error);
isrc->xi_port = bind_ipi.port;
- isrc->xi_cpu = 0;
- xen_intr_port_to_isrc[bind_ipi.port] = isrc;
-
- error = xen_intr_assign_cpu(&isrc->xi_intsrc,
- cpu_apic_ids[cpu]);
- if (error)
- panic("unable to bind xen IPI to CPU#%d: %d",
- cpu, error);
-
- evtchn_unmask_port(bind_ipi.port);
#else
panic("Resume IPI event channel on UP");
#endif
@@ -716,18 +706,45 @@
panic("unable to rebind xen VIRQ#%d: %d", isrc->xi_virq, error);
isrc->xi_port = bind_virq.port;
- isrc->xi_cpu = 0;
- xen_intr_port_to_isrc[bind_virq.port] = isrc;
+}
+
+static void
+xen_intr_rebind_isrc(struct xenisrc *isrc)
+{
+#ifdef SMP
+ int cpu = isrc->xi_cpu;
+ const char *errfmt;
+#endif
+ int error;
+ switch (isrc->xi_type) {
+ case EVTCHN_TYPE_IPI:
+ xen_rebind_ipi(isrc);
#ifdef SMP
+ errfmt = "%s: unable to bind xen IPI to CPU#%d: %d";
+#endif
+ break;
+ case EVTCHN_TYPE_VIRQ:
+ xen_rebind_virq(isrc);
+#ifdef SMP
+ errfmt = "%1$s: unable to bind xen VIRQ#%4$d to CPU#%2$d: %3$d";
+#endif
+ break;
+ default:
+ return;
+ }
+
+ xen_intr_port_to_isrc[isrc->xi_port] = isrc;
+
+#ifdef SMP
+ isrc->xi_cpu = 0;
error = xen_intr_assign_cpu(&isrc->xi_intsrc,
cpu_apic_ids[cpu]);
if (error)
- panic("unable to bind xen VIRQ#%d to CPU#%d: %d",
- isrc->xi_virq, cpu, error);
+ panic(errfmt, __func__, cpu, error, isrc->xi_virq);
#endif
- evtchn_unmask_port(bind_virq.port);
+ evtchn_unmask_port(isrc->xi_port);
}
/**
@@ -766,19 +783,8 @@
vector = first_evtchn_irq + isrc_idx;
isrc = (struct xenisrc *)intr_lookup_source(vector);
- if (isrc != NULL) {
- isrc->xi_port = 0;
- switch (isrc->xi_type) {
- case EVTCHN_TYPE_IPI:
- xen_rebind_ipi(isrc);
- break;
- case EVTCHN_TYPE_VIRQ:
- xen_rebind_virq(isrc);
- break;
- default:
- break;
- }
- }
+ if (isrc != NULL)
+ xen_intr_rebind_isrc(isrc);
}
}

File Metadata

Mime Type
text/plain
Expires
Sat, Apr 25, 9:18 PM (12 h, 18 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28429748
Default Alt Text
D30598.1777151939.diff (2 KB)

Event Timeline