From patchwork Wed Feb 20 19:32:14 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ido Schimmel X-Patchwork-Id: 1045548 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=mellanox.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=Mellanox.com header.i=@Mellanox.com header.b="p5TtBAUt"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 444SRX48j3z9s5c for ; Thu, 21 Feb 2019 06:32:24 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726818AbfBTTcX (ORCPT ); Wed, 20 Feb 2019 14:32:23 -0500 Received: from mail-eopbgr00045.outbound.protection.outlook.com ([40.107.0.45]:11872 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725847AbfBTTcX (ORCPT ); Wed, 20 Feb 2019 14:32:23 -0500 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=/Me0QfLdE1b8f/UPBv7GhSSwi5T0zWTAZfJdV2PsLLc=; b=p5TtBAUtxy+eN+mCj6flpmtPkzoKF+BeGdwIeQ99l52t/BOyp6CEQnKMZlo7S8EptOX3z7iQkZ/52GsJIQl62uFwayZ62IAlytp+VP71tj6DikYLQHiVY9LgMZQ7LL0bAtjveLLE8wKdkskUvMjj12bAsYctHDUAB9YVHsWfO1U= Received: from AM6PR05MB5240.eurprd05.prod.outlook.com (20.177.196.214) by AM6PR05MB4871.eurprd05.prod.outlook.com (20.177.34.223) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1622.19; Wed, 20 Feb 2019 19:32:14 +0000 Received: from AM6PR05MB5240.eurprd05.prod.outlook.com ([fe80::3542:889c:3a85:3866]) by AM6PR05MB5240.eurprd05.prod.outlook.com ([fe80::3542:889c:3a85:3866%5]) with mapi id 15.20.1643.014; Wed, 20 Feb 2019 19:32:14 +0000 From: Ido Schimmel To: "netdev@vger.kernel.org" CC: "davem@davemloft.net" , Jiri Pirko , Petr Machata , mlxsw , Ido Schimmel Subject: [PATCH net-next 02/10] mlxsw: spectrum_buffers: Allocate prs & pms dynamically Thread-Topic: [PATCH net-next 02/10] mlxsw: spectrum_buffers: Allocate prs & pms dynamically Thread-Index: AQHUyVL7+3wXruuml0yWyFUxsfdXJw== Date: Wed, 20 Feb 2019 19:32:14 +0000 Message-ID: <20190220193141.16498-3-idosch@mellanox.com> References: <20190220193141.16498-1-idosch@mellanox.com> In-Reply-To: <20190220193141.16498-1-idosch@mellanox.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6PR10CA0061.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:209:80::38) To AM6PR05MB5240.eurprd05.prod.outlook.com (2603:10a6:20b:64::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=idosch@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: git-send-email 2.20.1 x-originating-ip: [77.138.249.209] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 1cea880a-fd8e-4fa0-df15-08d6976a1dd8 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600110)(711020)(4605104)(4618075)(2017052603328)(7153060)(7193020); SRVR:AM6PR05MB4871; x-ms-traffictypediagnostic: AM6PR05MB4871: x-microsoft-exchange-diagnostics: =?iso-8859-1?q?1=3BAM6PR05MB4871=3B23?= =?iso-8859-1?q?=3AVu7iYL0/d1UqNTS977rs9pYTa7IFPry8t8925tk+ZpSF1NNO?= =?iso-8859-1?q?Yzgq/ZmjQP9dpoemRtmlQDNVBV66nZHZ6+p6s0MhS1Ha7ITKOHR?= =?iso-8859-1?q?uO5xSfWWfW4tKCzXV9CiCIz541HrVRtsLBMqgSyZV/MEfXvXsVI?= =?iso-8859-1?q?sOvOxRIqfcytgLqtp9xZj40ZtaCdzngfqpr7IXWpmkqaKxPooPL?= =?iso-8859-1?q?qk4LT62RpRmRGd9xqEl/ps8MXbevUPmfe04gPFghPxcmtP0hyeN?= =?iso-8859-1?q?DhdN0phaPEKZuCkA7jSXgyvHTdGFZOpRH9w2pOpVptNj9DC6I1u?= =?iso-8859-1?q?R4jY+mkpSwHxwOFOMw9QiWRKjR+9ZltMzHdjQUDBWC1oXEgK9Q/?= =?iso-8859-1?q?vxWBCCIptMmuJscbuHdxwxPkNdnXTqkMzYIem4reAVdCk/JekQt?= =?iso-8859-1?q?y3+4KZnAwIQvezMa6FV2VSq7OlzleQTXaaqDluD5naI/3q21cl/?= =?iso-8859-1?q?CJk1dQtX/ZcAFDCdNp2LJoVklmnX71QDpsps8llZNrNSreepz4R?= =?iso-8859-1?q?Fzv8/bzJ13ykggcvnA1fBLOJ/BPrwkb6yv6kOXnHaIlVBdh/lwV?= =?iso-8859-1?q?0YCAHz4j9FG6J1M9V3ZlKKXoH256wwFwzDPAfCPnlj8QV2ZSAZr?= =?iso-8859-1?q?7BG7RBtl+qAwfdbU2fXh5Wke2C6sdjswi/rkKVrNW3xG8yKqlAY?= =?iso-8859-1?q?SYFd+pOGj5JEoPxOHgXRBpl6Y7ZszEhS3ioo1tOnkJLpLOKT72L?= =?iso-8859-1?q?k9zBNWqAo4JWzAUjbwKdmqx4XvIjFMnBXhpjSNdTYANfWdGnSJj?= =?iso-8859-1?q?63Iz46rrSa4ec5cnJGbzn26gvHQQZuch9YVpvad1Oo5HsR/AswX?= =?iso-8859-1?q?3Uxw3Cd9an8W25GuRTsN7amXcSOjgRdOH0RyUWeoD/wO4bWWg7o?= =?iso-8859-1?q?8bjf3E084aDnBuhUTQ80tROPF2qtk25PVE3x+85ozso/7TrcIsX?= =?iso-8859-1?q?o+YJnuGhkwuhvNbxr+B3Iu5SbPT9FwstGoFLomgcLsOj7HrwPI0?= =?iso-8859-1?q?8jrcyhFocnxfagUR0Jtx2Q0wFZdk+WPTEno9cctX5foUhBGWkat?= =?iso-8859-1?q?eMBeAoPYrlwqpAz3l5ii0NSvS0CfHuWKvRd7Z0tGq994GfiafiS?= =?iso-8859-1?q?+L1T/1Ekc7+F1NCh3xdq6ip0p3BVY9t0PuApZIHPlSI/SnV5OSf?= =?iso-8859-1?q?DPZsfjvFeNakX8Oh/9m03OljFUEsCljTbkAC865aKSvAdGZUebX?= =?iso-8859-1?q?8LPmlnqL1FsE+93HnbT5HFKCXKzXVE9k/xzedkWR65yP+MIQa0K?= =?iso-8859-1?q?zDtPBQFdOImyu+RHxe/J55QDEfPYI6rg2t5e2tZeK6Nn/DalpUD?= =?iso-8859-1?q?5/ROdgihmkbKLUOrgPAlwsajCdbCM8WX51ax1nsJ492kdNu9aeE?= =?iso-8859-1?q?=3D?= x-microsoft-antispam-prvs: x-forefront-prvs: 0954EE4910 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(136003)(376002)(396003)(39860400002)(346002)(366004)(199004)(189003)(486006)(86362001)(446003)(2616005)(4326008)(2351001)(478600001)(2906002)(105586002)(106356001)(11346002)(107886003)(476003)(68736007)(6916009)(54906003)(316002)(25786009)(6506007)(26005)(102836004)(386003)(53936002)(186003)(6116002)(3846002)(52116002)(99286004)(97736004)(2501003)(256004)(81156014)(6512007)(6486002)(50226002)(5640700003)(81166006)(305945005)(8936002)(7736002)(8676002)(1730700003)(14454004)(76176011)(1076003)(5660300002)(71190400001)(71200400001)(66066001)(36756003)(6436002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM6PR05MB4871; H:AM6PR05MB5240.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: Yuxud1lY/EKIUwyGrrlxq3ui+GB9TXf+3L6KkXFahWorpE5Z2f2GFhIVdqKBmYRBi9Gj0nWVoIIGbzoPVsQCx4q4lbpuNlCpkODyWp+CG6OBd7HCa2GeMQcMcMw6BjnS40WDgqWbLjbD2Q6WdCaYzam4Gy3J9LE8BjEmxIKVR/mlkDC2ceO4w9evp5bqS0FuKk7oBnyHan1+fQ0jlEE5pakaEqbM55eLz991faSqbznf0XkXNkFTIuF76QEJy7kjXWrbGD+n5uShL+QOuDADI8Ve0YAfB2Y4AJkEb4FomRTMmdrGgcjL8qAlLn2tIHBFvkXBl/nNO3kK5tupsdbEg03w7N3a7HuX/cXhJ8RcvtmDSRry+MU0rhr7n92/Aspehyo7y7d/NMuxkhqBZZAutzaDshvBts44l+55Xo32pAg= MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1cea880a-fd8e-4fa0-df15-08d6976a1dd8 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Feb 2019 19:32:12.8213 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR05MB4871 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Petr Machata Spectrum-2 will be configured with a different set of pools than Spectrum-1. The size of prs and pms buffers will therefore depend on the chip type of the device. Therefore, instead of reserving an array directly in a structure definition, allocate the buffer in mlxsw_sp_sb_port{,s}_init(). Signed-off-by: Petr Machata Signed-off-by: Ido Schimmel --- .../mellanox/mlxsw/spectrum_buffers.c | 52 ++++++++++++++++++- 1 file changed, 50 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c index cd23ec9268bc..7fa291ebcddf 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c @@ -63,11 +63,11 @@ static const struct mlxsw_sp_sb_pool_des mlxsw_sp_sb_pool_dess[] = { struct mlxsw_sp_sb_port { struct mlxsw_sp_sb_cm ing_cms[MLXSW_SP_SB_ING_TC_COUNT]; struct mlxsw_sp_sb_cm eg_cms[MLXSW_SP_SB_EG_TC_COUNT]; - struct mlxsw_sp_sb_pm pms[MLXSW_SP_SB_POOL_DESS_LEN]; + struct mlxsw_sp_sb_pm *pms; }; struct mlxsw_sp_sb { - struct mlxsw_sp_sb_pr prs[MLXSW_SP_SB_POOL_DESS_LEN]; + struct mlxsw_sp_sb_pr *prs; struct mlxsw_sp_sb_port *ports; u32 cell_size; u64 sb_size; @@ -283,20 +283,68 @@ static int mlxsw_sp_port_headroom_init(struct mlxsw_sp_port *mlxsw_sp_port) return mlxsw_sp_port_pb_prio_init(mlxsw_sp_port); } +static int mlxsw_sp_sb_port_init(struct mlxsw_sp *mlxsw_sp, + struct mlxsw_sp_sb_port *sb_port) +{ + struct mlxsw_sp_sb_pm *pms; + + pms = kcalloc(MLXSW_SP_SB_POOL_DESS_LEN, sizeof(*pms), GFP_KERNEL); + if (!pms) + return -ENOMEM; + sb_port->pms = pms; + return 0; +} + +static void mlxsw_sp_sb_port_fini(struct mlxsw_sp_sb_port *sb_port) +{ + kfree(sb_port->pms); +} + static int mlxsw_sp_sb_ports_init(struct mlxsw_sp *mlxsw_sp) { unsigned int max_ports = mlxsw_core_max_ports(mlxsw_sp->core); + struct mlxsw_sp_sb_pr *prs; + int i; + int err; mlxsw_sp->sb->ports = kcalloc(max_ports, sizeof(struct mlxsw_sp_sb_port), GFP_KERNEL); if (!mlxsw_sp->sb->ports) return -ENOMEM; + + prs = kcalloc(MLXSW_SP_SB_POOL_DESS_LEN, sizeof(*prs), GFP_KERNEL); + if (!prs) { + err = -ENOMEM; + goto err_alloc_prs; + } + mlxsw_sp->sb->prs = prs; + + for (i = 0; i < max_ports; i++) { + err = mlxsw_sp_sb_port_init(mlxsw_sp, &mlxsw_sp->sb->ports[i]); + if (err) + goto err_sb_port_init; + } + return 0; + +err_sb_port_init: + for (i--; i >= 0; i--) + mlxsw_sp_sb_port_fini(&mlxsw_sp->sb->ports[i]); + kfree(mlxsw_sp->sb->prs); +err_alloc_prs: + kfree(mlxsw_sp->sb->ports); + return err; } static void mlxsw_sp_sb_ports_fini(struct mlxsw_sp *mlxsw_sp) { + int max_ports = mlxsw_core_max_ports(mlxsw_sp->core); + int i; + + for (i = max_ports - 1; i >= 0; i--) + mlxsw_sp_sb_port_fini(&mlxsw_sp->sb->ports[i]); + kfree(mlxsw_sp->sb->prs); kfree(mlxsw_sp->sb->ports); }