[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] Add stream ID to MSI write
From: |
Michael S. Tsirkin |
Subject: |
Re: [Qemu-devel] [PATCH] Add stream ID to MSI write |
Date: |
Wed, 27 May 2015 13:28:15 +0200 |
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 <address@hidden>
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
>