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 408BEC10F18 for ; Sun, 24 Feb 2019 06:46:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 110BE204EC for ; Sun, 24 Feb 2019 06:46:51 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=Mellanox.com header.i=@Mellanox.com header.b="YqamTIVF" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728123AbfBXGqs (ORCPT ); Sun, 24 Feb 2019 01:46:48 -0500 Received: from mail-eopbgr80045.outbound.protection.outlook.com ([40.107.8.45]:34201 "EHLO EUR04-VI1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726509AbfBXGqs (ORCPT ); Sun, 24 Feb 2019 01:46:48 -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=A/alngD+A2/tZBR22DZ8BW8nEHXj32K0Zzd1EYHDDvI=; b=YqamTIVF21MwaHiimLJ2vHC2PG+Is5l6gI/J30MWiaywOPYFUK9Lemd1xYSFM7paOwgI417ylQAAsHNZ0L6FJYlwgI3k+EIc43a93w4MG5dI+LJfKmpgBlYGyJQXQ+R7ChWhkkheMzkssavvhJatMvcpbQIORlu9w5xr7buURU4= Received: from AM6PR05MB5240.eurprd05.prod.outlook.com (20.177.196.214) by AM6PR05MB4343.eurprd05.prod.outlook.com (52.135.162.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1643.18; Sun, 24 Feb 2019 06:46:26 +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.019; Sun, 24 Feb 2019 06:46:26 +0000 From: Ido Schimmel To: "netdev@vger.kernel.org" CC: "davem@davemloft.net" , Jiri Pirko , mlxsw , Ido Schimmel Subject: [PATCH net-next 05/15] mlxsw: spectrum_acl: Introduce vregion mutex Thread-Topic: [PATCH net-next 05/15] mlxsw: spectrum_acl: Introduce vregion mutex Thread-Index: AQHUzAypVf3JCXEJBE67/UF+mFU/SQ== Date: Sun, 24 Feb 2019 06:46:26 +0000 Message-ID: <20190224064525.14913-6-idosch@mellanox.com> References: <20190224064525.14913-1-idosch@mellanox.com> In-Reply-To: <20190224064525.14913-1-idosch@mellanox.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6P194CA0033.EURP194.PROD.OUTLOOK.COM (2603:10a6:209:90::46) To AM6PR05MB5240.eurprd05.prod.outlook.com (2603:10a6:20b:64::22) 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-ms-office365-filtering-correlation-id: d6459110-2263-4a73-39d2-08d69a23cc2d x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(5600110)(711020)(4605104)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020);SRVR:AM6PR05MB4343; x-ms-traffictypediagnostic: AM6PR05MB4343: x-microsoft-exchange-diagnostics: =?iso-8859-1?Q?1;AM6PR05MB4343;23:6tmhlbN0dnU8kQoP9LHirJUKHI1qfzjOvPZIZIA?= =?iso-8859-1?Q?ya+7lKLzKqi+JSi91YWIx8N0Ufxnx3rVgYRhnHejfvmzpsgdDErmgGI74a?= =?iso-8859-1?Q?k9KdfE/DwMrKVh3qEMNb5gdZJU2r2aCEy2tEmsOGFP0nvb4A0n2Eku/SRo?= =?iso-8859-1?Q?pfqFz0aes4OqE8RAhuBM+aKJ/zTzugLQMCYuh8Y2iH1PnzSeBYUgS9nq5v?= =?iso-8859-1?Q?ih0KglcxJR9cBT22agMLt4aEKk0cIHKmz415TKnr62MCnLrlLpCrmw1dg4?= =?iso-8859-1?Q?0WWaQIxY6Yntdc7I9XX5FqRkRu2cBi/LX+nAjOPQdPzzJjg5BS3Mg69jI5?= =?iso-8859-1?Q?pfS4+h41uzgFLu7D6fLM9aj+aA43qbij7qWvx3H8loIJ6w6id5vP/tWMmU?= =?iso-8859-1?Q?K8dT4Qi6YJ0C8waSyyRqQdRMUacj8X3WLBrfSE1A56uKEu4i5/wQyRea9m?= =?iso-8859-1?Q?Nav3d+IsdwM4MseJyzgVxOaT+wEpts7Nw+fMv+kpN/KYo3s5t/7YM0Ihny?= =?iso-8859-1?Q?Yfbz3puxiS4EJdEmpF4izukkiS2DToWUnhW8/mNsQBdwcSfSJN40qTVmAE?= =?iso-8859-1?Q?TuYixm68OcfTZeMOH8ecd3TxcaZSbo0oGggzklw9XCtuGxOt2FLuW+GVEh?= =?iso-8859-1?Q?zm8440L8LIUU2hrol3q+5EDWb+HHddkB3P4Z0g4ogwdFhP+I+imJ0Ak5H4?= =?iso-8859-1?Q?EZoTV4Cllb8RihIz8puFOJ3O6wSUmXRfn/OSq+o9xgei1wHe+RRgMePT5k?= =?iso-8859-1?Q?sWW9kQwmYRpQ2L/nmvaCEUNNsS+kBaO0Lkv9d5fiNKJHv2JzrTy4G7qruA?= =?iso-8859-1?Q?R5643ExvkDDgW+kzbASrHtDlTib/MSHJbU0Y9FDQeGCOBMAF4aKB82jjWV?= =?iso-8859-1?Q?kZnqsefN/OL7dCOa4Tj141Qnh1nEsRZ4V1p7n15QSprYwhoC9qbvb737Qm?= =?iso-8859-1?Q?mn1oOJCI++38Z4cX47IPE6kffIW9Zg3H4vUCQkE24G8cn81KNJG8C99vYl?= =?iso-8859-1?Q?4kyOSIFkAJKf75yKAZxaiiSn6RfUU45SlupY6qwXpJ/Uso/JsgcVB9olNT?= =?iso-8859-1?Q?MpNnIwgOCawOj2wEcO8YzLMVlorelfYmcocjmauFOU6pXlJ6ixCRoTGDiF?= =?iso-8859-1?Q?apcuSyyaj4x2VkLy+b2bcYC9D+mo84lJ3a96V16FqKyz/bIT8u6nhPNgkG?= =?iso-8859-1?Q?MatSOC2f4Tb3hnq/3eQoFOij2LxU6A2qEclw7ldtHJhSffgiEWFdXOvpmV?= =?iso-8859-1?Q?U7c87qXXdGq8QBoVSLUiDSyGuvYFC3sA9Np7cPc3t4Fv/8WdzoVb3/B9Bl?= =?iso-8859-1?Q?y28bMHYdh+/OOAYJAtfiOkddW9elsgRO/wvrJ92cIp0HIdJjUCrccKt9WW?= =?iso-8859-1?Q?5cpFGlFpIUUn/koRxVR+DNylICtb0pqp1A+ePQgI8vFpzsWJ7B2AaXZ/dG?= =?iso-8859-1?Q?1VsruYGTTLT9do=3D?= x-microsoft-antispam-prvs: x-forefront-prvs: 09583628E0 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(366004)(396003)(136003)(376002)(346002)(39850400004)(199004)(189003)(102836004)(5660300002)(3846002)(14444005)(8936002)(6116002)(5640700003)(256004)(6506007)(386003)(1076003)(71200400001)(71190400001)(14454004)(6512007)(6436002)(81166006)(2351001)(81156014)(1730700003)(6346003)(50226002)(26005)(6916009)(5024004)(107886003)(2906002)(99286004)(86362001)(2501003)(486006)(2616005)(4326008)(11346002)(54906003)(66066001)(316002)(476003)(446003)(53936002)(68736007)(52116002)(7736002)(6486002)(8676002)(478600001)(106356001)(305945005)(105586002)(25786009)(186003)(36756003)(76176011)(97736004);DIR:OUT;SFP:1101;SCL:1;SRVR:AM6PR05MB4343;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) authentication-results: spf=none (sender IP is ) smtp.mailfrom=idosch@mellanox.com; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: l5ftJSQBc0G0nBg1nAYBacPvCZWxFT222MSikaU0idyArRNLKxLrbj1qW+FjOD/UHc57eyi7YyZurQ6Gs9ODjsS1pMiRFk2DmPHJQuGjwL26eJ3E0Y/uxABowou5DuN6rRqOxBhxk7t8pYY5OvW9Y8oGzlFrj26wdOL1P654aw7Q4xh8jt0izrLzRsrq6yA3mi0B2T+HPUrrWWiYuTbiS+/ud+MyXt8poY6NyPZoYzsa3kd4LvskgXWngH9Dv5sb2j88+fN0h2BvgqKNwGAeI4a3JJSYB4wPoPwueSOTe5vOkIII9lLb7zQ2auDxiIXzurzSkDh8RWkBHMEke+SG5eN7Ht4C0hHAgtIYKU/PD097lxMd5OJ2pTMafLEsaS1vvGkdEkFFUXsE9s/P6frWy6Dj5YcPNiatjiuP2IPIAHU= 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: d6459110-2263-4a73-39d2-08d69a23cc2d X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Feb 2019 06:46:25.4989 (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: AM6PR05MB4343 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Jiri Pirko In order to remove dependency on RTNL, introduce a mutex to guard vregion structure, list of chunks and list of entries in chunks. Signed-off-by: Jiri Pirko Signed-off-by: Ido Schimmel --- .../mellanox/mlxsw/spectrum_acl_tcam.c | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c b/driv= ers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c index e100b14b4815..54c0519195b7 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c @@ -178,6 +178,9 @@ struct mlxsw_sp_acl_tcam_vgroup { }; =20 struct mlxsw_sp_acl_tcam_vregion { + struct mutex lock; /* Protects consistency of region, region2 pointers + * and vchunk_list. + */ struct mlxsw_sp_acl_tcam_region *region; struct mlxsw_sp_acl_tcam_region *region2; /* Used during migration */ struct list_head list; /* Member of a TCAM group */ @@ -747,6 +750,7 @@ mlxsw_sp_acl_tcam_vregion_create(struct mlxsw_sp *mlxsw= _sp, if (!vregion) return ERR_PTR(-ENOMEM); INIT_LIST_HEAD(&vregion->vchunk_list); + mutex_init(&vregion->lock); vregion->tcam =3D tcam; vregion->mlxsw_sp =3D mlxsw_sp; vregion->ref_count =3D 1; @@ -803,6 +807,7 @@ mlxsw_sp_acl_tcam_vregion_destroy(struct mlxsw_sp *mlxs= w_sp, mlxsw_sp_acl_tcam_region_destroy(mlxsw_sp, vregion->region2); mlxsw_sp_acl_tcam_region_destroy(mlxsw_sp, vregion->region); mlxsw_afk_key_info_put(vregion->key_info); + mutex_destroy(&vregion->lock); kfree(vregion); } =20 @@ -947,14 +952,17 @@ mlxsw_sp_acl_tcam_vchunk_create(struct mlxsw_sp *mlxs= w_sp, if (err) goto err_rhashtable_insert; =20 + mutex_lock(&vregion->lock); vchunk->chunk =3D mlxsw_sp_acl_tcam_chunk_create(mlxsw_sp, vchunk, vchunk->vregion->region); if (IS_ERR(vchunk->chunk)) { + mutex_unlock(&vregion->lock); err =3D PTR_ERR(vchunk->chunk); goto err_chunk_create; } =20 list_add_tail(&vchunk->list, &vregion->vchunk_list); + mutex_unlock(&vregion->lock); =20 return vchunk; =20 @@ -972,12 +980,15 @@ static void mlxsw_sp_acl_tcam_vchunk_destroy(struct mlxsw_sp *mlxsw_sp, struct mlxsw_sp_acl_tcam_vchunk *vchunk) { + struct mlxsw_sp_acl_tcam_vregion *vregion =3D vchunk->vregion; struct mlxsw_sp_acl_tcam_vgroup *vgroup =3D vchunk->vgroup; =20 + mutex_lock(&vregion->lock); list_del(&vchunk->list); if (vchunk->chunk2) mlxsw_sp_acl_tcam_chunk_destroy(mlxsw_sp, vchunk->chunk2); mlxsw_sp_acl_tcam_chunk_destroy(mlxsw_sp, vchunk->chunk); + mutex_unlock(&vregion->lock); rhashtable_remove_fast(&vgroup->vchunk_ht, &vchunk->ht_node, mlxsw_sp_acl_tcam_vchunk_ht_params); mlxsw_sp_acl_tcam_vregion_put(mlxsw_sp, vchunk->vregion); @@ -1079,6 +1090,7 @@ static int mlxsw_sp_acl_tcam_ventry_add(struct mlxsw_= sp *mlxsw_sp, struct mlxsw_sp_acl_tcam_ventry *ventry, struct mlxsw_sp_acl_rule_info *rulei) { + struct mlxsw_sp_acl_tcam_vregion *vregion; struct mlxsw_sp_acl_tcam_vchunk *vchunk; int err; =20 @@ -1089,14 +1101,19 @@ static int mlxsw_sp_acl_tcam_ventry_add(struct mlxs= w_sp *mlxsw_sp, =20 ventry->vchunk =3D vchunk; ventry->rulei =3D rulei; + vregion =3D vchunk->vregion; + + mutex_lock(&vregion->lock); ventry->entry =3D mlxsw_sp_acl_tcam_entry_create(mlxsw_sp, ventry, vchunk->chunk); if (IS_ERR(ventry->entry)) { + mutex_unlock(&vregion->lock); err =3D PTR_ERR(ventry->entry); goto err_entry_create; } =20 list_add_tail(&ventry->list, &vchunk->ventry_list); + mutex_unlock(&vregion->lock); =20 return 0; =20 @@ -1109,9 +1126,12 @@ static void mlxsw_sp_acl_tcam_ventry_del(struct mlxs= w_sp *mlxsw_sp, struct mlxsw_sp_acl_tcam_ventry *ventry) { struct mlxsw_sp_acl_tcam_vchunk *vchunk =3D ventry->vchunk; + struct mlxsw_sp_acl_tcam_vregion *vregion =3D vchunk->vregion; =20 + mutex_lock(&vregion->lock); list_del(&ventry->list); mlxsw_sp_acl_tcam_entry_destroy(mlxsw_sp, ventry->entry); + mutex_unlock(&vregion->lock); mlxsw_sp_acl_tcam_vchunk_put(mlxsw_sp, vchunk); } =20 @@ -1256,6 +1276,8 @@ mlxsw_sp_acl_tcam_vregion_migrate(struct mlxsw_sp *ml= xsw_sp, if (err) goto err_group_region_attach; =20 + mutex_lock(&vregion->lock); + err =3D mlxsw_sp_acl_tcam_vchunk_migrate_all(mlxsw_sp, vregion); if (!vregion->failed_rollback) { if (!err) { @@ -1270,10 +1292,14 @@ mlxsw_sp_acl_tcam_vregion_migrate(struct mlxsw_sp *= mlxsw_sp, */ unused_region =3D vregion->region2; } + mutex_unlock(&vregion->lock); vregion->region2 =3D NULL; mlxsw_sp_acl_tcam_group_region_detach(mlxsw_sp, unused_region); mlxsw_sp_acl_tcam_region_destroy(mlxsw_sp, unused_region); + } else { + mutex_unlock(&vregion->lock); } + return err; =20 err_group_region_attach: --=20 2.20.1