virtualization.lists.linux-foundation.org archive mirror
 help / color / mirror / Atom feed
* [PATCH V2 0/3] vDPA/ifcvf: enable virtio-net on Intel F2000X-PL
@ 2023-06-12 15:14 Zhu Lingshan
  2023-06-12 15:14 ` [PATCH V2 1/3] vDPA/ifcvf: dynamic allocate vq data stores Zhu Lingshan
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Zhu Lingshan @ 2023-06-12 15:14 UTC (permalink / raw)
  To: mst, jasowang; +Cc: virtualization

Hi

This series enables vDPA/ifcvf support for virtio-net devices
on Intel F2000X-PL Infrastructure Processing Unit.

This series is rebased on MST's vhost tree, linux-next branch

Please help review

Thanks!

Changes from V1:
1)Rebased on MST's tree
2)Remove IFCVF_MAX_QUEUES and other minor improvements

Zhu Lingshan (3):
  vDPA/ifcvf: dynamic allocate vq data stores
  vDPA/ifcvf: detect and report max allowed vq size
  vDPA/ifcvf: implement new accessors for vq_state

 drivers/vdpa/ifcvf/ifcvf_base.c | 55 +++++++++++++++++++++++----------
 drivers/vdpa/ifcvf/ifcvf_base.h | 29 +++++++----------
 drivers/vdpa/ifcvf/ifcvf_main.c | 10 ++++--
 3 files changed, 58 insertions(+), 36 deletions(-)

-- 
2.39.1

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

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH V2 1/3] vDPA/ifcvf: dynamic allocate vq data stores
  2023-06-12 15:14 [PATCH V2 0/3] vDPA/ifcvf: enable virtio-net on Intel F2000X-PL Zhu Lingshan
@ 2023-06-12 15:14 ` Zhu Lingshan
  2023-06-26  2:32   ` Jason Wang
  2023-06-12 15:14 ` [PATCH V2 2/3] vDPA/ifcvf: detect and report max allowed vq size Zhu Lingshan
  2023-06-12 15:14 ` [PATCH V2 3/3] vDPA/ifcvf: implement new accessors for vq_state Zhu Lingshan
  2 siblings, 1 reply; 10+ messages in thread
From: Zhu Lingshan @ 2023-06-12 15:14 UTC (permalink / raw)
  To: mst, jasowang; +Cc: virtualization

This commit dynamically allocates the data
stores for the virtqueues based on
virtio_pci_common_cfg.num_queues.

Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com>
---
 drivers/vdpa/ifcvf/ifcvf_base.c | 3 +++
 drivers/vdpa/ifcvf/ifcvf_base.h | 2 +-
 drivers/vdpa/ifcvf/ifcvf_main.c | 2 ++
 3 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/vdpa/ifcvf/ifcvf_base.c b/drivers/vdpa/ifcvf/ifcvf_base.c
index 1b5da11f5403..f86495ace825 100644
--- a/drivers/vdpa/ifcvf/ifcvf_base.c
+++ b/drivers/vdpa/ifcvf/ifcvf_base.c
@@ -134,6 +134,9 @@ int ifcvf_init_hw(struct ifcvf_hw *hw, struct pci_dev *pdev)
 	}
 
 	hw->nr_vring = vp_ioread16(&hw->common_cfg->num_queues);
+	hw->vring = kzalloc(sizeof(struct vring_info) * hw->nr_vring, GFP_KERNEL);
+	if (!hw->vring)
+		return -ENOMEM;
 
 	for (i = 0; i < hw->nr_vring; i++) {
 		vp_iowrite16(i, &hw->common_cfg->queue_select);
diff --git a/drivers/vdpa/ifcvf/ifcvf_base.h b/drivers/vdpa/ifcvf/ifcvf_base.h
index 3110ffc50caf..fa797184056b 100644
--- a/drivers/vdpa/ifcvf/ifcvf_base.h
+++ b/drivers/vdpa/ifcvf/ifcvf_base.h
@@ -74,7 +74,7 @@ struct ifcvf_hw {
 	u64 dev_features;
 	struct virtio_pci_common_cfg __iomem *common_cfg;
 	void __iomem *dev_cfg;
-	struct vring_info vring[IFCVF_MAX_QUEUES];
+	struct vring_info *vring;
 	void __iomem * const *base;
 	char config_msix_name[256];
 	struct vdpa_callback config_cb;
diff --git a/drivers/vdpa/ifcvf/ifcvf_main.c b/drivers/vdpa/ifcvf/ifcvf_main.c
index 6e47ac2c669a..2af0de771b49 100644
--- a/drivers/vdpa/ifcvf/ifcvf_main.c
+++ b/drivers/vdpa/ifcvf/ifcvf_main.c
@@ -830,6 +830,7 @@ static int ifcvf_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 	return 0;
 
 err:
+	kfree(ifcvf_mgmt_dev->vf.vring);
 	kfree(ifcvf_mgmt_dev);
 	return ret;
 }
@@ -840,6 +841,7 @@ static void ifcvf_remove(struct pci_dev *pdev)
 
 	ifcvf_mgmt_dev = pci_get_drvdata(pdev);
 	vdpa_mgmtdev_unregister(&ifcvf_mgmt_dev->mdev);
+	kfree(ifcvf_mgmt_dev->vf.vring);
 	kfree(ifcvf_mgmt_dev);
 }
 
-- 
2.39.1

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

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH V2 2/3] vDPA/ifcvf: detect and report max allowed vq size
  2023-06-12 15:14 [PATCH V2 0/3] vDPA/ifcvf: enable virtio-net on Intel F2000X-PL Zhu Lingshan
  2023-06-12 15:14 ` [PATCH V2 1/3] vDPA/ifcvf: dynamic allocate vq data stores Zhu Lingshan
