From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34980) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X8zDd-0005Nf-Oe for qemu-devel@nongnu.org; Sun, 20 Jul 2014 18:04:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1X8zDX-0006QA-Qg for qemu-devel@nongnu.org; Sun, 20 Jul 2014 18:04:33 -0400 Received: from mout.web.de ([212.227.15.14]:62482) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X8zDX-0006Q6-HM for qemu-devel@nongnu.org; Sun, 20 Jul 2014 18:04:27 -0400 Message-ID: <53CC3CE6.7020004@web.de> Date: Mon, 21 Jul 2014 00:04:22 +0200 From: Jan Kiszka MIME-Version: 1.0 References: <53CAA314.10005@web.de> <20140720194842.GA2536@redhat.com> <53CC3866.3010605@web.de> <20140720210301.GA3997@redhat.com> In-Reply-To: <20140720210301.GA3997@redhat.com> Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="l8FsJBUtHtbwaN7H4poNSlAEHcsSx778a" 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" Cc: qemu-devel This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --l8FsJBUtHtbwaN7H4poNSlAEHcsSx778a Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable On 2014-07-20 23:03, Michael S. Tsirkin wrote: > On Sun, Jul 20, 2014 at 11:45:10PM +0200, Jan Kiszka wrote: >> On 2014-07-20 21:48, Michael S. Tsirkin wrote: >>> On Sat, Jul 19, 2014 at 06:55:48PM +0200, Jan Kiszka wrote: >>>> From: Jan Kiszka >>>> >>>> The spec says (and real HW confirms this) that, if the bus master bi= t >>>> is 0, the device will not generate any PCI accesses. MSI and MSI-X >>>> messages fall among these. >>>> >>>> Signed-off-by: Jan Kiszka >>> >>> 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 ... >> >> This is about emulating conforming behaviour without touching each and= >> every device. I stumbled over this while playing with emulated vs. rea= l >> Intel HDA. >=20 > Right so that's my question. > How did you hit it? With a custom driver? So to say: with a hand full lines of code to tickle some MSI event out of that device for testing purposes. > Doesn't regulat driver disable MSI? Sure. This is not fixing a regular's driver problem. It's a behavioral correction for faulty corner cases. Jan >=20 >=20 >> It may not be complete, but I think it's a step forward. Irqfd users >> apparently have to do this themselves then, I didn't look into this. B= ut >> all the rest should not open-code this logic. >> >> Jan >> >>> >>>> --- >>>> 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 ve= ctor) >>>> return; >>>> } >>>> =20 >>>> + if (!(pci_get_word(dev->config + PCI_COMMAND) & PCI_COMMAND_MAS= TER)) { >>>> + return; >>>> + } >>>> + >>>> msg =3D msi_get_message(dev, vector); >>>> =20 >>>> 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 vecto= r) >>>> return; >>>> } >>>> =20 >>>> + if (!(pci_get_word(dev->config + PCI_COMMAND) & PCI_COMMAND_MAS= TER)) { >>>> + return; >>>> + } >>>> + >>>> msg =3D msix_get_message(dev, vector); >>>> =20 >>>> stl_le_phys(&address_space_memory, msg.address, msg.data); >>>> --=20 >>>> 1.8.1.1.298.ge7eed54 >>>> >>> >>> >> >> >=20 >=20 --l8FsJBUtHtbwaN7H4poNSlAEHcsSx778a Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.19 (GNU/Linux) Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iEYEARECAAYFAlPMPOYACgkQitSsb3rl5xSEhgCgrRU4WL9xDKAFYnZ/yqrsQX8Z 12UAoJuhDchtts3AR1EC0rzsPqGhNNQP =Zls/ -----END PGP SIGNATURE----- --l8FsJBUtHtbwaN7H4poNSlAEHcsSx778a--