From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54584) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YxZVZ-00056K-1U for qemu-devel@nongnu.org; Wed, 27 May 2015 07:28:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YxZVU-0007MF-7X for qemu-devel@nongnu.org; Wed, 27 May 2015 07:28:24 -0400 Received: from mx1.redhat.com ([209.132.183.28]:54774) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YxZVT-0007Ld-PW for qemu-devel@nongnu.org; Wed, 27 May 2015 07:28:19 -0400 Date: Wed, 27 May 2015 13:28:15 +0200 From: "Michael S. Tsirkin" Message-ID: <20150527132750-mutt-send-email-mst@redhat.com> References: <012901d0986d$3574ab00$a05e0100$@samsung.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <012901d0986d$3574ab00$a05e0100$@samsung.com> Subject: Re: [Qemu-devel] [PATCH] Add stream ID to MSI write List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Pavel Fedin Cc: 'Peter Maydell' , 'QEMU Developers' On Wed, May 27, 2015 at 02:06:40PM +0300, Pavel Fedin wrote: > GICv3 ITS distinguishes between devices by using hardwired device IDs passed on the bus. > This patch implements passing these IDs in qemu. > SMMU is also known to use stream IDs, therefore this addition can also be useful for > implementing platforms with SMMU. > Unfortunately currently qemu does not seem to have such thing as bus number, therefore we > use only devfn. This is OK for platforms with only one PCI bus instance. Perhaps > additional property should be implemented when we emulate some GICv3-based machine with > more than one bus. > > Signed-off-by: Pavel Fedin There's pci_bus_num. > --- > hw/pci/msix.c | 4 +++- > include/exec/memattrs.h | 2 ++ > 2 files changed, 5 insertions(+), 1 deletion(-) > > diff --git a/hw/pci/msix.c b/hw/pci/msix.c > index 9935f98..e85ce10 100644 > --- a/hw/pci/msix.c > +++ b/hw/pci/msix.c > @@ -433,6 +433,7 @@ int msix_enabled(PCIDevice *dev) > void msix_notify(PCIDevice *dev, unsigned vector) > { > MSIMessage msg; > + MemTxAttrs attrs = {}; > > if (vector >= dev->msix_entries_nr || !dev->msix_entry_used[vector]) > return; > @@ -442,9 +443,10 @@ void msix_notify(PCIDevice *dev, unsigned vector) > } > > msg = msix_get_message(dev, vector); > + attrs.stream_id = dev->devfn; /* TODO: Add bus number here */ > > address_space_stl_le(&dev->bus_master_as, msg.address, msg.data, > - MEMTXATTRS_UNSPECIFIED, NULL); > + attrs, NULL); > } > > void msix_reset(PCIDevice *dev) > diff --git a/include/exec/memattrs.h b/include/exec/memattrs.h > index 1389b4b..96dc440 100644 > --- a/include/exec/memattrs.h > +++ b/include/exec/memattrs.h > @@ -33,6 +33,8 @@ typedef struct MemTxAttrs { > unsigned int secure:1; > /* Memory access is usermode (unprivileged) */ > unsigned int user:1; > + /* Stream ID (for MSI for example) */ > + unsigned int stream_id:16; > } MemTxAttrs; > > /* Bus masters which don't specify any attributes will get this, > -- > 1.9.5.msysgit.0 >