@ 2023-06-12 15:14 ` Zhu Lingshan
  2023-06-26  2:33   ` Jason Wang
  2023-06-12 15:14 ` [PATCH V2 3/3] vDPA/ifcvf: implement new accessors for vq_state Zhu Lingshan
  2 siblings, 1 reply; 10+ messages in thread
From: Zhu Lingshan @ 2023-06-12 15:14 UTC (permalink / raw)
  To: mst, jasowang; +Cc: virtualization

Rather than a hardcode, this commit detects
and reports the max value of allowed size
of the virtqueues

Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com>
---
 drivers/vdpa/ifcvf/ifcvf_base.c | 31 +++++++++++++++++++++++++++++++
 drivers/vdpa/ifcvf/ifcvf_base.h |  2 +-
 drivers/vdpa/ifcvf/ifcvf_main.c |  4 +++-
 3 files changed, 35 insertions(+), 2 deletions(-)

diff --git a/drivers/vdpa/ifcvf/ifcvf_base.c b/drivers/vdpa/ifcvf/ifcvf_base.c
index f86495ace825..f4d7d96c4c86 100644
--- a/drivers/vdpa/ifcvf/ifcvf_base.c
+++ b/drivers/vdpa/ifcvf/ifcvf_base.c
@@ -69,6 +69,37 @@ static int ifcvf_read_config_range(struct pci_dev *dev,
 	return 0;
 }
 
+static u16 ifcvf_get_vq_size(struct ifcvf_hw *hw, u16 qid)
+{
+	u16 queue_size;
+
+	vp_iowrite16(qid, &hw->common_cfg->queue_select);
+	queue_size = vp_ioread16(&hw->common_cfg->queue_size);
+
+	return queue_size;
+}
+
+/* This function returns the max allowed safe size for
+ * all virtqueues. It is the minimal size that can be
+ * suppprted by all virtqueues.
+ */
+u16 ifcvf_get_max_vq_size(struct ifcvf_hw *hw)
+{
+	u16 queue_size, max_size, qid;
+
+	max_size = ifcvf_get_vq_size(hw, 0);
+	for (qid = 1; qid < hw->nr_vring; qid++) {
+		queue_size = ifcvf_get_vq_size(hw, qid);
+		/* 0 means the queue is unavailable */
+		if (!queue_size)
+			continue;
+
+		max_size = min(queue_size, max_size);
+	}
+
+	return max_size;
+}
+
 int ifcvf_init_hw(struct ifcvf_hw *hw, struct pci_dev *pdev)
 {
 	struct virtio_pci_cap cap;
diff --git a/drivers/vdpa/ifcvf/ifcvf_base.h b/drivers/vdpa/ifcvf/ifcvf_base.h
index fa797184056b..30935a95b672 100644
--- a/drivers/vdpa/ifcvf/ifcvf_base.h
+++ b/drivers/vdpa/ifcvf/ifcvf_base.h
@@ -28,7 +28,6 @@
 #define IFCVF_MAX_QUEUES	17
 
 #define IFCVF_QUEUE_ALIGNMENT	PAGE_SIZE
-#define IFCVF_QUEUE_MAX		32768
 #define IFCVF_PCI_MAX_RESOURCE	6
 
 #define IFCVF_LM_CFG_SIZE		0x40
@@ -138,4 +137,5 @@ bool ifcvf_get_vq_ready(struct ifcvf_hw *hw, u16 qid);
 void ifcvf_set_vq_ready(struct ifcvf_hw *hw, u16 qid, bool ready);
 void ifcvf_set_driver_features(struct ifcvf_hw *hw, u64 features);
 u64 ifcvf_get_driver_features(struct ifcvf_hw *hw);
+u16 ifcvf_get_max_vq_size(struct ifcvf_hw *hw);
 #endif /* _IFCVF_H_ */
diff --git a/drivers/vdpa/ifcvf/ifcvf_main.c b/drivers/vdpa/ifcvf/ifcvf_main.c
index 2af0de771b49..c3ece395caf7 100644
--- a/drivers/vdpa/ifcvf/ifcvf_main.c
+++ b/drivers/vdpa/ifcvf/ifcvf_main.c
@@ -451,7 +451,9 @@ static int ifcvf_vdpa_reset(struct vdpa_device *vdpa_dev)
 
 static u16 ifcvf_vdpa_get_vq_num_max(struct vdpa_device *vdpa_dev)
 {
-	return IFCVF_QUEUE_MAX;
+	struct ifcvf_hw *vf = vdpa_to_vf(vdpa_dev);
+
+	return ifcvf_get_max_vq_size(vf);
 }
 
 static int ifcvf_vdpa_get_vq_state(struct vdpa_device *vdpa_dev, u16 qid,
-- 
2.39.1

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

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH V2 3/3] vDPA/ifcvf: implement new accessors for vq_state
  2023-06-12 15:14 [PATCH V2 0/3] vDPA/ifcvf: enable virtio-net on Intel F2000X-PL Zhu Lingshan
  2023-06-12 15:14 ` [PATCH V2 1/3] vDPA/ifcvf: dynamic allocate vq data stores Zhu Lingshan
  2023-06-12 15:14 ` [PATCH V2 2/3] vDPA/ifcvf: detect and report max allowed vq size Zhu Lingshan
@ 2023-06-12 15:14 ` Zhu Lingshan
  2023-06-26  2:48   ` Jason Wang
  2 siblings, 1 reply; 10+ messages in thread
From: Zhu Lingshan @ 2023-06-12 15:14 UTC (permalink / raw)
  To: mst, jasowang; +Cc: virtualization

This commit implements a better layout of the
live migration bar, therefore the accessors for virtqueue
state have been refactored.

This commit also add a comment to the probing-ids list,
indicating this driver drives F2000X-PL virtio-net

Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com>
---
 drivers/vdpa/ifcvf/ifcvf_base.c | 21 +++++----------------
 drivers/vdpa/ifcvf/ifcvf_base.h | 25 +++++++++----------------
 drivers/vdpa/ifcvf/ifcvf_main.c |  4 +++-
 3 files changed, 17 insertions(+), 33 deletions(-)

diff --git a/drivers/vdpa/ifcvf/ifcvf_base.c b/drivers/vdpa/ifcvf/ifcvf_base.c
index f4d7d96c4c86..060f837a4f9f 100644
--- a/drivers/vdpa/ifcvf/ifcvf_base.c
+++ b/drivers/vdpa/ifcvf/ifcvf_base.c
@@ -328,30 +328,19 @@ void ifcvf_set_driver_features(struct ifcvf_hw *hw, u64 features)
 
 u16 ifcvf_get_vq_state(struct ifcvf_hw *hw, u16 qid)
 {
-	struct ifcvf_lm_cfg __iomem *ifcvf_lm;
-	void __iomem *avail_idx_addr;
+	struct ifcvf_lm_cfg  __iomem *lm_cfg = hw->lm_cfg;
 	u16 last_avail_idx;
-	u32 q_pair_id;
 
-	ifcvf_lm = (struct ifcvf_lm_cfg __iomem *)hw->lm_cfg;
-	q_pair_id = qid / 2;
-	avail_idx_addr = &ifcvf_lm->vring_lm_cfg[q_pair_id].idx_addr[qid % 2];
-	last_avail_idx = vp_ioread16(avail_idx_addr);
+	last_avail_idx = vp_ioread16(&lm_cfg->vq_state_region + qid * 2);
 
 	return last_avail_idx;
 }
 
 int ifcvf_set_vq_state(struct ifcvf_hw *hw, u16 qid, u16 num)
 {
-	struct ifcvf_lm_cfg __iomem *ifcvf_lm;
-	void __iomem *avail_idx_addr;
-	u32 q_pair_id;
-
-	ifcvf_lm = (struct ifcvf_lm_cfg __iomem *)hw->lm_cfg;
-	q_pair_id = qid / 2;
-	avail_idx_addr = &ifcvf_lm->vring_lm_cfg[q_pair_id].idx_addr[qid % 2];
-	hw->vring[qid].last_avail_idx = num;
-	vp_iowrite16(num, avail_idx_addr);
+	struct ifcvf_lm_cfg  __iomem *lm_cfg = hw->lm_cfg;
+
+	vp_iowrite16(num, &lm_cfg->vq_state_region + qid * 2);
 
 	return 0;
 }
diff --git a/drivers/vdpa/ifcvf/ifcvf_base.h b/drivers/vdpa/ifcvf/ifcvf_base.h
index 30935a95b672..b57849c643f6 100644
--- a/drivers/vdpa/ifcvf/ifcvf_base.h
+++ b/drivers/vdpa/ifcvf/ifcvf_base.h
@@ -24,14 +24,9 @@
 #define N3000_DEVICE_ID		0x1041
 #define N3000_SUBSYS_DEVICE_ID	0x001A
 
-/* Max 8 data queue pairs(16 queues) and one control vq for now. */
-#define IFCVF_MAX_QUEUES	17
-
 #define IFCVF_QUEUE_ALIGNMENT	PAGE_SIZE
 #define IFCVF_PCI_MAX_RESOURCE	6
 
-#define IFCVF_LM_CFG_SIZE		0x40
-#define IFCVF_LM_RING_STATE_OFFSET	0x20
 #define IFCVF_LM_BAR			4
 
 #define IFCVF_ERR(pdev, fmt, ...)	dev_err(&pdev->dev, fmt, ##__VA_ARGS__)
@@ -54,10 +49,18 @@ struct vring_info {
 	char msix_name[256];
 };
 
+struct ifcvf_lm_cfg {
+	__le64 control;
+	__le64 status;
+	__le64 lm_mem_log_start_addr;
+	__le64 lm_mem_log_end_addr;
+	__le16 vq_state_region;
+};
+
 struct ifcvf_hw {
 	u8 __iomem *isr;
 	/* Live migration */
-	u8 __iomem *lm_cfg;
+	struct ifcvf_lm_cfg  __iomem *lm_cfg;
 	/* Notification bar number */
 	u8 notify_bar;
 	u8 msix_vector_status;
@@ -92,16 +95,6 @@ struct ifcvf_adapter {
 	struct ifcvf_hw *vf;
 };
 
-struct ifcvf_vring_lm_cfg {
-	u32 idx_addr[2];
-	u8 reserved[IFCVF_LM_CFG_SIZE - 8];
-};
-
-struct ifcvf_lm_cfg {
-	u8 reserved[IFCVF_LM_RING_STATE_OFFSET];
-	struct ifcvf_vring_lm_cfg vring_lm_cfg[IFCVF_MAX_QUEUES];
-};
-
 struct ifcvf_vdpa_mgmt_dev {
 	struct vdpa_mgmt_dev mdev;
 	struct ifcvf_hw vf;
diff --git a/drivers/vdpa/ifcvf/ifcvf_main.c b/drivers/vdpa/ifcvf/ifcvf_main.c
index c3ece395caf7..e98fa8100f3c 100644
--- a/drivers/vdpa/ifcvf/ifcvf_main.c
+++ b/drivers/vdpa/ifcvf/ifcvf_main.c
@@ -853,7 +853,9 @@ static struct pci_device_id ifcvf_pci_ids[] = {
 			 N3000_DEVICE_ID,
 			 PCI_VENDOR_ID_INTEL,
 			 N3000_SUBSYS_DEVICE_ID) },
-	/* C5000X-PL network device */
+	/* C5000X-PL network device
+	 * F2000X-PL network device
+	 */
 	{ PCI_DEVICE_SUB(PCI_VENDOR_ID_REDHAT_QUMRANET,
 			 VIRTIO_TRANS_ID_NET,
 			 PCI_VENDOR_ID_INTEL,
-- 
2.39.1

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

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH V2 1/3] vDPA/ifcvf: dynamic allocate vq data stores
  2023-06-12 15:14 ` [PATCH V2 1/3] vDPA/ifcvf: dynamic allocate vq data stores Zhu Lingshan
