From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 2D9942BA6 for ; Wed, 24 Feb 2016 16:43:01 +0100 (CET) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga102.fm.intel.com with ESMTP; 24 Feb 2016 07:43:00 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.22,494,1449561600"; d="scan'208";a="752470173" Received: from bricha3-mobl3.ger.corp.intel.com ([10.237.208.64]) by orsmga003.jf.intel.com with SMTP; 24 Feb 2016 07:42:58 -0800 Received: by (sSMTP sendmail emulation); Wed, 24 Feb 2016 15:42:55 +0025 Date: Wed, 24 Feb 2016 15:42:55 +0000 From: Bruce Richardson To: Wang Xiao W Message-ID: <20160224154255.GA21808@bricha3-MOBL3> References: <1454410216-13333-2-git-send-email-xiao.w.wang@intel.com> <1454557129-12825-1-git-send-email-xiao.w.wang@intel.com> <1454557129-12825-2-git-send-email-xiao.w.wang@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1454557129-12825-2-git-send-email-xiao.w.wang@intel.com> Organization: Intel Shannon Ltd. User-Agent: Mutt/1.5.23 (2014-03-12) Cc: dev@dpdk.org Subject: Re: [dpdk-dev] [PATCH v3 1/3] fm10k: enable FTAG based forwarding X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 24 Feb 2016 15:43:01 -0000 On Thu, Feb 04, 2016 at 11:38:47AM +0800, Wang Xiao W wrote: > 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 Any comments on this patch? My thoughts: is there a way in which this could be done without adding in a new build time config option? /Bruce > --- > 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..65d355e 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."); > + return -ENOTSUP; > + } > +#endif > > /* set location and size for descriptor ring */ > FM10K_WRITE_REG(hw, FM10K_TDBAL(i), > diff --git a/drivers/net/fm10k/fm10k_rxtx.c b/drivers/net/fm10k/fm10k_rxtx.c > index e958865..f87987d 100644 > --- a/drivers/net/fm10k/fm10k_rxtx.c > +++ b/drivers/net/fm10k/fm10k_rxtx.c > @@ -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. */ > diff --git a/drivers/net/fm10k/fm10k_rxtx_vec.c b/drivers/net/fm10k/fm10k_rxtx_vec.c > index 2a57eef..0b0f2e3 100644 > --- a/drivers/net/fm10k/fm10k_rxtx_vec.c > +++ b/drivers/net/fm10k/fm10k_rxtx_vec.c > @@ -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 > -- > 1.9.3 >