All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
	Jonathan Cameron <Jonathan.Cameron@huawei.com>,
	Marcel Apfelbaum <marcel.apfelbaum@gmail.com>,
	Ben Widawsky <ben.widawsky@intel.com>
Subject: [PULL v3 30/81] hw/pci-bridge/cxl-upstream: Add a CDAT table access DOE
Date: Sat, 5 Nov 2022 13:16:55 -0400	[thread overview]
Message-ID: <20221105171116.432921-31-mst@redhat.com> (raw)
In-Reply-To: <20221105171116.432921-1-mst@redhat.com>

From: Jonathan Cameron <Jonathan.Cameron@huawei.com>

This Data Object Exchange Mailbox allows software to query the
latency and bandwidth between ports on the switch. For now
only provide information on routes between the upstream port and
each downstream port (not p2p).

Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

--
Changes since v8: Mostly to match the type 3 equivalent
 - Move enum out of function and give it a more descriptive namespace.
Message-Id: <20221014151045.24781-6-Jonathan.Cameron@huawei.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 include/hw/cxl/cxl_cdat.h    |   1 +
 hw/pci-bridge/cxl_upstream.c | 195 ++++++++++++++++++++++++++++++++++-
 2 files changed, 195 insertions(+), 1 deletion(-)

diff --git a/include/hw/cxl/cxl_cdat.h b/include/hw/cxl/cxl_cdat.h
index 52c232e912..e9eda00142 100644
--- a/include/hw/cxl/cxl_cdat.h
+++ b/include/hw/cxl/cxl_cdat.h
@@ -131,6 +131,7 @@ typedef struct CDATSslbisHeader {
     uint64_t entry_base_unit;
 } QEMU_PACKED CDATSslbisHeader;
 
