Mercurial > illumos > git > illumos-gate
changeset 20188:4483942be336
13325 bhyve misinterprets MSI redir hint
Reviewed by: Robert Mustacchi <rm@fingolfin.org>
Approved by: Dan McDonald <danmcd@joyent.com>
author | Patrick Mooney <pmooney@pfmooney.com> |
---|---|
date | Fri, 20 Nov 2020 20:15:52 +0000 |
parents | 03b38e24bfd3 |
children | a013b6c81317 |
files | usr/src/uts/i86pc/io/vmm/vmm_lapic.c |
diffstat | 1 files changed, 9 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/uts/i86pc/io/vmm/vmm_lapic.c Fri Nov 20 10:06:59 2020 -0800 +++ b/usr/src/uts/i86pc/io/vmm/vmm_lapic.c Fri Nov 20 20:15:52 2020 +0000 @@ -38,6 +38,7 @@ * http://www.illumos.org/license/CDDL. * * Copyright 2014 Pluribus Networks Inc. + * Copyright 2020 Oxide Computer Company */ #include <sys/cdefs.h> @@ -127,19 +128,18 @@ } /* - * Extract the x86-specific fields from the MSI addr/msg - * params according to the Intel Arch spec, Vol3 Ch 10. + * Extract the x86-specific fields from the MSI addr/msg params + * according to the Intel Arch spec, Vol3 Ch 10. * - * The PCI specification does not support level triggered - * MSI/MSI-X so ignore trigger level in 'msg'. + * The PCI specification does not support level triggered MSI/MSI-X so + * ignore trigger level in 'msg'. * - * The 'dest' is interpreted as a logical APIC ID if both - * the Redirection Hint and Destination Mode are '1' and - * physical otherwise. + * Certain kinds of interrupt broadcasts (physical or logical-clustered + * for destination 0xff) are prohibited when the redirection hint bit is + * set for a given message. Those edge cases are ignored for now. */ dest = (addr >> 12) & 0xff; - phys = ((addr & (MSI_X86_ADDR_RH | MSI_X86_ADDR_LOG)) != - (MSI_X86_ADDR_RH | MSI_X86_ADDR_LOG)); + phys = (addr & MSI_X86_ADDR_LOG) == 0; delmode = msg & APIC_DELMODE_MASK; vec = msg & 0xff;