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>,
	Akihiko Odaki <akihiko.odaki@gmail.com>,
	Akihiko Odaki <akihiko.odaki@daynix.com>,
	Yuval Shaia <yuval.shaia.ml@gmail.com>,
	Akihiko@redhat.com, Odaki@redhat.com, &lt@redhat.com,
	Dmitry Fleytman <dmitry.fleytman@gmail.com>,
	Jason Wang <jasowang@redhat.com>, Jiri Pirko <jiri@resnulli.us>,
	Keith Busch <kbusch@kernel.org>, Klaus Jensen <its@irrelevant.dk>,
	Marcel Apfelbaum <marcel.apfelbaum@gmail.com>,
	Elena Ufimtseva <elena.ufimtseva@oracle.com>,
	Jagannathan Raman <jag.raman@oracle.com>,
	John G Johnson <john.g.johnson@oracle.com>,
	qemu-block@nongnu.org
Subject: [PULL v2 65/82] msix: Assert that specified vector is in range
Date: Wed, 2 Nov 2022 12:11:25 -0400	[thread overview]
Message-ID: <20221102160336.616599-66-mst@redhat.com> (raw)
In-Reply-To: <20221102160336.616599-1-mst@redhat.com>

From: Akihiko Odaki <akihiko.odaki@gmail.com>

There were several different ways to deal with the situation where the
vector specified for a msix function is out of bound:
- early return a function and keep progresssing
- propagate the error to the caller
- mark msix unusable
- assert it is in bound
- just ignore

An out-of-bound vector should not be specified if the device
implementation is correct so let msix functions always assert that the
specified vector is in range.

An exceptional case is virtio-pci, which allows the guest to configure
vectors. For virtio-pci, it is more appropriate to introduce its own
checks because it is sometimes too late to check the vector range in
msix functions.

Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Message-Id: <20220829083524.143640-1-akihiko.odaki@daynix.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Yuval Shaia <yuval.shaia.ml@gmail.com>
Signed-off-by: Akihiko Odaki &lt;<a href="mailto:akihiko.odaki@daynix.com" target="_blank">akihiko.odaki@daynix.com</a>&gt;<br>
---
 include/hw/pci/msix.h     |  4 +--
 hw/net/e1000e.c           | 15 ++-------
 hw/net/rocker/rocker.c    | 23 ++------------
 hw/net/vmxnet3.c          | 27 +++-------------
 hw/nvme/ctrl.c            |  5 +--
 hw/pci/msix.c             | 24 ++++++--------
 hw/rdma/vmw/pvrdma_main.c |  7 +---
 hw/remote/vfio-user-obj.c |  9 +-----
 hw/virtio/virtio-pci.c    | 67 ++++++++++++++++++++++++++++-----------
 9 files changed, 74 insertions(+), 107 deletions(-)

diff --git a/include/hw/pci/msix.h b/include/hw/pci/msix.h
index 4f1cda0ebe..0e6f257e45 100644
--- a/include/hw/pci/msix.h
+++ b/include/hw/pci/msix.h
@@ -33,10 +33,10 @@ bool msix_is_masked(PCIDevice *dev, unsigned vector);
 void msix_set_pending(PCIDevice *dev, unsigned vector);
 void msix_clr_pending(PCIDevice *dev, int vector);
 
-int msix_vector_use(PCIDevice *dev, unsigned vector);
+void msix_vector_use(PCIDevice *dev, unsigned vector);
 void msix_vector_unuse(PCIDevice *dev, unsigned vector);
 void msix_unuse_all_vectors(PCIDevice *dev);
-void msix_set_mask(PCIDevice *dev, int vector, bool mask, Error **errp);
+void msix_set_mask(PCIDevice *dev, int vector, bool mask);
 
 void msix_notify(PCIDevice *dev, unsigned vector);
 
diff --git a/hw/net/e1000e.c b/hw/net/e1000e.c
index ac96f7665a..7523e9f5d2 100644
--- a/hw/net/e1000e.c
+++ b/hw/net/e1000e.c
@@ -276,25 +276,18 @@ e1000e_unuse_msix_vectors(E1000EState *s, int num_vectors)
     }
 }
 
