[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 18/38] ivshmem: Leave INTx alone when using MSI-
From: |
Marc-André Lureau |
Subject: |
Re: [Qemu-devel] [PATCH 18/38] ivshmem: Leave INTx alone when using MSI-X |
Date: |
Tue, 1 Mar 2016 18:14:54 +0100 |
On Mon, Feb 29, 2016 at 7:40 PM, Markus Armbruster <address@hidden> wrote:
> The ivshmem device can either use MSI-X or legacy INTx for interrupts.
>
> With MSI-X enabled, peer interrupt events trigger an MSI as they
> should. But software can still raise INTx via interrupt status and
> mask register in BAR 0. This is explicitly prohibited by PCI Local
> Bus Specification Revision 3.0, section 6.8.3.3:
>
> While enabled for MSI or MSI-X operation, a function is prohibited
> from using its INTx# pin (if implemented) to request service (MSI,
> MSI-X, and INTx# are mutually exclusive).
>
> Fix the device model to leave INTx alone when using MSI-X.
>
> Document that we claim to use INTx in config space even when we don't.
>
> Signed-off-by: Markus Armbruster <address@hidden>
> ---
> hw/misc/ivshmem.c | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
> diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c
> index cfea151..fc37feb 100644
> --- a/hw/misc/ivshmem.c
> +++ b/hw/misc/ivshmem.c
> @@ -126,6 +126,11 @@ static void ivshmem_update_irq(IVShmemState *s)
> PCIDevice *d = PCI_DEVICE(s);
> uint32_t isr = s->intrstatus & s->intrmask;
>
> + /* No INTx with msi=off, whether the guest enabled MSI-X or not */
> + if (ivshmem_has_feature(s, IVSHMEM_MSI)) {
> + return;
> + }
> +
> /* don't print ISR resets */
> if (isr) {
> IVSHMEM_DPRINTF("Set IRQ to %d (%04x %04x)\n",
> @@ -874,6 +879,10 @@ static void pci_ivshmem_realize(PCIDevice *dev, Error
> **errp)
> pci_conf = dev->config;
> pci_conf[PCI_COMMAND] = PCI_COMMAND_IO | PCI_COMMAND_MEMORY;
>
> + /*
> + * Note: we don't use INTx with IVSHMEM_MSI at all, so this is a
> + * bald-faced lie then. But it's a backwards compatible lie.
> + */
> pci_config_set_interrupt_pin(pci_conf, 1);
I am not sure how much of a problem this is. Apparently, other devices
claim interrupt and msi (ich, hda, pvscsi)
Better ask someone more familiar with PCI details.
>
> memory_region_init_io(&s->ivshmem_mmio, OBJECT(s), &ivshmem_mmio_ops, s,
> --
> 2.4.3
>
>
--
Marc-André Lureau
- Re: [Qemu-devel] [PATCH 18/38] ivshmem: Leave INTx alone when using MSI-X,
Marc-André Lureau <=