[dpdk-dev] [PATCH v4 05/12] pmd/fm10k: add dev_ptype_info_get implementation

Ananyev, Konstantin konstantin.ananyev at intel.com
Thu Mar 3 16:47:26 CET 2016



> -----Original Message-----
> From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Tan, Jianfeng
> Sent: Thursday, March 03, 2016 6:04 AM
> To: Chen, Jing D; dev at dpdk.org
> Subject: Re: [dpdk-dev] [PATCH v4 05/12] pmd/fm10k: add dev_ptype_info_get implementation
> 
> Hi,
> 
> On 3/3/2016 4:11 AM, Chen, Jing D wrote:
> > Hi,
> >
> > -----Original Message-----
> > From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Jianfeng Tan
> > Sent: Thursday, February 25, 2016 6:09 PM
> > To: dev at dpdk.org
> > Subject: [dpdk-dev] [PATCH v4 05/12] pmd/fm10k: add dev_ptype_info_get implementation
> >
> > Signed-off-by: Jianfeng Tan <jianfeng.tan at intel.com>
> > ---
> >   drivers/net/fm10k/fm10k_ethdev.c   | 50 ++++++++++++++++++++++++++++++++++++++
> >   drivers/net/fm10k/fm10k_rxtx.c     |  3 +++
> >   drivers/net/fm10k/fm10k_rxtx_vec.c |  3 +++
> >   3 files changed, 56 insertions(+)
> >
> > diff --git a/drivers/net/fm10k/fm10k_ethdev.c b/drivers/net/fm10k/fm10k_ethdev.c
> > index 421266b..429cbdd 100644
> > --- a/drivers/net/fm10k/fm10k_ethdev.c
> > +++ b/drivers/net/fm10k/fm10k_ethdev.c
> > @@ -1335,6 +1335,55 @@ fm10k_dev_infos_get(struct rte_eth_dev *dev,
> >   	};
> >   }
> >
> > +#ifdef RTE_LIBRTE_FM10K_RX_OLFLAGS_ENABLE
> > +static const uint32_t *
> > +fm10k_dev_ptype_info_get(struct rte_eth_dev *dev) {
> > +	if (dev->rx_pkt_burst == fm10k_recv_pkts ||
> > +	    dev->rx_pkt_burst == fm10k_recv_scattered_pkts) {
> > +		static uint32_t ptypes[] = {
> > +			/* refers to rx_desc_to_ol_flags() */
> > +			RTE_PTYPE_L2_ETHER,
> > +			RTE_PTYPE_L3_IPV4,
> > +			RTE_PTYPE_L3_IPV4_EXT,
> > +			RTE_PTYPE_L3_IPV6,
> > +			RTE_PTYPE_L3_IPV6_EXT,
> > +			RTE_PTYPE_L4_TCP,
> > +			RTE_PTYPE_L4_UDP,
> > +			RTE_PTYPE_UNKNOWN
> > +		};
> > +
> > +		return ptypes;
> > +	} else if (dev->rx_pkt_burst == fm10k_recv_pkts_vec ||
> > +		   dev->rx_pkt_burst == fm10k_recv_scattered_pkts_vec) {
> > +		static uint32_t ptypes_vec[] = {
> > +			/* refers to fm10k_desc_to_pktype_v() */
> > +			RTE_PTYPE_L3_IPV4,
> > +			RTE_PTYPE_L3_IPV4_EXT,
> > +			RTE_PTYPE_L3_IPV6,
> > +			RTE_PTYPE_L3_IPV6_EXT,
> > +			RTE_PTYPE_L4_TCP,
> > +			RTE_PTYPE_L4_UDP,
> > +			RTE_PTYPE_TUNNEL_GENEVE,
> > +			RTE_PTYPE_TUNNEL_NVGRE,
> > +			RTE_PTYPE_TUNNEL_VXLAN,
> > +			RTE_PTYPE_TUNNEL_GRE,
> > +			RTE_PTYPE_UNKNOWN
> > +		};
> > +
> > +		return ptypes_vec;
> > +	}
> > +
> > +	return NULL;
> > +}
> > May I know when " fm10k_dev_ptype_info_get " will be called? In fm10k, the actual
> > Rx/tx func will be decided after port is started.
> 
> Thank you for pointing out this. It's indeed an issue here. And it makes
> no difference when all rx functions fill the same ptypes, which,
> unfortunately, does not apply to all PMDs. According to my analysis,
> only in fm10k's case, we should call ptype_info_get after dev_start(),
> and for other PMDs, it can called just after rx_queue_setup. So in all,
> I need to add this as a caution in API declaration.

Good catch Mark :)
I think it should be called after dev_start() for all devices:
dev_start() is the usual point where final decision
what RX function should be used is made.
At least for the PMDs I am aware about (ixgbe, i40e, igb).

Konstantin

> 
> __details__
> 
> eth_cxgbe_dev_init
> 
> eth_igb_dev_init
> eth_igbvf_dev_init
> eth_igb_rx_init <- eth_igb_start (makes no difference, rx functins fill
> same ptypes)
> eth_igbvf_rx_init <- igbvf_dev_start (makes no difference, rx functins
> fill same ptypes)
> 
> eth_enicpmd_dev_init
> 
> fm10k_set_rx_function <- fm10k_dev_rx_init <- fm10k_dev_start
> 
> eth_i40e_dev_init
> i40evf_dev_init
> i40e_set_rx_function <- eth_i40e_dev_init
>                                       <- i40evf_dev_init
>                                       <- i40e_dev_rx_init <-
> i40e_dev_rxtx_init <- i40e_dev_start (makes no difference, rx functins
> fill same ptypes)
>                                       <- i40evf_rx_init <-
> i40evf_dev_start (makes no difference, rx functins fill same ptypes)
> 
> ixgbe_set_rx_function <- eth_ixgbe_dev_init
>                                         <- ixgbe_dev_rx_init <-
> ixgbe_dev_start (makes no difference, rx functions fill same ptypes)
>                                         <- ixgbevf_dev_rx_init
> 
> mlx4_rx_queue_setup
> mlx4_dev_set_mtu (makes no difference, rx functions fill same ptypes)
> 
> mlx5_rx_queue_setup
> mlx5_dev_set_mtu (makes no difference, rx functions fill same ptypes)
> 
> nfp_net_init
> 
> eth_vmxnet3_dev_init
> 
> Thanks,
> Jianfeng
> 
> 



More information about the dev mailing list