On 22/06/15 15:51, Jan Beulich wrote: > ... 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 > > --- a/xen/arch/x86/msi.c > +++ b/xen/arch/x86/msi.c > @@ -1308,6 +1308,39 @@ printk("%04x:%02x:%02x.%u: MSI-X %03x:%u > 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; > +printk("%04x:%02x:%02x.%u: MSI %03x:%u->%04x\n", seg, bus, slot, func, reg, size, *data);//temp > + > + 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; Can we avoid using EACCES to avoid confusing it with a mismatched tools version? ~Andrew > + > + 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); > + } > +printk("%04x:%02x:%02x.%u: MSI -> %08x (%08x)\n", seg, bus, slot, func, *data, unused);//temp > + > + *data |= unused; > + > + return 1; > + } > + > return 0; > } > > > > > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel