All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stefano Garzarella <sgarzare@redhat.com>
To: virtualization@lists.linux-foundation.org
Cc: Stefan Hajnoczi <stefanha@redhat.com>,
	Laurent Vivier <lvivier@redhat.com>,
	linux-kernel@vger.kernel.org, Eli Cohen <elic@nvidia.com>,
	Jason Wang <jasowang@redhat.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Max Gurtovoy <mgurtovoy@nvidia.com>
Subject: [PATCH RFC 04/12] vdpa: add vdpa simulator for block device
Date: Fri, 13 Nov 2020 14:47:04 +0100	[thread overview]
Message-ID: <20201113134712.69744-5-sgarzare@redhat.com> (raw)
In-Reply-To: <20201113134712.69744-1-sgarzare@redhat.com>

From: Max Gurtovoy <mgurtovoy@nvidia.com>

This will allow running vDPA for virtio block protocol.

Signed-off-by: Max Gurtovoy <mgurtovoy@nvidia.com>
[sgarzare: various cleanups/fixes]
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
---
v1:
- Removed unused headers
- Used cpu_to_vdpasim*() to store config fields
- Replaced 'select VDPA_SIM' with 'depends on VDPA_SIM' since selected
  option can not depend on other [Jason]
- Start with a single queue for now [Jason]
- Add comments to memory barriers
---
 drivers/vdpa/vdpa_sim/vdpa_sim_blk.c | 124 +++++++++++++++++++++++++++
 drivers/vdpa/Kconfig                 |   9 ++
 drivers/vdpa/vdpa_sim/Makefile       |   1 +
 3 files changed, 134 insertions(+)
 create mode 100644 drivers/vdpa/vdpa_sim/vdpa_sim_blk.c

diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim_blk.c b/drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
new file mode 100644
index 000000000000..386dbb2f7138
--- /dev/null
+++ b/drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * VDPA simulator for block device.
+ *
+ * Copyright (c) 2020, Mellanox Technologies. All rights reserved.
+ *
+ */
+
+#include <linux/module.h>
+
+#include "vdpa_sim.h"
+
+#define VDPASIM_BLK_FEATURES	((1ULL << VIRTIO_BLK_F_SIZE_MAX) | \
+				 (1ULL << VIRTIO_BLK_F_SEG_MAX)  | \
+				 (1ULL << VIRTIO_BLK_F_BLK_SIZE) | \
+				 (1ULL << VIRTIO_BLK_F_TOPOLOGY) | \
+				 (1ULL << VIRTIO_BLK_F_MQ))
+
+#define VDPASIM_BLK_CAPACITY 0x40000
+#define VDPASIM_BLK_SIZE_MAX 0x1000
+#define VDPASIM_BLK_SEG_MAX 32
+#define VDPASIM_BLK_VQ_NUM 1
+
+static struct vdpasim *vdpasim_blk_dev;
+
+static void vdpasim_blk_work(struct work_struct *work)
+{
+	struct vdpasim *vdpasim = container_of(work, struct vdpasim, work);
+	u8 status = VIRTIO_BLK_S_OK;
+	int i;
+
+	spin_lock(&vdpasim->lock);
+
+	if (!(vdpasim->status & VIRTIO_CONFIG_S_DRIVER_OK))
+		goto out;
+
+	for (i = 0; i < VDPASIM_BLK_VQ_NUM; i++) {
+		struct vdpasim_virtqueue *vq = &vdpasim->vqs[i];
+
+		if (!vq->ready)
+			continue;
+
+		while (vringh_getdesc_iotlb(&vq->vring, &vq->iov, &vq->iov,
+					    &vq->head, GFP_ATOMIC) > 0) {
+
+			int write;
+
+			vq->iov.i = vq->iov.used - 1;
+			write = vringh_iov_push_iotlb(&vq->vring, &vq->iov, &status, 1);
+			if (write <= 0)
+				break;
+
+			/* Make sure data is wrote before advancing index */
+			smp_wmb();
+
+			vringh_complete_iotlb(&vq->vring, vq->head, write);
+
+			/* Make sure used is visible before rasing the interrupt. */
+			smp_wmb();
+
+			if (vringh_need_notify_iotlb(&vq->vring) > 0)
+				vringh_notify(&vq->vring);
+
+			local_bh_disable();
+			if (vq->cb)
+				vq->cb(vq->private);
+			local_bh_enable();
+		}
+	}
+out:
+	spin_unlock(&vdpasim->lock);
+
+}
+
+static int __init vdpasim_blk_init(void)
+{
+	struct vdpasim_init_attr attr = {};
+	struct virtio_blk_config *config;
+	int ret;
+
+	attr.device_id = VIRTIO_ID_BLOCK;
+	attr.features = VDPASIM_FEATURES | VDPASIM_BLK_FEATURES;
+	attr.work_fn = vdpasim_blk_work;
+	vdpasim_blk_dev = vdpasim_create(&attr);
+	if (IS_ERR(vdpasim_blk_dev)) {
+		ret = PTR_ERR(vdpasim_blk_dev);
+		goto out;
+	}
+
+	config = (struct virtio_blk_config *)vdpasim_blk_dev->config;
+	config->capacity = cpu_to_vdpasim64(vdpasim_blk_dev, VDPASIM_BLK_CAPACITY);
+	config->size_max = cpu_to_vdpasim32(vdpasim_blk_dev, VDPASIM_BLK_SIZE_MAX);
+	config->seg_max = cpu_to_vdpasim32(vdpasim_blk_dev, VDPASIM_BLK_SEG_MAX);
+	config->num_queues = cpu_to_vdpasim16(vdpasim_blk_dev, VDPASIM_BLK_VQ_NUM);
+	config->min_io_size = cpu_to_vdpasim16(vdpasim_blk_dev, 1);
+	config->opt_io_size = cpu_to_vdpasim32(vdpasim_blk_dev, 1);
+	config->blk_size = cpu_to_vdpasim32(vdpasim_blk_dev, 512);
+
+	ret = vdpa_register_device(&vdpasim_blk_dev->vdpa);
+	if (ret)
+		goto put_dev;
+
+	return 0;
+
+put_dev:
+	put_device(&vdpasim_blk_dev->vdpa.dev);
+out:
+	return ret;
+}
+
+static void __exit vdpasim_blk_exit(void)
+{
+	struct vdpa_device *vdpa = &vdpasim_blk_dev->vdpa;
+
+	vdpa_unregister_device(vdpa);
+}
+
+module_init(vdpasim_blk_init)
+module_exit(vdpasim_blk_exit)
+
+MODULE_VERSION(DRV_VERSION);
+MODULE_LICENSE(DRV_LICENSE);
+MODULE_AUTHOR("Max Gurtovoy <mgurtovoy@nvidia.com>");
+MODULE_DESCRIPTION("vDPA Device Simulator for block device");
diff --git a/drivers/vdpa/Kconfig b/drivers/vdpa/Kconfig
index fdb1a9267347..0fb63362cd5d 100644
--- a/drivers/vdpa/Kconfig
+++ b/drivers/vdpa/Kconfig
@@ -24,6 +24,15 @@ config VDPA_SIM_NET
 	  to RX. This device is used for testing, prototyping and
 	  development of vDPA.
 
+config VDPA_SIM_BLOCK
+	tristate "vDPA simulator for block device"
+	depends on VDPA_SIM
+	default n
+	help
+	  vDPA block device simulator which terminates IO request in a
+	  memory buffer. This device is used for testing, prototyping and
+	  development of vDPA.
+
 config IFCVF
 	tristate "Intel IFC VF vDPA driver"
 	depends on PCI_MSI
diff --git a/drivers/vdpa/vdpa_sim/Makefile b/drivers/vdpa/vdpa_sim/Makefile
index 79d4536d347e..d458103302f2 100644
--- a/drivers/vdpa/vdpa_sim/Makefile
+++ b/drivers/vdpa/vdpa_sim/Makefile
@@ -1,3 +1,4 @@
 # SPDX-License-Identifier: GPL-2.0
 obj-$(CONFIG_VDPA_SIM) += vdpa_sim.o
 obj-$(CONFIG_VDPA_SIM_NET) += vdpa_sim_net.o
+obj-$(CONFIG_VDPA_SIM_BLOCK) += vdpa_sim_blk.o
-- 
2.26.2


WARNING: multiple messages have this Message-ID (diff)
From: Stefano Garzarella <sgarzare@redhat.com>
To: virtualization@lists.linux-foundation.org
Cc: Laurent Vivier <lvivier@redhat.com>,
	Max Gurtovoy <mgurtovoy@nvidia.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	linux-kernel@vger.kernel.org,
	Stefan Hajnoczi <stefanha@redhat.com>,
	Eli Cohen <elic@nvidia.com>
