[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] x86/MSI: properly track guest masking requests
commit aa7c1fdf9dd04a1287f4770906b2c41b88a28228 Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Thu Jul 23 10:16:27 2015 +0200 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Thu Jul 23 10:16:27 2015 +0200 x86/MSI: properly track guest masking requests ... by monitoring writes to the mask register. This allows reverting the main effect of the XSA-129 patches in qemu. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- xen/arch/x86/msi.c | 31 +++++++++++++++++++++++++++++++ 1 files changed, 31 insertions(+), 0 deletions(-) diff --git a/xen/arch/x86/msi.c b/xen/arch/x86/msi.c index 3c8354d..fa95048 100644 --- a/xen/arch/x86/msi.c +++ b/xen/arch/x86/msi.c @@ -1303,6 +1303,37 @@ int pci_msi_conf_write_intercept(struct pci_dev *pdev, unsigned int reg, return 1; } + entry = find_msi_entry(pdev, -1, PCI_CAP_ID_MSI); + if ( entry && entry->msi_attrib.maskbit ) + { + uint16_t cntl; + uint32_t unused; + + pos = entry->msi_attrib.pos; + if ( reg < pos || reg >= entry->msi.mpos + 8 ) + return 0; + + if ( reg == msi_control_reg(pos) ) + return size == 2 ? 1 : -EACCES; + if ( reg < entry->msi.mpos || reg >= entry->msi.mpos + 4 || size != 4 ) + return -EACCES; + + cntl = pci_conf_read16(seg, bus, slot, func, msi_control_reg(pos)); + unused = ~(uint32_t)0 >> (32 - multi_msi_capable(cntl)); + for ( pos = 0; pos < entry->msi.nvec; ++pos, ++entry ) + { + entry->msi_attrib.guest_masked = + *data >> entry->msi_attrib.entry_nr; + if ( entry->msi_attrib.host_masked ) + *data |= 1 << pos; + unused &= ~(1 << pos); + } + + *data |= unused; + + return 1; + } + return 0; } -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |