diff mbox

[v3,2/3] hw/pci: Introduce msi_requester_id()

Message ID a5fcbc0c1178d33aa946f8afd294da096397fa0f.1444827228.git.p.fedin@samsung.com
State New
Headers show

Commit Message

Pavel Fedin Oct. 14, 2015, 12:59 p.m. UTC
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 <p.fedin@samsung.com>
---
 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

Comments

Michael S. Tsirkin Oct. 14, 2015, 1:46 p.m. UTC | #1
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 <p.fedin@samsung.com>

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
diff mbox

Patch

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;
+}