-static bool
+static void
 e1000e_use_msix_vectors(E1000EState *s, int num_vectors)
 {
     int i;
     for (i = 0; i < num_vectors; i++) {
-        int res = msix_vector_use(PCI_DEVICE(s), i);
-        if (res < 0) {
-            trace_e1000e_msix_use_vector_fail(i, res);
-            e1000e_unuse_msix_vectors(s, i);
-            return false;
-        }
+        msix_vector_use(PCI_DEVICE(s), i);
     }
-    return true;
 }
 
 static void
 e1000e_init_msix(E1000EState *s)
 {
-    PCIDevice *d = PCI_DEVICE(s);
     int res = msix_init(PCI_DEVICE(s), E1000E_MSIX_VEC_NUM,
                         &s->msix,
                         E1000E_MSIX_IDX, E1000E_MSIX_TABLE,
@@ -305,9 +298,7 @@ e1000e_init_msix(E1000EState *s)
     if (res < 0) {
         trace_e1000e_msix_init_fail(res);
     } else {
-        if (!e1000e_use_msix_vectors(s, E1000E_MSIX_VEC_NUM)) {
-            msix_uninit(d, &s->msix, &s->msix);
-        }
+        e1000e_use_msix_vectors(s, E1000E_MSIX_VEC_NUM);
     }
 }
 
diff --git a/hw/net/rocker/rocker.c b/hw/net/rocker/rocker.c
index d8f3f16fe8..281d43e6cf 100644
--- a/hw/net/rocker/rocker.c
+++ b/hw/net/rocker/rocker.c
@@ -1212,24 +1212,14 @@ static void rocker_msix_vectors_unuse(Rocker *r,
     }
 }
 
-static int rocker_msix_vectors_use(Rocker *r,
-                                   unsigned int num_vectors)
+static void rocker_msix_vectors_use(Rocker *r, unsigned int num_vectors)
 {
     PCIDevice *dev = PCI_DEVICE(r);
-    int err;
     int i;
 
     for (i = 0; i < num_vectors; i++) {
-        err = msix_vector_use(dev, i);
-        if (err) {
-            goto rollback;
-        }
+        msix_vector_use(dev, i);
     }
-    return 0;
-
-rollback:
-    rocker_msix_vectors_unuse(r, i);
-    return err;
 }
 
 static int rocker_msix_init(Rocker *r, Error **errp)
@@ -1247,16 +1237,9 @@ static int rocker_msix_init(Rocker *r, Error **errp)
         return err;
     }
 
-    err = rocker_msix_vectors_use(r, ROCKER_MSIX_VEC_COUNT(r->fp_ports));
-    if (err) {
-        goto err_msix_vectors_use;
-    }
+    rocker_msix_vectors_use(r, ROCKER_MSIX_VEC_COUNT(r->fp_ports));
 
     return 0;
-
-err_msix_vectors_use:
-    msix_uninit(dev, &r->msix_bar, &r->msix_bar);
-    return err;
 }
 
 static void rocker_msix_uninit(Rocker *r)
diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c
index 0b7acf7f89..d2ab527ef4 100644
--- a/hw/net/vmxnet3.c
+++ b/hw/net/vmxnet3.c
@@ -2110,20 +2110,14 @@ vmxnet3_unuse_msix_vectors(VMXNET3State *s, int num_vectors)
     }
 }
 
-static bool
+static void
 vmxnet3_use_msix_vectors(VMXNET3State *s, int num_vectors)
 {
     PCIDevice *d = PCI_DEVICE(s);
     int i;
     for (i = 0; i < num_vectors; i++) {
-        int res = msix_vector_use(d, i);
-        if (0 > res) {
-            VMW_WRPRN("Failed to use MSI-X vector %d, error %d", i, res);
-            vmxnet3_unuse_msix_vectors(s, i);
-            return false;
-        }
+        msix_vector_use(d, i);
     }
-    return true;
 }
 
 static bool
@@ -2141,13 +2135,8 @@ vmxnet3_init_msix(VMXNET3State *s)
         VMW_WRPRN("Failed to initialize MSI-X, error %d", res);
         s->msix_used = false;
     } else {
-        if (!vmxnet3_use_msix_vectors(s, VMXNET3_MAX_INTRS)) {
-            VMW_WRPRN("Failed to use MSI-X vectors, error %d", res);
-            msix_uninit(d, &s->msix_bar, &s->msix_bar);
-            s->msix_used = false;
-        } else {
-            s->msix_used = true;
-        }
+        vmxnet3_use_msix_vectors(s, VMXNET3_MAX_INTRS);
+        s->msix_used = true;
     }
     return s->msix_used;
 }
