From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47454) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X99wO-0005vs-Kf for qemu-devel@nongnu.org; Mon, 21 Jul 2014 05:31:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1X99wF-0003Af-E0 for qemu-devel@nongnu.org; Mon, 21 Jul 2014 05:31:28 -0400 Received: from mail-we0-x22e.google.com ([2a00:1450:400c:c03::22e]:65465) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X99wF-0003AQ-6p for qemu-devel@nongnu.org; Mon, 21 Jul 2014 05:31:19 -0400 Received: by mail-we0-f174.google.com with SMTP id x48so7272178wes.5 for ; Mon, 21 Jul 2014 02:31:17 -0700 (PDT) Sender: Paolo Bonzini Message-ID: <53CCDDE1.9050206@redhat.com> Date: Mon, 21 Jul 2014 11:31:13 +0200 From: Paolo Bonzini MIME-Version: 1.0 References: <53CAA314.10005@web.de> <20140720194842.GA2536@redhat.com> In-Reply-To: <20140720194842.GA2536@redhat.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] pci: Don't deliver MSI/MSI-X messages if bus master support is off List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Michael S. Tsirkin" , Jan Kiszka Cc: qemu-devel Il 20/07/2014 21:48, Michael S. Tsirkin ha scritto: > I guess an alternative is for callers to check before > invoking msi_notify. Please note is this is only option > when using e.g. irqfd, so this has some advantages. > Is there a specific device that is affected by this? > I would expect drivers to disable msi before clearing > bus master bit ... > >> > --- >> > hw/pci/msi.c | 4 ++++ >> > hw/pci/msix.c | 4 ++++ >> > 2 files changed, 8 insertions(+) >> > >> > diff --git a/hw/pci/msi.c b/hw/pci/msi.c >> > index a4a3040..36b651b 100644 >> > --- a/hw/pci/msi.c >> > +++ b/hw/pci/msi.c >> > @@ -285,6 +285,10 @@ void msi_notify(PCIDevice *dev, unsigned int vector) >> > return; >> > } >> > >> > + if (!(pci_get_word(dev->config + PCI_COMMAND) & PCI_COMMAND_MASTER)) { >> > + return; >> > + } >> > + >> > msg = msi_get_message(dev, vector); >> > >> > MSI_DEV_PRINTF(dev, >> > diff --git a/hw/pci/msix.c b/hw/pci/msix.c >> > index 5c49bfc..c77ae7d 100644 >> > --- a/hw/pci/msix.c >> > +++ b/hw/pci/msix.c >> > @@ -437,6 +437,10 @@ void msix_notify(PCIDevice *dev, unsigned vector) >> > return; >> > } >> > >> > + if (!(pci_get_word(dev->config + PCI_COMMAND) & PCI_COMMAND_MASTER)) { >> > + return; >> > + } >> > + >> > msg = msix_get_message(dev, vector); >> > >> > stl_le_phys(&address_space_memory, msg.address, msg.data); I think a better way to do this, is to use the PCI bus master address space instead of address_space_memory. Even if it doesn't fix irqfd, it will make the MSI write go through the IOMMU as it should. Paolo