[dpdk-dev,v3,22/26] net/bnxt: add code to determine the Rx status of VF

Message ID 20170601030232.38677-23-ajit.khaparde@broadcom.com (mailing list archive)
State Superseded, archived
Delegated to: Ferruh Yigit
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation fail apply patch file failure

Commit Message

Ajit Khaparde June 1, 2017, 3:02 a.m. UTC
  This patch adds code to determine the Rx status of a VF.
It adds the rte_pmd_bnxt_get_vf_rx_status call, which calculates
the VNIC count of the function to get the Rx status.

Signed-off-by: Stephen Hurd <stephen.hurd@broadcom.com>
Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>

--
v1->v2: regroup related patches and incorporate other review comments

v2->v3:
  - Rebasing to next-net tree
  - Use net/bnxt instead of just bnxt in patch subject
  - Add a protection against application calling the API for different
  vendor's port_id
---
 drivers/net/bnxt/bnxt_hwrm.c              | 24 ++++++++++++++++++
 drivers/net/bnxt/bnxt_hwrm.h              |  1 +
 drivers/net/bnxt/rte_pmd_bnxt.c           | 42 +++++++++++++++++++++++++++++++
 drivers/net/bnxt/rte_pmd_bnxt.h           | 17 +++++++++++++
 drivers/net/bnxt/rte_pmd_bnxt_version.map |  1 +
 5 files changed, 85 insertions(+)
  

Comments

Ferruh Yigit June 1, 2017, 12:28 p.m. UTC | #1
Hi Ajit,

On 6/1/2017 4:02 AM, Ajit Khaparde wrote:
> This patch adds code to determine the Rx status of a VF.
> It adds the rte_pmd_bnxt_get_vf_rx_status call, which calculates
> the VNIC count of the function to get the Rx status.
> 
> Signed-off-by: Stephen Hurd <stephen.hurd@broadcom.com>
> Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>

<...>

> +int rte_pmd_bnxt_get_tx_drop_count(uint8_t port, uint64_t *count)
> +{
> +	struct rte_eth_dev *dev;
> +	struct rte_eth_dev_info dev_info;
> +	struct bnxt *bp;
> +
> +	dev = &rte_eth_devices[port];
> +	if (!is_bnxt_supported(dev))
> +		return -ENOTSUP;
> +
> +	rte_eth_dev_info_get(port, &dev_info);
> +	bp = (struct bnxt *)dev->data->dev_private;
> +
> +	return bnxt_hwrm_func_qstats_tx_drop(bp, 0xffff, count);
> +}

I guess there is rebasing error here, this function left here and
causing a build error [1].
(or function tries to sneak in within another patch :)

[1]
.../drivers/net/bnxt/rte_pmd_bnxt.c:639:5: error: no previous prototype
for function 'rte_pmd_bnxt_get_tx_drop_count' [-Werror,-Wmissing-prototypes]
int rte_pmd_bnxt_get_tx_drop_count(uint8_t port, uint64_t *count)
    ^
  
Ajit Khaparde June 1, 2017, 4:36 p.m. UTC | #2
On Thu, Jun 1, 2017 at 7:28 AM, Ferruh Yigit <ferruh.yigit@intel.com> wrote:

> Hi Ajit,
>
> On 6/1/2017 4:02 AM, Ajit Khaparde wrote:
> > This patch adds code to determine the Rx status of a VF.
> > It adds the rte_pmd_bnxt_get_vf_rx_status call, which calculates
> > the VNIC count of the function to get the Rx status.
> >
> > Signed-off-by: Stephen Hurd <stephen.hurd@broadcom.com>
> > Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
>
> <...>
>
> > +int rte_pmd_bnxt_get_tx_drop_count(uint8_t port, uint64_t *count)
> > +{
> > +     struct rte_eth_dev *dev;
> > +     struct rte_eth_dev_info dev_info;
> > +     struct bnxt *bp;
> > +
> > +     dev = &rte_eth_devices[port];
> > +     if (!is_bnxt_supported(dev))
> > +             return -ENOTSUP;
> > +
> > +     rte_eth_dev_info_get(port, &dev_info);
> > +     bp = (struct bnxt *)dev->data->dev_private;
> > +
> > +     return bnxt_hwrm_func_qstats_tx_drop(bp, 0xffff, count);
> > +}
>
> I guess there is rebasing error here, this function left here and
> causing a build error [1].
> (or function tries to sneak in within another patch :)
>
​Yes. It seems to have. I was actually trying to avoid this and compile
testing
at a minimum during each rebase step to make sure.
But may be the warning message scrolled away.

