[dpdk-dev,v2,1/3] fm10k: enable FTAG based forwarding
Commit Message
This patch enables reading sglort info into mbuf for RX and inserting
an FTAG at the beginning of the packet for TX. The vlan_tci_outer field
selected from rte_mbuf structure for sglort is not used in fm10k now.
In FTAG based forwarding mode, the switch will forward packets according
to glort info in FTAG rather than mac and vlan table.
To activate this feature, user needs to turn ``CONFIG_RTE_LIBRTE_FM10K_FTAG_FWD``
to y in common_linuxapp or common_bsdapp. Currently this feature is supported
only on PF, because FM10K_PFVTCTL register is read-only for VF.
Signed-off-by: Wang Xiao W <xiao.w.wang@intel.com>
---
config/common_bsdapp | 1 +
config/common_linuxapp | 1 +
drivers/net/fm10k/fm10k_ethdev.c | 12 ++++++++++++
drivers/net/fm10k/fm10k_rxtx.c | 17 +++++++++++++++++
drivers/net/fm10k/fm10k_rxtx_vec.c | 9 +++++++++
5 files changed, 40 insertions(+)
Comments
Hi,
Best Regards,
Mark
> -----Original Message-----
> From: Wang, Xiao W
> Sent: Tuesday, February 02, 2016 6:50 PM
> To: Chen, Jing D
> Cc: dev@dpdk.org; Qiu, Michael; He, Shaopeng; Wang, Xiao W
> Subject: [PATCH v2 1/3] fm10k: enable FTAG based forwarding
>
> This patch enables reading sglort info into mbuf for RX and inserting
> an FTAG at the beginning of the packet for TX. The vlan_tci_outer field
> selected from rte_mbuf structure for sglort is not used in fm10k now.
> In FTAG based forwarding mode, the switch will forward packets according
> to glort info in FTAG rather than mac and vlan table.
>
> To activate this feature, user needs to turn
> ``CONFIG_RTE_LIBRTE_FM10K_FTAG_FWD``
> to y in common_linuxapp or common_bsdapp. Currently this feature is
> supported
> only on PF, because FM10K_PFVTCTL register is read-only for VF.
>
> Signed-off-by: Wang Xiao W <xiao.w.wang@intel.com>
> ---
> config/common_bsdapp | 1 +
> config/common_linuxapp | 1 +
> drivers/net/fm10k/fm10k_ethdev.c | 12 ++++++++++++
> drivers/net/fm10k/fm10k_rxtx.c | 17 +++++++++++++++++
> drivers/net/fm10k/fm10k_rxtx_vec.c | 9 +++++++++
> 5 files changed, 40 insertions(+)
>
> diff --git a/config/common_bsdapp b/config/common_bsdapp
> index ed7c31c..451f81a 100644
> --- a/config/common_bsdapp
> +++ b/config/common_bsdapp
> @@ -208,6 +208,7 @@ CONFIG_RTE_LIBRTE_FM10K_DEBUG_TX=n
> CONFIG_RTE_LIBRTE_FM10K_DEBUG_TX_FREE=n
> CONFIG_RTE_LIBRTE_FM10K_DEBUG_DRIVER=n
> CONFIG_RTE_LIBRTE_FM10K_RX_OLFLAGS_ENABLE=y
> +CONFIG_RTE_LIBRTE_FM10K_FTAG_FWD=n
>
> #
> # Compile burst-oriented Mellanox ConnectX-3 (MLX4) PMD
> diff --git a/config/common_linuxapp b/config/common_linuxapp
> index 74bc515..c928bce 100644
> --- a/config/common_linuxapp
> +++ b/config/common_linuxapp
> @@ -207,6 +207,7 @@ CONFIG_RTE_LIBRTE_FM10K_DEBUG_TX_FREE=n
> CONFIG_RTE_LIBRTE_FM10K_DEBUG_DRIVER=n
> CONFIG_RTE_LIBRTE_FM10K_RX_OLFLAGS_ENABLE=y
> CONFIG_RTE_LIBRTE_FM10K_INC_VECTOR=y
> +CONFIG_RTE_LIBRTE_FM10K_FTAG_FWD=n
>
> #
> # Compile burst-oriented Mellanox ConnectX-3 (MLX4) PMD
> diff --git a/drivers/net/fm10k/fm10k_ethdev.c
> b/drivers/net/fm10k/fm10k_ethdev.c
> index e4aed94..3a15c24 100644
> --- a/drivers/net/fm10k/fm10k_ethdev.c
> +++ b/drivers/net/fm10k/fm10k_ethdev.c
> @@ -668,6 +668,18 @@ fm10k_dev_tx_init(struct rte_eth_dev *dev)
> PMD_INIT_LOG(ERR, "failed to disable queue %d", i);
> return -1;
> }
> +#ifdef RTE_LIBRTE_FM10K_FTAG_FWD
> + /* Enable use of FTAG bit in TX descriptor, PFVTCTL
> + * register is read-only for VF.
> + */
> + if (hw->mac.type == fm10k_mac_pf)
> + FM10K_WRITE_REG(hw, FM10K_PFVTCTL(i),
> +
> FM10K_PFVTCTL_FTAG_DESC_ENABLE);
> + else {
> + PMD_INIT_LOG(ERR, "FTAG is not supported in
> VF.\n");
"\n" is not necessary.
> + return -1;
Return "-ENOTSUP"?
> + }
> +#endif
>
> /* set location and size for descriptor ring */
> FM10K_WRITE_REG(hw, FM10K_TDBAL(i),
Hi Mark,
> -----Original Message-----
> From: Chen, Jing D
> Sent: Wednesday, February 3, 2016 2:53 PM
> To: Wang, Xiao W <xiao.w.wang@intel.com>
> Cc: dev@dpdk.org; Qiu, Michael <michael.qiu@intel.com>; He, Shaopeng
> <shaopeng.he@intel.com>
> Subject: RE: [PATCH v2 1/3] fm10k: enable FTAG based forwarding
>
> Hi,
>
> Best Regards,
> Mark
>
>
> > -----Original Message-----
> > From: Wang, Xiao W
> > Sent: Tuesday, February 02, 2016 6:50 PM
> > To: Chen, Jing D
> > Cc: dev@dpdk.org; Qiu, Michael; He, Shaopeng; Wang, Xiao W
> > Subject: [PATCH v2 1/3] fm10k: enable FTAG based forwarding
> >
> > This patch enables reading sglort info into mbuf for RX and inserting
> > an FTAG at the beginning of the packet for TX. The vlan_tci_outer
> > field selected from rte_mbuf structure for sglort is not used in fm10k now.
> > In FTAG based forwarding mode, the switch will forward packets
> > according to glort info in FTAG rather than mac and vlan table.
> >
> > To activate this feature, user needs to turn
> > ``CONFIG_RTE_LIBRTE_FM10K_FTAG_FWD``
> > to y in common_linuxapp or common_bsdapp. Currently this feature is
> > supported only on PF, because FM10K_PFVTCTL register is read-only for
> > VF.
> >
> > Signed-off-by: Wang Xiao W <xiao.w.wang@intel.com>
> > ---
> > config/common_bsdapp | 1 +
> > config/common_linuxapp | 1 +
> > drivers/net/fm10k/fm10k_ethdev.c | 12 ++++++++++++
> > drivers/net/fm10k/fm10k_rxtx.c | 17 +++++++++++++++++
> > drivers/net/fm10k/fm10k_rxtx_vec.c | 9 +++++++++
> > 5 files changed, 40 insertions(+)
> >
> > diff --git a/config/common_bsdapp b/config/common_bsdapp index
> > ed7c31c..451f81a 100644
> > --- a/config/common_bsdapp
> > +++ b/config/common_bsdapp
> > @@ -208,6 +208,7 @@ CONFIG_RTE_LIBRTE_FM10K_DEBUG_TX=n
> > CONFIG_RTE_LIBRTE_FM10K_DEBUG_TX_FREE=n
> > CONFIG_RTE_LIBRTE_FM10K_DEBUG_DRIVER=n
> > CONFIG_RTE_LIBRTE_FM10K_RX_OLFLAGS_ENABLE=y
> > +CONFIG_RTE_LIBRTE_FM10K_FTAG_FWD=n
> >
> > #
> > # Compile burst-oriented Mellanox ConnectX-3 (MLX4) PMD diff --git
> > a/config/common_linuxapp b/config/common_linuxapp index
> > 74bc515..c928bce 100644
> > --- a/config/common_linuxapp
> > +++ b/config/common_linuxapp
> > @@ -207,6 +207,7 @@ CONFIG_RTE_LIBRTE_FM10K_DEBUG_TX_FREE=n
> > CONFIG_RTE_LIBRTE_FM10K_DEBUG_DRIVER=n
> > CONFIG_RTE_LIBRTE_FM10K_RX_OLFLAGS_ENABLE=y
> > CONFIG_RTE_LIBRTE_FM10K_INC_VECTOR=y
> > +CONFIG_RTE_LIBRTE_FM10K_FTAG_FWD=n
> >
> > #
> > # Compile burst-oriented Mellanox ConnectX-3 (MLX4) PMD diff --git
> > a/drivers/net/fm10k/fm10k_ethdev.c
> > b/drivers/net/fm10k/fm10k_ethdev.c
> > index e4aed94..3a15c24 100644
> > --- a/drivers/net/fm10k/fm10k_ethdev.c
> > +++ b/drivers/net/fm10k/fm10k_ethdev.c
> > @@ -668,6 +668,18 @@ fm10k_dev_tx_init(struct rte_eth_dev *dev)
> > PMD_INIT_LOG(ERR, "failed to disable queue %d", i);
> > return -1;
> > }
> > +#ifdef RTE_LIBRTE_FM10K_FTAG_FWD
> > + /* Enable use of FTAG bit in TX descriptor, PFVTCTL
> > + * register is read-only for VF.
> > + */
> > + if (hw->mac.type == fm10k_mac_pf)
> > + FM10K_WRITE_REG(hw, FM10K_PFVTCTL(i),
> > +
> > FM10K_PFVTCTL_FTAG_DESC_ENABLE);
> > + else {
> > + PMD_INIT_LOG(ERR, "FTAG is not supported in
> > VF.\n");
>
> "\n" is not necessary.
Yes, PMD_INIT_LOG has already included a "\n". I will remove it.
>
> > + return -1;
>
> Return "-ENOTSUP"?
>
Yes, "-ENOTSUP" is meaningful, thanks for your comments, I'll fix it in v3.
Best Regards,
Wang Xiao
> > + }
> > +#endif
> >
> > /* set location and size for descriptor ring */
> > FM10K_WRITE_REG(hw, FM10K_TDBAL(i),
v3:
* Removed "\n" in PMD_INIT_LOG.
* Returned "-ENOTSUP" instead of -1 in VF FTAG use case.
v2:
* Gave an error message for VF FTAG use case.
* Added a notice in the doc to emphasize that application should ensure
an appropriate FTAG for every frame in FTAG based forwarding mode.
Wang Xiao W (3):
fm10k: enable FTAG based forwarding
doc: add introduction for fm10k FTAG based forwarding
doc: update release note for fm10k FTAG support
config/common_bsdapp | 1 +
config/common_linuxapp | 1 +
doc/guides/nics/fm10k.rst | 16 +++++++++++++++-
doc/guides/rel_notes/release_2_3.rst | 1 +
drivers/net/fm10k/fm10k_ethdev.c | 12 ++++++++++++
drivers/net/fm10k/fm10k_rxtx.c | 17 +++++++++++++++++
drivers/net/fm10k/fm10k_rxtx_vec.c | 9 +++++++++
7 files changed, 56 insertions(+), 1 deletion(-)
Hi,
Best Regards,
Mark
> -----Original Message-----
> From: Wang, Xiao W
> Sent: Thursday, February 04, 2016 11:39 AM
> To: Chen, Jing D
> Cc: dev@dpdk.org; Qiu, Michael; He, Shaopeng; Wang, Xiao W
> Subject: [PATCH v3 0/3] fm10k: enable FTAG based forwarding
>
> v3:
> * Removed "\n" in PMD_INIT_LOG.
>
> * Returned "-ENOTSUP" instead of -1 in VF FTAG use case.
>
> v2:
> * Gave an error message for VF FTAG use case.
>
> * Added a notice in the doc to emphasize that application should ensure
> an appropriate FTAG for every frame in FTAG based forwarding mode.
>
> Wang Xiao W (3):
> fm10k: enable FTAG based forwarding
> doc: add introduction for fm10k FTAG based forwarding
> doc: update release note for fm10k FTAG support
>
> config/common_bsdapp | 1 +
> config/common_linuxapp | 1 +
> doc/guides/nics/fm10k.rst | 16 +++++++++++++++-
> doc/guides/rel_notes/release_2_3.rst | 1 +
> drivers/net/fm10k/fm10k_ethdev.c | 12 ++++++++++++
> drivers/net/fm10k/fm10k_rxtx.c | 17 +++++++++++++++++
> drivers/net/fm10k/fm10k_rxtx_vec.c | 9 +++++++++
> 7 files changed, 56 insertions(+), 1 deletion(-)
>
> --
> 1.9.3
Acked-by: Jing Chen <jing.d.chen@intel.com>
@@ -208,6 +208,7 @@ CONFIG_RTE_LIBRTE_FM10K_DEBUG_TX=n
CONFIG_RTE_LIBRTE_FM10K_DEBUG_TX_FREE=n
CONFIG_RTE_LIBRTE_FM10K_DEBUG_DRIVER=n
CONFIG_RTE_LIBRTE_FM10K_RX_OLFLAGS_ENABLE=y
+CONFIG_RTE_LIBRTE_FM10K_FTAG_FWD=n
#
# Compile burst-oriented Mellanox ConnectX-3 (MLX4) PMD
@@ -207,6 +207,7 @@ CONFIG_RTE_LIBRTE_FM10K_DEBUG_TX_FREE=n
CONFIG_RTE_LIBRTE_FM10K_DEBUG_DRIVER=n
CONFIG_RTE_LIBRTE_FM10K_RX_OLFLAGS_ENABLE=y
CONFIG_RTE_LIBRTE_FM10K_INC_VECTOR=y
+CONFIG_RTE_LIBRTE_FM10K_FTAG_FWD=n
#
# Compile burst-oriented Mellanox ConnectX-3 (MLX4) PMD
@@ -668,6 +668,18 @@ fm10k_dev_tx_init(struct rte_eth_dev *dev)
PMD_INIT_LOG(ERR, "failed to disable queue %d", i);
return -1;
}
+#ifdef RTE_LIBRTE_FM10K_FTAG_FWD
+ /* Enable use of FTAG bit in TX descriptor, PFVTCTL
+ * register is read-only for VF.
+ */
+ if (hw->mac.type == fm10k_mac_pf)
+ FM10K_WRITE_REG(hw, FM10K_PFVTCTL(i),
+ FM10K_PFVTCTL_FTAG_DESC_ENABLE);
+ else {
+ PMD_INIT_LOG(ERR, "FTAG is not supported in VF.\n");
+ return -1;
+ }
+#endif
/* set location and size for descriptor ring */
FM10K_WRITE_REG(hw, FM10K_TDBAL(i),
@@ -152,6 +152,13 @@ fm10k_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
*/
mbuf->ol_flags |= PKT_RX_VLAN_PKT;
mbuf->vlan_tci = desc.w.vlan;
+#ifdef RTE_LIBRTE_FM10K_FTAG_FWD
+ /**
+ * mbuf->vlan_tci_outer is an idle field in fm10k driver,
+ * so it can be selected to store sglort value.
+ */
+ mbuf->vlan_tci_outer = rte_le_to_cpu_16(desc.w.sglort);
+#endif
rx_pkts[count] = mbuf;
if (++next_dd == q->nb_desc) {
@@ -307,6 +314,13 @@ fm10k_recv_scattered_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
*/
mbuf->ol_flags |= PKT_RX_VLAN_PKT;
first_seg->vlan_tci = desc.w.vlan;
+#ifdef RTE_LIBRTE_FM10K_FTAG_FWD
+ /**
+ * mbuf->vlan_tci_outer is an idle field in fm10k driver,
+ * so it can be selected to store sglort value.
+ */
+ first_seg->vlan_tci_outer = rte_le_to_cpu_16(desc.w.sglort);
+#endif
/* Prefetch data of first segment, if configured to do so. */
rte_packet_prefetch((char *)first_seg->buf_addr +
@@ -432,6 +446,9 @@ static inline void tx_xmit_pkt(struct fm10k_tx_queue *q, struct rte_mbuf *mb)
q->nb_free -= mb->nb_segs;
q->hw_ring[q->next_free].flags = 0;
+#ifdef RTE_LIBRTE_FM10K_FTAG_FWD
+ q->hw_ring[q->next_free].flags |= FM10K_TXD_FLAG_FTAG;
+#endif
/* set checksum flags on first descriptor of packet. SCTP checksum
* offload is not supported, but we do not explicitly check for this
* case in favor of greatly simplified processing. */
@@ -198,7 +198,12 @@ fm10k_rx_vec_condition_check(struct rte_eth_dev *dev)
rxmode->header_split == 1)
return -1;
+#ifdef RTE_LIBRTE_FM10K_FTAG_FWD
+ return -1;
+#else
return 0;
+#endif
+
#else
RTE_SET_USED(dev);
return -1;
@@ -648,7 +653,11 @@ fm10k_tx_vec_condition_check(struct fm10k_tx_queue *txq)
if ((txq->txq_flags & FM10K_SIMPLE_TX_FLAG) != FM10K_SIMPLE_TX_FLAG)
return -1;
+#ifdef RTE_LIBRTE_FM10K_FTAG_FWD
+ return -1;
+#else
return 0;
+#endif
}
static inline void