From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 35340C43381 for ; Wed, 20 Feb 2019 19:32:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E9A3F2089F for ; Wed, 20 Feb 2019 19:32:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=Mellanox.com header.i=@Mellanox.com header.b="GLSfCQRq" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726886AbfBTTcb (ORCPT ); Wed, 20 Feb 2019 14:32:31 -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 S1726497AbfBTTca (ORCPT ); Wed, 20 Feb 2019 14:32:30 -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=RYkplW0A1yiwooQhiIuIT2noeveE7DQ7AGGr6f9Sd60=; b=GLSfCQRqERQYYJUyrtHcVMsFdIx5ykO7M3UPyAlK714K3ou5Jnjb/n7M1aEC30yJ2Ltm7aIrAoZECQ6UsV97RIkzKtAiAmXs1sRaYPWCn/JR9sDQeQ4xySpnLLfK7lmjJFkvfucLJOUdTbUjnfx420Cot6cO92jmrkqGHYzfL5Q= 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:16 +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:16 +0000 From: Ido Schimmel To: "netdev@vger.kernel.org" CC: "davem@davemloft.net" , Jiri Pirko , Petr Machata , mlxsw , Ido Schimmel Subject: [PATCH net-next 03/10] mlxsw: spectrum_buffers: Keep pool descriptors in mlxsw_sp_sb_vals Thread-Topic: [PATCH net-next 03/10] mlxsw: spectrum_buffers: Keep pool descriptors in mlxsw_sp_sb_vals Thread-Index: AQHUyVL81sBpmen7w0+x+5IKaph9eQ== Date: Wed, 20 Feb 2019 19:32:16 +0000 Message-ID: <20190220193141.16498-4-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: 0547c601-9a51-4e5d-6c91-08d6976a1ee0 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;AM6PR05MB4871;23:cYM/JTDdqZr9U6sIa+011kfHpKmfSUSxHUL/Rdk?= =?iso-8859-1?Q?bIzHukXEo56Iy+PMr2ZfIp4+DMF6zKtUoFl2OOSsCKqKEnF8z0XOsXXP12?= =?iso-8859-1?Q?Y5uq7TBFgNvX6pmfRoPK3aSDK08KUQhH0YH1HRoVhCQeYonMcwTYDuL0ff?= =?iso-8859-1?Q?ZXRQN++S3wxphTzjykLTlFfXNZM3qE1FW69WzM9s9ifv/pcdvgdlhKJtmp?= =?iso-8859-1?Q?FQ/gOmFHrFDAXHxZNZuXs64G2K7S+yKCklI3llV+U4FqOihaLpRLtn6Kxm?= =?iso-8859-1?Q?WDGBTITrLO8g2NLmc1+jVbvZ1rwfZdPzDcVJEEuCRCXyp+HG4kFO+Chj8r?= =?iso-8859-1?Q?FnMHYIWv0TMdL2u0Z9S7zmIG5Z+bWxB7Qvn+h0fE8PwrekgaYNn+KblGdE?= =?iso-8859-1?Q?yDQ8R8XI0TvODMOtZV/2Srtk3CEDdIdkg/GTfket4gRQeg6DiNKF3XzaKK?= =?iso-8859-1?Q?12YWSf49rZPZ6Dlcrcj4SNnrC+NHdXViK9r4VWBUBKtLWFGI5Cl8YYnwbx?= =?iso-8859-1?Q?fG4QOhvd/NnPNZR3oKSOMrJ6Lk0hqxHmTPGc2ooIHbOGSQUQ/FFrnzrR80?= =?iso-8859-1?Q?I5pXNY+LcAag8+/StPoBwkj1j1bHLItoRceUbs+gkFvw6QyGY1RHV+VmgQ?= =?iso-8859-1?Q?/B0D2FNt36G3O8AetUbjJNp9SQZH5Y+qJnCc5fS6bNgxxExkc2lQfwASxU?= =?iso-8859-1?Q?ef5PeV8lb3eNslXPuAdIS+tyIWjHP9w5MYoQcgkW3lxRaxlzDBa0FBaOXM?= =?iso-8859-1?Q?ShWGcI5qvArU94v/FbbabxXs1yZT+bgDN41XzqTU9p0F8p8MPRXVCv4NuB?= =?iso-8859-1?Q?kX9EDntuskMYm0rvkh0mJSKWNhkLS8eSCWkSxre+3EZW8jSEcBewNo1H/I?= =?iso-8859-1?Q?7TFsD+Fhu6UfiAhKW0jCoRR1vSbRMKjnKK6Xx6VWIOeZ6lAGZPrn4mGsO1?= =?iso-8859-1?Q?x6Dg+RtZ8SerFxoasA03/mt16qBHweFOH02tIIaocgeux13g3242nL3SGi?= =?iso-8859-1?Q?pAlLZ8dDTgzDenfGlMInrDYV9U1irHTzf8CR8tOVdm89T0e4HADCxKNeFk?= =?iso-8859-1?Q?kidYFZ9KzWs5x/XwffxD44izt74JChpjtXIEshQZpfH/4QBompwTeeiTS1?= =?iso-8859-1?Q?1unfy4/+5TD5WUxTS+FXYdyuyYMr8fgowocAKSuXwgWCwkURdSI6OQ2Gvd?= =?iso-8859-1?Q?U7kg+Z14chHX3dZ3bgiiKZloIXjF+A8qrz46DprmpJl22yPu3h5qAq7Pv4?= =?iso-8859-1?Q?dBnaQTeYTZyKPtMCX/DJiGojXwkMuTfdTWLTugQTMWpT9BTButbMSADX8g?= =?iso-8859-1?Q?u3dqsQ70iretYjI4lGYIyh5SOrCnMuyR5z+D4LreTwpFC2QiAs622n5NSV?= =?iso-8859-1?Q?BJwfdiZ/eOvWcnl7Moz/J+u2rlrFq?= 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)(14444005)(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: TXtYiM5/WAh/NfZZUhGYQ9qexS/0Bog+6yNu3yBtreKanmLBUXfAB6KJCz3B8xq6l7eTByeiMrp1ZQ7aXj0ToWHmMd6Wa0TBfyC8F6qO8uouZoezhdrLd5y2iljKzpTs5k7Y2T8S9pwaQHwgr4hVYc1kmQNM1rBpVZMiC0aHjJs+0gSdtCR791N+tVDNQ9XcDf8jcG7HihwVFon11s6EMt4Fzdtws+5M2Vqziaw0YADxImtwrgqTWFG/mbe3sCBg7E4Zk/LJzbSj0LWPJt34/+GBHKgmlZk/SXorS0CDIHQUEPk6CqOI7LLLBUjwTAY8mG4CO34a8bdLfZlOEg65mxPStAu6OBzUGKx1LShjGsFvXh5g5KqnIj/ahWP4X4chkI9dR0g9jjON5CMV3ZT26qYYnGO9s5lXfnyw8zIP9lg= Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0547c601-9a51-4e5d-6c91-08d6976a1ee0 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Feb 2019 19:32:14.6866 (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 Keep the table of pool descriptors and its length in struct mlxsw_sp_sb_vals so that it can be specialized per chip type. Redirect all users from the global definitions to the mlxsw_sp_sb fields. Give mlxsw_sp_pool_count() an extra mlxsw_sp parameter so that it can access the descriptor table. Drop the now unnecessary MLXSW_SP_SB_POOL_DESS_LEN. Signed-off-by: Petr Machata Signed-off-by: Ido Schimmel --- .../mellanox/mlxsw/spectrum_buffers.c | 50 +++++++++++-------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c b/drive= rs/net/ethernet/mellanox/mlxsw/spectrum_buffers.c index 7fa291ebcddf..72126d904013 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c @@ -55,8 +55,6 @@ static const struct mlxsw_sp_sb_pool_des mlxsw_sp_sb_pool= _dess[] =3D { {MLXSW_REG_SBXX_DIR_EGRESS, 15}, }; =20 -#define MLXSW_SP_SB_POOL_DESS_LEN ARRAY_SIZE(mlxsw_sp_sb_pool_dess) - #define MLXSW_SP_SB_ING_TC_COUNT 8 #define MLXSW_SP_SB_EG_TC_COUNT 16 =20 @@ -74,6 +72,8 @@ struct mlxsw_sp_sb { }; =20 struct mlxsw_sp_sb_vals { + unsigned int pool_count; + const struct mlxsw_sp_sb_pool_des *pool_dess; }; =20 u32 mlxsw_sp_cells_bytes(const struct mlxsw_sp *mlxsw_sp, u32 cells) @@ -124,7 +124,7 @@ static int mlxsw_sp_sb_pr_write(struct mlxsw_sp *mlxsw_= sp, u16 pool_index, u32 size, bool infi_size) { const struct mlxsw_sp_sb_pool_des *des =3D - &mlxsw_sp_sb_pool_dess[pool_index]; + &mlxsw_sp->sb_vals->pool_dess[pool_index]; char sbpr_pl[MLXSW_REG_SBPR_LEN]; struct mlxsw_sp_sb_pr *pr; int err; @@ -148,7 +148,7 @@ static int mlxsw_sp_sb_cm_write(struct mlxsw_sp *mlxsw_= sp, u8 local_port, bool infi_max, u16 pool_index) { const struct mlxsw_sp_sb_pool_des *des =3D - &mlxsw_sp_sb_pool_dess[pool_index]; + &mlxsw_sp->sb_vals->pool_dess[pool_index]; char sbcm_pl[MLXSW_REG_SBCM_LEN]; struct mlxsw_sp_sb_cm *cm; int err; @@ -177,7 +177,7 @@ static int mlxsw_sp_sb_pm_write(struct mlxsw_sp *mlxsw_= sp, u8 local_port, u16 pool_index, u32 min_buff, u32 max_buff) { const struct mlxsw_sp_sb_pool_des *des =3D - &mlxsw_sp_sb_pool_dess[pool_index]; + &mlxsw_sp->sb_vals->pool_dess[pool_index]; char sbpm_pl[MLXSW_REG_SBPM_LEN]; struct mlxsw_sp_sb_pm *pm; int err; @@ -198,7 +198,7 @@ static int mlxsw_sp_sb_pm_occ_clear(struct mlxsw_sp *ml= xsw_sp, u8 local_port, u16 pool_index, struct list_head *bulk_list) { const struct mlxsw_sp_sb_pool_des *des =3D - &mlxsw_sp_sb_pool_dess[pool_index]; + &mlxsw_sp->sb_vals->pool_dess[pool_index]; char sbpm_pl[MLXSW_REG_SBPM_LEN]; =20 mlxsw_reg_sbpm_pack(sbpm_pl, local_port, des->pool, des->dir, @@ -220,7 +220,7 @@ static int mlxsw_sp_sb_pm_occ_query(struct mlxsw_sp *ml= xsw_sp, u8 local_port, u16 pool_index, struct list_head *bulk_list) { const struct mlxsw_sp_sb_pool_des *des =3D - &mlxsw_sp_sb_pool_dess[pool_index]; + &mlxsw_sp->sb_vals->pool_dess[pool_index]; char sbpm_pl[MLXSW_REG_SBPM_LEN]; struct mlxsw_sp_sb_pm *pm; =20 @@ -288,7 +288,8 @@ static int mlxsw_sp_sb_port_init(struct mlxsw_sp *mlxsw= _sp, { struct mlxsw_sp_sb_pm *pms; =20 - pms =3D kcalloc(MLXSW_SP_SB_POOL_DESS_LEN, sizeof(*pms), GFP_KERNEL); + pms =3D kcalloc(mlxsw_sp->sb_vals->pool_count, sizeof(*pms), + GFP_KERNEL); if (!pms) return -ENOMEM; sb_port->pms =3D pms; @@ -313,7 +314,8 @@ static int mlxsw_sp_sb_ports_init(struct mlxsw_sp *mlxs= w_sp) if (!mlxsw_sp->sb->ports) return -ENOMEM; =20 - prs =3D kcalloc(MLXSW_SP_SB_POOL_DESS_LEN, sizeof(*prs), GFP_KERNEL); + prs =3D kcalloc(mlxsw_sp->sb_vals->pool_count, sizeof(*prs), + GFP_KERNEL); if (!prs) { err =3D -ENOMEM; goto err_alloc_prs; @@ -498,6 +500,7 @@ static int __mlxsw_sp_sb_cms_init(struct mlxsw_sp *mlxs= w_sp, u8 local_port, const struct mlxsw_sp_sb_cm *cms, size_t cms_len) { + const struct mlxsw_sp_sb_vals *sb_vals =3D mlxsw_sp->sb_vals; int i; int err; =20 @@ -509,7 +512,7 @@ static int __mlxsw_sp_sb_cms_init(struct mlxsw_sp *mlxs= w_sp, u8 local_port, if (i =3D=3D 8 && dir =3D=3D MLXSW_REG_SBXX_DIR_INGRESS) continue; /* PG number 8 does not exist, skip it */ cm =3D &cms[i]; - if (WARN_ON(mlxsw_sp_sb_pool_dess[cm->pool_index].dir !=3D dir)) + if (WARN_ON(sb_vals->pool_dess[cm->pool_index].dir !=3D dir)) continue; =20 min_buff =3D mlxsw_sp_bytes_cells(mlxsw_sp, cm->min_buff); @@ -648,7 +651,7 @@ static int mlxsw_sp_sb_mms_init(struct mlxsw_sp *mlxsw_= sp) u32 min_buff; =20 mc =3D &mlxsw_sp_sb_mms[i]; - des =3D &mlxsw_sp_sb_pool_dess[mc->pool_index]; + des =3D &mlxsw_sp->sb_vals->pool_dess[mc->pool_index]; /* All pools used by sb_mm's are initialized using dynamic * thresholds, therefore 'max_buff' isn't specified in cells. */ @@ -662,24 +665,30 @@ static int mlxsw_sp_sb_mms_init(struct mlxsw_sp *mlxs= w_sp) return 0; } =20 -static void mlxsw_sp_pool_count(u16 *p_ingress_len, u16 *p_egress_len) +static void mlxsw_sp_pool_count(struct mlxsw_sp *mlxsw_sp, + u16 *p_ingress_len, u16 *p_egress_len) { int i; =20 - for (i =3D 0; i < MLXSW_SP_SB_POOL_DESS_LEN; ++i) - if (mlxsw_sp_sb_pool_dess[i].dir =3D=3D MLXSW_REG_SBXX_DIR_EGRESS) + for (i =3D 0; i < mlxsw_sp->sb_vals->pool_count; ++i) + if (mlxsw_sp->sb_vals->pool_dess[i].dir =3D=3D + MLXSW_REG_SBXX_DIR_EGRESS) goto out; WARN(1, "No egress pools\n"); =20 out: *p_ingress_len =3D i; - *p_egress_len =3D MLXSW_SP_SB_POOL_DESS_LEN - i; + *p_egress_len =3D mlxsw_sp->sb_vals->pool_count - i; } =20 const struct mlxsw_sp_sb_vals mlxsw_sp1_sb_vals =3D { + .pool_count =3D ARRAY_SIZE(mlxsw_sp_sb_pool_dess), + .pool_dess =3D mlxsw_sp_sb_pool_dess, }; =20 const struct mlxsw_sp_sb_vals mlxsw_sp2_sb_vals =3D { + .pool_count =3D ARRAY_SIZE(mlxsw_sp_sb_pool_dess), + .pool_dess =3D mlxsw_sp_sb_pool_dess, }; =20 int mlxsw_sp_buffers_init(struct mlxsw_sp *mlxsw_sp) @@ -714,7 +723,7 @@ int mlxsw_sp_buffers_init(struct mlxsw_sp *mlxsw_sp) err =3D mlxsw_sp_sb_mms_init(mlxsw_sp); if (err) goto err_sb_mms_init; - mlxsw_sp_pool_count(&ing_pool_count, &eg_pool_count); + mlxsw_sp_pool_count(mlxsw_sp, &ing_pool_count, &eg_pool_count); err =3D devlink_sb_register(priv_to_devlink(mlxsw_sp->core), 0, mlxsw_sp->sb->sb_size, ing_pool_count, @@ -762,10 +771,11 @@ int mlxsw_sp_sb_pool_get(struct mlxsw_core *mlxsw_cor= e, unsigned int sb_index, u16 pool_index, struct devlink_sb_pool_info *pool_info) { - enum mlxsw_reg_sbxx_dir dir =3D mlxsw_sp_sb_pool_dess[pool_index].dir; struct mlxsw_sp *mlxsw_sp =3D mlxsw_core_driver_priv(mlxsw_core); + enum mlxsw_reg_sbxx_dir dir; struct mlxsw_sp_sb_pr *pr; =20 + dir =3D mlxsw_sp->sb_vals->pool_dess[pool_index].dir; pr =3D mlxsw_sp_sb_pr_get(mlxsw_sp, pool_index); pool_info->pool_type =3D (enum devlink_sb_pool_type) dir; pool_info->size =3D mlxsw_sp_cells_bytes(mlxsw_sp, pr->size); @@ -891,7 +901,7 @@ int mlxsw_sp_sb_tc_pool_bind_set(struct mlxsw_core_port= *mlxsw_core_port, u32 max_buff; int err; =20 - if (dir !=3D mlxsw_sp_sb_pool_dess[pool_index].dir) + if (dir !=3D mlxsw_sp->sb_vals->pool_dess[pool_index].dir) return -EINVAL; =20 err =3D mlxsw_sp_sb_threshold_in(mlxsw_sp, pool_index, @@ -989,7 +999,7 @@ int mlxsw_sp_sb_occ_snapshot(struct mlxsw_core *mlxsw_c= ore, continue; mlxsw_reg_sbsr_ingress_port_mask_set(sbsr_pl, local_port, 1); mlxsw_reg_sbsr_egress_port_mask_set(sbsr_pl, local_port, 1); - for (i =3D 0; i < MLXSW_SP_SB_POOL_DESS_LEN; i++) { + for (i =3D 0; i < mlxsw_sp->sb_vals->pool_count; i++) { err =3D mlxsw_sp_sb_pm_occ_query(mlxsw_sp, local_port, i, &bulk_list); if (err) @@ -1048,7 +1058,7 @@ int mlxsw_sp_sb_occ_max_clear(struct mlxsw_core *mlxs= w_core, continue; mlxsw_reg_sbsr_ingress_port_mask_set(sbsr_pl, local_port, 1); mlxsw_reg_sbsr_egress_port_mask_set(sbsr_pl, local_port, 1); - for (i =3D 0; i < MLXSW_SP_SB_POOL_DESS_LEN; i++) { + for (i =3D 0; i < mlxsw_sp->sb_vals->pool_count; i++) { err =3D mlxsw_sp_sb_pm_occ_clear(mlxsw_sp, local_port, i, &bulk_list); if (err) --=20 2.20.1