+#define CDAT_PORT_ID_USP 0x100
 /* Switch Scoped Latency and Bandwidth Entry - CDAT Table 10 */
 typedef struct CDATSslbe {
     uint16_t port_x_id;
diff --git a/hw/pci-bridge/cxl_upstream.c b/hw/pci-bridge/cxl_upstream.c
index a83a3e81e4..9b8b57df9d 100644
--- a/hw/pci-bridge/cxl_upstream.c
+++ b/hw/pci-bridge/cxl_upstream.c
@@ -10,11 +10,12 @@
 
 #include "qemu/osdep.h"
 #include "qemu/log.h"
+#include "hw/qdev-properties.h"
 #include "hw/pci/msi.h"
 #include "hw/pci/pcie.h"
 #include "hw/pci/pcie_port.h"
 
-#define CXL_UPSTREAM_PORT_MSI_NR_VECTOR 1
+#define CXL_UPSTREAM_PORT_MSI_NR_VECTOR 2
 
 #define CXL_UPSTREAM_PORT_MSI_OFFSET 0x70
 #define CXL_UPSTREAM_PORT_PCIE_CAP_OFFSET 0x90
@@ -28,6 +29,7 @@ typedef struct CXLUpstreamPort {
 
     /*< public >*/
     CXLComponentState cxl_cstate;
+    DOECap doe_cdat;
 } CXLUpstreamPort;
 
 CXLComponentState *cxl_usp_to_cstate(CXLUpstreamPort *usp)
@@ -60,6 +62,9 @@ static void cxl_usp_dvsec_write_config(PCIDevice *dev, uint32_t addr,
 static void cxl_usp_write_config(PCIDevice *d, uint32_t address,
                                  uint32_t val, int len)
 {
+    CXLUpstreamPort *usp = CXL_USP(d);
+
+    pcie_doe_write_config(&usp->doe_cdat, address, val, len);
     pci_bridge_write_config(d, address, val, len);
     pcie_cap_flr_write_config(d, address, val, len);
     pcie_aer_write_config(d, address, val, len);
@@ -67,6 +72,18 @@ static void cxl_usp_write_config(PCIDevice *d, uint32_t address,
     cxl_usp_dvsec_write_config(d, address, val, len);
 }
 
+static uint32_t cxl_usp_read_config(PCIDevice *d, uint32_t address, int len)
+{
+    CXLUpstreamPort *usp = CXL_USP(d);
+    uint32_t val;
+
+    if (pcie_doe_read_config(&usp->doe_cdat, address, len, &val)) {
+        return val;
+    }
+
+    return pci_default_read_config(d, address, len);
+}
+
 static void latch_registers(CXLUpstreamPort *usp)
 {
     uint32_t *reg_state = usp->cxl_cstate.crb.cache_mem_registers;
@@ -119,6 +136,167 @@ static void build_dvsecs(CXLComponentState *cxl)
                                REG_LOC_DVSEC_REVID, dvsec);
 }
 
+static bool cxl_doe_cdat_rsp(DOECap *doe_cap)
+{
+    CDATObject *cdat = &CXL_USP(doe_cap->pdev)->cxl_cstate.cdat;
+    uint16_t ent;
+    void *base;
+    uint32_t len;
+    CDATReq *req = pcie_doe_get_write_mbox_ptr(doe_cap);
+    CDATRsp rsp;
+
+    cxl_doe_cdat_update(&CXL_USP(doe_cap->pdev)->cxl_cstate, &error_fatal);
+    assert(cdat->entry_len);
+
+    /* Discard if request length mismatched */
+    if (pcie_doe_get_obj_len(req) <
+        DIV_ROUND_UP(sizeof(CDATReq), sizeof(uint32_t))) {
+        return false;
+    }
+
+    ent = req->entry_handle;
+    base = cdat->entry[ent].base;
+    len = cdat->entry[ent].length;
+
+    rsp = (CDATRsp) {
+        .header = {
+            .vendor_id = CXL_VENDOR_ID,
+            .data_obj_type = CXL_DOE_TABLE_ACCESS,
+            .reserved = 0x0,
+            .length = DIV_ROUND_UP((sizeof(rsp) + len), sizeof(uint32_t)),
+        },
+        .rsp_code = CXL_DOE_TAB_RSP,
+        .table_type = CXL_DOE_TAB_TYPE_CDAT,
+        .entry_handle = (ent < cdat->entry_len - 1) ?
+                        ent + 1 : CXL_DOE_TAB_ENT_MAX,
+    };
+
+    memcpy(doe_cap->read_mbox, &rsp, sizeof(rsp));
+        memcpy(doe_cap->read_mbox + DIV_ROUND_UP(sizeof(rsp), sizeof(uint32_t)),
+           base, len);
+
+    doe_cap->read_mbox_len += rsp.header.length;
+
+    return true;
+}
+
+static DOEProtocol doe_cdat_prot[] = {
+    { CXL_VENDOR_ID, CXL_DOE_TABLE_ACCESS, cxl_doe_cdat_rsp },
+    { }
+};
+
+enum {
+    CXL_USP_CDAT_SSLBIS_LAT,
+    CXL_USP_CDAT_SSLBIS_BW,
+    CXL_USP_CDAT_NUM_ENTRIES
+};
+
+static int build_cdat_table(CDATSubHeader ***cdat_table, void *priv)
+{
+    g_autofree CDATSslbis *sslbis_latency = NULL;
+    g_autofree CDATSslbis *sslbis_bandwidth = NULL;
+    CXLUpstreamPort *us = CXL_USP(priv);
+    PCIBus *bus = &PCI_BRIDGE(us)->sec_bus;
+    int devfn, sslbis_size, i;
+    int count = 0;
+    uint16_t port_ids[256];
+
+    for (devfn = 0; devfn < ARRAY_SIZE(bus->devices); devfn++) {
+        PCIDevice *d = bus->devices[devfn];
+        PCIEPort *port;
+
+        if (!d || !pci_is_express(d) || !d->exp.exp_cap) {
+            continue;
+        }
+
+        /*
+         * Whilst the PCI express spec doesn't allow anything other than
+         * downstream ports on this bus, let us be a little paranoid
+         */
+        if (!object_dynamic_cast(OBJECT(d), TYPE_PCIE_PORT)) {
+            continue;
+        }
+
+        port = PCIE_PORT(d);
+        port_ids[count] = port->port;
+        count++;
+    }
+
+    /* May not yet have any ports - try again later */
+    if (count == 0) {
+        return 0;
+    }
+
+    sslbis_size = sizeof(CDATSslbis) + sizeof(*sslbis_latency->sslbe) * count;
+    sslbis_latency = g_malloc(sslbis_size);
+    if (!sslbis_latency) {
+        return -ENOMEM;
+    }
+    *sslbis_latency = (CDATSslbis) {
+        .sslbis_header = {
+            .header = {
+                .type = CDAT_TYPE_SSLBIS,
+                .length = sslbis_size,
+            },
+            .data_type = HMATLB_DATA_TYPE_ACCESS_LATENCY,
+            .entry_base_unit = 10000,
+        },
+    };
+
+    for (i = 0; i < count; i++) {
+        sslbis_latency->sslbe[i] = (CDATSslbe) {
+            .port_x_id = CDAT_PORT_ID_USP,
+            .port_y_id = port_ids[i],
+            .latency_bandwidth = 15, /* 150ns */
+        };
+    }
+
+    sslbis_bandwidth = g_malloc(sslbis_size);
+    if (!sslbis_bandwidth) {
+        return 0;
+    }
+    *sslbis_bandwidth = (CDATSslbis) {
+        .sslbis_header = {
+            .header = {
+                .type = CDAT_TYPE_SSLBIS,
+                .length = sslbis_size,
+            },
+            .data_type = HMATLB_DATA_TYPE_ACCESS_BANDWIDTH,
+            .entry_base_unit = 1000,
+        },
+    };
+
+    for (i = 0; i < count; i++) {
+        sslbis_bandwidth->sslbe[i] = (CDATSslbe) {
+            .port_x_id = CDAT_PORT_ID_USP,
+            .port_y_id = port_ids[i],
+            .latency_bandwidth = 16, /* 16 GB/s */
+        };
+    }
+
+    *cdat_table = g_malloc0(sizeof(*cdat_table) * CXL_USP_CDAT_NUM_ENTRIES);
+    if (!*cdat_table) {
+        return -ENOMEM;
+    }
+
+    /* Header always at start of structure */
+    (*cdat_table)[CXL_USP_CDAT_SSLBIS_LAT] = g_steal_pointer(&sslbis_latency);
+    (*cdat_table)[CXL_USP_CDAT_SSLBIS_BW] = g_steal_pointer(&sslbis_bandwidth);
+
+    return CXL_USP_CDAT_NUM_ENTRIES;
+}
+
+static void free_default_cdat_table(CDATSubHeader **cdat_table, int num,
+                                    void *priv)
+{
+    int i;
+
+    for (i = 0; i < num; i++) {
+        g_free(cdat_table[i]);
+    }
+    g_free(cdat_table);
+}
+
 static void cxl_usp_realize(PCIDevice *d, Error **errp)
 {
     PCIEPort *p = PCIE_PORT(d);
@@ -161,6 +339,14 @@ static void cxl_usp_realize(PCIDevice *d, Error **errp)
                      PCI_BASE_ADDRESS_MEM_TYPE_64,
                      component_bar);
 
+    pcie_doe_init(d, &usp->doe_cdat, cxl_cstate->dvsec_offset, doe_cdat_prot,
+                  true, 1);
+
+    cxl_cstate->cdat.build_cdat_table = build_cdat_table;
+    cxl_cstate->cdat.free_cdat_table = free_default_cdat_table;
+    cxl_cstate->cdat.private = d;
+    cxl_doe_cdat_init(cxl_cstate, errp);
+
     return;
 
 err_cap:
@@ -179,6 +365,11 @@ static void cxl_usp_exitfn(PCIDevice *d)
     pci_bridge_exitfn(d);
 }
 
+static Property cxl_upstream_props[] = {
+    DEFINE_PROP_STRING("cdat", CXLUpstreamPort, cxl_cstate.cdat.filename),
+    DEFINE_PROP_END_OF_LIST()
+};
+
 static void cxl_upstream_class_init(ObjectClass *oc, void *data)
 {
     DeviceClass *dc = DEVICE_CLASS(oc);
@@ -186,6 +377,7 @@ static void cxl_upstream_class_init(ObjectClass *oc, void *data)
 
     k->is_bridge = true;
     k->config_write = cxl_usp_write_config;
+    k->config_read = cxl_usp_read_config;
     k->realize = cxl_usp_realize;
     k->exit = cxl_usp_exitfn;
     k->vendor_id = 0x19e5; /* Huawei */
@@ -194,6 +386,7 @@ static void cxl_upstream_class_init(ObjectClass *oc, void *data)
     set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
     dc->desc = "CXL Switch Upstream Port";
     dc->reset = cxl_usp_reset;
+    device_class_set_props(dc, cxl_upstream_props);
 }
 
 static const TypeInfo cxl_usp_info = {
-- 
MST



  parent reply	other threads:[~2022-11-05 17:51 UTC|newest]

Thread overview: 97+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-05 17:15 [PULL v3 00/81] pci,pc,virtio: features, tests, fixes, cleanups Michael S. Tsirkin
2022-11-05 17:15 ` [PULL v3 01/81] hw/i386/e820: remove legacy reserved entries for e820 Michael S. Tsirkin
2022-11-05 17:15 ` [PULL v3 02/81] tests/acpi: allow SSDT changes Michael S. Tsirkin
2022-11-05 17:15 ` [PULL v3 03/81] acpi/ssdt: Fix aml_or() and aml_and() in if clause Michael S. Tsirkin
2022-11-05 17:15 ` [PULL v3 04/81] acpi/nvdimm: define macro for NVDIMM Device _DSM Michael S. Tsirkin
2022-11-05 17:15 ` [PULL v3 05/81] acpi/nvdimm: Implement ACPI NVDIMM Label Methods Michael S. Tsirkin
2022-11-05 17:15 ` [PULL v3 06/81] test/acpi/bios-tables-test: SSDT: update golden master binaries Michael S. Tsirkin
2022-11-05 17:15 ` [PULL v3 07/81] virtio-crypto: Support asynchronous mode Michael S. Tsirkin
2022-11-05 17:15 ` [PULL v3 08/81] crypto: Support DER encodings Michael S. Tsirkin
2022-11-05 17:15 ` [PULL v3 09/81] crypto: Support export akcipher to pkcs8 Michael S. Tsirkin
2022-11-05 17:15 ` [PULL v3 10/81] cryptodev: Add a lkcf-backend for cryptodev Michael S. Tsirkin
2022-11-05 17:15 ` [PULL v3 11/81] acpi/tests/avocado/bits: initial commit of test scripts that are run by biosbits Michael S. Tsirkin
2022-11-05 17:15 ` [PULL v3 12/81] acpi/tests/avocado/bits: disable acpi PSS tests that are failing in biosbits Michael S. Tsirkin
2022-11-05 17:16 ` [PULL v3 13/81] acpi/tests/avocado/bits: add biosbits config file for running bios tests Michael S. Tsirkin
2022-11-05 17:16 ` [PULL v3 14/81] acpi/tests/avocado/bits: add acpi and smbios avocado tests that uses biosbits Michael S. Tsirkin
2022-11-05 17:16 ` [PULL v3 15/81] acpi/tests/avocado/bits/doc: add a doc file to describe the acpi bits test Michael S. Tsirkin
2022-11-05 17:16 ` [PULL v3 16/81] MAINTAINERS: add myself as the maintainer for acpi biosbits avocado tests Michael S. Tsirkin
2022-11-05 17:16 ` [PULL v3 17/81] hw/smbios: add core_count2 to smbios table type 4 Michael S. Tsirkin
2022-11-05 17:16 ` [PULL v3 18/81] bios-tables-test: teach test to use smbios 3.0 tables Michael S. Tsirkin
2022-11-05 17:16 ` [PULL v3 19/81] tests/acpi: allow changes for core_count2 test Michael S. Tsirkin
2022-11-05 17:16 ` [PULL v3 20/81] bios-tables-test: add test for number of cores > 255 Michael S. Tsirkin
2022-11-05 17:16 ` [PULL v3 21/81] tests/acpi: update tables for new core count test Michael S. Tsirkin
2022-11-05 17:16 ` [PULL v3 22/81] tests/acpi: virt: allow acpi MADT and FADT changes Michael S. Tsirkin
2022-11-05 17:16 ` [PULL v3 23/81] acpi: fadt: support revision 6.0 of the ACPI specification Michael S. Tsirkin
2022-11-05 17:16 ` [PULL v3 24/81] acpi: arm/virt: madt: bump to revision 4 accordingly to ACPI 6.0 Errata A Michael S. Tsirkin
2022-11-05 17:16 ` [PULL v3 25/81] tests/acpi: virt: update ACPI MADT and FADT binaries Michael S. Tsirkin
2022-11-05 17:16 ` [PULL v3 26/81] hw/pci: PCIe Data Object Exchange emulation Michael S. Tsirkin
2022-11-05 17:16 ` [PULL v3 27/81] hw/mem/cxl-type3: Add MSIX support Michael S. Tsirkin
2022-11-05 17:16 ` [PULL v3 28/81] hw/cxl/cdat: CXL CDAT Data Object Exchange implementation Michael S. Tsirkin
2022-11-05 17:16 ` [PULL v3 29/81] hw/mem/cxl-type3: Add CXL CDAT Data Object Exchange Michael S. Tsirkin
2022-11-05 17:16 ` Michael S. Tsirkin [this message]
2022-11-05 17:16 ` [PULL v3 31/81] hw/virtio/virtio-iommu-pci: Enforce the device is plugged on the root bus Michael S. Tsirkin
2022-11-05 17:17 ` [PULL v3 32/81] virtio: introduce __virtio_queue_reset() Michael S. Tsirkin
2022-11-05 17:17 ` [PULL v3 33/81] virtio: introduce virtio_queue_reset() Michael S. Tsirkin
2022-11-05 17:17 ` [PULL v3 34/81] virtio: introduce virtio_queue_enable() Michael S. Tsirkin
2022-11-05 17:17 ` [PULL v3 35/81] virtio: core: vq reset feature negotation support Michael S. Tsirkin
2022-11-05 17:17 ` [PULL v3 36/81] virtio-pci: support queue reset Michael S. Tsirkin
2022-11-05 17:17 ` [PULL v3 37/81] virtio-pci: support queue enable Michael S. Tsirkin
2022-11-05 17:17 ` [PULL v3 38/81] vhost: expose vhost_virtqueue_start() Michael S. Tsirkin
2022-11-05 17:17 ` [PULL v3 39/81] vhost: expose vhost_virtqueue_stop() Michael S. Tsirkin
2022-11-05 17:17 ` [PULL v3 40/81] vhost-net: vhost-kernel: introduce vhost_net_virtqueue_reset() Michael S. Tsirkin
2022-11-05 17:17 ` [PULL v3 41/81] vhost-net: vhost-kernel: introduce vhost_net_virtqueue_restart() Michael S. Tsirkin
2022-11-05 17:17 ` [PULL v3 42/81] virtio-net: introduce flush_or_purge_queued_packets() Michael S. Tsirkin
2022-11-05 17:17 ` [PULL v3 43/81] virtio-net: support queue reset Michael S. Tsirkin
2022-11-05 17:17 ` [PULL v3 44/81] virtio-net: support queue_enable Michael S. Tsirkin
2022-11-05 17:17 ` [PULL v3 45/81] vhost: vhost-kernel: enable vq reset feature Michael S. Tsirkin
2022-11-05 17:17 ` [PULL v3 46/81] virtio-net: " Michael S. Tsirkin
2022-11-05 17:17 ` [PULL v3 47/81] virtio-rng-pci: Allow setting nvectors, so we can use MSI-X Michael S. Tsirkin
2022-11-05 17:17 ` [PULL v3 48/81] vhost-user: Fix out of order vring host notification handling Michael S. Tsirkin
2022-11-05 17:17 ` [PULL v3 49/81] acpi: pc: vga: use AcpiDevAmlIf interface to build VGA device descriptors Michael S. Tsirkin
2022-11-06 21:16   ` Bernhard Beschow
2022-11-06 21:39     ` Bernhard Beschow
2022-11-07  7:42       ` Ani Sinha
2022-11-07 12:32     ` Michael S. Tsirkin
2022-11-07 12:46       ` Ani Sinha
2022-11-07 13:00         ` Michael S. Tsirkin
2022-11-07 22:07           ` Bernhard Beschow
2022-11-07 22:28             ` Michael S. Tsirkin
2022-11-08 21:34               ` B
2022-11-05 17:17 ` [PULL v3 50/81] tests: acpi: whitelist DSDT before generating PCI-ISA bridge AML automatically Michael S. Tsirkin
2022-11-06 21:48   ` Bernhard Beschow
2022-11-07  8:36     ` Ani Sinha
2022-11-07 12:51       ` Michael S. Tsirkin
2022-11-05 17:17 ` [PULL v3 51/81] acpi: pc/q35: drop ad-hoc PCI-ISA bridge AML routines and let bus ennumeration generate AML Michael S. Tsirkin
2022-11-05 17:17 ` [PULL v3 52/81] tests: acpi: update expected DSDT after ISA bridge is moved directly under PCI host bridge Michael S. Tsirkin
2022-11-05 17:18 ` [PULL v3 53/81] tests: acpi: whitelist DSDT before generating ICH9_SMB AML automatically Michael S. Tsirkin
2022-11-05 17:18 ` [PULL v3 54/81] acpi: add get_dev_aml_func() helper Michael S. Tsirkin
2022-11-05 17:18 ` [PULL v3 55/81] acpi: enumerate SMB bridge automatically along with other PCI devices Michael S. Tsirkin
2022-11-05 17:18 ` [PULL v3 56/81] tests: acpi: update expected blobs Michael S. Tsirkin
2022-11-05 17:18 ` [PULL v3 57/81] tests: acpi: pc/q35 whitelist DSDT before \_GPE cleanup Michael S. Tsirkin
2022-11-05 17:18 ` [PULL v3 58/81] acpi: pc/35: sanitize _GPE declaration order Michael S. Tsirkin
2022-11-05 17:18 ` [PULL v3 59/81] tests: acpi: update expected blobs Michael S. Tsirkin
2022-11-05 17:18 ` [PULL v3 60/81] hw/acpi/erst.c: Fix memory handling issues Michael S. Tsirkin
2022-11-05 17:18 ` [PULL v3 61/81] MAINTAINERS: Add qapi/virtio.json to section "virtio" Michael S. Tsirkin
2022-11-05 17:18 ` [PULL v3 62/81] msix: Assert that specified vector is in range Michael S. Tsirkin
2022-11-05 17:18 ` [PULL v3 63/81] hw/i386/pc.c: CXL Fixed Memory Window should not reserve e820 in bios Michael S. Tsirkin
2022-11-05 17:18 ` [PULL v3 64/81] hw/i386/acpi-build: Remove unused struct Michael S. Tsirkin
2022-11-05 17:18 ` [PULL v3 65/81] hw/i386/acpi-build: Resolve redundant attribute Michael S. Tsirkin
2022-11-05 17:18 ` [PULL v3 66/81] hw/i386/acpi-build: Resolve north rather than south bridges Michael S. Tsirkin
2022-11-05 17:18 ` [PULL v3 67/81] hmat acpi: Don't require initiator value in -numa Michael S. Tsirkin
2022-11-05 17:18 ` [PULL v3 68/81] tests: acpi: add and whitelist *.hmat-noinitiator expected blobs Michael S. Tsirkin
2022-11-05 17:18 ` [PULL v3 69/81] tests: acpi: q35: add test for hmat nodes without initiators Michael S. Tsirkin
2022-11-05 17:18 ` [PULL v3 70/81] tests: acpi: q35: update expected blobs *.hmat-noinitiators expected HMAT: Michael S. Tsirkin
2022-11-05 17:18 ` [PULL v3 71/81] tests: Add HMAT AArch64/virt empty table files Michael S. Tsirkin
2022-11-05 17:18 ` [PULL v3 72/81] hw/arm/virt: Enable HMAT on arm virt machine Michael S. Tsirkin
2022-11-05 17:18 ` [PULL v3 73/81] tests: acpi: aarch64/virt: add a test for hmat nodes with no initiators Michael S. Tsirkin
2022-11-05 17:19 ` [PULL v3 74/81] tests: virt: Update expected *.acpihmatvirt tables Michael S. Tsirkin
2022-11-05 17:19 ` [PULL v3 75/81] vfio: move implement of vfio_get_xlat_addr() to memory.c Michael S. Tsirkin
2022-11-05 17:19 ` [PULL v3 76/81] intel-iommu: don't warn guest errors when getting rid2pasid entry Michael S. Tsirkin
2022-11-05 17:19 ` [PULL v3 77/81] intel-iommu: drop VTDBus Michael S. Tsirkin
2022-11-05 17:19 ` [PULL v3 78/81] intel-iommu: convert VTD_PE_GET_FPD_ERR() to be a function Michael S. Tsirkin
2022-11-05 17:19 ` [PULL v3 79/81] intel-iommu: PASID support Michael S. Tsirkin
2022-11-05 17:19 ` [PULL v3 80/81] vhost: Change the sequence of device start Michael S. Tsirkin
2022-11-05 17:19 ` [PULL v3 81/81] vhost-user: Support vhost_dev_start Michael S. Tsirkin
2022-11-07 10:43 ` [PULL v3 00/81] pci,pc,virtio: features, tests, fixes, cleanups Stefan Hajnoczi
2022-11-07 12:30   ` Michael S. Tsirkin
2022-11-08 13:32     ` Igor Mammedov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20221105171116.432921-31-mst@redhat.com \
    --to=mst@redhat.com \
    --cc=Jonathan.Cameron@huawei.com \
    --cc=ben.widawsky@intel.com \
    --cc=marcel.apfelbaum@gmail.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.