From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45865) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZmMNf-00058g-5O for qemu-devel@nongnu.org; Wed, 14 Oct 2015 09:46:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZmMNc-0006uf-Ev for qemu-devel@nongnu.org; Wed, 14 Oct 2015 09:46:11 -0400 Received: from mx1.redhat.com ([209.132.183.28]:32965) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZmMNc-0006ub-6s for qemu-devel@nongnu.org; Wed, 14 Oct 2015 09:46:08 -0400 Date: Wed, 14 Oct 2015 16:46:04 +0300 From: "Michael S. Tsirkin" Message-ID: <20151014164508-mutt-send-email-mst@redhat.com> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: Subject: Re: [Qemu-devel] [PATCH v3 2/3] hw/pci: Introduce msi_requester_id() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Pavel Fedin Cc: Paolo Bonzini , qemu-devel@nongnu.org, Peter Maydell On Wed, Oct 14, 2015 at 03:59:58PM +0300, Pavel Fedin wrote: > For GICv3 ITS implementation we are going to use requester IDs in KVM IRQ > routing code. This patch introduces reusable convenient way to obtain this > ID from the device pointer. > > Since requester ID is an architecture-specific thing, the function can be > overridden on per-architecture basis. Default stub just returns 0. > > MemTxAttrs.stream_id also renamed to requester_id in order to better > reflect semantics of the field. > > Signed-off-by: Pavel Fedin This is a pci requester id, not an msi requester id. > --- > hw/pci/msi.c | 2 +- > include/exec/memattrs.h | 4 ++-- > include/hw/pci/msi.h | 1 + > stubs/Makefile.objs | 1 + > stubs/msi.c | 16 ++++++++++++++++ > target-arm/Makefile.objs | 1 + > target-arm/msi.c | 16 ++++++++++++++++ > 7 files changed, 38 insertions(+), 3 deletions(-) > create mode 100644 stubs/msi.c > create mode 100644 target-arm/msi.c > > diff --git a/hw/pci/msi.c b/hw/pci/msi.c > index f9c0484..ff7c28b 100644 > --- a/hw/pci/msi.c > +++ b/hw/pci/msi.c > @@ -294,7 +294,7 @@ void msi_send_message(PCIDevice *dev, MSIMessage msg) > { > MemTxAttrs attrs = {}; > > - attrs.stream_id = (pci_bus_num(dev->bus) << 8) | dev->devfn; > + attrs.requester_id = msi_requester_id(dev); > address_space_stl_le(&dev->bus_master_as, msg.address, msg.data, > attrs, NULL); > } > diff --git a/include/exec/memattrs.h b/include/exec/memattrs.h > index f8537a8..e601061 100644 > --- a/include/exec/memattrs.h > +++ b/include/exec/memattrs.h > @@ -35,8 +35,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; > + /* Requester ID (for MSI for example) */ > + unsigned int requester_id:16; > } MemTxAttrs; > > /* Bus masters which don't specify any attributes will get this, > diff --git a/include/hw/pci/msi.h b/include/hw/pci/msi.h > index 50e452b..75cf5e0 100644 > --- a/include/hw/pci/msi.h > +++ b/include/hw/pci/msi.h > @@ -42,6 +42,7 @@ void msi_notify(PCIDevice *dev, unsigned int vector); > void msi_send_message(PCIDevice *dev, MSIMessage msg); > void msi_write_config(PCIDevice *dev, uint32_t addr, uint32_t val, int len); > unsigned int msi_nr_vectors_allocated(const PCIDevice *dev); > +uint16_t msi_requester_id(PCIDevice *dev); > > static inline bool msi_present(const PCIDevice *dev) > { > diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs > index 85e4e81..d2261d1 100644 > --- a/stubs/Makefile.objs > +++ b/stubs/Makefile.objs > @@ -22,6 +22,7 @@ stub-obj-y += migr-blocker.o > stub-obj-y += mon-is-qmp.o > stub-obj-y += mon-printf.o > stub-obj-y += monitor-init.o > +stub-obj-$(CONFIG_PCI) += msi.o > stub-obj-y += notify-event.o > stub-obj-$(CONFIG_SPICE) += qemu-chr-open-spice.o > stub-obj-y += qtest.o > diff --git a/stubs/msi.c b/stubs/msi.c > new file mode 100644 > index 0000000..cf4c7a0 > --- /dev/null > +++ b/stubs/msi.c > @@ -0,0 +1,16 @@ > +/* > + * QEMU architecture-specific MSI functions > + * > + * Copyright (c) 2015 Samsung Electronics Co., Ltd. > + * Written by Pavel Fedin > + * > + * This work is licensed under the terms of the GNU GPL, version 2 or later. > + * See the COPYING file in the top-level directory. > + * > + */ > +#include "hw/pci/msi.h" > + > +uint16_t msi_requester_id(PCIDevice *dev) > +{ > + return 0; > +} > diff --git a/target-arm/Makefile.objs b/target-arm/Makefile.objs > index 9460b40..9e75c66 100644 > --- a/target-arm/Makefile.objs > +++ b/target-arm/Makefile.objs > @@ -1,5 +1,6 @@ > obj-y += arm-semi.o > obj-$(CONFIG_SOFTMMU) += machine.o > +obj-$(CONFIG_PCI) += msi.o > obj-$(CONFIG_KVM) += kvm.o > obj-$(call land,$(CONFIG_KVM),$(call lnot,$(TARGET_AARCH64))) += kvm32.o > obj-$(call land,$(CONFIG_KVM),$(TARGET_AARCH64)) += kvm64.o > diff --git a/target-arm/msi.c b/target-arm/msi.c > new file mode 100644 > index 0000000..09b10b4 > --- /dev/null > +++ b/target-arm/msi.c > @@ -0,0 +1,16 @@ > +/* > + * QEMU ARM specific MSI functions > + * > + * Copyright (c) 2015 Samsung Electronics Co., Ltd. > + * Written by Pavel Fedin > + * > + * This work is licensed under the terms of the GNU GPL, version 2 or later. > + * See the COPYING file in the top-level directory. > + * > + */ > +#include "hw/pci/msi.h" > + > +uint16_t msi_requester_id(PCIDevice *dev) > +{ > + return (pci_bus_num(dev->bus) << 8) | dev->devfn; > +} > -- > 2.4.4