> -----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 > >