Commit a05f686f authored by Pavel Fedin's avatar Pavel Fedin Committed by Paolo Bonzini
Browse files

hw/pci: Introduce pci_requester_id()



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. The new function is now used in some places,
where the same calculation was used.

MemTxAttrs.stream_id also renamed to requester_id in order to better
reflect semantics of the field.

Signed-off-by: default avatarPavel Fedin <p.fedin@samsung.com>
Reviewed-by: default avatarMichael S. Tsirkin <mst@redhat.com>
Acked-by: default avatarMichael S. Tsirkin <mst@redhat.com>
Message-Id: <5814bcb03a297f198e796b13ed9c35059c52f89b.1444916432.git.p.fedin@samsung.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 50bf31b9
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1483,7 +1483,7 @@ static int assigned_device_pci_cap_init(PCIDevice *pci_dev, Error **errp)
         * error bits, leave the rest. */
        status = pci_get_long(pci_dev->config + pos + PCI_X_STATUS);
        status &= ~(PCI_X_STATUS_BUS | PCI_X_STATUS_DEVFN);
        status |= (pci_bus_num(pci_dev->bus) << 8) | pci_dev->devfn;
        status |= pci_requester_id(pci_dev);
        status &= ~(PCI_X_STATUS_SPL_DISC | PCI_X_STATUS_UNX_SPL |
                    PCI_X_STATUS_SPL_ERR);
        pci_set_long(pci_dev->config + pos + PCI_X_STATUS, status);
+1 −1
Original line number Diff line number Diff line
@@ -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 = pci_requester_id(dev);
    address_space_stl_le(&dev->bus_master_as, msg.address, msg.data,
                         attrs, NULL);
}
+1 −1
Original line number Diff line number Diff line
@@ -979,7 +979,7 @@ static int do_pcie_aer_inject_error(Monitor *mon,
        }
    }
    err.status = error_status;
    err.source_id = (pci_bus_num(dev->bus) << 8) | dev->devfn;
    err.source_id = pci_requester_id(dev);

    err.flags = 0;
    if (correctable) {
+2 −2
Original line number Diff line number Diff line
@@ -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,
+5 −0
Original line number Diff line number Diff line
@@ -677,6 +677,11 @@ static inline uint32_t pci_config_size(const PCIDevice *d)
    return pci_is_express(d) ? PCIE_CONFIG_SPACE_SIZE : PCI_CONFIG_SPACE_SIZE;
}

static inline uint16_t pci_requester_id(PCIDevice *dev)
{
    return (pci_bus_num(dev->bus) << 8) | dev->devfn;
}

/* DMA access functions */
static inline AddressSpace *pci_get_address_space(PCIDevice *dev)
{