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 <jbeul...@suse.com>
>
> --- 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

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

Reply via email to