Subject: [PATCH RFC 04/12] vdpa: add vdpa simulator for block device
Date: Fri, 13 Nov 2020 14:47:04 +0100	[thread overview]
Message-ID: <20201113134712.69744-5-sgarzare@redhat.com> (raw)
In-Reply-To: <20201113134712.69744-1-sgarzare@redhat.com>

From: Max Gurtovoy <mgurtovoy@nvidia.com>

This will allow running vDPA for virtio block protocol.

Signed-off-by: Max Gurtovoy <mgurtovoy@nvidia.com>
[sgarzare: various cleanups/fixes]
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
---
v1:
- Removed unused headers
- Used cpu_to_vdpasim*() to store config fields
- Replaced 'select VDPA_SIM' with 'depends on VDPA_SIM' since selected
  option can not depend on other [Jason]
- Start with a single queue for now [Jason]
- Add comments to memory barriers
---
 drivers/vdpa/vdpa_sim/vdpa_sim_blk.c | 124 +++++++++++++++++++++++++++
 drivers/vdpa/Kconfig                 |   9 ++
 drivers/vdpa/vdpa_sim/Makefile       |   1 +
 3 files changed, 134 insertions(+)
 create mode 100644 drivers/vdpa/vdpa_sim/vdpa_sim_blk.c

diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim_blk.c b/drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
new file mode 100644
index 000000000000..386dbb2f7138
--- /dev/null
+++ b/drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * VDPA simulator for block device.
+ *
+ * Copyright (c) 2020, Mellanox Technologies. All rights reserved.
+ *
+ */
+
+#include <linux/module.h>
+
+#include "vdpa_sim.h"
+
+#define VDPASIM_BLK_FEATURES	((1ULL << VIRTIO_BLK_F_SIZE_MAX) | \
+				 (1ULL << VIRTIO_BLK_F_SEG_MAX)  | \
+				 (1ULL << VIRTIO_BLK_F_BLK_SIZE) | \
+				 (1ULL << VIRTIO_BLK_F_TOPOLOGY) | \
+				 (1ULL << VIRTIO_BLK_F_MQ))
+
+#define VDPASIM_BLK_CAPACITY 0x40000
+#define VDPASIM_BLK_SIZE_MAX 0x1000
+#define VDPASIM_BLK_SEG_MAX 32
+#define VDPASIM_BLK_VQ_NUM 1
+
+static struct vdpasim *vdpasim_blk_dev;
+
+static void vdpasim_blk_work(struct work_struct *work)
+{
+	struct vdpasim *vdpasim = container_of(work, struct vdpasim, work);
+	u8 status = VIRTIO_BLK_S_OK;
+	int i;
+
+	spin_lock(&vdpasim->lock);
+
+	if (!(vdpasim->status & VIRTIO_CONFIG_S_DRIVER_OK))
+		goto out;
+
+	for (i = 0; i < VDPASIM_BLK_VQ_NUM; i++) {
+		struct vdpasim_virtqueue *vq = &vdpasim->vqs[i];
+
+		if (!vq->ready)
+			continue;
+
+		while (vringh_getdesc_iotlb(&vq->vring, &vq->iov, &vq->iov,
+					    &vq->head, GFP_ATOMIC) > 0) {
+
+			int write;
+
+			vq->iov.i = vq->iov.used - 1;
+			write = vringh_iov_push_iotlb(&vq->vring, &vq->iov, &status, 1);
+			if (write <= 0)
+				break;
+
+			/* Make sure data is wrote before advancing index */
+			smp_wmb();
+
+			vringh_complete_iotlb(&vq->vring, vq->head, write);
+
+			/* Make sure used is visible before rasing the interrupt. */
+			smp_wmb();
+
+			if (vringh_need_notify_iotlb(&vq->vring) > 0)
+				vringh_notify(&vq->vring);
+
+			local_bh_disable();
+			if (vq->cb)
+				vq->cb(vq->private);
+			local_bh_enable();
+		}
+	}
+out:
+	spin_unlock(&vdpasim->lock);
+
+}
+
+static int __init vdpasim_blk_init(void)
+{
+	struct vdpasim_init_attr attr = {};
+	struct virtio_blk_config *config;
+	int ret;
+
+	attr.device_id = VIRTIO_ID_BLOCK;
+	attr.features = VDPASIM_FEATURES | VDPASIM_BLK_FEATURES;
+	attr.work_fn = vdpasim_blk_work;
+	vdpasim_blk_dev = vdpasim_create(&attr);
+	if (IS_ERR(vdpasim_blk_dev)) {
+		ret = PTR_ERR(vdpasim_blk_dev);
+		goto out;
+	}
+
+	config = (struct virtio_blk_config *)vdpasim_blk_dev->config;
+	config->capacity = cpu_to_vdpasim64(vdpasim_blk_dev, VDPASIM_BLK_CAPACITY);
+	config->size_max = cpu_to_vdpasim32(vdpasim_blk_dev, VDPASIM_BLK_SIZE_MAX);
+	config->seg_max = cpu_to_vdpasim32(vdpasim_blk_dev, VDPASIM_BLK_SEG_MAX);
+	config->num_queues = cpu_to_vdpasim16(vdpasim_blk_dev, VDPASIM_BLK_VQ_NUM);
+	config->min_io_size = cpu_to_vdpasim16(vdpasim_blk_dev, 1);
+	config->opt_io_size = cpu_to_vdpasim32(vdpasim_blk_dev, 1);
+	config->blk_size = cpu_to_vdpasim32(vdpasim_blk_dev, 512);
+
+	ret = vdpa_register_device(&vdpasim_blk_dev->vdpa);
+	if (ret)
+		goto put_dev;
+
+	return 0;
+
+put_dev:
+	put_device(&vdpasim_blk_dev->vdpa.dev);
+out:
+	return ret;
+}
+
+static void __exit vdpasim_blk_exit(void)
+{
+	struct vdpa_device *vdpa = &vdpasim_blk_dev->vdpa;
+
+	vdpa_unregister_device(vdpa);
+}
+
+module_init(vdpasim_blk_init)
+module_exit(vdpasim_blk_exit)
+
+MODULE_VERSION(DRV_VERSION);
+MODULE_LICENSE(DRV_LICENSE);
+MODULE_AUTHOR("Max Gurtovoy <mgurtovoy@nvidia.com>");
+MODULE_DESCRIPTION("vDPA Device Simulator for block device");
diff --git a/drivers/vdpa/Kconfig b/drivers/vdpa/Kconfig
index fdb1a9267347..0fb63362cd5d 100644
--- a/drivers/vdpa/Kconfig
+++ b/drivers/vdpa/Kconfig
@@ -24,6 +24,15 @@ config VDPA_SIM_NET
 	  to RX. This device is used for testing, prototyping and
 	  development of vDPA.
 
