From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 5B12AA04F0 for ; Wed, 18 Dec 2019 07:24:50 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id C76611BF7A; Wed, 18 Dec 2019 07:24:48 +0100 (CET) Received: from relay.smtp.broadcom.com (unknown [192.19.211.62]) by dpdk.org (Postfix) with ESMTP id B3E8837A2 for ; Wed, 18 Dec 2019 07:24:45 +0100 (CET) Received: from dhcp-10-123-153-55.dhcp.broadcom.net (dhcp-10-123-153-55.dhcp.broadcom.net [10.123.153.55]) by relay.smtp.broadcom.com (Postfix) with ESMTP id 43CF328FA5A; Tue, 17 Dec 2019 22:24:45 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.10.3 relay.smtp.broadcom.com 43CF328FA5A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com; s=dkimrelay; t=1576650285; bh=rLBkgsxVrPF+TbOtnrj3tgzGuiJB9YFyVv0L3i9XUE0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=FdpPMsMJgbo+LCv1CSrt0R3Z9gQotaU1tG8+64hJOvsZWImbvKQA+FdWuYQKjW6ly ywag20J51/ws3G4n08qdg1yjSE/8JTpYOroBhbNHVBMs4sB22PDTUy32QFaUQdqcT8 ECspULwJYM2BoQVS8Hyxz+CQM2d//z2zHmh7HGig= From: Somnath Kotur To: stable@dpdk.org Cc: ktraynor@redhat.com Date: Wed, 18 Dec 2019 11:54:02 +0530 Message-Id: <20191218062411.13079-11-somnath.kotur@broadcom.com> X-Mailer: git-send-email 2.10.1.613.g2cc2e70 In-Reply-To: <20191218062411.13079-1-somnath.kotur@broadcom.com> References: <20191218062411.13079-1-somnath.kotur@broadcom.com> Subject: [dpdk-stable] [PATCH 18.11 10/19] net/bnxt: fix flow flush handling X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" From: Ajit Khaparde We are not freeing all the flows when a flow_flush is called. Iterate through all the flows belonging to all the VNICs in use and free the filters. Fixes: 4ace85a7da25 ("net/bnxt: allocate rings and groups") Cc: stable@dpdk.org Signed-off-by: Ajit Khaparde Reviewed-by: Rahul Gupta Reviewed-by: Venkat Duvvuru Reviewed-by: Kalesh AP Signed-off-by: Somnath Kotur --- drivers/net/bnxt/bnxt_flow.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/drivers/net/bnxt/bnxt_flow.c b/drivers/net/bnxt/bnxt_flow.c index 1df1890..aca5f38 100644 --- a/drivers/net/bnxt/bnxt_flow.c +++ b/drivers/net/bnxt/bnxt_flow.c @@ -1133,6 +1133,7 @@ static int bnxt_flow_flush(struct rte_eth_dev *dev, struct rte_flow_error *error) { struct bnxt *bp = dev->data->dev_private; + struct bnxt_filter_info *filter = NULL; struct bnxt_vnic_info *vnic; struct rte_flow *flow; unsigned int i; @@ -1140,14 +1141,20 @@ bnxt_flow_flush(struct rte_eth_dev *dev, struct rte_flow_error *error) for (i = 0; i < bp->nr_vnics; i++) { vnic = &bp->vnic_info[i]; - STAILQ_FOREACH(flow, &vnic->flow_list, next) { - struct bnxt_filter_info *filter = flow->filter; + if (vnic && vnic->fw_vnic_id == (uint16_t)-1) + continue; + + while (!STAILQ_EMPTY(&vnic->flow_list)) { + flow = STAILQ_FIRST(&vnic->flow_list); + filter = flow->filter; if (filter->filter_type == HWRM_CFA_EM_FILTER) ret = bnxt_hwrm_clear_em_filter(bp, filter); if (filter->filter_type == HWRM_CFA_NTUPLE_FILTER) ret = bnxt_hwrm_clear_ntuple_filter(bp, filter); + ret = bnxt_hwrm_clear_l2_filter(bp, filter); + if (ret) { rte_flow_error_set (error, @@ -1158,9 +1165,13 @@ bnxt_flow_flush(struct rte_eth_dev *dev, struct rte_flow_error *error) return -rte_errno; } + bnxt_free_filter(bp, filter); + STAILQ_REMOVE(&vnic->flow_list, flow, rte_flow, next); + rte_free(flow); + } } -- 2.10.1