Hi Chenbo,

Sure. I will address in next version.

> -----Original Message-----
> From: Xia, Chenbo <chenbo....@intel.com>
> Sent: Wednesday, October 12, 2022 2:09 PM
> To: Pei, Andy <andy....@intel.com>; dev@dpdk.org
> Cc: Xu, Rosen <rosen...@intel.com>; Huang, Wei <wei.hu...@intel.com>;
> Cao, Gang <gang....@intel.com>; maxime.coque...@redhat.com
> Subject: RE: [PATCH v3 3/8] vdpa/ifc: set max queues based on virtio spec
> 
> > -----Original Message-----
> > From: Pei, Andy <andy....@intel.com>
> > Sent: Friday, September 16, 2022 2:16 PM
> > To: dev@dpdk.org
> > Cc: Xia, Chenbo <chenbo....@intel.com>; Xu, Rosen
> > <rosen...@intel.com>; Huang, Wei <wei.hu...@intel.com>; Cao, Gang
> > <gang....@intel.com>; maxime.coque...@redhat.com
> > Subject: [PATCH v3 3/8] vdpa/ifc: set max queues based on virtio spec
> >
> > Set max_queues according to virtio HW spec.
> 
> Virtio spec
> 
> > For virtio BLK device, set max_queues to the value of "num_queues".
> > "num_queues" is element of struct virtio_blk_config.
> 
> Set max_queues to the value of num_queues in struct virtio_blk_config
> 
> > For virtio NET device, read num_queues from truct
> > ifcvf_pci_common_cfg,
> 
> truct -> struct
> 
> > calculate "queue_pairs = (num_queues - 1) / 2" and get queue_pairs.
> > Set max_queues to the value of "queue_pairs".
> 
> And say 'get the queue pair number using num_queues and set max_queues
> to it'.
> 
> >
> > Signed-off-by: Andy Pei <andy....@intel.com>
> > Signed-off-by: Huang Wei <wei.hu...@intel.com>
> > ---
> >  drivers/vdpa/ifc/base/ifcvf.h |  2 +-  drivers/vdpa/ifc/ifcvf_vdpa.c
> > | 19 ++++++++++++++++++-
> >  2 files changed, 19 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/vdpa/ifc/base/ifcvf.h
> > b/drivers/vdpa/ifc/base/ifcvf.h index d16d9ab..1e133c0 100644
> > --- a/drivers/vdpa/ifc/base/ifcvf.h
> > +++ b/drivers/vdpa/ifc/base/ifcvf.h
> > @@ -21,7 +21,7 @@
> >  #define IFCVF_SUBSYS_NET_DEVICE_ID          0x0001
> >  #define IFCVF_SUBSYS_BLK_DEVICE_ID          0x0002
> >
> > -#define IFCVF_MAX_QUEUES           1
> > +#define IFCVF_MAX_QUEUES           32
> >
> >  #ifndef VIRTIO_F_IOMMU_PLATFORM
> >  #define VIRTIO_F_IOMMU_PLATFORM            33
> > diff --git a/drivers/vdpa/ifc/ifcvf_vdpa.c
> > b/drivers/vdpa/ifc/ifcvf_vdpa.c index 3e5ffba..376239a 100644
> > --- a/drivers/vdpa/ifc/ifcvf_vdpa.c
> > +++ b/drivers/vdpa/ifc/ifcvf_vdpa.c
> > @@ -26,6 +26,12 @@
> >
> >  #include "base/ifcvf.h"
> >
> > +/*
> > + * RTE_MIN() cannot be used since braced-group within expression
> > +allowed
> > + * only inside a function.
> > + */
> > +#define MIN(v1, v2)        ((v1) < (v2) ? (v1) : (v2))
> > +
> >  RTE_LOG_REGISTER(ifcvf_vdpa_logtype, pmd.vdpa.ifcvf, NOTICE);
> > #define DRV_LOG(level, fmt, args...) \
> >     rte_log(RTE_LOG_ ## level, ifcvf_vdpa_logtype, \ @@ -1512,6
> +1518,7
> > @@ struct rte_vdpa_dev_info dev_info[] = {
> >     uint64_t capacity = 0;
> >     uint8_t *byte;
> >     uint32_t i;
> > +   uint16_t queue_pairs;
> >
> >     if (rte_eal_process_type() != RTE_PROC_PRIMARY)
> >             return 0;
> > @@ -1559,7 +1566,6 @@ struct rte_vdpa_dev_info dev_info[] = {
> >     }
> >
> >     internal->configured = 0;
> > -   internal->max_queues = IFCVF_MAX_QUEUES;
> >     features = ifcvf_get_features(&internal->hw);
> >
> >     device_id = ifcvf_pci_get_device_type(pci_dev);
> > @@ -1570,6 +1576,14 @@ struct rte_vdpa_dev_info dev_info[] = {
> >
> >     if (device_id == VIRTIO_ID_NET) {
> >             internal->hw.device_type = IFCVF_NET;
> > +           /*
> > +            * ifc driver always has CTRL_VQ,
> 
> I think it's ifc _device_ has CTRL_VQ
> 
> Thanks,
> Chenbo
> 
> > +            * and supports VIRTIO_NET_F_CTRL_VQ feature.
> > +            */
> > +           queue_pairs = (internal->hw.common_cfg->num_queues - 1)
> / 2;
> > +           DRV_LOG(INFO, "%s support %u queue pairs", pci_dev-
> >name,
> > +                   queue_pairs);
> > +           internal->max_queues = MIN(IFCVF_MAX_QUEUES,
> queue_pairs);
> >             internal->features = features &
> >                                     ~(1ULL <<
> VIRTIO_F_IOMMU_PLATFORM);
> >             internal->features |= dev_info[IFCVF_NET].features; @@ -
> 1609,6
> > +1623,9 @@ struct rte_vdpa_dev_info dev_info[] = {
> >                     internal->hw.blk_cfg->geometry.sectors);
> >             DRV_LOG(DEBUG, "num_queues: 0x%08x",
> >                     internal->hw.blk_cfg->num_queues);
> > +
> > +           internal->max_queues = MIN(IFCVF_MAX_QUEUES,
> > +                   internal->hw.blk_cfg->num_queues);
> >     }
> >
> >     list->internal = internal;
> > --
> > 1.8.3.1

Reply via email to