I am sending a new series.

Thanks
​


>
> [1]
> .../drivers/net/bnxt/rte_pmd_bnxt.c:639:5: error: no previous prototype
> for function 'rte_pmd_bnxt_get_tx_drop_count'
> [-Werror,-Wmissing-prototypes]
> int rte_pmd_bnxt_get_tx_drop_count(uint8_t port, uint64_t *count)
>     ^
>
  

Patch

diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c
index 6ea31ca..721e652 100644
--- a/drivers/net/bnxt/bnxt_hwrm.c
+++ b/drivers/net/bnxt/bnxt_hwrm.c
@@ -2626,6 +2626,30 @@  int bnxt_hwrm_port_led_cfg(struct bnxt *bp, bool led_on)
 	return rc;
 }
 
+static void bnxt_vnic_count(struct bnxt_vnic_info *vnic, void *cbdata)
+{
+	uint32_t *count = cbdata;
+
+	if (vnic->func_default)
+		*count = *count + 1;
+}
+
+static int bnxt_vnic_count_hwrm_stub(struct bnxt *bp __rte_unused,
+				     struct bnxt_vnic_info *vnic __rte_unused)
+{
+	return 0;
+}
+
+int bnxt_vf_default_vnic_count(struct bnxt *bp, uint16_t vf)
+{
+	uint32_t count = 0;
+
+	bnxt_hwrm_func_vf_vnic_query_and_config(bp, vf, bnxt_vnic_count,
+	    &count, bnxt_vnic_count_hwrm_stub);
+
+	return count;
+}
+
 static int bnxt_hwrm_func_vf_vnic_query(struct bnxt *bp, uint16_t vf,
 					uint16_t *vnic_ids)
 {
diff --git a/drivers/net/bnxt/bnxt_hwrm.h b/drivers/net/bnxt/bnxt_hwrm.h
index 5aaf947..01e72fa 100644
--- a/drivers/net/bnxt/bnxt_hwrm.h
+++ b/drivers/net/bnxt/bnxt_hwrm.h
@@ -141,6 +141,7 @@  int bnxt_hwrm_port_clr_stats(struct bnxt *bp);
 int bnxt_hwrm_port_led_cfg(struct bnxt *bp, bool led_on);
 int bnxt_hwrm_port_led_qcaps(struct bnxt *bp);
 int bnxt_hwrm_func_cfg_vf_set_flags(struct bnxt *bp, uint16_t vf);
+int bnxt_vf_default_vnic_count(struct bnxt *bp, uint16_t vf);
 int bnxt_hwrm_func_vf_vnic_query_and_config(struct bnxt *bp, uint16_t vf,
 	void (*vnic_cb)(struct bnxt_vnic_info *, void *), void *cbdata,
 	int (*hwrm_cb)(struct bnxt *bp, struct bnxt_vnic_info *vnic));
diff --git a/drivers/net/bnxt/rte_pmd_bnxt.c b/drivers/net/bnxt/rte_pmd_bnxt.c
index d9e97ab..a4bae26 100644
--- a/drivers/net/bnxt/rte_pmd_bnxt.c
+++ b/drivers/net/bnxt/rte_pmd_bnxt.c
@@ -510,6 +510,48 @@  int rte_pmd_bnxt_reset_vf_stats(uint8_t port,
 	return bnxt_hwrm_func_clr_stats(bp, bp->pf.first_vf_id + vf_id);
 }
 
+int rte_pmd_bnxt_get_vf_rx_status(uint8_t port, uint16_t vf_id)
+{
+	struct rte_eth_dev *dev;
+	struct rte_eth_dev_info dev_info;
+	struct bnxt *bp;
+
+	dev = &rte_eth_devices[port];
+	if (!is_bnxt_supported(dev))
+		return -ENOTSUP;
+
+	rte_eth_dev_info_get(port, &dev_info);
+	bp = (struct bnxt *)dev->data->dev_private;
+
+	if (vf_id >= dev_info.max_vfs)
+		return -EINVAL;
+
+	if (!BNXT_PF(bp)) {
+		RTE_LOG(ERR, PMD,
+			"Attempt to query VF %d RX stats on non-PF port %d!\n",
+			vf_id, port);
+		return -ENOTSUP;
+	}
+
+	return bnxt_vf_default_vnic_count(bp, vf_id);
+}
+
+int rte_pmd_bnxt_get_tx_drop_count(uint8_t port, uint64_t *count)
+{
+	struct rte_eth_dev *dev;
+	struct rte_eth_dev_info dev_info;
+	struct bnxt *bp;
+
+	dev = &rte_eth_devices[port];
+	if (!is_bnxt_supported(dev))
+		return -ENOTSUP;
+
+	rte_eth_dev_info_get(port, &dev_info);
+	bp = (struct bnxt *)dev->data->dev_private;
+
+	return bnxt_hwrm_func_qstats_tx_drop(bp, 0xffff, count);
+}
+
 int rte_pmd_bnxt_get_vf_tx_drop_count(uint8_t port, uint16_t vf_id,
 				      uint64_t *count)
 {
diff --git a/drivers/net/bnxt/rte_pmd_bnxt.h b/drivers/net/bnxt/rte_pmd_bnxt.h
index eef5212..e69910e 100644
--- a/drivers/net/bnxt/rte_pmd_bnxt.h
+++ b/drivers/net/bnxt/rte_pmd_bnxt.h
@@ -217,6 +217,23 @@  int rte_pmd_bnxt_reset_vf_stats(uint8_t port,
  */
 int rte_pmd_bnxt_set_vf_vlan_anti_spoof(uint8_t port, uint16_t vf, uint8_t on);
 
+
+/**
+ * Returns the number of default RX queues on a VF
+ *
+ * @param port
+ *    The port identifier of the Ethernet device.
+ * @param vf
+ *   VF id.
+ * @return
+ *   - Non-negative value - Number of default RX queues
+ *   - (-EINVAL) if bad parameter.
+ *   - (-ENOTSUP) if on a function without VFs
+ *   - (-ENOMEM) on an allocation failure
+ *   - (-1) firmware interface error
+ */
+int rte_pmd_bnxt_get_vf_rx_status(uint8_t port, uint16_t vf_id);
+
 /**
  * Queries the TX drop counter for the function
  *
diff --git a/drivers/net/bnxt/rte_pmd_bnxt_version.map b/drivers/net/bnxt/rte_pmd_bnxt_version.map
index f0eda7b..c68c125 100644
--- a/drivers/net/bnxt/rte_pmd_bnxt_version.map
+++ b/drivers/net/bnxt/rte_pmd_bnxt_version.map
@@ -3,6 +3,7 @@  DPDK_17.08 {
 
 	rte_pmd_bnxt_set_tx_loopback;
 	rte_pmd_bnxt_set_all_queues_drop_en;
+	rte_pmd_bnxt_get_vf_rx_status;
 	rte_pmd_bnxt_set_vf_mac_addr;
 	rte_pmd_bnxt_set_vf_mac_anti_spoof;
 	rte_pmd_bnxt_set_vf_rate_limit;