From patchwork Fri Dec 24 11:26:38 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yunjian Wang X-Patchwork-Id: 105400 X-Patchwork-Delegate: qi.z.zhang@intel.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id B95AAA00C5; Fri, 24 Dec 2021 12:26:47 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 61C59410E7; Fri, 24 Dec 2021 12:26:47 +0100 (CET) Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by mails.dpdk.org (Postfix) with ESMTP id 9BFBE4013F; Fri, 24 Dec 2021 12:26:44 +0100 (CET) Received: from dggpemm500020.china.huawei.com (unknown [172.30.72.53]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4JL4WY1Y8Fzcc3W; Fri, 24 Dec 2021 19:26:17 +0800 (CST) Received: from dggpemm500008.china.huawei.com (7.185.36.136) by dggpemm500020.china.huawei.com (7.185.36.49) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Fri, 24 Dec 2021 19:26:41 +0800 Received: from localhost (10.174.242.157) by dggpemm500008.china.huawei.com (7.185.36.136) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Fri, 24 Dec 2021 19:26:41 +0800 From: Yunjian Wang To: CC: , , , Yunjian Wang , Subject: [PATCH v2 1/1] net/ixgbe: check ixgbe filter init failure Date: Fri, 24 Dec 2021 19:26:38 +0800 Message-ID: <68c35e56d29ee7d8dcd7b9734ea067c0111a120c.1640344520.git.wangyunjian@huawei.com> X-Mailer: git-send-email 1.9.5.msysgit.1 In-Reply-To: References: MIME-Version: 1.0 X-Originating-IP: [10.174.242.157] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpemm500008.china.huawei.com (7.185.36.136) X-CFilter-Loop: Reflected X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org The function ixgbe_fdir_filter_init() and ixgbe_l2_tn_filter_init() could return errors, the return value need to be checked and returned. Fixes: 080e3c0ee989 ("net/ixgbe: store flow director filter") Fixes: d0c0c416ef1f ("net/ixgbe: store L2 tunnel filter") Cc: stable@dpdk.org Signed-off-by: Yunjian Wang Acked-by: Haiyue Wang --- v2: update code suggested by Haiyue Wang --- drivers/net/ixgbe/ixgbe_ethdev.c | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c index fe61dba81d..1c4b6fab13 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.c +++ b/drivers/net/ixgbe/ixgbe_ethdev.c @@ -1223,13 +1223,8 @@ eth_ixgbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused) /* initialize PF if max_vfs not zero */ ret = ixgbe_pf_host_init(eth_dev); - if (ret) { - rte_free(eth_dev->data->mac_addrs); - eth_dev->data->mac_addrs = NULL; - rte_free(eth_dev->data->hash_mac_addrs); - eth_dev->data->hash_mac_addrs = NULL; - return ret; - } + if (ret) + goto err_pf_host_init; ctrl_ext = IXGBE_READ_REG(hw, IXGBE_CTRL_EXT); /* let hardware know driver is loaded */ @@ -1268,10 +1263,14 @@ eth_ixgbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused) TAILQ_INIT(&filter_info->fivetuple_list); /* initialize flow director filter list & hash */ - ixgbe_fdir_filter_init(eth_dev); + ret = ixgbe_fdir_filter_init(eth_dev); + if (ret) + goto err_fdir_filter_init; /* initialize l2 tunnel filter list & hash */ - ixgbe_l2_tn_filter_init(eth_dev); + ret = ixgbe_l2_tn_filter_init(eth_dev); + if (ret) + goto err_l2_tn_filter_init; /* initialize flow filter lists */ ixgbe_filterlist_init(); @@ -1283,6 +1282,21 @@ eth_ixgbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused) ixgbe_tm_conf_init(eth_dev); return 0; + +err_l2_tn_filter_init: + ixgbe_fdir_filter_uninit(eth_dev); +err_fdir_filter_init: + ixgbe_disable_intr(hw); + rte_intr_disable(intr_handle); + rte_intr_callback_unregister(intr_handle, + ixgbe_dev_interrupt_handler, eth_dev); + ixgbe_pf_host_uninit(eth_dev); +err_pf_host_init: + rte_free(eth_dev->data->mac_addrs); + eth_dev->data->mac_addrs = NULL; + rte_free(eth_dev->data->hash_mac_addrs); + eth_dev->data->hash_mac_addrs = NULL; + return ret; } static int