+config VDPA_SIM_BLOCK
+	tristate "vDPA simulator for block device"
+	depends on VDPA_SIM
+	default n
+	help
+	  vDPA block device simulator which terminates IO request in a
+	  memory buffer. This device is used for testing, prototyping and
+	  development of vDPA.
+
 config IFCVF
 	tristate "Intel IFC VF vDPA driver"
 	depends on PCI_MSI
diff --git a/drivers/vdpa/vdpa_sim/Makefile b/drivers/vdpa/vdpa_sim/Makefile
index 79d4536d347e..d458103302f2 100644
--- a/drivers/vdpa/vdpa_sim/Makefile
+++ b/drivers/vdpa/vdpa_sim/Makefile
@@ -1,3 +1,4 @@
 # SPDX-License-Identifier: GPL-2.0
 obj-$(CONFIG_VDPA_SIM) += vdpa_sim.o
 obj-$(CONFIG_VDPA_SIM_NET) += vdpa_sim_net.o
+obj-$(CONFIG_VDPA_SIM_BLOCK) += vdpa_sim_blk.o
-- 
2.26.2

_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization

  parent reply	other threads:[~2020-11-13 13:48 UTC|newest]

Thread overview: 131+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-13 13:47 [PATCH RFC 00/12] vdpa: generalize vdpa simulator and add block device Stefano Garzarella
2020-11-13 13:47 ` Stefano Garzarella
2020-11-13 13:47 ` [PATCH RFC 01/12] vhost-vdpa: add support for vDPA blk devices Stefano Garzarella
2020-11-13 13:47   ` Stefano Garzarella
2020-11-17 10:57   ` Stefan Hajnoczi
2020-11-17 10:57     ` Stefan Hajnoczi
2020-11-17 15:05     ` Stefano Garzarella
2020-11-17 15:05       ` Stefano Garzarella
2020-11-13 13:47 ` [PATCH RFC 02/12] vdpa: split vdpasim to core and net modules Stefano Garzarella
2020-11-13 13:47   ` Stefano Garzarella
2020-11-13 18:32   ` kernel test robot
2020-11-16  4:00   ` Jason Wang
2020-11-16  4:00     ` Jason Wang
2020-11-16  9:39     ` Stefano Garzarella
2020-11-16  9:39       ` Stefano Garzarella
2020-11-18 13:14     ` Stefano Garzarella
2020-11-18 13:14       ` Stefano Garzarella
2020-11-19  6:16       ` Jason Wang
2020-11-19  6:16         ` Jason Wang
2020-11-16  9:06   ` Dan Carpenter
2020-11-16  9:06     ` Dan Carpenter
2020-11-16  9:12     ` Stefano Garzarella
2020-11-16 10:47       ` Dan Carpenter
2020-11-16 10:47         ` Dan Carpenter
2020-11-16 11:16         ` Stefano Garzarella
2020-11-16 11:58           ` Dan Carpenter
2020-11-16 11:58             ` Dan Carpenter
2020-11-16 12:41             ` Stefano Garzarella
2020-11-16 12:54               ` Dan Carpenter
2020-11-16 12:54                 ` Dan Carpenter
2020-11-13 13:47 ` [PATCH RFC 03/12] vdpa_sim: remove hard-coded virtq count Stefano Garzarella
2020-11-13 13:47   ` Stefano Garzarella
2020-11-16  4:02   ` Jason Wang
2020-11-16  4:02     ` Jason Wang
2020-11-13 13:47 ` Stefano Garzarella [this message]
2020-11-13 13:47   ` [PATCH RFC 04/12] vdpa: add vdpa simulator for block device Stefano Garzarella
2020-11-16  4:10   ` Jason Wang
2020-11-16  4:10     ` Jason Wang
2020-11-16 10:17     ` Stefano Garzarella
2020-11-16 10:17       ` Stefano Garzarella
2020-11-17 11:11   ` Stefan Hajnoczi
2020-11-17 11:11     ` Stefan Hajnoczi
2020-11-17 14:16     ` Stefano Garzarella
2020-11-17 14:16       ` Stefano Garzarella
2020-11-17 16:43       ` Stefan Hajnoczi
2020-11-17 16:43         ` Stefan Hajnoczi
2020-11-17 17:38         ` Stefano Garzarella
2020-11-17 17:38           ` Stefano Garzarella
2020-11-18 11:23           ` Stefan Hajnoczi
2020-11-18 11:23             ` Stefan Hajnoczi
2020-11-18 11:39             ` Stefano Garzarella
2020-11-18 11:39               ` Stefano Garzarella
2020-11-13 13:47 ` [PATCH RFC 05/12] vdpa_sim: remove the limit of IOTLB entries Stefano Garzarella
2020-11-13 13:47   ` Stefano Garzarella
2020-11-16  4:12   ` Jason Wang
2020-11-16  4:12     ` Jason Wang
2020-11-16 10:22     ` Stefano Garzarella
2020-11-16 10:22       ` Stefano Garzarella
2020-11-13 13:47 ` [PATCH RFC 06/12] vdpa_sim: add struct vdpasim_device to store device properties Stefano Garzarella
2020-11-13 13:47   ` Stefano Garzarella
2020-11-16  4:14   ` Jason Wang
2020-11-16  4:14     ` Jason Wang
2020-11-16 10:30     ` Stefano Garzarella
2020-11-16 10:30       ` Stefano Garzarella
2020-11-17 11:23   ` Stefan Hajnoczi
2020-11-17 11:23     ` Stefan Hajnoczi
2020-11-17 14:24     ` Stefano Garzarella
2020-11-17 14:24       ` Stefano Garzarella
2020-11-13 13:47 ` [PATCH RFC 07/12] vdpa_sim: move config management outside of the core Stefano Garzarella
2020-11-13 13:47   ` Stefano Garzarella
2020-11-16  4:18   ` Jason Wang
2020-11-16  4:18     ` Jason Wang
2020-11-16 10:42     ` Stefano Garzarella
2020-11-16 10:42       ` Stefano Garzarella
2020-11-13 13:47 ` [PATCH RFC 08/12] vdpa_sim: use kvmalloc to allocate vdpasim->buffer Stefano Garzarella
2020-11-13 13:47   ` Stefano Garzarella
2020-11-16  4:19   ` Jason Wang
2020-11-16  4:19     ` Jason Wang
2020-11-13 13:47 ` [PATCH RFC 09/12] vdpa_sim: make vdpasim->buffer size configurable Stefano Garzarella
2020-11-13 13:47   ` Stefano Garzarella
2020-11-16  4:19   ` Jason Wang
2020-11-16  4:19     ` Jason Wang
2020-11-13 13:47 ` [PATCH RFC 10/12] vdpa_sim: split vdpasim_virtqueue's iov field in riov and wiov Stefano Garzarella
2020-11-13 13:47   ` Stefano Garzarella
2020-11-16  4:21   ` Jason Wang
2020-11-16  4:21     ` Jason Wang
2020-11-17 11:27   ` Stefan Hajnoczi
2020-11-17 11:27     ` Stefan Hajnoczi
2020-11-20 14:41     ` Stefano Garzarella
2020-11-20 14:41       ` Stefano Garzarella
2020-11-13 13:47 ` [PATCH RFC 11/12] vringh: allow vringh_iov_xfer() to skip bytes when ptr is NULL Stefano Garzarella
2020-11-13 13:47   ` Stefano Garzarella
2020-11-16  4:32   ` Jason Wang
2020-11-16  4:32     ` Jason Wang
2020-11-16 11:48     ` Stefano Garzarella
2020-11-16 11:48       ` Stefano Garzarella
2020-11-13 13:47 ` [PATCH RFC 12/12] vdpa_sim_blk: implement ramdisk behaviour Stefano Garzarella
2020-11-13 13:47   ` Stefano Garzarella
2020-11-13 15:15   ` kernel test robot
2020-11-16  5:25   ` Jason Wang
2020-11-16  5:25     ` Jason Wang
2020-11-16 11:08     ` Stefano Garzarella
2020-11-16 11:08       ` Stefano Garzarella
2020-11-16  9:50   ` Michael S. Tsirkin
2020-11-16  9:50     ` Michael S. Tsirkin
2020-11-16 11:23     ` Stefano Garzarella
2020-11-16 11:23       ` Stefano Garzarella
2020-11-17 11:36   ` Stefan Hajnoczi
2020-11-17 11:36     ` Stefan Hajnoczi
2020-11-17 14:32     ` Stefano Garzarella
2020-11-17 14:32       ` Stefano Garzarella
2020-11-16  3:37 ` [PATCH RFC 00/12] vdpa: generalize vdpa simulator and add block device Jason Wang
2020-11-16  3:37   ` Jason Wang
2020-11-16  8:53   ` Stefano Garzarella
2020-11-16  8:53     ` Stefano Garzarella
2020-12-18 11:38   ` Stefano Garzarella
2020-12-18 11:38     ` Stefano Garzarella
2020-12-21  3:16     ` Jason Wang
2020-12-21  3:16       ` Jason Wang
2020-12-21 11:14       ` Stefano Garzarella
2020-12-21 11:14         ` Stefano Garzarella
2020-12-22  2:44         ` Jason Wang
2020-12-22  2:44           ` Jason Wang
2020-12-22 10:57           ` Stefano Garzarella
2020-12-22 10:57             ` Stefano Garzarella
2020-12-22 12:29             ` Jason Wang
2020-12-22 12:29               ` Jason Wang
2020-12-22 12:56               ` Jason Wang
2020-12-22 12:56                 ` Jason Wang
2020-12-22 13:23               ` Stefano Garzarella
2020-12-22 13:23                 ` Stefano Garzarella

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=20201113134712.69744-5-sgarzare@redhat.com \
    --to=sgarzare@redhat.com \
    --cc=elic@nvidia.com \
    --cc=jasowang@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lvivier@redhat.com \
    --cc=mgurtovoy@nvidia.com \
    --cc=mst@redhat.com \
    --cc=stefanha@redhat.com \
    --cc=virtualization@lists.linux-foundation.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.