@ 2023-06-26  2:32   ` Jason Wang
  2023-06-26  2:37     ` Zhu, Lingshan
  0 siblings, 1 reply; 10+ messages in thread
From: Jason Wang @ 2023-06-26  2:32 UTC (permalink / raw)
  To: Zhu Lingshan; +Cc: virtualization, mst

On Mon, Jun 12, 2023 at 3:14 PM Zhu Lingshan <lingshan.zhu@intel.com> wrote:
>
> This commit dynamically allocates the data
> stores for the virtqueues based on
> virtio_pci_common_cfg.num_queues.

While at it, it's better to allocate vring_lm_cfg as well and drop
IFCVF_MAX_QUEUES.

Thanks

>
> Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com>
> ---
>  drivers/vdpa/ifcvf/ifcvf_base.c | 3 +++
>  drivers/vdpa/ifcvf/ifcvf_base.h | 2 +-
>  drivers/vdpa/ifcvf/ifcvf_main.c | 2 ++
>  3 files changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/vdpa/ifcvf/ifcvf_base.c b/drivers/vdpa/ifcvf/ifcvf_base.c
> index 1b5da11f5403..f86495ace825 100644
> --- a/drivers/vdpa/ifcvf/ifcvf_base.c
> +++ b/drivers/vdpa/ifcvf/ifcvf_base.c
> @@ -134,6 +134,9 @@ int ifcvf_init_hw(struct ifcvf_hw *hw, struct pci_dev *pdev)
>         }
>
>         hw->nr_vring = vp_ioread16(&hw->common_cfg->num_queues);
> +       hw->vring = kzalloc(sizeof(struct vring_info) * hw->nr_vring, GFP_KERNEL);
> +       if (!hw->vring)
> +               return -ENOMEM;
>
>         for (i = 0; i < hw->nr_vring; i++) {
>                 vp_iowrite16(i, &hw->common_cfg->queue_select);
> diff --git a/drivers/vdpa/ifcvf/ifcvf_base.h b/drivers/vdpa/ifcvf/ifcvf_base.h
> index 3110ffc50caf..fa797184056b 100644
> --- a/drivers/vdpa/ifcvf/ifcvf_base.h
> +++ b/drivers/vdpa/ifcvf/ifcvf_base.h
> @@ -74,7 +74,7 @@ struct ifcvf_hw {
>         u64 dev_features;
>         struct virtio_pci_common_cfg __iomem *common_cfg;
>         void __iomem *dev_cfg;
> -       struct vring_info vring[IFCVF_MAX_QUEUES];
> +       struct vring_info *vring;
>         void __iomem * const *base;
>         char config_msix_name[256];
>         struct vdpa_callback config_cb;
> diff --git a/drivers/vdpa/ifcvf/ifcvf_main.c b/drivers/vdpa/ifcvf/ifcvf_main.c
> index 6e47ac2c669a..2af0de771b49 100644
> --- a/drivers/vdpa/ifcvf/ifcvf_main.c
> +++ b/drivers/vdpa/ifcvf/ifcvf_main.c
> @@ -830,6 +830,7 @@ static int ifcvf_probe(struct pci_dev *pdev, const struct pci_device_id *id)
>         return 0;
>
>  err:
> +       kfree(ifcvf_mgmt_dev->vf.vring);
>         kfree(ifcvf_mgmt_dev);
>         return ret;
>  }
> @@ -840,6 +841,7 @@ static void ifcvf_remove(struct pci_dev *pdev)
>
>         ifcvf_mgmt_dev = pci_get_drvdata(pdev);
>         vdpa_mgmtdev_unregister(&ifcvf_mgmt_dev->mdev);
> +       kfree(ifcvf_mgmt_dev->vf.vring);
>         kfree(ifcvf_mgmt_dev);
>  }
>
> --
> 2.39.1
>

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

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH V2 2/3] vDPA/ifcvf: detect and report max allowed vq size
  2023-06-12 15:14 ` [PATCH V2 2/3] vDPA/ifcvf: detect and report max allowed vq size Zhu Lingshan
@ 2023-06-26  2:33   ` Jason Wang
  0 siblings, 0 replies; 10+ messages in thread
