* [PATCH 0/2] vDPA/ifcvf: enable multiqueue and control vq
@ 2021-08-18 9:57 Zhu Lingshan
2021-08-18 9:57 ` [PATCH 1/2] vDPA/ifcvf: detect and use the onboard number of queues directly Zhu Lingshan
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Zhu Lingshan @ 2021-08-18 9:57 UTC (permalink / raw)
To: jasowang, mst; +Cc: virtualization, netdev, kvm, Zhu Lingshan
This series enables multi-queue and control vq features
for ifcvf.
These patches are based on my previous vDPA/ifcvf management link
implementation series:
https://lore.kernel.org/kvm/20210812032454.24486-2-lingshan.zhu@intel.com/T/
Thanks!
Zhu Lingshan (2):
vDPA/ifcvf: detect and use the onboard number of queues directly
vDPA/ifcvf: enable multiqueue and control vq
drivers/vdpa/ifcvf/ifcvf_base.c | 8 +++++---
drivers/vdpa/ifcvf/ifcvf_base.h | 19 ++++---------------
drivers/vdpa/ifcvf/ifcvf_main.c | 32 +++++++++++++++-----------------
3 files changed, 24 insertions(+), 35 deletions(-)
--
2.27.0
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH 1/2] vDPA/ifcvf: detect and use the onboard number of queues directly 2021-08-18 9:57 [PATCH 0/2] vDPA/ifcvf: enable multiqueue and control vq Zhu Lingshan @ 2021-08-18 9:57 ` Zhu Lingshan 2021-08-19 4:09 ` Jason Wang 2021-08-18 9:57 ` [PATCH 2/2] vDPA/ifcvf: enable multiqueue and control vq Zhu Lingshan 2021-08-19 4:11 ` [PATCH 0/2] " Jason Wang 2 siblings, 1 reply; 8+ messages in thread From: Zhu Lingshan @ 2021-08-18 9:57 UTC (permalink / raw) To: jasowang, mst; +Cc: virtualization, netdev, kvm, Zhu Lingshan To enable this multi-queue feature for ifcvf, this commit intends to detect and use the onboard number of queues directly than IFCVF_MAX_QUEUE_PAIRS = 1 (removed) Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com> --- drivers/vdpa/ifcvf/ifcvf_base.c | 8 +++++--- drivers/vdpa/ifcvf/ifcvf_base.h | 10 ++++------ drivers/vdpa/ifcvf/ifcvf_main.c | 21 ++++++++++++--------- 3 files changed, 21 insertions(+), 18 deletions(-) diff --git a/drivers/vdpa/ifcvf/ifcvf_base.c b/drivers/vdpa/ifcvf/ifcvf_base.c index 6e197fe0fcf9..2808f1ba9f7b 100644 --- a/drivers/vdpa/ifcvf/ifcvf_base.c +++ b/drivers/vdpa/ifcvf/ifcvf_base.c @@ -158,7 +158,9 @@ int ifcvf_init_hw(struct ifcvf_hw *hw, struct pci_dev *pdev) return -EIO; } - for (i = 0; i < IFCVF_MAX_QUEUE_PAIRS * 2; i++) { + hw->nr_vring = ifc_ioread16(&hw->common_cfg->num_queues); + + for (i = 0; i < hw->nr_vring; i++) { ifc_iowrite16(i, &hw->common_cfg->queue_select); notify_off = ifc_ioread16(&hw->common_cfg->queue_notify_off); hw->vring[i].notify_addr = hw->notify_base + @@ -304,7 +306,7 @@ u16 ifcvf_get_vq_state(struct ifcvf_hw *hw, u16 qid) u32 q_pair_id; ifcvf_lm = (struct ifcvf_lm_cfg __iomem *)hw->lm_cfg; - q_pair_id = qid / (IFCVF_MAX_QUEUE_PAIRS * 2); + q_pair_id = qid / hw->nr_vring; avail_idx_addr = &ifcvf_lm->vring_lm_cfg[q_pair_id].idx_addr[qid % 2]; last_avail_idx = ifc_ioread16(avail_idx_addr); @@ -318,7 +320,7 @@ int ifcvf_set_vq_state(struct ifcvf_hw *hw, u16 qid, u16 num) u32 q_pair_id; ifcvf_lm = (struct ifcvf_lm_cfg __iomem *)hw->lm_cfg; - q_pair_id = qid / (IFCVF_MAX_QUEUE_PAIRS * 2); + q_pair_id = qid / hw->nr_vring; avail_idx_addr = &ifcvf_lm->vring_lm_cfg[q_pair_id].idx_addr[qid % 2]; hw->vring[qid].last_avail_idx = num; ifc_iowrite16(num, avail_idx_addr); diff --git a/drivers/vdpa/ifcvf/ifcvf_base.h b/drivers/vdpa/ifcvf/ifcvf_base.h index 1601e87870da..97d9019a3ec0 100644 --- a/drivers/vdpa/ifcvf/ifcvf_base.h +++ b/drivers/vdpa/ifcvf/ifcvf_base.h @@ -31,8 +31,8 @@ (1ULL << VIRTIO_F_ACCESS_PLATFORM) | \ (1ULL << VIRTIO_NET_F_MRG_RXBUF)) -/* Only one queue pair for now. */ -#define IFCVF_MAX_QUEUE_PAIRS 1 +/* 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_QUEUE_MAX 32768 @@ -51,8 +51,6 @@ #define ifcvf_private_to_vf(adapter) \ (&((struct ifcvf_adapter *)adapter)->vf) -#define IFCVF_MAX_INTR (IFCVF_MAX_QUEUE_PAIRS * 2 + 1) - struct vring_info { u64 desc; u64 avail; @@ -83,7 +81,7 @@ struct ifcvf_hw { u32 dev_type; struct virtio_pci_common_cfg __iomem *common_cfg; void __iomem *net_cfg; - struct vring_info vring[IFCVF_MAX_QUEUE_PAIRS * 2]; + struct vring_info vring[IFCVF_MAX_QUEUES]; void __iomem * const *base; char config_msix_name[256]; struct vdpa_callback config_cb; @@ -103,7 +101,7 @@ struct ifcvf_vring_lm_cfg { struct ifcvf_lm_cfg { u8 reserved[IFCVF_LM_RING_STATE_OFFSET]; - struct ifcvf_vring_lm_cfg vring_lm_cfg[IFCVF_MAX_QUEUE_PAIRS]; + struct ifcvf_vring_lm_cfg vring_lm_cfg[IFCVF_MAX_QUEUES]; }; struct ifcvf_vdpa_mgmt_dev { diff --git a/drivers/vdpa/ifcvf/ifcvf_main.c b/drivers/vdpa/ifcvf/ifcvf_main.c index 4b623253f460..e34c2ec2b69b 100644 --- a/drivers/vdpa/ifcvf/ifcvf_main.c +++ b/drivers/vdpa/ifcvf/ifcvf_main.c @@ -63,9 +63,13 @@ static int ifcvf_request_irq(struct ifcvf_adapter *adapter) struct pci_dev *pdev = adapter->pdev; struct ifcvf_hw *vf = &adapter->vf; int vector, i, ret, irq; + u16 max_intr; - ret = pci_alloc_irq_vectors(pdev, IFCVF_MAX_INTR, - IFCVF_MAX_INTR, PCI_IRQ_MSIX); + /* all queues and config interrupt */ + max_intr = vf->nr_vring + 1; + + ret = pci_alloc_irq_vectors(pdev, max_intr, + max_intr, PCI_IRQ_MSIX); if (ret < 0) { IFCVF_ERR(pdev, "Failed to alloc IRQ vectors\n"); return ret; @@ -83,7 +87,7 @@ static int ifcvf_request_irq(struct ifcvf_adapter *adapter) return ret; } - for (i = 0; i < IFCVF_MAX_QUEUE_PAIRS * 2; i++) { + for (i = 0; i < vf->nr_vring; i++) { snprintf(vf->vring[i].msix_name, 256, "ifcvf[%s]-%d\n", pci_name(pdev), i); vector = i + IFCVF_MSI_QUEUE_OFF; @@ -112,7 +116,6 @@ static int ifcvf_start_datapath(void *private) u8 status; int ret; - vf->nr_vring = IFCVF_MAX_QUEUE_PAIRS * 2; ret = ifcvf_start_hw(vf); if (ret < 0) { status = ifcvf_get_status(vf); @@ -128,7 +131,7 @@ static int ifcvf_stop_datapath(void *private) struct ifcvf_hw *vf = ifcvf_private_to_vf(private); int i; - for (i = 0; i < IFCVF_MAX_QUEUE_PAIRS * 2; i++) + for (i = 0; i < vf->nr_vring; i++) vf->vring[i].cb.callback = NULL; ifcvf_stop_hw(vf); @@ -141,7 +144,7 @@ static void ifcvf_reset_vring(struct ifcvf_adapter *adapter) struct ifcvf_hw *vf = ifcvf_private_to_vf(adapter); int i; - for (i = 0; i < IFCVF_MAX_QUEUE_PAIRS * 2; i++) { + for (i = 0; i < vf->nr_vring; i++) { vf->vring[i].last_avail_idx = 0; vf->vring[i].desc = 0; vf->vring[i].avail = 0; @@ -227,7 +230,7 @@ static void ifcvf_vdpa_set_status(struct vdpa_device *vdpa_dev, u8 status) if ((status_old & VIRTIO_CONFIG_S_DRIVER_OK) && !(status & VIRTIO_CONFIG_S_DRIVER_OK)) { ifcvf_stop_datapath(adapter); - ifcvf_free_irq(adapter, IFCVF_MAX_QUEUE_PAIRS * 2); + ifcvf_free_irq(adapter, vf->nr_vring); } if (status == 0) { @@ -526,13 +529,13 @@ static int ifcvf_vdpa_dev_add(struct vdpa_mgmt_dev *mdev, const char *name) goto err; } - for (i = 0; i < IFCVF_MAX_QUEUE_PAIRS * 2; i++) + for (i = 0; i < vf->nr_vring; i++) vf->vring[i].irq = -EINVAL; vf->hw_features = ifcvf_get_hw_features(vf); adapter->vdpa.mdev = &ifcvf_mgmt_dev->mdev; - ret = _vdpa_register_device(&adapter->vdpa, IFCVF_MAX_QUEUE_PAIRS * 2); + ret = _vdpa_register_device(&adapter->vdpa, vf->nr_vring); if (ret) { IFCVF_ERR(pdev, "Failed to register to vDPA bus"); goto err; -- 2.27.0 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] vDPA/ifcvf: detect and use the onboard number of queues directly 2021-08-18 9:57 ` [PATCH 1/2] vDPA/ifcvf: detect and use the onboard number of queues directly Zhu Lingshan @ 2021-08-19 4:09 ` Jason Wang 0 siblings, 0 replies; 8+ messages in thread From: Jason Wang @ 2021-08-19 4:09 UTC (permalink / raw) To: Zhu Lingshan, mst; +Cc: virtualization, netdev, kvm 在 2021/8/18 下午5:57, Zhu Lingshan 写道: > To enable this multi-queue feature for ifcvf, this commit > intends to detect and use the onboard number of queues > directly than IFCVF_MAX_QUEUE_PAIRS = 1 (removed) > > Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com> > --- > drivers/vdpa/ifcvf/ifcvf_base.c | 8 +++++--- > drivers/vdpa/ifcvf/ifcvf_base.h | 10 ++++------ > drivers/vdpa/ifcvf/ifcvf_main.c | 21 ++++++++++++--------- > 3 files changed, 21 insertions(+), 18 deletions(-) > > diff --git a/drivers/vdpa/ifcvf/ifcvf_base.c b/drivers/vdpa/ifcvf/ifcvf_base.c > index 6e197fe0fcf9..2808f1ba9f7b 100644 > --- a/drivers/vdpa/ifcvf/ifcvf_base.c > +++ b/drivers/vdpa/ifcvf/ifcvf_base.c > @@ -158,7 +158,9 @@ int ifcvf_init_hw(struct ifcvf_hw *hw, struct pci_dev *pdev) > return -EIO; > } > > - for (i = 0; i < IFCVF_MAX_QUEUE_PAIRS * 2; i++) { > + hw->nr_vring = ifc_ioread16(&hw->common_cfg->num_queues); > + > + for (i = 0; i < hw->nr_vring; i++) { > ifc_iowrite16(i, &hw->common_cfg->queue_select); > notify_off = ifc_ioread16(&hw->common_cfg->queue_notify_off); > hw->vring[i].notify_addr = hw->notify_base + > @@ -304,7 +306,7 @@ u16 ifcvf_get_vq_state(struct ifcvf_hw *hw, u16 qid) > u32 q_pair_id; > > ifcvf_lm = (struct ifcvf_lm_cfg __iomem *)hw->lm_cfg; > - q_pair_id = qid / (IFCVF_MAX_QUEUE_PAIRS * 2); > + q_pair_id = qid / hw->nr_vring; > avail_idx_addr = &ifcvf_lm->vring_lm_cfg[q_pair_id].idx_addr[qid % 2]; > last_avail_idx = ifc_ioread16(avail_idx_addr); > > @@ -318,7 +320,7 @@ int ifcvf_set_vq_state(struct ifcvf_hw *hw, u16 qid, u16 num) > u32 q_pair_id; > > ifcvf_lm = (struct ifcvf_lm_cfg __iomem *)hw->lm_cfg; > - q_pair_id = qid / (IFCVF_MAX_QUEUE_PAIRS * 2); > + q_pair_id = qid / hw->nr_vring; > avail_idx_addr = &ifcvf_lm->vring_lm_cfg[q_pair_id].idx_addr[qid % 2]; > hw->vring[qid].last_avail_idx = num; > ifc_iowrite16(num, avail_idx_addr); > diff --git a/drivers/vdpa/ifcvf/ifcvf_base.h b/drivers/vdpa/ifcvf/ifcvf_base.h > index 1601e87870da..97d9019a3ec0 100644 > --- a/drivers/vdpa/ifcvf/ifcvf_base.h > +++ b/drivers/vdpa/ifcvf/ifcvf_base.h > @@ -31,8 +31,8 @@ > (1ULL << VIRTIO_F_ACCESS_PLATFORM) | \ > (1ULL << VIRTIO_NET_F_MRG_RXBUF)) > > -/* Only one queue pair for now. */ > -#define IFCVF_MAX_QUEUE_PAIRS 1 > +/* Max 8 data queue pairs(16 queues) and one control vq for now. */ > +#define IFCVF_MAX_QUEUES 17 While at it, I wonder if we can get rid of this. Other than this, Acked-by: Jason Wang <jasowang@redhat.com> > > #define IFCVF_QUEUE_ALIGNMENT PAGE_SIZE > #define IFCVF_QUEUE_MAX 32768 > @@ -51,8 +51,6 @@ > #define ifcvf_private_to_vf(adapter) \ > (&((struct ifcvf_adapter *)adapter)->vf) > > -#define IFCVF_MAX_INTR (IFCVF_MAX_QUEUE_PAIRS * 2 + 1) > - > struct vring_info { > u64 desc; > u64 avail; > @@ -83,7 +81,7 @@ struct ifcvf_hw { > u32 dev_type; > struct virtio_pci_common_cfg __iomem *common_cfg; > void __iomem *net_cfg; > - struct vring_info vring[IFCVF_MAX_QUEUE_PAIRS * 2]; > + struct vring_info vring[IFCVF_MAX_QUEUES]; > void __iomem * const *base; > char config_msix_name[256]; > struct vdpa_callback config_cb; > @@ -103,7 +101,7 @@ struct ifcvf_vring_lm_cfg { > > struct ifcvf_lm_cfg { > u8 reserved[IFCVF_LM_RING_STATE_OFFSET]; > - struct ifcvf_vring_lm_cfg vring_lm_cfg[IFCVF_MAX_QUEUE_PAIRS]; > + struct ifcvf_vring_lm_cfg vring_lm_cfg[IFCVF_MAX_QUEUES]; > }; > > struct ifcvf_vdpa_mgmt_dev { > diff --git a/drivers/vdpa/ifcvf/ifcvf_main.c b/drivers/vdpa/ifcvf/ifcvf_main.c > index 4b623253f460..e34c2ec2b69b 100644 > --- a/drivers/vdpa/ifcvf/ifcvf_main.c > +++ b/drivers/vdpa/ifcvf/ifcvf_main.c > @@ -63,9 +63,13 @@ static int ifcvf_request_irq(struct ifcvf_adapter *adapter) > struct pci_dev *pdev = adapter->pdev; > struct ifcvf_hw *vf = &adapter->vf; > int vector, i, ret, irq; > + u16 max_intr; > > - ret = pci_alloc_irq_vectors(pdev, IFCVF_MAX_INTR, > - IFCVF_MAX_INTR, PCI_IRQ_MSIX); > + /* all queues and config interrupt */ > + max_intr = vf->nr_vring + 1; > + > + ret = pci_alloc_irq_vectors(pdev, max_intr, > + max_intr, PCI_IRQ_MSIX); > if (ret < 0) { > IFCVF_ERR(pdev, "Failed to alloc IRQ vectors\n"); > return ret; > @@ -83,7 +87,7 @@ static int ifcvf_request_irq(struct ifcvf_adapter *adapter) > return ret; > } > > - for (i = 0; i < IFCVF_MAX_QUEUE_PAIRS * 2; i++) { > + for (i = 0; i < vf->nr_vring; i++) { > snprintf(vf->vring[i].msix_name, 256, "ifcvf[%s]-%d\n", > pci_name(pdev), i); > vector = i + IFCVF_MSI_QUEUE_OFF; > @@ -112,7 +116,6 @@ static int ifcvf_start_datapath(void *private) > u8 status; > int ret; > > - vf->nr_vring = IFCVF_MAX_QUEUE_PAIRS * 2; > ret = ifcvf_start_hw(vf); > if (ret < 0) { > status = ifcvf_get_status(vf); > @@ -128,7 +131,7 @@ static int ifcvf_stop_datapath(void *private) > struct ifcvf_hw *vf = ifcvf_private_to_vf(private); > int i; > > - for (i = 0; i < IFCVF_MAX_QUEUE_PAIRS * 2; i++) > + for (i = 0; i < vf->nr_vring; i++) > vf->vring[i].cb.callback = NULL; > > ifcvf_stop_hw(vf); > @@ -141,7 +144,7 @@ static void ifcvf_reset_vring(struct ifcvf_adapter *adapter) > struct ifcvf_hw *vf = ifcvf_private_to_vf(adapter); > int i; > > - for (i = 0; i < IFCVF_MAX_QUEUE_PAIRS * 2; i++) { > + for (i = 0; i < vf->nr_vring; i++) { > vf->vring[i].last_avail_idx = 0; > vf->vring[i].desc = 0; > vf->vring[i].avail = 0; > @@ -227,7 +230,7 @@ static void ifcvf_vdpa_set_status(struct vdpa_device *vdpa_dev, u8 status) > if ((status_old & VIRTIO_CONFIG_S_DRIVER_OK) && > !(status & VIRTIO_CONFIG_S_DRIVER_OK)) { > ifcvf_stop_datapath(adapter); > - ifcvf_free_irq(adapter, IFCVF_MAX_QUEUE_PAIRS * 2); > + ifcvf_free_irq(adapter, vf->nr_vring); > } > > if (status == 0) { > @@ -526,13 +529,13 @@ static int ifcvf_vdpa_dev_add(struct vdpa_mgmt_dev *mdev, const char *name) > goto err; > } > > - for (i = 0; i < IFCVF_MAX_QUEUE_PAIRS * 2; i++) > + for (i = 0; i < vf->nr_vring; i++) > vf->vring[i].irq = -EINVAL; > > vf->hw_features = ifcvf_get_hw_features(vf); > > adapter->vdpa.mdev = &ifcvf_mgmt_dev->mdev; > - ret = _vdpa_register_device(&adapter->vdpa, IFCVF_MAX_QUEUE_PAIRS * 2); > + ret = _vdpa_register_device(&adapter->vdpa, vf->nr_vring); > if (ret) { > IFCVF_ERR(pdev, "Failed to register to vDPA bus"); > goto err; ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/2] vDPA/ifcvf: enable multiqueue and control vq 2021-08-18 9:57 [PATCH 0/2] vDPA/ifcvf: enable multiqueue and control vq Zhu Lingshan 2021-08-18 9:57 ` [PATCH 1/2] vDPA/ifcvf: detect and use the onboard number of queues directly Zhu Lingshan @ 2021-08-18 9:57 ` Zhu Lingshan 2021-08-19 4:09 ` Jason Wang 2021-08-19 4:11 ` [PATCH 0/2] " Jason Wang 2 siblings, 1 reply; 8+ messages in thread From: Zhu Lingshan @ 2021-08-18 9:57 UTC (permalink / raw) To: jasowang, mst; +Cc: virtualization, netdev, kvm, Zhu Lingshan This commit enbales multi-queue and control vq features for ifcvf Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com> --- drivers/vdpa/ifcvf/ifcvf_base.h | 9 --------- drivers/vdpa/ifcvf/ifcvf_main.c | 11 +++-------- 2 files changed, 3 insertions(+), 17 deletions(-) diff --git a/drivers/vdpa/ifcvf/ifcvf_base.h b/drivers/vdpa/ifcvf/ifcvf_base.h index 97d9019a3ec0..09918af3ecf8 100644 --- a/drivers/vdpa/ifcvf/ifcvf_base.h +++ b/drivers/vdpa/ifcvf/ifcvf_base.h @@ -22,15 +22,6 @@ #define N3000_DEVICE_ID 0x1041 #define N3000_SUBSYS_DEVICE_ID 0x001A -#define IFCVF_NET_SUPPORTED_FEATURES \ - ((1ULL << VIRTIO_NET_F_MAC) | \ - (1ULL << VIRTIO_F_ANY_LAYOUT) | \ - (1ULL << VIRTIO_F_VERSION_1) | \ - (1ULL << VIRTIO_NET_F_STATUS) | \ - (1ULL << VIRTIO_F_ORDER_PLATFORM) | \ - (1ULL << VIRTIO_F_ACCESS_PLATFORM) | \ - (1ULL << VIRTIO_NET_F_MRG_RXBUF)) - /* Max 8 data queue pairs(16 queues) and one control vq for now. */ #define IFCVF_MAX_QUEUES 17 diff --git a/drivers/vdpa/ifcvf/ifcvf_main.c b/drivers/vdpa/ifcvf/ifcvf_main.c index e34c2ec2b69b..b99283a98177 100644 --- a/drivers/vdpa/ifcvf/ifcvf_main.c +++ b/drivers/vdpa/ifcvf/ifcvf_main.c @@ -174,17 +174,12 @@ static u64 ifcvf_vdpa_get_features(struct vdpa_device *vdpa_dev) struct ifcvf_adapter *adapter = vdpa_to_adapter(vdpa_dev); struct ifcvf_hw *vf = vdpa_to_vf(vdpa_dev); struct pci_dev *pdev = adapter->pdev; - + u32 type = vf->dev_type; u64 features; - switch (vf->dev_type) { - case VIRTIO_ID_NET: - features = ifcvf_get_features(vf) & IFCVF_NET_SUPPORTED_FEATURES; - break; - case VIRTIO_ID_BLOCK: + if (type == VIRTIO_ID_NET || type == VIRTIO_ID_BLOCK) features = ifcvf_get_features(vf); - break; - default: + else { features = 0; IFCVF_ERR(pdev, "VIRTIO ID %u not supported\n", vf->dev_type); } -- 2.27.0 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] vDPA/ifcvf: enable multiqueue and control vq 2021-08-18 9:57 ` [PATCH 2/2] vDPA/ifcvf: enable multiqueue and control vq Zhu Lingshan @ 2021-08-19 4:09 ` Jason Wang 0 siblings, 0 replies; 8+ messages in thread From: Jason Wang @ 2021-08-19 4:09 UTC (permalink / raw) To: Zhu Lingshan, mst; +Cc: virtualization, netdev, kvm 在 2021/8/18 下午5:57, Zhu Lingshan 写道: > This commit enbales multi-queue and control vq > features for ifcvf > > Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com> Acked-by: Jason Wang <jasowang@redhat.com> > --- > drivers/vdpa/ifcvf/ifcvf_base.h | 9 --------- > drivers/vdpa/ifcvf/ifcvf_main.c | 11 +++-------- > 2 files changed, 3 insertions(+), 17 deletions(-) > > diff --git a/drivers/vdpa/ifcvf/ifcvf_base.h b/drivers/vdpa/ifcvf/ifcvf_base.h > index 97d9019a3ec0..09918af3ecf8 100644 > --- a/drivers/vdpa/ifcvf/ifcvf_base.h > +++ b/drivers/vdpa/ifcvf/ifcvf_base.h > @@ -22,15 +22,6 @@ > #define N3000_DEVICE_ID 0x1041 > #define N3000_SUBSYS_DEVICE_ID 0x001A > > -#define IFCVF_NET_SUPPORTED_FEATURES \ > - ((1ULL << VIRTIO_NET_F_MAC) | \ > - (1ULL << VIRTIO_F_ANY_LAYOUT) | \ > - (1ULL << VIRTIO_F_VERSION_1) | \ > - (1ULL << VIRTIO_NET_F_STATUS) | \ > - (1ULL << VIRTIO_F_ORDER_PLATFORM) | \ > - (1ULL << VIRTIO_F_ACCESS_PLATFORM) | \ > - (1ULL << VIRTIO_NET_F_MRG_RXBUF)) > - > /* Max 8 data queue pairs(16 queues) and one control vq for now. */ > #define IFCVF_MAX_QUEUES 17 > > diff --git a/drivers/vdpa/ifcvf/ifcvf_main.c b/drivers/vdpa/ifcvf/ifcvf_main.c > index e34c2ec2b69b..b99283a98177 100644 > --- a/drivers/vdpa/ifcvf/ifcvf_main.c > +++ b/drivers/vdpa/ifcvf/ifcvf_main.c > @@ -174,17 +174,12 @@ static u64 ifcvf_vdpa_get_features(struct vdpa_device *vdpa_dev) > struct ifcvf_adapter *adapter = vdpa_to_adapter(vdpa_dev); > struct ifcvf_hw *vf = vdpa_to_vf(vdpa_dev); > struct pci_dev *pdev = adapter->pdev; > - > + u32 type = vf->dev_type; > u64 features; > > - switch (vf->dev_type) { > - case VIRTIO_ID_NET: > - features = ifcvf_get_features(vf) & IFCVF_NET_SUPPORTED_FEATURES; > - break; > - case VIRTIO_ID_BLOCK: > + if (type == VIRTIO_ID_NET || type == VIRTIO_ID_BLOCK) > features = ifcvf_get_features(vf); > - break; > - default: > + else { > features = 0; > IFCVF_ERR(pdev, "VIRTIO ID %u not supported\n", vf->dev_type); > } ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 0/2] vDPA/ifcvf: enable multiqueue and control vq 2021-08-18 9:57 [PATCH 0/2] vDPA/ifcvf: enable multiqueue and control vq Zhu Lingshan 2021-08-18 9:57 ` [PATCH 1/2] vDPA/ifcvf: detect and use the onboard number of queues directly Zhu Lingshan 2021-08-18 9:57 ` [PATCH 2/2] vDPA/ifcvf: enable multiqueue and control vq Zhu Lingshan @ 2021-08-19 4:11 ` Jason Wang 2021-08-19 6:49 ` Zhu, Lingshan 2 siblings, 1 reply; 8+ messages in thread From: Jason Wang @ 2021-08-19 4:11 UTC (permalink / raw) To: Zhu Lingshan, mst; +Cc: virtualization, netdev, kvm 在 2021/8/18 下午5:57, Zhu Lingshan 写道: > This series enables multi-queue and control vq features > for ifcvf. > > These patches are based on my previous vDPA/ifcvf management link > implementation series: > https://lore.kernel.org/kvm/20210812032454.24486-2-lingshan.zhu@intel.com/T/ > > Thanks! > > Zhu Lingshan (2): > vDPA/ifcvf: detect and use the onboard number of queues directly > vDPA/ifcvf: enable multiqueue and control vq > > drivers/vdpa/ifcvf/ifcvf_base.c | 8 +++++--- > drivers/vdpa/ifcvf/ifcvf_base.h | 19 ++++--------------- > drivers/vdpa/ifcvf/ifcvf_main.c | 32 +++++++++++++++----------------- > 3 files changed, 24 insertions(+), 35 deletions(-) > Patch looks good. I wonder the compatibility. E.g does it work on the qemu master without cvq support? (mq=off or not specified) Thanks ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 0/2] vDPA/ifcvf: enable multiqueue and control vq 2021-08-19 4:11 ` [PATCH 0/2] " Jason Wang @ 2021-08-19 6:49 ` Zhu, Lingshan 2021-08-19 7:15 ` Jason Wang 0 siblings, 1 reply; 8+ messages in thread From: Zhu, Lingshan @ 2021-08-19 6:49 UTC (permalink / raw) To: Jason Wang, mst; +Cc: virtualization, netdev, kvm On 8/19/2021 12:11 PM, Jason Wang wrote: > > 在 2021/8/18 下午5:57, Zhu Lingshan 写道: >> This series enables multi-queue and control vq features >> for ifcvf. >> >> These patches are based on my previous vDPA/ifcvf management link >> implementation series: >> https://lore.kernel.org/kvm/20210812032454.24486-2-lingshan.zhu@intel.com/T/ >> >> >> Thanks! >> >> Zhu Lingshan (2): >> vDPA/ifcvf: detect and use the onboard number of queues directly >> vDPA/ifcvf: enable multiqueue and control vq >> >> drivers/vdpa/ifcvf/ifcvf_base.c | 8 +++++--- >> drivers/vdpa/ifcvf/ifcvf_base.h | 19 ++++--------------- >> drivers/vdpa/ifcvf/ifcvf_main.c | 32 +++++++++++++++----------------- >> 3 files changed, 24 insertions(+), 35 deletions(-) >> > > Patch looks good. > > I wonder the compatibility. E.g does it work on the qemu master > without cvq support? (mq=off or not specified) Hi Jason, Yes, it works with qemu master. When no cvq/mq support, only one queue pair shown. Thanks, Zhu Lingshan > > Thanks > ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 0/2] vDPA/ifcvf: enable multiqueue and control vq 2021-08-19 6:49 ` Zhu, Lingshan @ 2021-08-19 7:15 ` Jason Wang 0 siblings, 0 replies; 8+ messages in thread From: Jason Wang @ 2021-08-19 7:15 UTC (permalink / raw) To: Zhu, Lingshan; +Cc: mst, virtualization, netdev, kvm On Thu, Aug 19, 2021 at 2:50 PM Zhu, Lingshan <lingshan.zhu@intel.com> wrote: > > > > On 8/19/2021 12:11 PM, Jason Wang wrote: > > > > 在 2021/8/18 下午5:57, Zhu Lingshan 写道: > >> This series enables multi-queue and control vq features > >> for ifcvf. > >> > >> These patches are based on my previous vDPA/ifcvf management link > >> implementation series: > >> https://lore.kernel.org/kvm/20210812032454.24486-2-lingshan.zhu@intel.com/T/ > >> > >> > >> Thanks! > >> > >> Zhu Lingshan (2): > >> vDPA/ifcvf: detect and use the onboard number of queues directly > >> vDPA/ifcvf: enable multiqueue and control vq > >> > >> drivers/vdpa/ifcvf/ifcvf_base.c | 8 +++++--- > >> drivers/vdpa/ifcvf/ifcvf_base.h | 19 ++++--------------- > >> drivers/vdpa/ifcvf/ifcvf_main.c | 32 +++++++++++++++----------------- > >> 3 files changed, 24 insertions(+), 35 deletions(-) > >> > > > > Patch looks good. > > > > I wonder the compatibility. E.g does it work on the qemu master > > without cvq support? (mq=off or not specified) > Hi Jason, > > Yes, it works with qemu master. When no cvq/mq support, only one queue > pair shown. Good to know this. Thanks > > Thanks, > Zhu Lingshan > > > > Thanks > > > ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2021-08-19 7:16 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2021-08-18 9:57 [PATCH 0/2] vDPA/ifcvf: enable multiqueue and control vq Zhu Lingshan 2021-08-18 9:57 ` [PATCH 1/2] vDPA/ifcvf: detect and use the onboard number of queues directly Zhu Lingshan 2021-08-19 4:09 ` Jason Wang 2021-08-18 9:57 ` [PATCH 2/2] vDPA/ifcvf: enable multiqueue and control vq Zhu Lingshan 2021-08-19 4:09 ` Jason Wang 2021-08-19 4:11 ` [PATCH 0/2] " Jason Wang 2021-08-19 6:49 ` Zhu, Lingshan 2021-08-19 7:15 ` 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).