Skip to content

Commit

Permalink
Merge branch 'freebsd/11-stable/master' into hardened/11-stable/master
Browse files Browse the repository at this point in the history
  • Loading branch information
opntr-auto committed Sep 9, 2016
2 parents bc46cb4 + 118b08f commit 416b904
Show file tree
Hide file tree
Showing 5 changed files with 13 additions and 3 deletions.
3 changes: 2 additions & 1 deletion sys/amd64/include/intr_machdep.h
Expand Up @@ -148,8 +148,9 @@ extern cpuset_t intr_cpus;
#endif
extern struct mtx icu_lock;
extern int elcr_found;

#ifdef SMP
extern int msix_disable_migration;
#endif

#ifndef DEV_ATPIC
void atpic_reset(void);
Expand Down
2 changes: 1 addition & 1 deletion sys/amd64/vmm/vmm.c
Expand Up @@ -914,7 +914,7 @@ vm_gpa_hold(struct vm *vm, int vcpuid, vm_paddr_t gpa, size_t len, int reqprot,
* guaranteed if at least one vcpu is in the VCPU_FROZEN state.
*/
int state;
KASSERT(vcpuid >= -1 || vcpuid < VM_MAXCPU, ("%s: invalid vcpuid %d",
KASSERT(vcpuid >= -1 && vcpuid < VM_MAXCPU, ("%s: invalid vcpuid %d",
__func__, vcpuid));
for (i = 0; i < VM_MAXCPU; i++) {
if (vcpuid != -1 && vcpuid != i)
Expand Down
3 changes: 2 additions & 1 deletion sys/i386/include/intr_machdep.h
Expand Up @@ -139,8 +139,9 @@ extern cpuset_t intr_cpus;
#endif
extern struct mtx icu_lock;
extern int elcr_found;

#ifdef SMP
extern int msix_disable_migration;
#endif

#ifndef DEV_ATPIC
void atpic_reset(void);
Expand Down
6 changes: 6 additions & 0 deletions sys/x86/x86/msi.c
Expand Up @@ -149,6 +149,7 @@ struct pic msi_pic = {
.pic_reprogram_pin = NULL,
};

#ifdef SMP
/**
* Xen hypervisors prior to 4.6.0 do not properly handle updates to
* enabled MSI-X table entries. Allow migration of MSI-X interrupts
Expand All @@ -162,6 +163,7 @@ int msix_disable_migration = -1;
SYSCTL_INT(_machdep, OID_AUTO, disable_msix_migration, CTLFLAG_RDTUN,
&msix_disable_migration, 0,
"Disable migration of MSI-X interrupts between CPUs");
#endif

static int msi_enabled;
static int msi_last_irq;
Expand Down Expand Up @@ -241,8 +243,10 @@ msi_assign_cpu(struct intsrc *isrc, u_int apic_id)
if (msi->msi_first != msi)
return (EINVAL);

#ifdef SMP
if (msix_disable_migration && msi->msi_msix)
return (EINVAL);
#endif

/* Store information to free existing irq. */
old_vector = msi->msi_vector;
Expand Down Expand Up @@ -316,10 +320,12 @@ msi_init(void)
return;
}

#ifdef SMP
if (msix_disable_migration == -1) {
/* The default is to allow migration of MSI-X interrupts. */
msix_disable_migration = 0;
}
#endif

msi_enabled = 1;
intr_register_pic(&msi_pic);
Expand Down
2 changes: 2 additions & 0 deletions sys/x86/xen/hvm.c
Expand Up @@ -143,6 +143,7 @@ xen_hvm_init_hypercall_stubs(enum xen_hvm_init_type init_type)
printf("XEN: Hypervisor version %d.%d detected.\n", major,
minor);

#ifdef SMP
if (((major < 4) || (major == 4 && minor <= 5)) &&
msix_disable_migration == -1) {
/*
Expand All @@ -157,6 +158,7 @@ xen_hvm_init_hypercall_stubs(enum xen_hvm_init_type init_type)
"Set machdep.msix_disable_migration=0 to forcefully enable it.\n");
msix_disable_migration = 1;
}
#endif
}

/*
Expand Down

0 comments on commit 416b904

Please sign in to comment.