[v3] net/hinic: fix secondary process's using coredump.
diff mbox series

Message ID aa7da95c-d5b6-5b5c-47b3-98b2ca701cde@huawei.com
State Superseded, archived
Delegated to: Ferruh Yigit
Headers show
Series
  • [v3] net/hinic: fix secondary process's using coredump.
Related show

Checks

Context Check Description
ci/Intel-compilation fail apply issues
ci/checkpatch warning coding style issues

Commit Message

Qingqing Li Oct. 9, 2020, 7:47 a.m. UTC
fix coredump when secondary process using the hinic port.
the reason is that during the stage of
secondary process port initialization,
it lack the initialization of "eth_dev->dev_ops".

Signed-off-by: Qingqing Li <liqingqing3@huawei.com>
---
v3: update the signed-off information.
---
v2:  solve the coding style issue.
---
  drivers/net/hinic/hinic_pmd_ethdev.c | 21 ++++++++++++---------
  1 file changed, 12 insertions(+), 9 deletions(-)


@@ -3206,6 +3197,18 @@ static int hinic_dev_init(struct rte_eth_dev 
*eth_dev)
  	eth_dev->rx_pkt_burst = hinic_recv_pkts;
  	eth_dev->tx_pkt_burst = hinic_xmit_pkts;

+	/* EAL is SECONDARY and eth_dev is already created */
+	if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
+		PMD_DRV_LOG(INFO, "Initialize %s in secondary process", 
eth_dev->data->name);
+
+		struct hinic_nic_dev *nic_dev = 
HINIC_ETH_DEV_TO_PRIVATE_NIC_DEV(eth_dev);
+		if (HINIC_IS_VF(nic_dev->hwdev))
+			eth_dev->dev_ops = &hinic_pmd_vf_ops;
+		else
+			eth_dev->dev_ops = &hinic_pmd_ops;
+		return 0;
+	}
+
  	return hinic_func_init(eth_dev);
  }

Comments

Ferruh Yigit Oct. 13, 2020, 8:46 a.m. UTC | #1
On 10/9/2020 8:47 AM, l00283554 wrote:
> fix coredump when secondary process using the hinic port.
> the reason is that during the stage of
> secondary process port initialization,
> it lack the initialization of "eth_dev->dev_ops".
> 
> Signed-off-by: Qingqing Li <liqingqing3@huawei.com>
> ---
> v3: update the signed-off information.
> ---
> v2:  solve the coding style issue.
> ---
>   drivers/net/hinic/hinic_pmd_ethdev.c | 21 ++++++++++++---------
>   1 file changed, 12 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/net/hinic/hinic_pmd_ethdev.c 
> b/drivers/net/hinic/hinic_pmd_ethdev.c
> index 67e6afcf7..26c6098d3 100644
> --- a/drivers/net/hinic/hinic_pmd_ethdev.c
> +++ b/drivers/net/hinic/hinic_pmd_ethdev.c
> @@ -3060,15 +3060,6 @@ static int hinic_func_init(struct rte_eth_dev *eth_dev)
>       int rc;
> 
>       pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev);
> -
> -    /* EAL is SECONDARY and eth_dev is already created */
> -    if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
> -        PMD_DRV_LOG(INFO, "Initialize %s in secondary process",
> -                eth_dev->data->name);
> -
> -        return 0;
> -    }
> -
>       nic_dev = HINIC_ETH_DEV_TO_PRIVATE_NIC_DEV(eth_dev);
>       memset(nic_dev, 0, sizeof(*nic_dev));
> 
> @@ -3206,6 +3197,18 @@ static int hinic_dev_init(struct rte_eth_dev *eth_dev)
>       eth_dev->rx_pkt_burst = hinic_recv_pkts;
>       eth_dev->tx_pkt_burst = hinic_xmit_pkts;
> 
> +    /* EAL is SECONDARY and eth_dev is already created */
> +    if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
> +        PMD_DRV_LOG(INFO, "Initialize %s in secondary process", 
> eth_dev->data->name);
> +
> +        struct hinic_nic_dev *nic_dev = HINIC_ETH_DEV_TO_PRIVATE_NIC_DEV(eth_dev);
> +        if (HINIC_IS_VF(nic_dev->hwdev))
> +            eth_dev->dev_ops = &hinic_pmd_vf_ops;
> +        else
> +            eth_dev->dev_ops = &hinic_pmd_ops;
> +        return 0;
> +    }
> +
>       return hinic_func_init(eth_dev);
>   }
> 

Overall looks good to me, waiting ack from driver maintainers.

Meanwhile the patch doesn't apply cleanly, it seems same problem in the CI, can 
you please rebase on top of latest head and send the patch again?

Patch
diff mbox series

diff --git a/drivers/net/hinic/hinic_pmd_ethdev.c 
b/drivers/net/hinic/hinic_pmd_ethdev.c
index 67e6afcf7..26c6098d3 100644
--- a/drivers/net/hinic/hinic_pmd_ethdev.c
+++ b/drivers/net/hinic/hinic_pmd_ethdev.c
@@ -3060,15 +3060,6 @@  static int hinic_func_init(struct rte_eth_dev 
*eth_dev)
  	int rc;

  	pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev);
-
-	/* EAL is SECONDARY and eth_dev is already created */
-	if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
-		PMD_DRV_LOG(INFO, "Initialize %s in secondary process",
-			    eth_dev->data->name);
-
-		return 0;
-	}
-
  	nic_dev = HINIC_ETH_DEV_TO_PRIVATE_NIC_DEV(eth_dev);
  	memset(nic_dev, 0, sizeof(*nic_dev));