|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen stable-4.6] x86/MSI: handle both MSI-X and MSI in cfg space write intercept
commit bc2b1bef1129f4219bc384f5ee2ef6d1bdcb86e3
Author: Jan Beulich <jbeulich@xxxxxxxx>
AuthorDate: Mon May 9 12:54:27 2016 +0200
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Mon May 9 12:54:27 2016 +0200
x86/MSI: handle both MSI-X and MSI in cfg space write intercept
In commit aa7c1fdf9d ("x86/MSI: properly track guest masking requests")
I neglected to consider devices allowing for both MSI and MSI-X to be
used (not at the same time of course): The MSI-X part of the intercept
logic needs to fall through to the MSI one when the access is outside
the MSI-X capability bounds.
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
master commit: 02eb000e0723470e795725d515d0797be8ca30fd
master date: 2016-04-25 14:21:13 +0200
---
xen/arch/x86/msi.c | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/xen/arch/x86/msi.c b/xen/arch/x86/msi.c
index 3dbb84d..3b4a23f 100644
--- a/xen/arch/x86/msi.c
+++ b/xen/arch/x86/msi.c
@@ -1292,17 +1292,17 @@ int pci_msi_conf_write_intercept(struct pci_dev *pdev,
unsigned int reg,
PCI_CAP_ID_MSIX);
ASSERT(pos);
- if ( reg < pos || reg >= msix_pba_offset_reg(pos) + 4 )
- return 0;
-
- if ( reg != msix_control_reg(pos) || size != 2 )
- return -EACCES;
+ if ( reg >= pos && reg < msix_pba_offset_reg(pos) + 4 )
+ {
+ if ( reg != msix_control_reg(pos) || size != 2 )
+ return -EACCES;
- pdev->msix->guest_maskall = !!(*data & PCI_MSIX_FLAGS_MASKALL);
- if ( pdev->msix->host_maskall )
- *data |= PCI_MSIX_FLAGS_MASKALL;
+ pdev->msix->guest_maskall = !!(*data & PCI_MSIX_FLAGS_MASKALL);
+ if ( pdev->msix->host_maskall )
+ *data |= PCI_MSIX_FLAGS_MASKALL;
- return 1;
+ return 1;
+ }
}
entry = find_msi_entry(pdev, -1, PCI_CAP_ID_MSI);
--
generated by git-patchbot for /home/xen/git/xen.git#stable-4.6
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |