From patchwork Thu Oct 19 16:11:07 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adrien Mazarguil X-Patchwork-Id: 30601 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 745111B262; Thu, 19 Oct 2017 18:11:24 +0200 (CEST) Received: from mail-wm0-f66.google.com (mail-wm0-f66.google.com [74.125.82.66]) by dpdk.org (Postfix) with ESMTP id 46E201B25F for ; Thu, 19 Oct 2017 18:11:19 +0200 (CEST) Received: by mail-wm0-f66.google.com with SMTP id q124so17044010wmb.0 for ; Thu, 19 Oct 2017 09:11:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=mG6U1lvrAroZoTX9gKQT16mLjIAFZg/j0Y5L3ORA084=; b=ZVCdmQ6CHlPpcsxR7ck3G1ik61m+lMuixMqceBT2rmowBXFupXKuB/ta7XCN9MjT21 X1bn7GBXH059zhkRXGVfjm4Xc6nB8SqeX5Paqf4bD0noT+GgaQ2DWymokWdWFIakOu0K 9w45cSX6/vGnZc/s61BrxTeVCg1nPWglLNfC+3H2BhEI5sPuJXGe7ND1Sq2BsKM/mkD4 rIswP0u+mOxsE6XO35xgzUiB8vH7o13IhXrk3Q03k9OaZTHhkhunZ6yAL12V+4Zm198i J/Nz90dZhmvcicZcLceHVDLo8KAezcurQCz6AQxPJXD71Bbn0RzuMrUXkNmw7/OTxPdf 7jSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=mG6U1lvrAroZoTX9gKQT16mLjIAFZg/j0Y5L3ORA084=; b=uggo7iI1I0u4Vh+V7kVW3E1NU9WLeHgXN82Bq1a4GWkw32FZdK0LG9QH8VKDvSJX3F UuPdOM0Avz7z2QYNgPj3fKD7YGWYsaQGftTH9c+IPFDoH7nK7a60ICvP1jq667or647x A14lu1XVVBGPh5mX+IbkVNUwF+05uoQIBCrxqVITzMTK0EXy6yn1c1PmDtCCAEj5sWLU SaNHRKVk9jt8RyW0u5L5AVnEVNPHhu6U1DKbFaXi6ZN/LtNXJCaj9UkKtkLoWK/uuS9O aKZwT8I5FHlU2yDHFiHgn7wXC6h5HJg72UWvtI/Tp+amVkpz3M0YW9ZKeDXb/0E+BjUO NqZw== X-Gm-Message-State: AMCzsaUx5iUL0nO8xE/to9uz0iisU+4pNd8ucmFF8yLmQq7IQC2ETev9 /L9uq9hB6agQDG/bWRp7aV+E/g== X-Google-Smtp-Source: ABhQp+Tv1HCIFDWcwPTUXP4u5lat1R+x1uDpwek/AQlGGUgrXBI9D51TnZpx3ducZZzpQdZgLUh5VQ== X-Received: by 10.28.143.130 with SMTP id r124mr2295681wmd.122.1508429478720; Thu, 19 Oct 2017 09:11:18 -0700 (PDT) Received: from 6wind.com (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id q81sm2194183wmd.27.2017.10.19.09.11.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 19 Oct 2017 09:11:18 -0700 (PDT) Date: Thu, 19 Oct 2017 18:11:07 +0200 From: Adrien Mazarguil To: Ferruh Yigit Cc: Nelio Laranjeiro , dev@dpdk.org Message-ID: <1508429034-27506-4-git-send-email-adrien.mazarguil@6wind.com> References: <1508429034-27506-1-git-send-email-adrien.mazarguil@6wind.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1508429034-27506-1-git-send-email-adrien.mazarguil@6wind.com> X-Mailer: git-send-email 2.1.4 Subject: [dpdk-dev] [PATCH v1 3/4] net/mlx4: fix indirection table error rollback X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" In case of error occurring while setting up indirection table and related RSS context resources, intermediate objects are not cleaned up. Moreover although unlikely, an error other than EINVAL (e.g. ENOMEM) may be returned. A description of mlx4_rss_attach()'s return value is also missing. Fixes: 078b8b452e6b ("net/mlx4: add RSS flow rule action support") Signed-off-by: Adrien Mazarguil Acked-by: Nelio Laranjeiro --- drivers/net/mlx4/mlx4_rxq.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/drivers/net/mlx4/mlx4_rxq.c b/drivers/net/mlx4/mlx4_rxq.c index 65cf123..ee29556 100644 --- a/drivers/net/mlx4/mlx4_rxq.c +++ b/drivers/net/mlx4/mlx4_rxq.c @@ -185,6 +185,9 @@ void mlx4_rss_put(struct mlx4_rss *rss) * * @param rss * RSS context to attach to. + * + * @return + * 0 on success, a negative errno value otherwise and rte_errno is set. */ int mlx4_rss_attach(struct mlx4_rss *rss) { @@ -202,6 +205,7 @@ int mlx4_rss_attach(struct mlx4_rss *rss) int ret; if (!rte_is_power_of_2(RTE_DIM(ind_tbl))) { + ret = EINVAL; msg = "number of RSS queues must be a power of two"; goto error; } @@ -212,6 +216,7 @@ int mlx4_rss_attach(struct mlx4_rss *rss) if (id < priv->dev->data->nb_rx_queues) rxq = priv->dev->data->rx_queues[id]; if (!rxq) { + ret = EINVAL; msg = "RSS target queue is not configured"; goto error; } @@ -225,6 +230,7 @@ int mlx4_rss_attach(struct mlx4_rss *rss) .comp_mask = 0, }); if (!rss->ind) { + ret = errno ? errno : EINVAL; msg = "RSS indirection table creation failure"; goto error; } @@ -245,6 +251,7 @@ int mlx4_rss_attach(struct mlx4_rss *rss) }, }); if (!rss->qp) { + ret = errno ? errno : EINVAL; msg = "RSS hash QP creation failure"; goto error; } @@ -271,10 +278,18 @@ int mlx4_rss_attach(struct mlx4_rss *rss) } return 0; error: + if (rss->qp) { + claim_zero(ibv_destroy_qp(rss->qp)); + rss->qp = NULL; + } + if (rss->ind) { + claim_zero(ibv_destroy_rwq_ind_table(rss->ind)); + rss->ind = NULL; + } ERROR("mlx4: %s", msg); --rss->usecnt; - rte_errno = EINVAL; - return -rte_errno; + rte_errno = ret; + return -ret; } /**