From: Jason Wang @ 2023-06-26  2:33 UTC (permalink / raw)
  To: Zhu Lingshan; +Cc: virtualization, mst

On Mon, Jun 12, 2023 at 3:14 PM Zhu Lingshan <lingshan.zhu@intel.com> wrote:
>
> Rather than a hardcode, this commit detects
> and reports the max value of allowed size
> of the virtqueues
>
> Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com>

Acked-by: Jason Wang <jasowang@redhat.com>

Thanks

> ---
>  drivers/vdpa/ifcvf/ifcvf_base.c | 31 +++++++++++++++++++++++++++++++
>  drivers/vdpa/ifcvf/ifcvf_base.h |  2 +-
>  drivers/vdpa/ifcvf/ifcvf_main.c |  4 +++-
>  3 files changed, 35 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/vdpa/ifcvf/ifcvf_base.c b/drivers/vdpa/ifcvf/ifcvf_base.c
> index f86495ace825..f4d7d96c4c86 100644
> --- a/drivers/vdpa/ifcvf/ifcvf_base.c
> +++ b/drivers/vdpa/ifcvf/ifcvf_base.c
> @@ -69,6 +69,37 @@ static int ifcvf_read_config_range(struct pci_dev *dev,
>         return 0;
>  }
>
> +static u16 ifcvf_get_vq_size(struct ifcvf_hw *hw, u16 qid)
> +{
> +       u16 queue_size;
> +
> +       vp_iowrite16(qid, &hw->common_cfg->queue_select);
> +       queue_size = vp_ioread16(&hw->common_cfg->queue_size);
> +
> +       return queue_size;
> +}
> +
> +/* This function returns the max allowed safe size for
> + * all virtqueues. It is the minimal size that can be
> + * suppprted by all virtqueues.
> + */
> +u16 ifcvf_get_max_vq_size(struct ifcvf_hw *hw)
> +{
> +       u16 queue_size, max_size, qid;
> +
> +       max_size = ifcvf_get_vq_size(hw, 0);
> +       for (qid = 1; qid < hw->nr_vring; qid++) {
> +               queue_size = ifcvf_get_vq_size(hw, qid);
> +               /* 0 means the queue is unavailable */
> +               if (!queue_size)
> +                       continue;
> +
> +               max_size = min(queue_size, max_size);
> +       }
> +
> +       return max_size;
> +}
> +
>  int ifcvf_init_hw(struct ifcvf_hw *hw, struct pci_dev *pdev)
>  {
>         struct virtio_pci_cap cap;
> diff --git a/drivers/vdpa/ifcvf/ifcvf_base.h b/drivers/vdpa/ifcvf/ifcvf_base.h
> index fa797184056b..30935a95b672 100644
> --- a/drivers/vdpa/ifcvf/ifcvf_base.h
> +++ b/drivers/vdpa/ifcvf/ifcvf_base.h
> @@ -28,7 +28,6 @@
>  #define IFCVF_MAX_QUEUES       17
>
>  #define IFCVF_QUEUE_ALIGNMENT  PAGE_SIZE
> -#define IFCVF_QUEUE_MAX                32768
>  #define IFCVF_PCI_MAX_RESOURCE 6
>
>  #define IFCVF_LM_CFG_SIZE              0x40
> @@ -138,4 +137,5 @@ bool ifcvf_get_vq_ready(struct ifcvf_hw *hw, u16 qid);
>  void ifcvf_set_vq_ready(struct ifcvf_hw *hw, u16 qid, bool ready);
>  void ifcvf_set_driver_features(struct ifcvf_hw *hw, u64 features);
>  u64 ifcvf_get_driver_features(struct ifcvf_hw *hw);
> +u16 ifcvf_get_max_vq_size(struct ifcvf_hw *hw);
>  #endif /* _IFCVF_H_ */
> diff --git a/drivers/vdpa/ifcvf/ifcvf_main.c b/drivers/vdpa/ifcvf/ifcvf_main.c
> index 2af0de771b49..c3ece395caf7 100644
> --- a/drivers/vdpa/ifcvf/ifcvf_main.c
> +++ b/drivers/vdpa/ifcvf/ifcvf_main.c
> @@ -451,7 +451,9 @@ static int ifcvf_vdpa_reset(struct vdpa_device *vdpa_dev)
>
>  static u16 ifcvf_vdpa_get_vq_num_max(struct vdpa_device *vdpa_dev)
>  {
> -       return IFCVF_QUEUE_MAX;
> +       struct ifcvf_hw *vf = vdpa_to_vf(vdpa_dev);
> +
> +       return ifcvf_get_max_vq_size(vf);
>  }
>
>  static int ifcvf_vdpa_get_vq_state(struct vdpa_device *vdpa_dev, u16 qid,
> --
> 2.39.1
>

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

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH V2 1/3] vDPA/ifcvf: dynamic allocate vq data stores
  2023-06-26  2:32   ` Jason Wang
@ 2023-06-26  2:37     ` Zhu, Lingshan
  2023-06-26  2:49       ` Jason Wang
  0 siblings, 1 reply; 10+ messages in thread
From: Zhu, Lingshan @ 2023-06-26  2:37 UTC (permalink / raw)
  To: Jason Wang; +Cc: virtualization, mst



On 6/26/2023 10:32 AM, Jason Wang wrote:
> On Mon, Jun 12, 2023 at 3:14 PM Zhu Lingshan <lingshan.zhu@intel.com> wrote:
>> This commit dynamically allocates the data
>> stores for the virtqueues based on
>> virtio_pci_common_cfg.num_queues.
> While at it, it's better to allocate vring_lm_cfg as well and drop
> IFCVF_MAX_QUEUES.
Yes, this has been done in 3/3 patch in this series.

Thanks
Zhu Lingshan
>
> Thanks
>
>> Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com>
>> ---
>>   drivers/vdpa/ifcvf/ifcvf_base.c | 3 +++
>>   drivers/vdpa/ifcvf/ifcvf_base.h | 2 +-
>>   drivers/vdpa/ifcvf/ifcvf_main.c | 2 ++
>>   3 files changed, 6 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/vdpa/ifcvf/ifcvf_base.c b/drivers/vdpa/ifcvf/ifcvf_base.c
>> index 1b5da11f5403..f86495ace825 100644
>> --- a/drivers/vdpa/ifcvf/ifcvf_base.c
>> +++ b/drivers/vdpa/ifcvf/ifcvf_base.c
>> @@ -134,6 +134,9 @@ int ifcvf_init_hw(struct ifcvf_hw *hw, struct pci_dev *pdev)
>>          }
>>
>>          hw->nr_vring = vp_ioread16(&hw->common_cfg->num_queues);
>> +       hw->vring = kzalloc(sizeof(struct vring_info) * hw->nr_vring, GFP_KERNEL);
>> +       if (!hw->vring)
>> +               return -ENOMEM;
>>
>>          for (i = 0; i < hw->nr_vring; i++) {
>>                  vp_iowrite16(i, &hw->common_cfg->queue_select);
>> diff --git a/drivers/vdpa/ifcvf/ifcvf_base.h b/drivers/vdpa/ifcvf/ifcvf_base.h
>> index 3110ffc50caf..fa797184056b 100644
>> --- a/drivers/vdpa/ifcvf/ifcvf_base.h
>> +++ b/drivers/vdpa/ifcvf/ifcvf_base.h
>> @@ -74,7 +74,7 @@ struct ifcvf_hw {
>>          u64 dev_features;
>>          struct virtio_pci_common_cfg __iomem *common_cfg;
>>          void __iomem *dev_cfg;
>> -       struct vring_info vring[IFCVF_MAX_QUEUES];
>> +       struct vring_info *vring;
>>          void __iomem * const *base;
>>          char config_msix_name[256];
>>          struct vdpa_callback config_cb;
>> diff --git a/drivers/vdpa/ifcvf/ifcvf_main.c b/drivers/vdpa/ifcvf/ifcvf_main.c
>> index 6e47ac2c669a..2af0de771b49 100644
>> --- a/drivers/vdpa/ifcvf/ifcvf_main.c
>> +++ b/drivers/vdpa/ifcvf/ifcvf_main.c
>> @@ -830,6 +830,7 @@ static int ifcvf_probe(struct pci_dev *pdev, const struct pci_device_id *id)
>>          return 0;
>>
>>   err:
>> +       kfree(ifcvf_mgmt_dev->vf.vring);
>>          kfree(ifcvf_mgmt_dev);
>>          return ret;
>>   }
>> @@ -840,6 +841,7 @@ static void ifcvf_remove(struct pci_dev *pdev)
>>
>>          ifcvf_mgmt_dev = pci_get_drvdata(pdev);
>>          vdpa_mgmtdev_unregister(&ifcvf_mgmt_dev->mdev);
>> +       kfree(ifcvf_mgmt_dev->vf.vring);
>>          kfree(ifcvf_mgmt_dev);
>>   }
>>
>> --
>> 2.39.1
>>

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

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH V2 3/3] vDPA/ifcvf: implement new accessors for vq_state
  2023-06-12 15:14 ` [PATCH V2 3/3] vDPA/ifcvf: implement new accessors for vq_state Zhu Lingshan
@ 2023-06-26  2:48   ` Jason Wang
  0 siblings, 0 replies; 10+ messages in thread
From: Jason Wang @ 2023-06-26  2:48 UTC (permalink / raw)
  To: Zhu Lingshan; +Cc: virtualization, mst

On Mon, Jun 12, 2023 at 3:14 PM Zhu Lingshan <lingshan.zhu@intel.com> wrote:
>
> This commit implements a better layout of the
> live migration bar, therefore the accessors for virtqueue
> state have been refactored.

I guess the reason for F2000X is that it can report a #vq which is
greater than IFCVF_MAX_QUEUES. If yes, let's explain it in the
changelog.

Thanks


>
> This commit also add a comment to the probing-ids list,
> indicating this driver drives F2000X-PL virtio-net
>
> Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com>
> ---
>  drivers/vdpa/ifcvf/ifcvf_base.c | 21 +++++----------------
>  drivers/vdpa/ifcvf/ifcvf_base.h | 25 +++++++++----------------
>  drivers/vdpa/ifcvf/ifcvf_main.c |  4 +++-
>  3 files changed, 17 insertions(+), 33 deletions(-)
>
> diff --git a/drivers/vdpa/ifcvf/ifcvf_base.c b/drivers/vdpa/ifcvf/ifcvf_base.c
> index f4d7d96c4c86..060f837a4f9f 100644
> --- a/drivers/vdpa/ifcvf/ifcvf_base.c
> +++ b/drivers/vdpa/ifcvf/ifcvf_base.c
> @@ -328,30 +328,19 @@ void ifcvf_set_driver_features(struct ifcvf_hw *hw, u64 features)
>
>  u16 ifcvf_get_vq_state(struct ifcvf_hw *hw, u16 qid)
>  {
> -       struct ifcvf_lm_cfg __iomem *ifcvf_lm;
> -       void __iomem *avail_idx_addr;
> +       struct ifcvf_lm_cfg  __iomem *lm_cfg = hw->lm_cfg;
>         u16 last_avail_idx;
> -       u32 q_pair_id;
>
> -       ifcvf_lm = (struct ifcvf_lm_cfg __iomem *)hw->lm_cfg;
> -       q_pair_id = qid / 2;
> -       avail_idx_addr = &ifcvf_lm->vring_lm_cfg[q_pair_id].idx_addr[qid % 2];
> -       last_avail_idx = vp_ioread16(avail_idx_addr);
> +       last_avail_idx = vp_ioread16(&lm_cfg->vq_state_region + qid * 2);
>
>         return last_avail_idx;
>  }
>
>  int ifcvf_set_vq_state(struct ifcvf_hw *hw, u16 qid, u16 num)
>  {
> -       struct ifcvf_lm_cfg __iomem *ifcvf_lm;
> -       void __iomem *avail_idx_addr;
> -       u32 q_pair_id;
> -
> -       ifcvf_lm = (struct ifcvf_lm_cfg __iomem *)hw->lm_cfg;
> -       q_pair_id = qid / 2;
> -       avail_idx_addr = &ifcvf_lm->vring_lm_cfg[q_pair_id].idx_addr[qid % 2];
> -       hw->vring[qid].last_avail_idx = num;
> -       vp_iowrite16(num, avail_idx_addr);
> +       struct ifcvf_lm_cfg  __iomem *lm_cfg = hw->lm_cfg;
> +
> +       vp_iowrite16(num, &lm_cfg->vq_state_region + qid * 2);
>
>         return 0;
>  }
> diff --git a/drivers/vdpa/ifcvf/ifcvf_base.h b/drivers/vdpa/ifcvf/ifcvf_base.h
> index 30935a95b672..b57849c643f6 100644
> --- a/drivers/vdpa/ifcvf/ifcvf_base.h
> +++ b/drivers/vdpa/ifcvf/ifcvf_base.h
> @@ -24,14 +24,9 @@
>  #define N3000_DEVICE_ID                0x1041
>  #define N3000_SUBSYS_DEVICE_ID 0x001A
>
> -/* Max 8 data queue pairs(16 queues) and one control vq for now. */
> -#define IFCVF_MAX_QUEUES       17
> -
>  #define IFCVF_QUEUE_ALIGNMENT  PAGE_SIZE
>  #define IFCVF_PCI_MAX_RESOURCE 6
>
> -#define IFCVF_LM_CFG_SIZE              0x40
> -#define IFCVF_LM_RING_STATE_OFFSET     0x20
>  #define IFCVF_LM_BAR                   4
>
>  #define IFCVF_ERR(pdev, fmt, ...)      dev_err(&pdev->dev, fmt, ##__VA_ARGS__)
> @@ -54,10 +49,18 @@ struct vring_info {
>         char msix_name[256];
>  };
>
> +struct ifcvf_lm_cfg {
> +       __le64 control;
> +       __le64 status;
> +       __le64 lm_mem_log_start_addr;
> +       __le64 lm_mem_log_end_addr;
> +       __le16 vq_state_region;
> +};
> +
>  struct ifcvf_hw {
>         u8 __iomem *isr;
>         /* Live migration */
> -       u8 __iomem *lm_cfg;
> +       struct ifcvf_lm_cfg  __iomem *lm_cfg;
>         /* Notification bar number */
>         u8 notify_bar;
>         u8 msix_vector_status;
> @@ -92,16 +95,6 @@ struct ifcvf_adapter {
>         struct ifcvf_hw *vf;
>  };
>
> -struct ifcvf_vring_lm_cfg {
> -       u32 idx_addr[2];
> -       u8 reserved[IFCVF_LM_CFG_SIZE - 8];
> -};
> -
> -struct ifcvf_lm_cfg {
> -       u8 reserved[IFCVF_LM_RING_STATE_OFFSET];
> -       struct ifcvf_vring_lm_cfg vring_lm_cfg[IFCVF_MAX_QUEUES];
> -};
> -
>  struct ifcvf_vdpa_mgmt_dev {
>         struct vdpa_mgmt_dev mdev;
>         struct ifcvf_hw vf;
> diff --git a/drivers/vdpa/ifcvf/ifcvf_main.c b/drivers/vdpa/ifcvf/ifcvf_main.c
> index c3ece395caf7..e98fa8100f3c 100644
> --- a/drivers/vdpa/ifcvf/ifcvf_main.c
> +++ b/drivers/vdpa/ifcvf/ifcvf_main.c
> @@ -853,7 +853,9 @@ static struct pci_device_id ifcvf_pci_ids[] = {
>                          N3000_DEVICE_ID,
>                          PCI_VENDOR_ID_INTEL,
>                          N3000_SUBSYS_DEVICE_ID) },
> -       /* C5000X-PL network device */
> +       /* C5000X-PL network device
> +        * F2000X-PL network device
> +        */
>         { PCI_DEVICE_SUB(PCI_VENDOR_ID_REDHAT_QUMRANET,
>                          VIRTIO_TRANS_ID_NET,
>                          PCI_VENDOR_ID_INTEL,
> --
> 2.39.1
>

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

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH V2 1/3] vDPA/ifcvf: dynamic allocate vq data stores
  2023-06-26  2:37     ` Zhu, Lingshan
@ 2023-06-26  2:49       ` Jason Wang
  2023-06-26  3:07         ` Zhu, Lingshan
  0 siblings, 1 reply; 10+ messages in thread
From: Jason Wang @ 2023-06-26  2:49 UTC (permalink / raw)
  To: Zhu, Lingshan; +Cc: virtualization, mst

On Mon, Jun 26, 2023 at 10:38 AM Zhu, Lingshan <lingshan.zhu@intel.com> wrote:
>
>
>
> On 6/26/2023 10:32 AM, Jason Wang wrote:
> > On Mon, Jun 12, 2023 at 3:14 PM Zhu Lingshan <lingshan.zhu@intel.com> wrote:
> >> This commit dynamically allocates the data
> >> stores for the virtqueues based on
> >> virtio_pci_common_cfg.num_queues.
> > While at it, it's better to allocate vring_lm_cfg as well and drop
> > IFCVF_MAX_QUEUES.
> Yes, this has been done in 3/3 patch in this series.

Ok, yes, but it seems patch 3 implements a lot of logic so I suggest
moving it to patch 1.

Not sure it's too late since I see the patch has been merged by Michael.

Thanks

>
> Thanks
> Zhu Lingshan
> >
> > Thanks
> >
> >> Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com>
> >> ---
> >>   drivers/vdpa/ifcvf/ifcvf_base.c | 3 +++
> >>   drivers/vdpa/ifcvf/ifcvf_base.h | 2 +-
> >>   drivers/vdpa/ifcvf/ifcvf_main.c | 2 ++
> >>   3 files changed, 6 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/drivers/vdpa/ifcvf/ifcvf_base.c b/drivers/vdpa/ifcvf/ifcvf_base.c
> >> index 1b5da11f5403..f86495ace825 100644
> >> --- a/drivers/vdpa/ifcvf/ifcvf_base.c
> >> +++ b/drivers/vdpa/ifcvf/ifcvf_base.c
> >> @@ -134,6 +134,9 @@ int ifcvf_init_hw(struct ifcvf_hw *hw, struct pci_dev *pdev)
> >>          }
> >>
> >>          hw->nr_vring = vp_ioread16(&hw->common_cfg->num_queues);
> >> +       hw->vring = kzalloc(sizeof(struct vring_info) * hw->nr_vring, GFP_KERNEL);
> >> +       if (!hw->vring)
> >> +               return -ENOMEM;
> >>
> >>          for (i = 0; i < hw->nr_vring; i++) {
> >>                  vp_iowrite16(i, &hw->common_cfg->queue_select);
> >> diff --git a/drivers/vdpa/ifcvf/ifcvf_base.h b/drivers/vdpa/ifcvf/ifcvf_base.h
> >> index 3110ffc50caf..fa797184056b 100644
> >> --- a/drivers/vdpa/ifcvf/ifcvf_base.h
> >> +++ b/drivers/vdpa/ifcvf/ifcvf_base.h
> >> @@ -74,7 +74,7 @@ struct ifcvf_hw {
> >>          u64 dev_features;
> >>          struct virtio_pci_common_cfg __iomem *common_cfg;
> >>          void __iomem *dev_cfg;
> >> -       struct vring_info vring[IFCVF_MAX_QUEUES];
> >> +       struct vring_info *vring;
> >>          void __iomem * const *base;
> >>          char config_msix_name[256];
> >>          struct vdpa_callback config_cb;
> >> diff --git a/drivers/vdpa/ifcvf/ifcvf_main.c b/drivers/vdpa/ifcvf/ifcvf_main.c
> >> index 6e47ac2c669a..2af0de771b49 100644
> >> --- a/drivers/vdpa/ifcvf/ifcvf_main.c
> >> +++ b/drivers/vdpa/ifcvf/ifcvf_main.c
> >> @@ -830,6 +830,7 @@ static int ifcvf_probe(struct pci_dev *pdev, const struct pci_device_id *id)
> >>          return 0;
> >>
> >>   err:
> >> +       kfree(ifcvf_mgmt_dev->vf.vring);
> >>          kfree(ifcvf_mgmt_dev);
> >>          return ret;
> >>   }
> >> @@ -840,6 +841,7 @@ static void ifcvf_remove(struct pci_dev *pdev)
> >>
> >>          ifcvf_mgmt_dev = pci_get_drvdata(pdev);
> >>          vdpa_mgmtdev_unregister(&ifcvf_mgmt_dev->mdev);
> >> +       kfree(ifcvf_mgmt_dev->vf.vring);
> >>          kfree(ifcvf_mgmt_dev);
> >>   }
> >>
> >> --
> >> 2.39.1
> >>
>

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

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH V2 1/3] vDPA/ifcvf: dynamic allocate vq data stores
  2023-06-26  2:49       ` Jason Wang
@ 2023-06-26  3:07         ` Zhu, Lingshan
  0 siblings, 0 replies; 10+ messages in thread
