summaryrefslogtreecommitdiffstats
path: root/sys/x86/xen/hvm.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/x86/xen/hvm.c')
-rw-r--r--sys/x86/xen/hvm.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/sys/x86/xen/hvm.c b/sys/x86/xen/hvm.c
index a8b14fd..3569cd0 100644
--- a/sys/x86/xen/hvm.c
+++ b/sys/x86/xen/hvm.c
@@ -134,9 +134,29 @@ xen_hvm_init_hypercall_stubs(enum xen_hvm_init_type init_type)
return (ENXIO);
if (init_type == XEN_HVM_INIT_COLD) {
+ int major, minor;
+
do_cpuid(base + 1, regs);
- printf("XEN: Hypervisor version %d.%d detected.\n",
- regs[0] >> 16, regs[0] & 0xffff);
+
+ major = regs[0] >> 16;
+ minor = regs[0] & 0xffff;
+ printf("XEN: Hypervisor version %d.%d detected.\n", major,
+ minor);
+
+ if (((major < 4) || (major == 4 && minor <= 5)) &&
+ msix_disable_migration == -1) {
+ /*
+ * Xen hypervisors prior to 4.6.0 do not properly
+ * handle updates to enabled MSI-X table entries,
+ * so disable MSI-X interrupt migration in that
+ * case.
+ */
+ if (bootverbose)
+ printf(
+"Disabling MSI-X interrupt migration due to Xen hypervisor bug.\n"
+"Set machdep.msix_disable_migration=0 to forcefully enable it.\n");
+ msix_disable_migration = 1;
+ }
}
/*
OpenPOWER on IntegriCloud