[dpdk-dev] [PATCH] net/e1000: fix nic ops function was no initialized in secondary process
Wang, Haiyue
haiyue.wang at intel.com
Mon Jun 21 09:31:09 CEST 2021
> -----Original Message-----
> From: Tengfei Zhang <zypscode at outlook.com>
> Sent: Saturday, June 19, 2021 01:27
> To: Wang, Haiyue <haiyue.wang at intel.com>
> Cc: dev at dpdk.org; Tengfei Zhang <zypscode at outlook.com>
> Subject: [PATCH] net/e1000: fix nic ops function was no initialized in secondary process
>
> 'e1000_setup_init_funcs' was not called in secondary process,
> it initialize mac,phy,nvm ops.
> when secondary process get link status,it will coredump.
Thanks, Tengfei.
Since primary / secondary is so complicated, AFAIK, the control path is in
primary, the secondary is mainly for rx/tx ops officially, like new Intel
ice PMD:
if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
ice_set_rx_function(dev);
ice_set_tx_function(dev);
return 0;
}
So you can keep your patch as private for special secondary usage. ;-)
>
> Signed-off-by: Tengfei Zhang <zypscode at outlook.com>
> ---
> drivers/net/e1000/em_ethdev.c | 1 +
> drivers/net/e1000/igb_ethdev.c | 2 ++
> 2 files changed, 3 insertions(+)
>
> diff --git a/drivers/net/e1000/em_ethdev.c b/drivers/net/e1000/em_ethdev.c
> index a0ca371b02..cd5faa4228 100644
> --- a/drivers/net/e1000/em_ethdev.c
> +++ b/drivers/net/e1000/em_ethdev.c
> @@ -258,6 +258,7 @@ eth_em_dev_init(struct rte_eth_dev *eth_dev)
> * has already done this work. Only check we don't need a different
> * RX function */
> if (rte_eal_process_type() != RTE_PROC_PRIMARY){
> + e1000_setup_init_funcs(hw, TRUE);
> if (eth_dev->data->scattered_rx)
> eth_dev->rx_pkt_burst =
> (eth_rx_burst_t)ð_em_recv_scattered_pkts;
> diff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c
> index 10ee0f3341..7d9d60497d 100644
> --- a/drivers/net/e1000/igb_ethdev.c
> +++ b/drivers/net/e1000/igb_ethdev.c
> @@ -737,6 +737,7 @@ eth_igb_dev_init(struct rte_eth_dev *eth_dev)
> * has already done this work. Only check we don't need a different
> * RX function */
> if (rte_eal_process_type() != RTE_PROC_PRIMARY){
> + e1000_setup_init_funcs(hw, TRUE);
> if (eth_dev->data->scattered_rx)
> eth_dev->rx_pkt_burst = ð_igb_recv_scattered_pkts;
> return 0;
> @@ -931,6 +932,7 @@ eth_igbvf_dev_init(struct rte_eth_dev *eth_dev)
> * has already done this work. Only check we don't need a different
> * RX function */
> if (rte_eal_process_type() != RTE_PROC_PRIMARY){
> + e1000_setup_init_funcs(hw, TRUE);
> if (eth_dev->data->scattered_rx)
> eth_dev->rx_pkt_burst = ð_igb_recv_scattered_pkts;
> return 0;
> --
> 2.26.2
More information about the dev
mailing list