From: Zhu, Lingshan @ 2023-06-26  3:07 UTC (permalink / raw)
  To: Jason Wang; +Cc: virtualization, mst



On 6/26/2023 10:49 AM, Jason Wang wrote:
> On Mon, Jun 26, 2023 at 10:38 AM Zhu, Lingshan <lingshan.zhu@intel.com> wrote:
>>
>>
>> On 6/26/2023 10:32 AM, Jason Wang wrote:
>>> On Mon, Jun 12, 2023 at 3:14 PM Zhu Lingshan <lingshan.zhu@intel.com> wrote:
>>>> This commit dynamically allocates the data
>>>> stores for the virtqueues based on
>>>> virtio_pci_common_cfg.num_queues.
>>> While at it, it's better to allocate vring_lm_cfg as well and drop
>>> IFCVF_MAX_QUEUES.
>> Yes, this has been done in 3/3 patch in this series.
> Ok, yes, but it seems patch 3 implements a lot of logic so I suggest
> moving it to patch 1.
>
> Not sure it's too late since I see the patch has been merged by Michael.
I am not sure, I think we need two patches handle their respective 
changes anyway,
and can not drop IFCVF_MAX_QUEUES in the first one.
>
> Thanks
>
>> Thanks
>> Zhu Lingshan
>>> Thanks
>>>
>>>> Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com>
>>>> ---
>>>>    drivers/vdpa/ifcvf/ifcvf_base.c | 3 +++
>>>>    drivers/vdpa/ifcvf/ifcvf_base.h | 2 +-
>>>>    drivers/vdpa/ifcvf/ifcvf_main.c | 2 ++
>>>>    3 files changed, 6 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/drivers/vdpa/ifcvf/ifcvf_base.c b/drivers/vdpa/ifcvf/ifcvf_base.c
>>>> index 1b5da11f5403..f86495ace825 100644
>>>> --- a/drivers/vdpa/ifcvf/ifcvf_base.c
>>>> +++ b/drivers/vdpa/ifcvf/ifcvf_base.c
>>>> @@ -134,6 +134,9 @@ int ifcvf_init_hw(struct ifcvf_hw *hw, struct pci_dev *pdev)
>>>>           }
>>>>
>>>>           hw->nr_vring = vp_ioread16(&hw->common_cfg->num_queues);
>>>> +       hw->vring = kzalloc(sizeof(struct vring_info) * hw->nr_vring, GFP_KERNEL);
>>>> +       if (!hw->vring)
>>>> +               return -ENOMEM;
>>>>
>>>>           for (i = 0; i < hw->nr_vring; i++) {
>>>>                   vp_iowrite16(i, &hw->common_cfg->queue_select);
>>>> diff --git a/drivers/vdpa/ifcvf/ifcvf_base.h b/drivers/vdpa/ifcvf/ifcvf_base.h
>>>> index 3110ffc50caf..fa797184056b 100644
>>>> --- a/drivers/vdpa/ifcvf/ifcvf_base.h
>>>> +++ b/drivers/vdpa/ifcvf/ifcvf_base.h
>>>> @@ -74,7 +74,7 @@ struct ifcvf_hw {
>>>>           u64 dev_features;
>>>>           struct virtio_pci_common_cfg __iomem *common_cfg;
>>>>           void __iomem *dev_cfg;
>>>> -       struct vring_info vring[IFCVF_MAX_QUEUES];
>>>> +       struct vring_info *vring;
>>>>           void __iomem * const *base;
>>>>           char config_msix_name[256];
>>>>           struct vdpa_callback config_cb;
>>>> diff --git a/drivers/vdpa/ifcvf/ifcvf_main.c b/drivers/vdpa/ifcvf/ifcvf_main.c
>>>> index 6e47ac2c669a..2af0de771b49 100644
>>>> --- a/drivers/vdpa/ifcvf/ifcvf_main.c
>>>> +++ b/drivers/vdpa/ifcvf/ifcvf_main.c
>>>> @@ -830,6 +830,7 @@ static int ifcvf_probe(struct pci_dev *pdev, const struct pci_device_id *id)
>>>>           return 0;
>>>>
>>>>    err:
>>>> +       kfree(ifcvf_mgmt_dev->vf.vring);
>>>>           kfree(ifcvf_mgmt_dev);
>>>>           return ret;
>>>>    }
>>>> @@ -840,6 +841,7 @@ static void ifcvf_remove(struct pci_dev *pdev)
>>>>
>>>>           ifcvf_mgmt_dev = pci_get_drvdata(pdev);
>>>>           vdpa_mgmtdev_unregister(&ifcvf_mgmt_dev->mdev);
>>>> +       kfree(ifcvf_mgmt_dev->vf.vring);
>>>>           kfree(ifcvf_mgmt_dev);
>>>>    }
>>>>
>>>> --
>>>> 2.39.1
>>>>

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

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2023-06-26  3:07 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-06-12 15:14 [PATCH V2 0/3] vDPA/ifcvf: enable virtio-net on Intel F2000X-PL Zhu Lingshan
2023-06-12 15:14 ` [PATCH V2 1/3] vDPA/ifcvf: dynamic allocate vq data stores Zhu Lingshan
2023-06-26  2:32   ` Jason Wang
2023-06-26  2:37     ` Zhu, Lingshan
2023-06-26  2:49       ` Jason Wang
2023-06-26  3:07         ` Zhu, Lingshan
2023-06-12 15:14 ` [PATCH V2 2/3] vDPA/ifcvf: detect and report max allowed vq size Zhu Lingshan
2023-06-26  2:33   ` Jason Wang
2023-06-12 15:14 ` [PATCH V2 3/3] vDPA/ifcvf: implement new accessors for vq_state Zhu Lingshan
2023-06-26  2:48   ` Jason Wang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).