From patchwork Sun Apr 30 08:49:08 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Mintz, Yuval" X-Patchwork-Id: 756826 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3wG1Ts2b3Wz9s7C for ; Sun, 30 Apr 2017 18:50:25 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=CAVIUMNETWORKS.onmicrosoft.com header.i=@CAVIUMNETWORKS.onmicrosoft.com header.b="c+SsuiMT"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1953195AbdD3IuP (ORCPT ); Sun, 30 Apr 2017 04:50:15 -0400 Received: from mail-bn3nam01on0055.outbound.protection.outlook.com ([104.47.33.55]:21120 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2999110AbdD3Itr (ORCPT ); Sun, 30 Apr 2017 04:49:47 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=2T8zlq6JoMkHCuBMGUHv4nMyFm9eJbAXwTnhY9SDYOQ=; b=c+SsuiMTSxaECi/oGTH9yR9/msN8kOdxIMgmZ4qBnpiZeGqD8lj5rsbKCrYWTsiD/hLlAMEBlld0n+oPmFF6FRkqdyIidfjiSoAZ0hN11NFq/vUTXMf5SaXWJZSMBGBYRGcL01qwkF8wnh9fDTOuJxDlfGQuOO0l3dhpBFqGLjs= Received: from MWHPR07CA0041.namprd07.prod.outlook.com (10.169.230.27) by CY1PR0701MB1946.namprd07.prod.outlook.com (10.163.141.155) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1047.13; Sun, 30 Apr 2017 08:49:44 +0000 Received: from BL2FFO11FD029.protection.gbl (2a01:111:f400:7c09::150) by MWHPR07CA0041.outlook.office365.com (2603:10b6:300:1c::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1061.12 via Frontend Transport; Sun, 30 Apr 2017 08:49:44 +0000 Authentication-Results: spf=none (sender IP is 50.232.66.26) smtp.mailfrom=cavium.com; vger.kernel.org; dkim=none (message not signed) header.d=none; vger.kernel.org; dmarc=none action=none header.from=cavium.com; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) Received: from CAEXCH02.caveonetworks.com (50.232.66.26) by BL2FFO11FD029.mail.protection.outlook.com (10.173.160.69) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.1047.9 via Frontend Transport; Sun, 30 Apr 2017 08:49:43 +0000 Received: from localhost.qlogic.org (10.185.6.94) by CAEXCH02.caveonetworks.com (10.17.4.29) with Microsoft SMTP Server id 14.2.347.0; Sun, 30 Apr 2017 01:49:40 -0700 From: Yuval Mintz To: , CC: , Yuval Mintz Subject: [PATCH net-next 4/6] qed: verify RoCE resource bitmaps are released Date: Sun, 30 Apr 2017 11:49:08 +0300 Message-ID: <1493542150-21826-5-git-send-email-Yuval.Mintz@cavium.com> X-Mailer: git-send-email 1.9.3 In-Reply-To: <1493542150-21826-1-git-send-email-Yuval.Mintz@cavium.com> References: <1493542150-21826-1-git-send-email-Yuval.Mintz@cavium.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:50.232.66.26; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(39850400002)(39840400002)(39400400002)(2980300002)(428002)(189002)(199003)(9170700003)(76506005)(6666003)(47776003)(48376002)(104016004)(50466002)(2950100002)(189998001)(2906002)(5660300001)(508600001)(305945005)(5003940100001)(38730400002)(101416001)(50986999)(76176999)(105586002)(107886003)(86362001)(8676002)(50226002)(106466001)(8936002)(81166006)(77096006)(53416004)(36756003)(4326008)(356003); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR0701MB1946; H:CAEXCH02.caveonetworks.com; FPR:; SPF:None; MLV:sfv; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD029; 1:mxF+LqV8KXDD8ohDYCev+3hzruI7ZYfQbWy1DMtXAmiAVqYCGS/RIxs9KWWM1W8N4EQs8f9lB+WEMJq5z89Ie8YxCUOyucMlGrHgxqWbbvEZIG/K23ySa8Ihis5wTYvFKturKSnxe1vgGPlBcfMd4DOhVa9TxyjYfAVb+ndPdFC9fypKcrLApfNYjxRXHrDxq6UOPUFFYjVb9zEJ7p2fN537waoyN1ZuxGpjGkSm5jNC16QMHphmXz5zyS4gdTL1dJkH3gcHmhXXC1KhzXxW52vFLCYDgcRoYQZKfEIqWyiYEcWR02mm3yJssq1b0kWNFijcgWBPn76vmc/vJb/4o+m5rXf7iKPBO6BcYOQ2HFw+crLhgjmVNQCETV3dzg9lRw8LQkMo8IVWY8Dlma5fZJxa8iIaYTvAlb+8wAZumQsELJXvUUGElDkAvA9wwZKO/SufQk6kUb8d01osxbH7sAJc03alfEXyRiOkOnZLhCs1RHtVkhi/s0BaaU6hqNjGRVUByNnrtyovi3srk5SfbAMzJY/45bkFD5uG/ACiKZU11u9YDAhLgT6u1WBO+rD9rnVL9yhwXt+2nNmRbxFFsA== X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 15fb85a1-87ac-4ac0-59fd-08d48fa5d931 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(2017030254075)(201703131423075)(201703031133081)(201702281549075); SRVR:CY1PR0701MB1946; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1946; 3:9SwuKZelZPollfoIeyabGmw59iAVx7brQJf+rXDgxf9GRV0xfjklm4//nDeC+y3cwDRS45aqXZVVycC0sd74RSrhgVWfVDQ58Uh/RzVxv95ZYbctX7NoyxQIiW3YGJjRL3efGN3VNZ/2zFEZL7LongB+JgaZdBKiof2rR4b4QbgyBWsmUfa6i1n8MZiVQkTaBC9qmG3rmggZRrbaP7IXQEXwSLySGuqfc2431WC0lQCb8mJYGOE+Eyk2cEoRjtX+9GpfI2/KC7ymPr+K4ymA7NsBKrjRa0bJsL8sVhhMSlfZ8a1WT5AOjCIXMg61AQOdHGAsS6tpyIPvCTv6+UMdSauSScQ4088p9Qu0IW8nDbP4g6h/ZyTSWUCyYjq642jFq80/DbP6HHISon6LvqaQH+T9LS18gw7JRsQhvhjgn49TVBe0Lp3a0fFjSaLuuO6OmdHTcsDgrlNQbSHkkkEm6Cyn24Tts9U9tEkuLe2rvDrdGrSmpKmlhHS0ZArvyAv3 X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1946; 25:Bj2mA7L48mnCzr7pp5zmF2xz/yEPNblDM0SuqlxSiMwqf5r1WoyY2d4OcO8JGymC+pkDcfWnN/MJvg3JmxKrpRzZ985qvfMgrNh50ERfuIDUsT0WYJsuQi+xaoLmcphNYGEvrN+zOqDef2njYVwjzS6Dxi1sN1gtYQw95EmV4Pc109AbYTQ9zxaSV5S/FGQt0E6uZFi5pYGH9ZzBLPRWIYum6m3mZ6CjxTJlzavVnM5KZBPfl94rmu9eXoGyvevcgTHDCEpRDsUkeM1/UY25O7PDVXYndeypXhVQGYgZNEATWKfQ3mnY8irjU9kzL2uO5zdfZBmkVWYMmgTyBF+ksqQrnfle7VP5EsMOchcyNkIJKUNlHk8/1TKIzD0JfhVOlb4yTocdtlcLc7+gduqmsKjoZj+PrxaJM3KrEDjn3eGrr1x4CvxabPzGjbf3QSTy1RLN2ejeyM7w/cjkApl5zA==; 31:vV9jew+Yru8qN1LjXeYZeOpROYrSJp0mvH/hrTyAwlZe8/9913Dt7cTM5782ml7KiYXW0b3nF/jRgVJ1j0v5er7LRuWWKUCIclFaEVcmnxMWBns15iaUs4DbiMnCW9N6xQm/tSrOINeqevPtX+HBvg8O1SXBSaLnkN4b2J/66xNoDxjdH9FLF9KzHzqfHHc+QZqVHK6b4IxpvTv4lvNtjNIAUZ62/8zGaaKUYKMDYDf5bJA+dR1dLeeDVIujgjNkbn5luftBxmRgu9RM4UMAnw== X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1946; 20:/bT1reIDhC5UYwlLntQBgOEMcml8cfTZ9zlkCXVW8UKhqyO1e3x8OhTw1E+4I5kM/Or0SN7OEOEoU+Xd8nINKGlXTeGqAEGWq9HjOqOwcVRFNcW1SzL4cBsgb36L63C92EdjIFmebnWb7/2Rebi6IHPxQlWcx3MWVnrpJTKxi7jaP2RLm22DHRbo7wDURw74mLJJ8k/Sk3ti+JLVi20QnnQDgQWEW2737VtgPwqyn6lw3dC0sVppNq9ze4DAMLlq3Nm+M4juiBOezBabUVN/VZebYSHjBvDeEcJZvFSbU0rWYZJ6qzwkaYv/u+xhkqRW0FGGeiGQ6AwdfqHqLs0YvK2yRv7tLJU2dlLXNHBproTRU70uUAnqPBPDzZRurhjjMXPq4o5FZor10T0Nkn7Fv+6331W0U3fCjKAKZa6m4/YI5KGd/+ScE8GmI6DNUbeYogvh89quU9dpYnAXDTveoBSKZv0VkG63OrcheZTwWej66FzRPReRzrvA4UDqrJdO X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040450)(601004)(2401047)(13015025)(13017025)(8121501046)(5005006)(13023025)(13024025)(13018025)(10201501046)(93006095)(93001095)(3002001)(6041248)(20161123560025)(20161123562025)(20161123555025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(6072148); SRVR:CY1PR0701MB1946; BCL:0; PCL:0; RULEID:; SRVR:CY1PR0701MB1946; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1946; 4:10BqkX1J9NrQqtutin0hJw6RpJ5miGTlwaRvPFAeBtUlYeXl5jQQ1VhOsqgL72bdxBNL23VoUoz/Sje8xHa+2boBbFFLqxxpkCnoLmaO6P98O3X1JwJVitr7fbuj694odpt0TWBb6ZgbcrGt5UWBugChegd3jEI7JbDh5szNGK5ZF9t+wCMRm9Pvz71DdtxXLbgKvsu2f+2MhNtFYQyFyKU6vFBaQuTcyFHcG8BNELqbFm9cSSfKBqpdohCMX+JjN7cUKMrDlL7q5nj9MYQjCEanEwEVrYiorJg6ixG7crZrxlj20x1ICwB3dLwG/DZI0+xSI0islvLJi2gxxorlwKkHz31Qqjbvx2dGkXws9PhDawpZIch/GMW68pukoDY2cXcPQ6CIQ2Spzz3Tfp6vNNEpUzqfjFthFCyX7ujxb00EHYoyNFomaDE5eKwjbybAh37BaTifDNMrenhaudbKKgDjMM9kdz7vxcLn9rSiHQWesr3NgnIGUiIfURbsyMUDCnU7Ejep8M30FPYPNOywIVIrVsjVxQuxFScIIUFfiVFr3ddan8YSXI3Oaur36x3HY2Va3c4swLJHBL9ti//CUlF51pWisJN3WJdIi4ghxEhDAESBfoZ3WGDAaH6SCludT5G+g7KsVunu+T3YWh5pf9O3eXKvYBq8hV2RLnjOcLNcQb5zeQrpw815VQZrtWWgPEFuZP46EVZEpHUSaO/nn0eCw+/ojk6i83sIFUeiHQKnOMdPDtF7IdUaSkvHBz3Cr5oBfpPZFBHOP2qOVIF2HTruBgJVvuvjebr214LQUhqc3/eyKEX9pZaeQfbn8YzC X-Forefront-PRVS: 0293D40691 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR0701MB1946; 23:7Fuv+Goh3iL0YtTIFo8puGaahSg440k7Sxknny2?= =?us-ascii?Q?gAzO1fZmwDuweYZ79hDvWeRsp90s4gWPQSZ++eUhfNnmwB9iBFDB3/W+L8Lj?= =?us-ascii?Q?VDq6z01YdBoVdhl/pYGrthRHN8yTu+iqMWKf1SqkU4hQPu8cFhaswSMezHQt?= =?us-ascii?Q?be+Y92P/IWPkSrxb2jo0n7vtEha6XPu43VUyLpR6YPs5Y1+uFEPlmD/65Mza?= =?us-ascii?Q?ldGSgEO50h1Ta6YWJ61En4DrMWiHRtzR2D/VCvZerzrlC1fbEbDItvFH38Ni?= =?us-ascii?Q?MAwSGyZjYyZhxScUKrzF71q1dJ112wDVOsm9Y5rxUywhTEI1eEMOkWwWVBAY?= =?us-ascii?Q?ZS2moerocAXuHvalI6fEUVgQWihIAko2TPJZeMADxVPV5KvjdRlKyBl1W5oW?= =?us-ascii?Q?2tYtx2eftLhbK3mq7mjuwGDbhCHWJpa58j4mDggfKYEp3giPiOMHLNFjBnva?= =?us-ascii?Q?f6EJ+NaFvoDBFqVqhqB0zer28/uYr23y8kTrYwbVZ8S9LMAvurzPFMLg8KH1?= =?us-ascii?Q?NOVJzg2Q2YRI2/FdnaTEhF8Y3TEWPWhdiKDhAj2uEt3kOlQ+BTjh0NsszWbH?= =?us-ascii?Q?8jETYfCcgRlfmMlCurbCtwxaJUnBIRWXQSTCYE545jw4xpy4jiHnM/KSzskZ?= =?us-ascii?Q?25vLtVc0SjlEBSc1eizlbUwrb/XNcMNxT3B+g2dCzxrR9h7Pf8wrr+eDEOfk?= =?us-ascii?Q?BnSVUCd/mxO0nIl687M0y1lolvogOULgH1m4FHlxDPg4HyKO/ezYbLK+5T9l?= =?us-ascii?Q?ka8UlzKQitW8Mnt6WS58KO9R6188j9lR3iNQUKDiKXsOLPvcsJue1UL7u5nz?= =?us-ascii?Q?6If3zjg3rVqkRLiVn7s4SSheDzCLcUn9KSTW9qwr3USvM/M9ae46woQDP6aK?= =?us-ascii?Q?6tcTMUBYAY1qOyjo+0lejFGUShAKRwnk2xjleiM99R7XYizMm7PFuKXZKbp+?= =?us-ascii?Q?Vf/fa77bjmzKDT+fbzfP/KOzYxQkjx+z9dXPYz6pr7dgCAcXmeEuosBEUCJ0?= =?us-ascii?Q?r28w=3D?= X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1946; 6:xwCAlZMFPcLs446ed2AolHqzRZis84iJDDF8dJeM+Wcg9Hq1p3K+YUgcgQUmguNxh+kyfjVq0bpUwUH4tUayLWhWq510AsCjKj+d8E1JA9+x6dO5jp/Od2Ijg9A99Oc3pFzoXWSFpcvBVtutQPbhezxID8nS/sm1WMp1HC940uL3Nps0CTxuu8jgiz1livnvFQD75gpFNd2mPAowbv1WHvHA8VsOQ2YUIINeTqgXeAC5TMpu6Va8T6ObxqNOGjjuIkx8dfkQzqIefAeXf/pKzdDZ2w8HU9MBVO70cWzySi50K1QHfGRKRwrEiOKs1OhH66JXMcipkh8nCVlML+lluVZpglhSc0BLdsnw/yp8FPDio8KZ2OwQTRwoA20wXUerVGP58SemVGfNcBCa6kX4w1TEWOVwtPhnEgBE8F+iAWfvNpee6LJmJMpXD57KAzZ0FtnQyYC6j7zMQZxzDyFwidnFsIIBw0Twdo9CRlI/evqow0sCCdL5/JqEbZv0Gkx3zx+SxfZG50yiDdELAXPedA==; 5:pCfIfKSxxXi1uD4y374xxWw7b0uhmDGsTwa4raD1JQG9BGSWacNeo8WtFWQ9obNZ7MIYICSucchVDBS1MtWQ1v+Gkv5keymeqhFfkiS2/zY62oJp5PMNSjqjCyvoKzzCh6TEvuKZuumEwdVnqhNvgQ==; 24:FZ+8rekm5JJdMlA/QjOKAIj/2johrQPip3wEYrlbUfgDsMIrTBSX8SfuHwJLtF7NBdLHWTtCbjbPyebq78ohorxtzILWzYL3yPaCl51ytuk= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1946; 7:e/Ib0Vt9QE+R1N5Ehex6HX/vAZmapFzDHwhfybGKuDCLVZ/ThfsHumFiNbsURhXyAgCI1Z2qZ3c8bjT3vMqoDyFElg8TqI6XtMaFJL/aK+QEtWkkr2jCGGpLGBSWxZGM8A95GjzDGh7Q9SEv47toojHFn6+rHX4Oh0OfBo9+0Bz/GWciJBUvGqtXV2xTQj5zchgK/f9SksrOItxR+aTuj0vH+UyNKGfvb+dIxV3AU79o/byMlPpmaYsUt1LtuT8JmdtDfsK4w7nkpKWUFWm+bqwxrZAyFHJd2E3i0Tcjb+W5s9SnPjH7L+H3iq1QJ52AIj+MTpPmg8YwWS6NZhZJYw== X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Apr 2017 08:49:43.8916 (UTC) X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=711e4ccf-2e9b-4bcf-a551-4094005b6194; Ip=[50.232.66.26]; Helo=[CAEXCH02.caveonetworks.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0701MB1946 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Ram Amrani Add mechanism to verify RoCE resources are released prior to freeing the bitmaps. If this is not the case, print what resources were not released. Signed-off-by: Ram Amrani Signed-off-by: Yuval Mintz --- drivers/net/ethernet/qlogic/qed/qed_roce.c | 105 +++++++++++++++++++++-------- drivers/net/ethernet/qlogic/qed/qed_roce.h | 2 + 2 files changed, 80 insertions(+), 27 deletions(-) diff --git a/drivers/net/ethernet/qlogic/qed/qed_roce.c b/drivers/net/ethernet/qlogic/qed/qed_roce.c index 0c449dd..f36e3c3 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_roce.c +++ b/drivers/net/ethernet/qlogic/qed/qed_roce.c @@ -90,7 +90,7 @@ void qed_roce_async_event(struct qed_hwfn *p_hwfn, } static int qed_rdma_bmap_alloc(struct qed_hwfn *p_hwfn, - struct qed_bmap *bmap, u32 max_count) + struct qed_bmap *bmap, u32 max_count, char *name) { DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "max_count = %08x\n", max_count); @@ -104,26 +104,24 @@ static int qed_rdma_bmap_alloc(struct qed_hwfn *p_hwfn, return -ENOMEM; } - DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "Allocated bitmap %p\n", - bmap->bitmap); + snprintf(bmap->name, QED_RDMA_MAX_BMAP_NAME, "%s", name); + + DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "0\n"); return 0; } static int qed_rdma_bmap_alloc_id(struct qed_hwfn *p_hwfn, struct qed_bmap *bmap, u32 *id_num) { - DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "bmap = %p\n", bmap); - *id_num = find_first_zero_bit(bmap->bitmap, bmap->max_count); - - if (*id_num >= bmap->max_count) { - DP_NOTICE(p_hwfn, "no id available max_count=%d\n", - bmap->max_count); + if (*id_num >= bmap->max_count) return -EINVAL; - } __set_bit(*id_num, bmap->bitmap); + DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "%s bitmap: allocated id %d\n", + bmap->name, *id_num); + return 0; } @@ -141,15 +139,18 @@ static void qed_bmap_release_id(struct qed_hwfn *p_hwfn, { bool b_acquired; - DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "id_num = %08x", id_num); if (id_num >= bmap->max_count) return; b_acquired = test_and_clear_bit(id_num, bmap->bitmap); if (!b_acquired) { - DP_NOTICE(p_hwfn, "ID %d already released\n", id_num); + DP_NOTICE(p_hwfn, "%s bitmap: id %d already released\n", + bmap->name, id_num); return; } + + DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "%s bitmap: released id %d\n", + bmap->name, id_num); } static int qed_bmap_test_id(struct qed_hwfn *p_hwfn, @@ -224,7 +225,8 @@ static int qed_rdma_alloc(struct qed_hwfn *p_hwfn, } /* Allocate bit map for pd's */ - rc = qed_rdma_bmap_alloc(p_hwfn, &p_rdma_info->pd_map, RDMA_MAX_PDS); + rc = qed_rdma_bmap_alloc(p_hwfn, &p_rdma_info->pd_map, RDMA_MAX_PDS, + "PD"); if (rc) { DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "Failed to allocate pd_map, rc = %d\n", @@ -234,7 +236,7 @@ static int qed_rdma_alloc(struct qed_hwfn *p_hwfn, /* Allocate DPI bitmap */ rc = qed_rdma_bmap_alloc(p_hwfn, &p_rdma_info->dpi_map, - p_hwfn->dpi_count); + p_hwfn->dpi_count, "DPI"); if (rc) { DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "Failed to allocate DPI bitmap, rc = %d\n", rc); @@ -245,7 +247,7 @@ static int qed_rdma_alloc(struct qed_hwfn *p_hwfn, * twice the number of QPs. */ rc = qed_rdma_bmap_alloc(p_hwfn, &p_rdma_info->cq_map, - p_rdma_info->num_qps * 2); + p_rdma_info->num_qps * 2, "CQ"); if (rc) { DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "Failed to allocate cq bitmap, rc = %d\n", rc); @@ -257,7 +259,7 @@ static int qed_rdma_alloc(struct qed_hwfn *p_hwfn, * The maximum number of CQs is bounded to twice the number of QPs. */ rc = qed_rdma_bmap_alloc(p_hwfn, &p_rdma_info->toggle_bits, - p_rdma_info->num_qps * 2); + p_rdma_info->num_qps * 2, "Toggle"); if (rc) { DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "Failed to allocate toogle bits, rc = %d\n", rc); @@ -266,7 +268,7 @@ static int qed_rdma_alloc(struct qed_hwfn *p_hwfn, /* Allocate bitmap for itids */ rc = qed_rdma_bmap_alloc(p_hwfn, &p_rdma_info->tid_map, - p_rdma_info->num_mrs); + p_rdma_info->num_mrs, "MR"); if (rc) { DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "Failed to allocate itids bitmaps, rc = %d\n", rc); @@ -274,7 +276,8 @@ static int qed_rdma_alloc(struct qed_hwfn *p_hwfn, } /* Allocate bitmap for cids used for qps. */ - rc = qed_rdma_bmap_alloc(p_hwfn, &p_rdma_info->cid_map, num_cons); + rc = qed_rdma_bmap_alloc(p_hwfn, &p_rdma_info->cid_map, num_cons, + "CID"); if (rc) { DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "Failed to allocate cid bitmap, rc = %d\n", rc); @@ -282,7 +285,8 @@ static int qed_rdma_alloc(struct qed_hwfn *p_hwfn, } /* Allocate bitmap for cids used for responders/requesters. */ - rc = qed_rdma_bmap_alloc(p_hwfn, &p_rdma_info->real_cid_map, num_cons); + rc = qed_rdma_bmap_alloc(p_hwfn, &p_rdma_info->real_cid_map, num_cons, + "REAL_CID"); if (rc) { DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "Failed to allocate real cid bitmap, rc = %d\n", rc); @@ -313,6 +317,54 @@ static int qed_rdma_alloc(struct qed_hwfn *p_hwfn, return rc; } +static void qed_rdma_bmap_free(struct qed_hwfn *p_hwfn, + struct qed_bmap *bmap, bool check) +{ + int weight = bitmap_weight(bmap->bitmap, bmap->max_count); + int last_line = bmap->max_count / (64 * 8); + int last_item = last_line * 8 + + DIV_ROUND_UP(bmap->max_count % (64 * 8), 64); + u64 *pmap = (u64 *)bmap->bitmap; + int line, item, offset; + u8 str_last_line[200] = { 0 }; + + if (!weight || !check) + goto end; + + DP_NOTICE(p_hwfn, + "%s bitmap not free - size=%d, weight=%d, 512 bits per line\n", + bmap->name, bmap->max_count, weight); + + /* print aligned non-zero lines, if any */ + for (item = 0, line = 0; line < last_line; line++, item += 8) + if (bitmap_weight((unsigned long *)&pmap[item], 64 * 8)) + DP_NOTICE(p_hwfn, + "line 0x%04x: 0x%016llx 0x%016llx 0x%016llx 0x%016llx 0x%016llx 0x%016llx 0x%016llx 0x%016llx\n", + line, + pmap[item], + pmap[item + 1], + pmap[item + 2], + pmap[item + 3], + pmap[item + 4], + pmap[item + 5], + pmap[item + 6], pmap[item + 7]); + + /* print last unaligned non-zero line, if any */ + if ((bmap->max_count % (64 * 8)) && + (bitmap_weight((unsigned long *)&pmap[item], + bmap->max_count - item * 64))) { + offset = sprintf(str_last_line, "line 0x%04x: ", line); + for (; item < last_item; item++) + offset += sprintf(str_last_line + offset, + "0x%016llx ", pmap[item]); + DP_NOTICE(p_hwfn, "%s\n", str_last_line); + } + +end: + kfree(bmap->bitmap); + bmap->bitmap = NULL; +} + static void qed_rdma_resc_free(struct qed_hwfn *p_hwfn) { struct qed_bmap *rcid_map = &p_hwfn->p_rdma_info->real_cid_map; @@ -332,12 +384,12 @@ static void qed_rdma_resc_free(struct qed_hwfn *p_hwfn) } } - kfree(p_rdma_info->cid_map.bitmap); - kfree(p_rdma_info->tid_map.bitmap); - kfree(p_rdma_info->toggle_bits.bitmap); - kfree(p_rdma_info->cq_map.bitmap); - kfree(p_rdma_info->dpi_map.bitmap); - kfree(p_rdma_info->pd_map.bitmap); + qed_rdma_bmap_free(p_hwfn, &p_hwfn->p_rdma_info->cid_map, 1); + qed_rdma_bmap_free(p_hwfn, &p_hwfn->p_rdma_info->pd_map, 1); + qed_rdma_bmap_free(p_hwfn, &p_hwfn->p_rdma_info->dpi_map, 1); + qed_rdma_bmap_free(p_hwfn, &p_hwfn->p_rdma_info->cq_map, 1); + qed_rdma_bmap_free(p_hwfn, &p_hwfn->p_rdma_info->toggle_bits, 0); + qed_rdma_bmap_free(p_hwfn, &p_hwfn->p_rdma_info->tid_map, 1); kfree(p_rdma_info->port); kfree(p_rdma_info->dev); @@ -954,8 +1006,7 @@ static int qed_rdma_create_cq(void *rdma_cxt, /* Allocate icid */ spin_lock_bh(&p_info->lock); - rc = qed_rdma_bmap_alloc_id(p_hwfn, - &p_info->cq_map, &returned_id); + rc = qed_rdma_bmap_alloc_id(p_hwfn, &p_info->cq_map, &returned_id); spin_unlock_bh(&p_info->lock); if (rc) { diff --git a/drivers/net/ethernet/qlogic/qed/qed_roce.h b/drivers/net/ethernet/qlogic/qed/qed_roce.h index 3ccc08a..9742af5 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_roce.h +++ b/drivers/net/ethernet/qlogic/qed/qed_roce.h @@ -67,9 +67,11 @@ enum qed_rdma_toggle_bit { QED_RDMA_TOGGLE_BIT_SET = 1 }; +#define QED_RDMA_MAX_BMAP_NAME (10) struct qed_bmap { unsigned long *bitmap; u32 max_count; + char name[QED_RDMA_MAX_BMAP_NAME]; }; struct qed_rdma_info {