Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP1:GA
xen.5015
55b0a255-x86-MSI-X-maskall.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 55b0a255-x86-MSI-X-maskall.patch of Package xen.5015
References: bsc#907514 bsc#910258 bsc#918984 bsc#923967 # Commit 484d7c852e4ff79c945406ed28b5db63a5a0b7f3 # Date 2015-07-23 10:14:13 +0200 # Author Jan Beulich <jbeulich@suse.com> # Committer Jan Beulich <jbeulich@suse.com> x86/MSI-X: track host and guest mask-all requests separately Host uses of the bits will be added subsequently, and must not be overridden by guests (including Dom0, namely when acting on behalf of a guest). 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 @@ -845,6 +845,12 @@ static int msix_capability_init(struct p if ( !msix->used_entries ) { + msix->host_maskall = 0; + if ( !msix->guest_maskall ) + control &= ~PCI_MSIX_FLAGS_MASKALL; + else + control |= PCI_MSIX_FLAGS_MASKALL; + if ( rangeset_add_range(mmio_ro_ranges, msix->table.first, msix->table.last) ) WARN(); @@ -1113,6 +1119,34 @@ void pci_cleanup_msi(struct pci_dev *pde int pci_msi_conf_write_intercept(struct pci_dev *pdev, unsigned int reg, unsigned int size, uint32_t *data) { + u16 seg = pdev->seg; + u8 bus = pdev->bus; + u8 slot = PCI_SLOT(pdev->devfn); + u8 func = PCI_FUNC(pdev->devfn); + struct msi_desc *entry; + unsigned int pos; + + if ( pdev->msix ) + { + entry = find_msi_entry(pdev, -1, PCI_CAP_ID_MSIX); + pos = entry ? entry->msi_attrib.pos + : pci_find_cap_offset(seg, bus, slot, func, + 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; + + pdev->msix->guest_maskall = !!(*data & PCI_MSIX_FLAGS_MASKALL); + if ( pdev->msix->host_maskall ) + *data |= PCI_MSIX_FLAGS_MASKALL; + + return 1; + } + return 0; } Index: xen-4.4.4-testing/xen/include/asm-x86/msi.h =================================================================== --- xen-4.4.4-testing.orig/xen/include/asm-x86/msi.h +++ xen-4.4.4-testing/xen/include/asm-x86/msi.h @@ -228,6 +228,7 @@ struct arch_msix { int table_refcnt[MAX_MSIX_TABLE_PAGES]; int table_idx[MAX_MSIX_TABLE_PAGES]; spinlock_t table_lock; + bool_t host_maskall, guest_maskall; domid_t warned; };
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