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 56569A0518 for ; Fri, 24 Jul 2020 14:10:15 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 4CA0E1C039; Fri, 24 Jul 2020 14:10:15 +0200 (CEST) Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) by dpdk.org (Postfix) with ESMTP id C9B2B1C204 for ; Fri, 24 Jul 2020 14:10:12 +0200 (CEST) Received: by mail-wm1-f52.google.com with SMTP id k20so407460wmi.5 for ; Fri, 24 Jul 2020 05:10:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Ba5D/w27CAv23ypAI1pxqyi+r9z60mHyFNgOzOYRU7U=; b=ZafsIIDInrbehFiJfPIgvaDOUEzO+6ooX8k/xtQqjNEdocmDr2P+ElPw3QRdq3YPXX UjKCnqQ8snE/3N7HFnAxqFCk5oBjTyxH9vblFDk7HicPGX9z41nm4bPO0VeptiD9ROGc 9afPJYLN8um2SNAwBAFBX2e15KknmJjd2eh3FkUqhDe7PSUwP8MsRGARBLBV/J+fbHMP 0sDImgnmtIcWUIMlrNzWQdDa/nTb66S0u2t674pU81x6CVRA4hnOREcP7jsKfC4Egk6U qIPl43WmEn/aL4a7tdxbe69Cter+YsJKeYJ6ucg9APuxlNZjHQmHkOTL1l8UMhOYX40Z HuFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Ba5D/w27CAv23ypAI1pxqyi+r9z60mHyFNgOzOYRU7U=; b=qRJ+IbZdodBglOcVy5+OOvH95Dlr897K6M54FtB3s27P32x2AXQiFkdJMLr8sHXoA2 l+wqWiyClJEzErLvP51cioQ6c10yaOxE/umklPf44owo92T9dtyOilmbo+CJfs8W5VwY iBQPbw+GN6nei12GA0SSEMlvJYpoVgxDo/qW/law8vCEXUxOfO1IGU8qtHDzDIh1w8sW A1pl1DHxgyF+FXSb4FZFR3VPJaDAifinOZ40nThtWB++HnD6voH3gIBYq+uN0RGLNJ9J HTe/6fKU8slzSWeCqy1TwaJXyqWYL80FXTfEY/Dgr1Zl+rH2+4tAJFl6wvRA92Kzzmcc MNbw== X-Gm-Message-State: AOAM531ip+386qlsCekJZgBkqbRblugN7w0fqSdrzKYYnpocPMTgIJVi YCl8/BPdIxpltCXPpkA2dV0= X-Google-Smtp-Source: ABdhPJzIFhK4zej/Atqc8LZUJFm9XSKFC9iZiAxR61062wACeAeGYf1w8wKpuc/iZR951J0kZCF/Sg== X-Received: by 2002:a1c:a513:: with SMTP id o19mr8314473wme.119.1595592612520; Fri, 24 Jul 2020 05:10:12 -0700 (PDT) Received: from localhost ([88.98.246.218]) by smtp.gmail.com with ESMTPSA id k14sm1073844wrn.76.2020.07.24.05.10.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jul 2020 05:10:11 -0700 (PDT) From: luca.boccassi@gmail.com To: Kalesh AP Cc: Somnath Kotur , Ajit Khaparde , dpdk stable Date: Fri, 24 Jul 2020 12:59:45 +0100 Message-Id: <20200724120030.1863487-147-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200724120030.1863487-1-luca.boccassi@gmail.com> References: <20200724120030.1863487-1-luca.boccassi@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-stable] patch 'net/bnxt: fix freeing filters on flow creation failure' has been queued to stable release 19.11.4 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" Hi, FYI, your patch has been queued to stable release 19.11.4 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 07/26/20. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Thanks. Luca Boccassi --- >From a7b4dbef9323280906399b5bd11338fe565b2caa Mon Sep 17 00:00:00 2001 From: Kalesh AP Date: Thu, 9 Jul 2020 15:08:32 +0530 Subject: [PATCH] net/bnxt: fix freeing filters on flow creation failure [ upstream commit 87520e59fb84c3ba5dbeee10d57a534fa3a70ad2 ] This patch does following things: 1. Added a wrapper function bnxt_clear_one_vnic_filter() for destroying the filters in hw. This will avoid duplicate code in many places. 2. When flow create fails due to an already existing mark id for the new flow id created, fixed to destroy the hw filter created. 3. Re-arranged code to move a log and list update to right place. Fixes: 9db66782bd06 ("net/bnxt: fix supporting zero mark ID with RSS action") Fixes: 5ef3b79fdfe6 ("net/bnxt: support flow filter ops") Signed-off-by: Kalesh AP Reviewed-by: Somnath Kotur Reviewed-by: Ajit Khaparde --- drivers/net/bnxt/bnxt_flow.c | 8 ++------ drivers/net/bnxt/bnxt_hwrm.c | 31 +++++++++++++++++++++---------- drivers/net/bnxt/bnxt_hwrm.h | 2 ++ 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/drivers/net/bnxt/bnxt_flow.c b/drivers/net/bnxt/bnxt_flow.c index 52d521d6e..f069e5f56 100644 --- a/drivers/net/bnxt/bnxt_flow.c +++ b/drivers/net/bnxt/bnxt_flow.c @@ -1746,9 +1746,9 @@ done: } STAILQ_INSERT_TAIL(&vnic->filter, filter, next); - PMD_DRV_LOG(DEBUG, "Successfully created flow.\n"); STAILQ_INSERT_TAIL(&vnic->flow_list, flow, next); bnxt_release_flow_lock(bp); + PMD_DRV_LOG(DEBUG, "Successfully created flow.\n"); return flow; } @@ -1839,11 +1839,7 @@ _bnxt_flow_destroy(struct bnxt *bp, if (ret == 0) PMD_DRV_LOG(ERR, "Could not find matching flow\n"); - 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); + ret = bnxt_clear_one_vnic_filter(bp, filter); done: if (!ret) { diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c index 720099a32..fed1aa329 100644 --- a/drivers/net/bnxt/bnxt_hwrm.c +++ b/drivers/net/bnxt/bnxt_hwrm.c @@ -2483,17 +2483,32 @@ int bnxt_alloc_hwrm_resources(struct bnxt *bp) return 0; } +int +bnxt_clear_one_vnic_filter(struct bnxt *bp, struct bnxt_filter_info *filter) +{ + int rc = 0; + + if (filter->filter_type == HWRM_CFA_EM_FILTER) { + rc = bnxt_hwrm_clear_em_filter(bp, filter); + if (rc) + return rc; + } else if (filter->filter_type == HWRM_CFA_NTUPLE_FILTER) { + rc = bnxt_hwrm_clear_ntuple_filter(bp, filter); + if (rc) + return rc; + } + + rc = bnxt_hwrm_clear_l2_filter(bp, filter); + return rc; +} + int bnxt_clear_hwrm_vnic_filters(struct bnxt *bp, struct bnxt_vnic_info *vnic) { struct bnxt_filter_info *filter; int rc = 0; STAILQ_FOREACH(filter, &vnic->filter, next) { - if (filter->filter_type == HWRM_CFA_EM_FILTER) - rc = bnxt_hwrm_clear_em_filter(bp, filter); - else if (filter->filter_type == HWRM_CFA_NTUPLE_FILTER) - rc = bnxt_hwrm_clear_ntuple_filter(bp, filter); - rc = bnxt_hwrm_clear_l2_filter(bp, filter); + rc = bnxt_clear_one_vnic_filter(bp, filter); STAILQ_REMOVE(&vnic->filter, filter, bnxt_filter_info, next); bnxt_free_filter(bp, filter); } @@ -2511,11 +2526,7 @@ bnxt_clear_hwrm_vnic_flows(struct bnxt *bp, struct bnxt_vnic_info *vnic) flow = STAILQ_FIRST(&vnic->flow_list); filter = flow->filter; PMD_DRV_LOG(DEBUG, "filter type %d\n", filter->filter_type); - if (filter->filter_type == HWRM_CFA_EM_FILTER) - rc = bnxt_hwrm_clear_em_filter(bp, filter); - else if (filter->filter_type == HWRM_CFA_NTUPLE_FILTER) - rc = bnxt_hwrm_clear_ntuple_filter(bp, filter); - rc = bnxt_hwrm_clear_l2_filter(bp, filter); + rc = bnxt_clear_one_vnic_filter(bp, filter); STAILQ_REMOVE(&vnic->flow_list, flow, rte_flow, next); rte_free(flow); diff --git a/drivers/net/bnxt/bnxt_hwrm.h b/drivers/net/bnxt/bnxt_hwrm.h index ad5baf262..e647993af 100644 --- a/drivers/net/bnxt/bnxt_hwrm.h +++ b/drivers/net/bnxt/bnxt_hwrm.h @@ -229,4 +229,6 @@ int bnxt_hwrm_error_recovery_qcfg(struct bnxt *bp); int bnxt_hwrm_fw_reset(struct bnxt *bp); int bnxt_hwrm_port_ts_query(struct bnxt *bp, uint8_t path, uint64_t *timestamp); +int bnxt_clear_one_vnic_filter(struct bnxt *bp, + struct bnxt_filter_info *filter); #endif -- 2.20.1 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2020-07-24 12:53:54.234436778 +0100 +++ 0147-net-bnxt-fix-freeing-filters-on-flow-creation-failur.patch 2020-07-24 12:53:48.499010409 +0100 @@ -1,8 +1,10 @@ -From 87520e59fb84c3ba5dbeee10d57a534fa3a70ad2 Mon Sep 17 00:00:00 2001 +From a7b4dbef9323280906399b5bd11338fe565b2caa Mon Sep 17 00:00:00 2001 From: Kalesh AP Date: Thu, 9 Jul 2020 15:08:32 +0530 Subject: [PATCH] net/bnxt: fix freeing filters on flow creation failure +[ upstream commit 87520e59fb84c3ba5dbeee10d57a534fa3a70ad2 ] + This patch does following things: 1. Added a wrapper function bnxt_clear_one_vnic_filter() for destroying the filters in hw. This will avoid duplicate @@ -14,56 +16,34 @@ Fixes: 9db66782bd06 ("net/bnxt: fix supporting zero mark ID with RSS action") Fixes: 5ef3b79fdfe6 ("net/bnxt: support flow filter ops") -Cc: stable@dpdk.org Signed-off-by: Kalesh AP Reviewed-by: Somnath Kotur Reviewed-by: Ajit Khaparde --- - drivers/net/bnxt/bnxt_flow.c | 15 +++++++-------- + drivers/net/bnxt/bnxt_flow.c | 8 ++------ drivers/net/bnxt/bnxt_hwrm.c | 31 +++++++++++++++++++++---------- drivers/net/bnxt/bnxt_hwrm.h | 2 ++ - 3 files changed, 30 insertions(+), 18 deletions(-) + 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/drivers/net/bnxt/bnxt_flow.c b/drivers/net/bnxt/bnxt_flow.c -index 499dcdf6b..320b53d94 100644 +index 52d521d6e..f069e5f56 100644 --- a/drivers/net/bnxt/bnxt_flow.c +++ b/drivers/net/bnxt/bnxt_flow.c -@@ -1816,9 +1816,6 @@ done: - goto free_flow; +@@ -1746,9 +1746,9 @@ done: } -- STAILQ_INSERT_TAIL(&vnic->filter, filter, next); + STAILQ_INSERT_TAIL(&vnic->filter, filter, next); - PMD_DRV_LOG(DEBUG, "Successfully created flow.\n"); -- STAILQ_INSERT_TAIL(&vnic->flow_list, flow, next); - if (filter->valid_flags & BNXT_FLOW_MARK_FLAG) { - PMD_DRV_LOG(DEBUG, - "Mark action: mark id 0x%x, flow id 0x%x\n", -@@ -1833,15 +1830,21 @@ done: - RTE_FLOW_ERROR_TYPE_HANDLE, - NULL, - "Flow with mark id exists"); -+ bnxt_clear_one_vnic_filter(bp, filter); - goto free_filter; - } - bp->mark_table[flow_id].valid = true; - bp->mark_table[flow_id].mark_id = filter->mark; - } -+ -+ STAILQ_INSERT_TAIL(&vnic->filter, filter, next); -+ STAILQ_INSERT_TAIL(&vnic->flow_list, flow, next); -+ - if (BNXT_FLOW_XSTATS_EN(bp)) - bp->flow_stat->flow_count++; + STAILQ_INSERT_TAIL(&vnic->flow_list, flow, next); bnxt_release_flow_lock(bp); - bnxt_setup_flow_counter(bp); + PMD_DRV_LOG(DEBUG, "Successfully created flow.\n"); return flow; } -@@ -1940,11 +1943,7 @@ _bnxt_flow_destroy(struct bnxt *bp, - filter->flow_id = 0; - } +@@ -1839,11 +1839,7 @@ _bnxt_flow_destroy(struct bnxt *bp, + if (ret == 0) + PMD_DRV_LOG(ERR, "Could not find matching flow\n"); - if (filter->filter_type == HWRM_CFA_EM_FILTER) - ret = bnxt_hwrm_clear_em_filter(bp, filter); @@ -75,10 +55,10 @@ done: if (!ret) { diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c -index f9c746109..7ea13a8b2 100644 +index 720099a32..fed1aa329 100644 --- a/drivers/net/bnxt/bnxt_hwrm.c +++ b/drivers/net/bnxt/bnxt_hwrm.c -@@ -2613,6 +2613,25 @@ int bnxt_alloc_hwrm_resources(struct bnxt *bp) +@@ -2483,17 +2483,32 @@ int bnxt_alloc_hwrm_resources(struct bnxt *bp) return 0; } @@ -101,10 +81,9 @@ + return rc; +} + - static int - bnxt_clear_hwrm_vnic_filters(struct bnxt *bp, struct bnxt_vnic_info *vnic) + int bnxt_clear_hwrm_vnic_filters(struct bnxt *bp, struct bnxt_vnic_info *vnic) { -@@ -2620,11 +2639,7 @@ bnxt_clear_hwrm_vnic_filters(struct bnxt *bp, struct bnxt_vnic_info *vnic) + struct bnxt_filter_info *filter; int rc = 0; STAILQ_FOREACH(filter, &vnic->filter, next) { @@ -117,7 +96,7 @@ STAILQ_REMOVE(&vnic->filter, filter, bnxt_filter_info, next); bnxt_free_filter(bp, filter); } -@@ -2642,11 +2657,7 @@ bnxt_clear_hwrm_vnic_flows(struct bnxt *bp, struct bnxt_vnic_info *vnic) +@@ -2511,11 +2526,7 @@ bnxt_clear_hwrm_vnic_flows(struct bnxt *bp, struct bnxt_vnic_info *vnic) flow = STAILQ_FIRST(&vnic->flow_list); filter = flow->filter; PMD_DRV_LOG(DEBUG, "filter type %d\n", filter->filter_type); @@ -131,13 +110,13 @@ STAILQ_REMOVE(&vnic->flow_list, flow, rte_flow, next); rte_free(flow); diff --git a/drivers/net/bnxt/bnxt_hwrm.h b/drivers/net/bnxt/bnxt_hwrm.h -index 1704eddba..01201a7a4 100644 +index ad5baf262..e647993af 100644 --- a/drivers/net/bnxt/bnxt_hwrm.h +++ b/drivers/net/bnxt/bnxt_hwrm.h -@@ -276,4 +276,6 @@ int bnxt_hwrm_get_dflt_vnic_svif(struct bnxt *bp, uint16_t fid, - int bnxt_hwrm_parent_pf_qcfg(struct bnxt *bp); - int bnxt_hwrm_port_phy_qcaps(struct bnxt *bp); - int bnxt_hwrm_oem_cmd(struct bnxt *bp, uint32_t entry_num); +@@ -229,4 +229,6 @@ int bnxt_hwrm_error_recovery_qcfg(struct bnxt *bp); + int bnxt_hwrm_fw_reset(struct bnxt *bp); + int bnxt_hwrm_port_ts_query(struct bnxt *bp, uint8_t path, + uint64_t *timestamp); +int bnxt_clear_one_vnic_filter(struct bnxt *bp, + struct bnxt_filter_info *filter); #endif