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 A2B99C282C2 for ; Thu, 7 Feb 2019 11:23:11 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 66BBA21905 for ; Thu, 7 Feb 2019 11:23:11 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=Mellanox.com header.i=@Mellanox.com header.b="iORbV7Tn" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726930AbfBGLXG (ORCPT ); Thu, 7 Feb 2019 06:23:06 -0500 Received: from mail-eopbgr40070.outbound.protection.outlook.com ([40.107.4.70]:52438 "EHLO EUR03-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726691AbfBGLXE (ORCPT ); Thu, 7 Feb 2019 06:23:04 -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=0vm3rTcOunR/Vujh1TW6qDvuEWHw0gwtwh3HW0J9E2I=; b=iORbV7TnE/O1dJLK19nYfVA3CKJPXU8iAC7iD+heDqEfjGFBozSXjZ0xDcPqtiqu3U3QNUzrqlTk0P4HlzHQVQY/il0RgX8CHns904nAzsmCUB3pGtapx31C1A0FKVoMhseO5KNhFNObdvaZamoAynLVd6mTl5jQqghS8B4KeVA= Received: from AM6PR05MB5240.eurprd05.prod.outlook.com (20.177.196.214) by AM6PR05MB5048.eurprd05.prod.outlook.com (20.177.36.160) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1601.21; Thu, 7 Feb 2019 11:22:55 +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.1601.016; Thu, 7 Feb 2019 11:22:55 +0000 From: Ido Schimmel To: "netdev@vger.kernel.org" CC: "davem@davemloft.net" , Jiri Pirko , mlxsw , Ido Schimmel Subject: [PATCH net-next 12/14] mlxsw: spectrum: add "acl_region_rehash_interval" devlink param Thread-Topic: [PATCH net-next 12/14] mlxsw: spectrum: add "acl_region_rehash_interval" devlink param Thread-Index: AQHUvtd4amYHAqKgVkm4Z0sZTXRI3g== Date: Thu, 7 Feb 2019 11:22:55 +0000 Message-ID: <20190207112211.10375-13-idosch@mellanox.com> References: <20190207112211.10375-1-idosch@mellanox.com> In-Reply-To: <20190207112211.10375-1-idosch@mellanox.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6P194CA0032.EURP194.PROD.OUTLOOK.COM (2603:10a6:209:90::45) 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: [193.47.165.251] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;AM6PR05MB5048;6:bgUQ5jqsnimtcAoE01T0PKlTZvgbyfJGef5qKiorM3htIn/tDp5vAtF9pi7j1FOL1UIBPloE8EI7qlPRyiiUfj9dmMqtrJICn/8NRsOmQzjz5TpLspvA3w5wPw/bH5al2fu9GgG4eQdURU6lCKrXFIjpqv9+Th+9GD6eA1+1k3gxyyKkD21LR9hyZqdCxvbbNmUC41rkaPx5TkAgYv6LjyoBZ1t9Y/Ux8ydru56OXJoOxSwGPteG7CLkKAmnXoMa25KCFnTb+f8mhfgkPW53wr2H1doXCWmqgvgFyANsUNoK23bO5cI3XUnbVQmplTz2E6ld0t4uAdiwpoOwzQ/XomGqCpV54nzPVQkmVdQBDqko6Y4eLVGEHZzRfWi0IFXvbk+2P43W/HCCyugEDQApxuoPDh7SlX0B1P1hsmPFetUdBcuAYSkh1kukST6f62EQiK642eNm34iAXBJSJiaXKg==;5:ymESAdb2Qe/vIOvwFBEblNJ8Md56dKmPGvI5eLoLmvmh0o9r0v7RV4mWtstlF+AHgwgQH0c4OFmTAfwbHDaqeLp+89ubZXMp1tbBRgTARKFg7GbE48k1SuV8nhgbouo+B7VAcNKg8PG+1sexqh16uo04Ugs383uCsKU4JUGEYwaeySkf862As0tXM1q76TVu6dv21wfffrMyoVLHeqP3ZA==;7:REc0AIXrqlbtOD7A/0xVD/5Ocenp3+cciF9VjR5q36mENfzx+dBF7kwMb9miyWiWH0u+2J2BX31xf93l0U5dY8bQS4hI0gO0lOgpFuQt8mKQJ2fgqg+BqTIJX53sqSc3W/AO5hLLqaaf/obnVUNt5g== x-ms-office365-filtering-correlation-id: 89f85857-29ea-4bd0-7f7d-08d68cee9ade 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)(4605077)(4618075)(2017052603328)(7153060)(7193020);SRVR:AM6PR05MB5048; x-ms-traffictypediagnostic: AM6PR05MB5048: x-microsoft-antispam-prvs: x-forefront-prvs: 0941B96580 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(366004)(376002)(136003)(39860400002)(396003)(346002)(199004)(189003)(107886003)(99286004)(102836004)(14444005)(6916009)(256004)(476003)(2616005)(36756003)(5640700003)(6436002)(486006)(11346002)(446003)(6512007)(6486002)(53936002)(68736007)(386003)(6506007)(3846002)(25786009)(4326008)(1076003)(6116002)(71200400001)(50226002)(14454004)(2906002)(305945005)(97736004)(71190400001)(105586002)(106356001)(66066001)(478600001)(8936002)(2351001)(1730700003)(81166006)(81156014)(8676002)(26005)(2501003)(54906003)(186003)(316002)(7736002)(52116002)(86362001)(76176011);DIR:OUT;SFP:1101;SCL:1;SRVR:AM6PR05MB5048;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: iardvWjICTvmGcTvA4HX/TuVMp5oXnDAKx1vYxtudNosAzhqvRwzQUkoxYl/OzC8LnV24ecIci6v2VSLCwQcF6iXgZ03OT+eoMsIMe7Cop0PQxaItWMpSAIQdeG08Hqqba1yA5QNH0cZE7mcVykfYj8D8F2na7cFBpZuPw5sPS5HFpysQGRFb3jBjoSRyCgxsZEvIW9eRkcTHeJja7CjbCbJuoPP/BBkU+ahWSLNnHTfzi26Iv0pfNE6m7L6WLPFPpw23VPo/rRqcfxxOlJmV0HNJq0tnNz4V9I0xcIHILqnGBRQgB6CESblZzFGRmxcG/Ab01S9NlIwAbu0zKhLl0jJwLSIv2gMAaenL4sHiUpT5Y66UbvL3cpDd068IAnonvAWVEDTu0UiV4hS9maVcWL/iy9Pz/8NpoqPQQOVmEA= 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: 89f85857-29ea-4bd0-7f7d-08d68cee9ade X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Feb 2019 11:22:54.3418 (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: AM6PR05MB5048 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Jiri Pirko Expose new driver-specific "acl_region_rehash_interval" devlink param which would allow user to alter default ACL region rehash interval. Signed-off-by: Jiri Pirko Signed-off-by: Ido Schimmel --- .../networking/devlink-params-mlxsw.txt | 8 +++ drivers/net/ethernet/mellanox/mlxsw/core.h | 5 ++ .../net/ethernet/mellanox/mlxsw/spectrum.c | 69 ++++++++++++++++++- .../net/ethernet/mellanox/mlxsw/spectrum.h | 2 + .../ethernet/mellanox/mlxsw/spectrum_acl.c | 16 +++++ .../mellanox/mlxsw/spectrum_acl_tcam.c | 36 ++++++++++ .../mellanox/mlxsw/spectrum_acl_tcam.h | 5 ++ 7 files changed, 139 insertions(+), 2 deletions(-) diff --git a/Documentation/networking/devlink-params-mlxsw.txt b/Documentat= ion/networking/devlink-params-mlxsw.txt index 2c5c67a920c9..c63ea9fc7009 100644 --- a/Documentation/networking/devlink-params-mlxsw.txt +++ b/Documentation/networking/devlink-params-mlxsw.txt @@ -1,2 +1,10 @@ fw_load_policy [DEVICE, GENERIC] Configuration mode: driverinit + +acl_region_rehash_interval [DEVICE, DRIVER-SPECIFIC] + Sets an interval for periodic ACL region rehashes. + The value is in milliseconds, minimal value is "3000". + Value "0" disables the periodic work. + The first rehash will be run right after value is set. + Type: u32 + Configuration mode: runtime diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.h b/drivers/net/ether= net/mellanox/mlxsw/core.h index 4e114f35ee0d..c8e16a305969 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/core.h +++ b/drivers/net/ethernet/mellanox/mlxsw/core.h @@ -394,4 +394,9 @@ static inline void mlxsw_thermal_fini(struct mlxsw_ther= mal *thermal) =20 #endif =20 +enum mlxsw_devlink_param_id { + MLXSW_DEVLINK_PARAM_ID_BASE =3D DEVLINK_PARAM_GENERIC_ID_MAX, + MLXSW_DEVLINK_PARAM_ID_ACL_REGION_REHASH_INTERVAL, +}; + #endif diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/e= thernet/mellanox/mlxsw/spectrum.c index 8dd808b7f931..7c9745cecbbd 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c @@ -4413,6 +4413,71 @@ static void mlxsw_sp_params_unregister(struct mlxsw_= core *mlxsw_core) ARRAY_SIZE(mlxsw_sp_devlink_params)); } =20 +static int +mlxsw_sp_params_acl_region_rehash_intrvl_get(struct devlink *devlink, u32 = id, + struct devlink_param_gset_ctx *ctx) +{ + struct mlxsw_core *mlxsw_core =3D devlink_priv(devlink); + struct mlxsw_sp *mlxsw_sp =3D mlxsw_core_driver_priv(mlxsw_core); + + ctx->val.vu32 =3D mlxsw_sp_acl_region_rehash_intrvl_get(mlxsw_sp); + return 0; +} + +static int +mlxsw_sp_params_acl_region_rehash_intrvl_set(struct devlink *devlink, u32 = id, + struct devlink_param_gset_ctx *ctx) +{ + struct mlxsw_core *mlxsw_core =3D devlink_priv(devlink); + struct mlxsw_sp *mlxsw_sp =3D mlxsw_core_driver_priv(mlxsw_core); + + return mlxsw_sp_acl_region_rehash_intrvl_set(mlxsw_sp, ctx->val.vu32); +} + +static const struct devlink_param mlxsw_sp2_devlink_params[] =3D { + DEVLINK_PARAM_DRIVER(MLXSW_DEVLINK_PARAM_ID_ACL_REGION_REHASH_INTERVAL, + "acl_region_rehash_interval", + DEVLINK_PARAM_TYPE_U32, + BIT(DEVLINK_PARAM_CMODE_RUNTIME), + mlxsw_sp_params_acl_region_rehash_intrvl_get, + mlxsw_sp_params_acl_region_rehash_intrvl_set, + NULL), +}; + +static int mlxsw_sp2_params_register(struct mlxsw_core *mlxsw_core) +{ + struct devlink *devlink =3D priv_to_devlink(mlxsw_core); + union devlink_param_value value; + int err; + + err =3D mlxsw_sp_params_register(mlxsw_core); + if (err) + return err; + + err =3D devlink_params_register(devlink, mlxsw_sp2_devlink_params, + ARRAY_SIZE(mlxsw_sp2_devlink_params)); + if (err) + goto err_devlink_params_register; + + value.vu32 =3D 0; + devlink_param_driverinit_value_set(devlink, + MLXSW_DEVLINK_PARAM_ID_ACL_REGION_REHASH_INTERVAL, + value); + return 0; + +err_devlink_params_register: + mlxsw_sp_params_unregister(mlxsw_core); + return err; +} + +static void mlxsw_sp2_params_unregister(struct mlxsw_core *mlxsw_core) +{ + devlink_params_unregister(priv_to_devlink(mlxsw_core), + mlxsw_sp2_devlink_params, + ARRAY_SIZE(mlxsw_sp2_devlink_params)); + mlxsw_sp_params_unregister(mlxsw_core); +} + static struct mlxsw_driver mlxsw_sp1_driver =3D { .kind =3D mlxsw_sp1_driver_name, .priv_size =3D sizeof(struct mlxsw_sp), @@ -4461,8 +4526,8 @@ static struct mlxsw_driver mlxsw_sp2_driver =3D { .sb_occ_tc_port_bind_get =3D mlxsw_sp_sb_occ_tc_port_bind_get, .txhdr_construct =3D mlxsw_sp_txhdr_construct, .resources_register =3D mlxsw_sp2_resources_register, - .params_register =3D mlxsw_sp_params_register, - .params_unregister =3D mlxsw_sp_params_unregister, + .params_register =3D mlxsw_sp2_params_register, + .params_unregister =3D mlxsw_sp2_params_unregister, .txhdr_len =3D MLXSW_TXHDR_LEN, .profile =3D &mlxsw_sp2_config_profile, .res_query_enabled =3D true, diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.h b/drivers/net/e= thernet/mellanox/mlxsw/spectrum.h index 3d17b4a368f4..ceebc91f4f1d 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.h +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.h @@ -690,6 +690,8 @@ struct mlxsw_sp_fid *mlxsw_sp_acl_dummy_fid(struct mlxs= w_sp *mlxsw_sp); =20 int mlxsw_sp_acl_init(struct mlxsw_sp *mlxsw_sp); void mlxsw_sp_acl_fini(struct mlxsw_sp *mlxsw_sp); +u32 mlxsw_sp_acl_region_rehash_intrvl_get(struct mlxsw_sp *mlxsw_sp); +int mlxsw_sp_acl_region_rehash_intrvl_set(struct mlxsw_sp *mlxsw_sp, u32 v= al); =20 /* spectrum_acl_tcam.c */ struct mlxsw_sp_acl_tcam; diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c b/drivers/n= et/ethernet/mellanox/mlxsw/spectrum_acl.c index 38e027815393..a146a44634e9 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c @@ -912,3 +912,19 @@ void mlxsw_sp_acl_fini(struct mlxsw_sp *mlxsw_sp) mlxsw_afk_destroy(acl->afk); kfree(acl); } + +u32 mlxsw_sp_acl_region_rehash_intrvl_get(struct mlxsw_sp *mlxsw_sp) +{ + struct mlxsw_sp_acl *acl =3D mlxsw_sp->acl; + + return mlxsw_sp_acl_tcam_vregion_rehash_intrvl_get(mlxsw_sp, + &acl->tcam); +} + +int mlxsw_sp_acl_region_rehash_intrvl_set(struct mlxsw_sp *mlxsw_sp, u32 v= al) +{ + struct mlxsw_sp_acl *acl =3D mlxsw_sp->acl; + + return mlxsw_sp_acl_tcam_vregion_rehash_intrvl_set(mlxsw_sp, + &acl->tcam, val); +} diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c b/driv= ers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c index 9239ff4e94c4..f2cb37c0d300 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c @@ -24,6 +24,7 @@ size_t mlxsw_sp_acl_tcam_priv_size(struct mlxsw_sp *mlxsw= _sp) } =20 #define MLXSW_SP_ACL_TCAM_VREGION_REHASH_INTRVL_DFLT 5000 /* ms */ +#define MLXSW_SP_ACL_TCAM_VREGION_REHASH_INTRVL_MIN 3000 /* ms */ =20 int mlxsw_sp_acl_tcam_init(struct mlxsw_sp *mlxsw_sp, struct mlxsw_sp_acl_tcam *tcam) @@ -725,6 +726,41 @@ mlxsw_sp_acl_tcam_vregion_destroy(struct mlxsw_sp *mlx= sw_sp, kfree(vregion); } =20 +u32 mlxsw_sp_acl_tcam_vregion_rehash_intrvl_get(struct mlxsw_sp *mlxsw_sp, + struct mlxsw_sp_acl_tcam *tcam) +{ + const struct mlxsw_sp_acl_tcam_ops *ops =3D mlxsw_sp->acl_tcam_ops; + u32 vregion_rehash_intrvl; + + if (WARN_ON(!ops->region_rehash_hints_get)) + return 0; + vregion_rehash_intrvl =3D tcam->vregion_rehash_intrvl; + return vregion_rehash_intrvl; +} + +int mlxsw_sp_acl_tcam_vregion_rehash_intrvl_set(struct mlxsw_sp *mlxsw_sp, + struct mlxsw_sp_acl_tcam *tcam, + u32 val) +{ + const struct mlxsw_sp_acl_tcam_ops *ops =3D mlxsw_sp->acl_tcam_ops; + struct mlxsw_sp_acl_tcam_vregion *vregion; + + if (val < MLXSW_SP_ACL_TCAM_VREGION_REHASH_INTRVL_MIN && val) + return -EINVAL; + if (WARN_ON(!ops->region_rehash_hints_get)) + return -EOPNOTSUPP; + tcam->vregion_rehash_intrvl =3D val; + rtnl_lock(); + list_for_each_entry(vregion, &tcam->vregion_list, tlist) { + if (val) + mlxsw_core_schedule_dw(&vregion->rehash_dw, 0); + else + cancel_delayed_work_sync(&vregion->rehash_dw); + } + rtnl_unlock(); + return 0; +} + static int mlxsw_sp_acl_tcam_vchunk_assoc(struct mlxsw_sp *mlxsw_sp, struct mlxsw_sp_acl_tcam_group *group, diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.h b/driv= ers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.h index 440a3483ed7b..96bd42a9fbc3 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.h +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.h @@ -28,6 +28,11 @@ int mlxsw_sp_acl_tcam_init(struct mlxsw_sp *mlxsw_sp, struct mlxsw_sp_acl_tcam *tcam); void mlxsw_sp_acl_tcam_fini(struct mlxsw_sp *mlxsw_sp, struct mlxsw_sp_acl_tcam *tcam); +u32 mlxsw_sp_acl_tcam_vregion_rehash_intrvl_get(struct mlxsw_sp *mlxsw_sp, + struct mlxsw_sp_acl_tcam *tcam); +int mlxsw_sp_acl_tcam_vregion_rehash_intrvl_set(struct mlxsw_sp *mlxsw_sp, + struct mlxsw_sp_acl_tcam *tcam, + u32 val); int mlxsw_sp_acl_tcam_priority_get(struct mlxsw_sp *mlxsw_sp, struct mlxsw_sp_acl_rule_info *rulei, u32 *priority, bool fillup_priority); --=20 2.20.1