[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] pci: fix requester id to be the one on root bus
From: |
Michael S. Tsirkin |
Subject: |
Re: [Qemu-devel] [PATCH] pci: fix requester id to be the one on root bus |
Date: |
Wed, 11 May 2016 16:53:54 +0300 |
On Wed, May 11, 2016 at 02:40:31PM +0800, Peter Xu wrote:
> When there are devices under PCI bridge (or bridges), PCI requester ID
> should be the one that hooked on the root PCI bus, not the PCI device
> itself.
>
> Signed-off-by: Peter Xu <address@hidden>
I think this is only correct for pci bridges, and wrong for pci express bridges.
How exactly do you test this?
> ---
> hw/pci/msi.c | 2 +-
> hw/pci/pci.c | 9 +++++++++
> include/hw/pci/pci.h | 2 ++
> 3 files changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/hw/pci/msi.c b/hw/pci/msi.c
> index e0e64c2..1719716 100644
> --- a/hw/pci/msi.c
> +++ b/hw/pci/msi.c
> @@ -315,7 +315,7 @@ void msi_send_message(PCIDevice *dev, MSIMessage msg)
> {
> MemTxAttrs attrs = {};
>
> - attrs.requester_id = pci_requester_id(dev);
> + attrs.requester_id = pci_requester_id_recursive(dev);
> address_space_stl_le(&dev->bus_master_as, msg.address, msg.data,
> attrs, NULL);
> }
> diff --git a/hw/pci/pci.c b/hw/pci/pci.c
> index bb605ef..c14299b 100644
> --- a/hw/pci/pci.c
> +++ b/hw/pci/pci.c
> @@ -2498,6 +2498,15 @@ PCIDevice *pci_get_function_0(PCIDevice *pci_dev)
> }
> }
>
> +uint16_t pci_requester_id_recursive(PCIDevice *dev)
> +{
> + while (pci_bus_num(dev->bus)) {
> + /* This is not on root PCI bus, we find its parent */
> + dev = dev->bus->parent_dev;
> + }
> + return pci_requester_id(dev);
> +}
> +
> static const TypeInfo pci_device_type_info = {
> .name = TYPE_PCI_DEVICE,
> .parent = TYPE_DEVICE,
> diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h
> index ef6ba51..4cb5b50 100644
> --- a/include/hw/pci/pci.h
> +++ b/include/hw/pci/pci.h
> @@ -776,4 +776,6 @@ extern const VMStateDescription vmstate_pci_device;
> .offset = vmstate_offset_pointer(_state, _field, PCIDevice), \
> }
>
> +uint16_t pci_requester_id_recursive(PCIDevice *dev);
> +
> #endif
> --
> 2.4.11
Re: [Qemu-devel] [PATCH] pci: fix requester id with PCI bridges, Peter Xu, 2016/05/11