Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP2:GA
xen.4698
55b0a2db-x86-MSI-track-guest-masking.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 55b0a2db-x86-MSI-track-guest-masking.patch of Package xen.4698
References: bsc#907514 bsc#910258 bsc#918984 bsc#923967 # Commit aa7c1fdf9dd04a1287f4770906b2c41b88a28228 # Date 2015-07-23 10:16:27 +0200 # Author Jan Beulich <jbeulich@suse.com> # Committer Jan Beulich <jbeulich@suse.com> 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@suse.com> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com> Index: xen-4.4.4-testing/xen/arch/x86/msi.c =================================================================== --- xen-4.4.4-testing.orig/xen/arch/x86/msi.c +++ xen-4.4.4-testing/xen/arch/x86/msi.c @@ -1305,6 +1305,37 @@ int pci_msi_conf_write_intercept(struct 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; }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor