On Wed, Apr 06, 2022 at 03:04:32PM +0200, Cornelia Huck wrote:
On Wed, Apr 06 2022, "Michael S. Tsirkin" <mst@xxxxxxxxxx> wrote:No, any handlers at all. The point is to make sure any memory changes
On Wed, Apr 06, 2022 at 04:35:37PM +0800, Jason Wang wrote:I'm not sure what (if anything) can/should be done for ccw...
This patch implements PCI version of synchronize_vqs().Please add implementations at least for ccw and mmio.
Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
Cc: "Paul E. McKenney" <paulmck@xxxxxxxxxx>
Cc: Marc Zyngier <maz@xxxxxxxxxx>
Signed-off-by: Jason Wang <jasowang@xxxxxxxxxx>
...given that this seems to synchronize threaded interrupt handlers?---
drivers/virtio/virtio_pci_common.c | 14 ++++++++++++++
drivers/virtio/virtio_pci_common.h | 2 ++
drivers/virtio/virtio_pci_legacy.c | 1 +
drivers/virtio/virtio_pci_modern.c | 2 ++
4 files changed, 19 insertions(+)
diff --git a/drivers/virtio/virtio_pci_common.c b/drivers/virtio/virtio_pci_common.c
index d724f676608b..b78c8bc93a97 100644
--- a/drivers/virtio/virtio_pci_common.c
+++ b/drivers/virtio/virtio_pci_common.c
@@ -37,6 +37,20 @@ void vp_synchronize_vectors(struct virtio_device *vdev)
synchronize_irq(pci_irq_vector(vp_dev->pci_dev, i));
}
+void vp_synchronize_vqs(struct virtio_device *vdev)
+{
+ struct virtio_pci_device *vp_dev = to_vp_device(vdev);
+ int i;
+
+ if (vp_dev->intx_enabled) {
+ synchronize_irq(vp_dev->pci_dev->irq);
+ return;
+ }
+
+ for (i = 0; i < vp_dev->msix_vectors; ++i)
+ synchronize_irq(pci_irq_vector(vp_dev->pci_dev, i));
+}
+
made prior to this op are visible to callbacks.
Jason, maybe add that to the documentation?
Halil, do you think ccw needs to do anything? (AFAICS, we only have oneThen you need to synchronize with that.
'irq' for channel devices anyway, and the handler just calls the
relevant callbacks directly.)
/* the notify function used when creating a virt queue */
bool vp_notify(struct virtqueue *vq)
{