@@ -2412,19 +2401,13 @@ static const VMStateDescription vmstate_vmxnet3_rxq_descr = {
 static int vmxnet3_post_load(void *opaque, int version_id)
 {
     VMXNET3State *s = opaque;
-    PCIDevice *d = PCI_DEVICE(s);
 
     net_tx_pkt_init(&s->tx_pkt, PCI_DEVICE(s),
                     s->max_tx_frags, s->peer_has_vhdr);
     net_rx_pkt_init(&s->rx_pkt, s->peer_has_vhdr);
 
     if (s->msix_used) {
-        if  (!vmxnet3_use_msix_vectors(s, VMXNET3_MAX_INTRS)) {
-            VMW_WRPRN("Failed to re-use MSI-X vectors");
-            msix_uninit(d, &s->msix_bar, &s->msix_bar);
-            s->msix_used = false;
-            return -1;
-        }
+        vmxnet3_use_msix_vectors(s, VMXNET3_MAX_INTRS);
     }
 
     if (!vmxnet3_validate_queues(s)) {
diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
index 87aeba0564..d38fdd990e 100644
--- a/hw/nvme/ctrl.c
+++ b/hw/nvme/ctrl.c
@@ -4744,11 +4744,8 @@ static void nvme_init_cq(NvmeCQueue *cq, NvmeCtrl *n, uint64_t dma_addr,
                          uint16_t cqid, uint16_t vector, uint16_t size,
                          uint16_t irq_enabled)
 {
-    int ret;
-
     if (msix_enabled(&n->parent_obj)) {
-        ret = msix_vector_use(&n->parent_obj, vector);
-        assert(ret == 0);
+        msix_vector_use(&n->parent_obj, vector);
     }
     cq->ctrl = n;
     cq->cqid = cqid;
diff --git a/hw/pci/msix.c b/hw/pci/msix.c
index 1e381a9813..9e70fcd6fa 100644
--- a/hw/pci/msix.c
+++ b/hw/pci/msix.c
@@ -136,17 +136,12 @@ static void msix_handle_mask_update(PCIDevice *dev, int vector, bool was_masked)
     }
 }
 
-void msix_set_mask(PCIDevice *dev, int vector, bool mask, Error **errp)
+void msix_set_mask(PCIDevice *dev, int vector, bool mask)
 {
-    ERRP_GUARD();
     unsigned offset;
     bool was_masked;
 
-    if (vector > dev->msix_entries_nr) {
-        error_setg(errp, "msix: vector %d not allocated. max vector is %d",
-                   vector, dev->msix_entries_nr);
-        return;
-    }
+    assert(vector < dev->msix_entries_nr);
 
     offset = vector * PCI_MSIX_ENTRY_SIZE + PCI_MSIX_ENTRY_VECTOR_CTRL;
 
@@ -522,7 +517,9 @@ void msix_notify(PCIDevice *dev, unsigned vector)
 {
     MSIMessage msg;
 
-    if (vector >= dev->msix_entries_nr || !dev->msix_entry_used[vector]) {
+    assert(vector < dev->msix_entries_nr);
+
+    if (!dev->msix_entry_used[vector]) {
         return;
     }
 
@@ -558,20 +555,17 @@ void msix_reset(PCIDevice *dev)
  * don't want to follow the spec suggestion can declare all vectors as used. */
 
 /* Mark vector as used. */
-int msix_vector_use(PCIDevice *dev, unsigned vector)
+void msix_vector_use(PCIDevice *dev, unsigned vector)
 {
-    if (vector >= dev->msix_entries_nr) {
-        return -EINVAL;
-    }
-
+    assert(vector < dev->msix_entries_nr);
     dev->msix_entry_used[vector]++;
-    return 0;
 }
 
 /* Mark vector as unused. */
 void msix_vector_unuse(PCIDevice *dev, unsigned vector)
 {
-    if (vector >= dev->msix_entries_nr || !dev->msix_entry_used[vector]) {
+    assert(vector < dev->msix_entries_nr);
+    if (!dev->msix_entry_used[vector]) {
         return;
     }
     if (--dev->msix_entry_used[vector]) {
diff --git a/hw/rdma/vmw/pvrdma_main.c b/hw/rdma/vmw/pvrdma_main.c
index 58db0b8e3b..4fc6712025 100644
--- a/hw/rdma/vmw/pvrdma_main.c
+++ b/hw/rdma/vmw/pvrdma_main.c
@@ -307,12 +307,7 @@ static int init_msix(PCIDevice *pdev)
     }
 
     for (i = 0; i < RDMA_MAX_INTRS; i++) {
-        rc = msix_vector_use(PCI_DEVICE(dev), i);
-        if (rc < 0) {
-            rdma_error_report("Fail mark MSI-X vector %d", i);
-            uninit_msix(pdev, i);
-            return rc;
-        }
+        msix_vector_use(PCI_DEVICE(dev), i);
     }
 
     return 0;
diff --git a/hw/remote/vfio-user-obj.c b/hw/remote/vfio-user-obj.c
index c6cc53acf2..4e36bb8bcf 100644
--- a/hw/remote/vfio-user-obj.c
+++ b/hw/remote/vfio-user-obj.c
@@ -602,17 +602,10 @@ static void vfu_msix_irq_state(vfu_ctx_t *vfu_ctx, uint32_t start,
                                uint32_t count, bool mask)
 {
     VfuObject *o = vfu_get_private(vfu_ctx);
-    Error *err = NULL;
     uint32_t vector;
 
     for (vector = start; vector < count; vector++) {
-        msix_set_mask(o->pci_dev, vector, mask, &err);
-        if (err) {
-            VFU_OBJECT_ERROR(o, "vfu: %s: %s", o->device,
-                             error_get_pretty(err));
-            error_free(err);
-            err = NULL;
-        }
+        msix_set_mask(o->pci_dev, vector, mask);
     }
 }
 
diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
index 855718d586..a1c9dfa7bb 100644
--- a/hw/virtio/virtio-pci.c
+++ b/hw/virtio/virtio-pci.c
@@ -71,9 +71,11 @@ static void virtio_pci_notify(DeviceState *d, uint16_t vector)
 {
     VirtIOPCIProxy *proxy = to_virtio_pci_proxy_fast(d);
 
-    if (msix_enabled(&proxy->pci_dev))
-        msix_notify(&proxy->pci_dev, vector);
-    else {
+    if (msix_enabled(&proxy->pci_dev)) {
+        if (vector != VIRTIO_NO_VECTOR) {
+            msix_notify(&proxy->pci_dev, vector);
+        }
+    } else {
         VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
         pci_set_irq(&proxy->pci_dev, qatomic_read(&vdev->isr) & 1);
     }
@@ -175,6 +177,7 @@ static int virtio_pci_load_config(DeviceState *d, QEMUFile *f)
 {
     VirtIOPCIProxy *proxy = to_virtio_pci_proxy(d);
     VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
+    uint16_t vector;
 
     int ret;
     ret = pci_device_load(&proxy->pci_dev, f);
@@ -184,12 +187,17 @@ static int virtio_pci_load_config(DeviceState *d, QEMUFile *f)
     msix_unuse_all_vectors(&proxy->pci_dev);
     msix_load(&proxy->pci_dev, f);
     if (msix_present(&proxy->pci_dev)) {
-        qemu_get_be16s(f, &vdev->config_vector);
+        qemu_get_be16s(f, &vector);
+
+        if (vector != VIRTIO_NO_VECTOR && vector >= proxy->nvectors) {
+            return -EINVAL;
+        }
     } else {
-        vdev->config_vector = VIRTIO_NO_VECTOR;
+        vector = VIRTIO_NO_VECTOR;
     }
-    if (vdev->config_vector != VIRTIO_NO_VECTOR) {
-        return msix_vector_use(&proxy->pci_dev, vdev->config_vector);
+    vdev->config_vector = vector;
+    if (vector != VIRTIO_NO_VECTOR) {
+        msix_vector_use(&proxy->pci_dev, vector);
     }
     return 0;
 }
@@ -202,12 +210,15 @@ static int virtio_pci_load_queue(DeviceState *d, int n, QEMUFile *f)
     uint16_t vector;
     if (msix_present(&proxy->pci_dev)) {
         qemu_get_be16s(f, &vector);
+        if (vector != VIRTIO_NO_VECTOR && vector >= proxy->nvectors) {
+            return -EINVAL;
+        }
     } else {
         vector = VIRTIO_NO_VECTOR;
     }
     virtio_queue_set_vector(vdev, n, vector);
     if (vector != VIRTIO_NO_VECTOR) {
-        return msix_vector_use(&proxy->pci_dev, vector);
+        msix_vector_use(&proxy->pci_dev, vector);
     }
 
     return 0;
@@ -299,6 +310,7 @@ static void virtio_ioport_write(void *opaque, uint32_t addr, uint32_t val)
 {
     VirtIOPCIProxy *proxy = opaque;
     VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
+    uint16_t vector;
     hwaddr pa;
 
     switch (addr) {
@@ -352,18 +364,28 @@ static void virtio_ioport_write(void *opaque, uint32_t addr, uint32_t val)
         }
         break;
     case VIRTIO_MSI_CONFIG_VECTOR:
-        msix_vector_unuse(&proxy->pci_dev, vdev->config_vector);
+        if (vdev->config_vector != VIRTIO_NO_VECTOR) {
+            msix_vector_unuse(&proxy->pci_dev, vdev->config_vector);
+        }
         /* Make it possible for guest to discover an error took place. */
-        if (msix_vector_use(&proxy->pci_dev, val) < 0)
+        if (val < proxy->nvectors) {
+            msix_vector_use(&proxy->pci_dev, val);
+        } else {
             val = VIRTIO_NO_VECTOR;
+        }
         vdev->config_vector = val;
         break;
     case VIRTIO_MSI_QUEUE_VECTOR:
-        msix_vector_unuse(&proxy->pci_dev,
-                          virtio_queue_vector(vdev, vdev->queue_sel));
+        vector = virtio_queue_vector(vdev, vdev->queue_sel);
+        if (vector != VIRTIO_NO_VECTOR) {
+            msix_vector_unuse(&proxy->pci_dev, vector);
+        }
         /* Make it possible for guest to discover an error took place. */
-        if (msix_vector_use(&proxy->pci_dev, val) < 0)
+        if (val < proxy->nvectors) {
+            msix_vector_use(&proxy->pci_dev, val);
+        } else {
             val = VIRTIO_NO_VECTOR;
+        }
         virtio_queue_set_vector(vdev, vdev->queue_sel, val);
         break;
     default:
@@ -1266,6 +1288,7 @@ static void virtio_pci_common_write(void *opaque, hwaddr addr,
 {
     VirtIOPCIProxy *proxy = opaque;
     VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
+    uint16_t vector;
 
     if (vdev == NULL) {
         return;
@@ -1287,9 +1310,13 @@ static void virtio_pci_common_write(void *opaque, hwaddr addr,
         }
         break;
     case VIRTIO_PCI_COMMON_MSIX:
-        msix_vector_unuse(&proxy->pci_dev, vdev->config_vector);
+        if (vdev->config_vector != VIRTIO_NO_VECTOR) {
+            msix_vector_unuse(&proxy->pci_dev, vdev->config_vector);
+        }
         /* Make it possible for guest to discover an error took place. */
-        if (msix_vector_use(&proxy->pci_dev, val) < 0) {
+        if (val < proxy->nvectors) {
+            msix_vector_use(&proxy->pci_dev, val);
+        } else {
             val = VIRTIO_NO_VECTOR;
         }
         vdev->config_vector = val;
@@ -1321,10 +1348,14 @@ static void virtio_pci_common_write(void *opaque, hwaddr addr,
                              proxy->vqs[vdev->queue_sel].num);
         break;
     case VIRTIO_PCI_COMMON_Q_MSIX:
-        msix_vector_unuse(&proxy->pci_dev,
-                          virtio_queue_vector(vdev, vdev->queue_sel));
+        vector = virtio_queue_vector(vdev, vdev->queue_sel);
+        if (vector != VIRTIO_NO_VECTOR) {
+            msix_vector_unuse(&proxy->pci_dev, vector);
+        }
         /* Make it possible for guest to discover an error took place. */
-        if (msix_vector_use(&proxy->pci_dev, val) < 0) {
+        if (val < proxy->nvectors) {
+            msix_vector_use(&proxy->pci_dev, val);
+        } else {
             val = VIRTIO_NO_VECTOR;
         }
         virtio_queue_set_vector(vdev, vdev->queue_sel, val);
-- 
MST



  parent reply	other threads:[~2022-11-02 16:22 UTC|newest]

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

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=20221102160336.616599-66-mst@redhat.com \
    --to=mst@redhat.com \
    --cc=&lt@redhat.com \
    --cc=Akihiko@redhat.com \
    --cc=Odaki@redhat.com \
    --cc=akihiko.odaki@daynix.com \
    --cc=akihiko.odaki@gmail.com \
    --cc=dmitry.fleytman@gmail.com \
    --cc=elena.ufimtseva@oracle.com \
    --cc=its@irrelevant.dk \
    --cc=jag.raman@oracle.com \
    --cc=jasowang@redhat.com \
    --cc=jiri@resnulli.us \
    --cc=john.g.johnson@oracle.com \
    --cc=kbusch@kernel.org \
    --cc=marcel.apfelbaum@gmail.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=yuval.shaia.ml@gmail.com \
    /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.