From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-eopbgr60043.outbound.protection.outlook.com [40.107.6.43]) by dpdk.org (Postfix) with ESMTP id 1DA6E2674 for ; Wed, 15 Aug 2018 19:04:23 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mxRc0CK3GwTYceEf30gS6037g/EEXntV1fzL5Y+PaFo=; b=dF/2Hqiv/Tld7rCerV6/xRdRll2EEYTa5OT3p33RuNDf1stMULpIE995cB79nkyBswASXNnsgFL93ksZ5TO3I6jtrjojk7SYHT4QA91Ja+/K7CKdaOZH9ut3n0VFQkj2070ofAm3DEFHm3mfJVWwSow3d1A0kpgaHj5U45nxR1o= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=motih@mellanox.com; Received: from localhost.localdomain (37.142.13.130) by VI1PR05MB4448.eurprd05.prod.outlook.com (2603:10a6:803:43::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1038.23; Wed, 15 Aug 2018 17:04:19 +0000 From: Moti Haimovsky To: yskoh@mellanox.com Cc: Adrien Mazarguil , stable@dpdk.org, Moti Haimovsky Date: Wed, 15 Aug 2018 20:04:03 +0300 Message-Id: <1534352643-13073-1-git-send-email-motih@mellanox.com> X-Mailer: git-send-email 1.7.1 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [37.142.13.130] X-ClientProxiedBy: DB6PR07CA0011.eurprd07.prod.outlook.com (2603:10a6:6:2d::21) To VI1PR05MB4448.eurprd05.prod.outlook.com (2603:10a6:803:43::11) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 41688ef9-577e-47b8-a9fe-08d602d12491 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989117)(5600074)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:VI1PR05MB4448; X-Microsoft-Exchange-Diagnostics: 1; VI1PR05MB4448; 3:7fu/yOK7Ok5mI64ME/Gk/u6SW9F3Ot1qbyBSbEDG32d0LyBYTuIrXMaMlXWQA3hX4rmPwWFJXzSOjcgFfdFjTwtHyZLyQYtuB7pP913hhzUM6GXS12KBhOeex2AaQLncoJigpbVFtbakmnMLxHPD894mp8J8gOZzwCuYrDizOJu6xlHRcbK96O8V4xCmj8gPHkjjCpe9qV74BJqtolKqvT3UJ2TRX/zQrHn0WnXPzf6h5jnB3miZwlMrGqq1b3wc; 25:7fpN21ovTlKYneXeRAsbbrdbgxcWmhuz8EjFceTD75eFBNGUMRf7zVcx9HR4/tuXLyIDflWLJ4OmEVfyq7uUEyNQDXjhw/LpiMWtI2+Fgd9UiFJdESEiRWA4enN1XmFx6xZPymvk07AHvzmowX66Nhc5ZYm5Rs/r9VUcNKZbpbJLthwYBus5+xs7xSmORIIMS9qiZrBeTb/Lzy3D6f9OIPK+bQtBs6NwwMMWBUMgJQ3jW+cxA1LF3ME3mdNoSvBLVhPlPLOFaNyv2Z+2cIEAGk4V0Fh+rzmTitU+izHHfltNGUrEyWIu53NZKLXj44KUBjoEipN+RPcFp8KhRTaXzw==; 31:fSblcz4nkikDJRaalJJ0VQOrDEzlgFLtsyDeRbyCaRCNJANO/Mpu31O+8B1t4mcn1+WmWeAge8gW+HMK7+YUKcMRvG5CiERFhFajSYSW4GSpFcUhIK7wSmeiHvzAGFvBRHQQe0HZ7wvpbuQqdofk0F5qYIZ2yYVQOq/jnqAIYFEo6zx2da/9e/l9AQa85Twy+N/ZDUt5QugY461MVnqhFbyB64osVAwFzcCfuh/KoWo= X-MS-TrafficTypeDiagnostic: VI1PR05MB4448: X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; VI1PR05MB4448; 20:Jld5Usnqd9uM7gFOAh54PBiIbW8IL9Sri1Rp/ZBOJxpwCKmFzWOF7seve0Dx0zNQFacOUtzFVzG6OlSAV3qwVn3+jXlC7YmgXAh9vyHwA2BeHtEMo6CkWe8IHR6zEfXiQfOTiqGOdw1vrd/V/mjPAPnQ78W31xjTthXkWPfbfTkhxqkzfLP8EMsvpYaiXx6EhI1KN4g0THbQs3puroomCuK/nYpmtlpRgT8RTvyz4w4AdkwIt+QKC/1TQGIDCq0JBDkUktmDDKrs/3+zW0Zwbf34/QPxlMjr/mHRxhEvmHhfB7lFvZgnKSFmdfV8uhH2mVhWtX0RaMTLKWQ9KDGx4dicEZlgwrDsSpaZqGZo8qC08ROoZfnznd/0VhVE4WGVCPwxHKVZCHWC7fFpbEgOGKqMQVKKDnJ1qDsT9HMrluSETpdPXUGXXMEZ2LwXGwht9H+9Sh0+UGLtEwovl0w5F1+7iiFy6O6ky+w2OMAOUx56TAQK0KDO7PFuv6gPJ5wA; 4:s/XFaU/2iIlK7U9wYD7DHfgZEr6ZsAR28lqj538FiaAg8N0WxTvMp56UgofsAmY3iChhbjV6flHVPOOEIp0vNhmunpkO7VDjV3qZgx88UlcoBn6097m0JlayuPjkomKF0x1R0xm8lOytMjGskpeBYz2SMlwZ1go0s5UqGrlz7NvZ8rRXEGl8PDmL7zUmdG2rYCSW9/PV60qXrMemHdcKZmTjCUEpleTYYVMzDrW9OXc58AbNIzwz3mJX8Bk0ahGxXlm/zOoqG4OINAfbtbaj8g== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3002001)(10201501046)(3231311)(944501410)(52105095)(93006095)(93001095)(6055026)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123562045)(20161123560045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR05MB4448; BCL:0; PCL:0; RULEID:; SRVR:VI1PR05MB4448; X-Forefront-PRVS: 07658B8EA3 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6069001)(136003)(39860400002)(396003)(346002)(376002)(366004)(189003)(199004)(50226002)(2906002)(4326008)(107886003)(2351001)(34206002)(53936002)(1857600001)(25786009)(66066001)(14444005)(305945005)(7736002)(26005)(97736004)(6486002)(16526019)(3846002)(6116002)(5660300001)(36756003)(81166006)(86362001)(105586002)(8676002)(2361001)(54906003)(6506007)(386003)(106356001)(316002)(68736007)(51416003)(478600001)(81156014)(486006)(6666003)(6636002)(6512007)(956004)(8936002)(47776003)(48376002)(50466002)(16586007)(2616005)(52116002)(37006003)(476003)(21314002); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR05MB4448; H:localhost.localdomain; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR05MB4448; 23:P6/oApcXTbMPuLkQNB7/uQ8NG1jZrZToJI9a21ZaQ?= =?us-ascii?Q?4MlYnmdjIRpLHFvO/TY/PABhgGnIRvp/1fKNPjPkDSmuL7+sj5OLSE8GAERj?= =?us-ascii?Q?8a2+rSneNyyaqZHlH/AKWO+zIJGGDcO1wuVZOKmapqG10wwFCBCg59yjx/GQ?= =?us-ascii?Q?wEWh0qVYyk585vWni58vkvPJC3LVdYE8YIEu+Db6wWariQOIuiW5GrTbdlzi?= =?us-ascii?Q?hx4MxG0gtX2N8D+auv1XRqsonb8Jk/WJ3U9vxYsFpSycE21pVlpihIQU8BIn?= =?us-ascii?Q?hYcCF5JcB/hkVwQa4UnZ/1a3Nj70JbR+jCTVYvBfCLszcoBPIJYDVk1aqMMq?= =?us-ascii?Q?O8LKwfKAu8BEEp2u7BW9Z4awItbnSBOZDIA/xwJ5iI4o9ctVw1FjSj1CprKN?= =?us-ascii?Q?b84nCXx4v/NsVzbt43df1ieMQjyOK9FbiDY6XdA6A3LDYERZdqxEcSesG1PM?= =?us-ascii?Q?Dnsf4GydcHvrhNDyXzzH8IK/YIbBB0+JtB5XfBkrN330TWZPHVdCln7evMQc?= =?us-ascii?Q?N7vxzib8xHLhyvG6T+Hu/s89i0Vc3k7MNlwgQCw7rPXztXbgy1awTCrRzT6W?= =?us-ascii?Q?tWU/JCTYwnc6LCftsBd/DZpNt9ZMnUzblwj3ADNNygIhVHh9azjlGhw6W/5I?= =?us-ascii?Q?B1R6W0LlNZ1xWg0M2t5nEDc11Ro4KNgMNZJAQktQU3bQRBUCBv3D0gtX1UDE?= =?us-ascii?Q?QDr85HDWt5NI6o/bVLvuoR14uTbeCZxJZhJXve+SJNBtXj4h9CB9KUO0tEdr?= =?us-ascii?Q?r1mls4CAoz6vMtLWoMFLJS/0jV4xk3N70ucQMi9ri7TtqKOY0lzmkn16QKTt?= =?us-ascii?Q?402aMdjWZteXRJm3kRHRuKZsz3tJIBIcs1h1KOzLS6qt6ve/6bJVoBSKTh+M?= =?us-ascii?Q?BDVKiFqj9wAYagltn0pjesqNSqAYgUG6hJ2A67X+cE1j24ICnsc4L83bS4i0?= =?us-ascii?Q?Q6V2OS6KP2w9nMrLSrCvHEKRkppA/9tr8mQXGxKitWDDbh87MVyiPu8JsRHF?= =?us-ascii?Q?HVwVNrtLBLnKVIr8wtLO+MnluPZSkkHz6wPGTVEtnCNAqH9bX4PjXTTXMvMz?= =?us-ascii?Q?dWbdT386qakFeZ3azb8vnohB6uBA+0hoq6jxVC7Gt/np59cm7JZsY9PnP36M?= =?us-ascii?Q?bYUNsQ/ISmSlD+TrDKQBjM+jTdPaOEZ8PeuuZG/hG1Vk1CuzwB2kxzAFwmkd?= =?us-ascii?Q?93hEg2K10xWtuZ60izuTzSkDjYsO19bZWeMec0Cd9yY814noSytXXkgKb2qS?= =?us-ascii?Q?splg/6q98/hqBJQ75m+ElgpJ0tGMMMS8MCbK9r1rjnlv70GSm/j9bfIEz5Kd?= =?us-ascii?B?QT09?= X-Microsoft-Antispam-Message-Info: aXJrjE4o93JPEoMjX1rzhXsTPu88W0XvQtdrB2F5nVe4CDrQLp90vnOBzgIADbM3LKt2lzUy8lu22MY+XeJ14djeT4zZhMbWPLqiqgUE7Q2BWMHyjpz4ZFb3DHsU70f87IZdb9Jr25tYFWLfhGMuA5HoLR9NMCZFBVuH0tQVOO3ZlFndXamJ9LTy/+Cl6Croc3hb7XGjqNyfk7UeZSiHXy3F7wq70E7dtJsIJRjL65D3Ug6ByduVOrfW+3UDukKCfvjHWyRWl3DNoKYhJuo3dTI+ZueKDKGiJoHSPktATtbx6GQJR1L3nod+A6w71Xi02/1PzFBLm32qduAPNde3byXOeT0RevOHtSM2Xuht0hE= X-Microsoft-Exchange-Diagnostics: 1; VI1PR05MB4448; 6:pGPNEcjwqZAuwD8BsCboTCzUZSA/Z2MWp/lAhYWOifqtwbtA8Pej+0fZOrAyfxHq64NJq+6IItcG4tXrdEuxO/Q+j0BcLpbtwiq4bUZujus4fPntmCW7J1egfWTvmQMSrHxvDNBiZwCkbKvzePegw8eINT6EepR72nbju22jIB+jzybF00/iWYQL3jp7DOdrOijhPLiAYPExOFqxY8uxQcVvfQ9AWUIduYZfRONWZQh4B2aSR9pGpz15ZRyySDy5txNSJwrMx6l4GxEmBwVmRYN6/9feH17X+ygl4yTKlQdl03H/v6+/zRItRsMIdFSqhu85Q8hbaontDDXfpe2RJz0dWeKP9Bx4Hg2Ma5IWY5ADs7gBt4Qh/RN6ZjGUb5FO1cxX+v6r+p2csd+8xpsD3PgHIIX9wHZJZTLYlG8gdbAeJXXS5ipQii3GJ0tV/BD62hklARTZM57RqJHOm2z/sw==; 5:tE1GPpnQzzzR9pY3fvnevoZJCKnd8qybZLRzvCjOcAtuiBltvyV7E6AQjVEn2POWDkVikiVdHeVbw3gaLbQa/51zO4mKTXuKczsx+Cm1uhAoUUC5td+n3QF5yAzJC0OHs8m/LDKgbBP72usmj3iF7dMPehXLL359btV7eOgVQR4=; 7:PfIO9yzglQfx5sZrMlcdJM4doj96jeoLer/2Nhok9D9r7puzr0uWGsUUIVvCfDj5t0gvLKKAEHQ5yJ4M98hB8OubhgmDY4rJv+4tkE2LfSKgrCUk3CrltGUUcrgj6WAXJAzCfGq1QvX1Zb7jZGOofLLsGuJaZU2wavbhkJo4wuci5TBoqO8DFUbtp4I6Wk6t4dNfcH7Ugq5UJW6dvH+sfbGE5NuRU/sgvEkuOhnGvzuEc5plUR1ywast5WdHAFFA SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Aug 2018 17:04:19.5053 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 41688ef9-577e-47b8-a9fe-08d602d12491 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR05MB4448 Subject: [dpdk-stable] [PATCH] net/mlx4: fix minor resource leak during init 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: , X-List-Received-Date: Wed, 15 Aug 2018 17:04:23 -0000 From: Adrien Mazarguil Temporary IB device context and list are not freed in case of a successful initialization of the device. This issue is caused by the two following commits, the first of which causes initialization to return early, while the second one goes a bit overboard while switching to negative errno values; an internal variable (err) is needed to tell success from failure at the end of the function since rte_errno is not reliable enough. Fixes: f2318196c71a ("net/mlx4: remove limitation on number of instances") Fixes: 9d14b27308a0 ("net/mlx4: standardize on negative errno values") Cc: stable@dpdk.org Signed-off-by: Adrien Mazarguil Signed-off-by: Moti Haimovsky --- drivers/net/mlx4/mlx4.c | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c index f5c450d..118edd9 100644 --- a/drivers/net/mlx4/mlx4.c +++ b/drivers/net/mlx4/mlx4.c @@ -494,14 +494,14 @@ struct mlx4_conf { ibv_dev = list[i]; DEBUG("device opened"); if (ibv_query_device(attr_ctx, &device_attr)) { - rte_errno = ENODEV; + err = ENODEV; goto error; } INFO("%u port(s) detected", device_attr.phys_port_cnt); conf.ports.present |= (UINT64_C(1) << device_attr.phys_port_cnt) - 1; if (mlx4_args(pci_dev->device.devargs, &conf)) { ERROR("failed to process device arguments"); - rte_errno = EINVAL; + err = EINVAL; goto error; } /* Use all ports when none are defined */ @@ -522,18 +522,18 @@ struct mlx4_conf { DEBUG("using port %u", port); ctx = ibv_open_device(ibv_dev); if (ctx == NULL) { - rte_errno = ENODEV; + err = ENODEV; goto port_error; } /* Check port status. */ err = ibv_query_port(ctx, port, &port_attr); if (err) { - rte_errno = err; - ERROR("port query failed: %s", strerror(rte_errno)); + err = ENODEV; + ERROR("port query failed: %s", strerror(err)); goto port_error; } if (port_attr.link_layer != IBV_LINK_LAYER_ETHERNET) { - rte_errno = ENOTSUP; + err = ENOTSUP; ERROR("port %d is not configured in Ethernet mode", port); goto port_error; @@ -543,15 +543,16 @@ struct mlx4_conf { port, ibv_port_state_str(port_attr.state), port_attr.state); /* Make asynchronous FD non-blocking to handle interrupts. */ - if (mlx4_fd_set_non_blocking(ctx->async_fd) < 0) { + err = mlx4_fd_set_non_blocking(ctx->async_fd); + if (err) { ERROR("cannot make asynchronous FD non-blocking: %s", - strerror(rte_errno)); + strerror(err)); goto port_error; } /* Allocate protection domain. */ pd = ibv_alloc_pd(ctx); if (pd == NULL) { - rte_errno = ENOMEM; + err = ENOMEM; ERROR("PD allocation failure"); goto port_error; } @@ -560,7 +561,7 @@ struct mlx4_conf { sizeof(*priv), RTE_CACHE_LINE_SIZE); if (priv == NULL) { - rte_errno = ENOMEM; + err = ENOMEM; ERROR("priv allocation failure"); goto port_error; } @@ -585,9 +586,10 @@ struct mlx4_conf { device_attr_ex.rss_caps.max_rwq_indirection_table_size; DEBUG("MAX RSS queues %d", priv->hw_rss_max_qps); /* Configure the first MAC address by default. */ - if (mlx4_get_mac(priv, &mac.addr_bytes)) { + err = mlx4_get_mac(priv, &mac.addr_bytes); + if (err) { ERROR("cannot get MAC address, is mlx4_en loaded?" - " (rte_errno: %s)", strerror(rte_errno)); + " (error: %s)", strerror(err)); goto port_error; } INFO("port %u MAC address is %02x:%02x:%02x:%02x:%02x:%02x", @@ -620,8 +622,8 @@ struct mlx4_conf { eth_dev = rte_eth_dev_allocate(name); } if (eth_dev == NULL) { + err = ENOMEM; ERROR("can not allocate rte ethdev"); - rte_errno = ENOMEM; goto port_error; } eth_dev->data->dev_private = priv; @@ -666,8 +668,6 @@ struct mlx4_conf { rte_eth_dev_release_port(eth_dev); break; } - if (i == device_attr.phys_port_cnt) - return 0; /* * XXX if something went wrong in the loop above, there is a resource * leak (ctx, pd, priv, dpdk ethdev) but we can do nothing about it as @@ -679,8 +679,9 @@ struct mlx4_conf { claim_zero(ibv_close_device(attr_ctx)); if (list) ibv_free_device_list(list); - assert(rte_errno >= 0); - return -rte_errno; + if (err) + rte_errno = err; + return -err; } static const struct rte_pci_id mlx4_pci_id_map[] = { -- 1.8.3.1