From patchwork Mon Dec 10 07:11:43 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ido Schimmel X-Patchwork-Id: 1010293 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="xUpm3enp"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43CvQp6HTZz9s55 for ; Mon, 10 Dec 2018 18:12:18 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726656AbeLJHMP (ORCPT ); Mon, 10 Dec 2018 02:12:15 -0500 Received: from mail-eopbgr60059.outbound.protection.outlook.com ([40.107.6.59]:46777 "EHLO EUR04-DB3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726550AbeLJHMP (ORCPT ); Mon, 10 Dec 2018 02:12:15 -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=p5uH5o9ZliJ+fLBI2Bsn0OMqVOA+oMgtbAfNzELpSIs=; b=xUpm3enpYGFaqfp9NowjEmJoPnXfs5A6HyuBI186Qmq+oSR3jtsA4Xh2PRFvv2+gad5QrvAyZe9qUTyaQ9f2j+C++r4nxTwIGbn46mm24TN2doAEIyVEupt5BJbjCZTZZ7JTcMgpFYZQmRcLUCxokZ+DInX/DFTtWDC6X1MAuBs= Received: from VI1PR05MB5630.eurprd05.prod.outlook.com (20.178.120.87) by VI1PR05MB5087.eurprd05.prod.outlook.com (20.177.52.88) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1404.19; Mon, 10 Dec 2018 07:11:43 +0000 Received: from VI1PR05MB5630.eurprd05.prod.outlook.com ([fe80::70a6:66a5:1421:bbcf]) by VI1PR05MB5630.eurprd05.prod.outlook.com ([fe80::70a6:66a5:1421:bbcf%4]) with mapi id 15.20.1404.026; Mon, 10 Dec 2018 07:11:43 +0000 From: Ido Schimmel To: "netdev@vger.kernel.org" CC: "davem@davemloft.net" , Jiri Pirko , Nir Dotan , Petr Machata , Ido Schimmel Subject: [PATCH net-next 6/9] mlxsw: spectrum_acl: Support rule creation without action creation Thread-Topic: [PATCH net-next 6/9] mlxsw: spectrum_acl: Support rule creation without action creation Thread-Index: AQHUkFeaoniSpmbxSUS9UYd5xUnA9w== Date: Mon, 10 Dec 2018 07:11:43 +0000 Message-ID: <20181210071056.3836-7-idosch@mellanox.com> References: <20181210071056.3836-1-idosch@mellanox.com> In-Reply-To: <20181210071056.3836-1-idosch@mellanox.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6PR0202CA0027.eurprd02.prod.outlook.com (2603:10a6:209:15::40) To VI1PR05MB5630.eurprd05.prod.outlook.com (2603:10a6:803:c9::23) authentication-results: spf=none (sender IP is ) smtp.mailfrom=idosch@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [193.47.165.251] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; VI1PR05MB5087; 6:fp+8jstQChVekr2SzSE+5Jr6r8gx3LurT3joaXt0TK4m9nRx6TcAoJ5bL16LZQsbxjwMynmPj57W1KMMHS2FhJvHgoiDmONTTLV0n4nnXWMTt2wHUD0ogwpzzf5HNdiXFgdBbaMzEz9XQD+XgkBfH9TIh8R0U+kgRMuNN687lP/dGCfXBzyFG96TW+FxbbcymJVsxq1FFQmHh3mw5J2HaiL14GF3N644eYtAJ4lk4Ja7HQfVJGW9/rT+eNQXvo46ZADddZ4H62wC/FVUJ+7TRAE9jHMxLANwpPAESm2PPlQ4MBnfsFfpOXr/pHfFNkM+uXPwiOMD+sjrrWgE0b4gNjHP/N/ptSkOkxMnz0jGnwA+bY5MWaq0+nF2k6n1w20og4r5ha5EyOZkvavBTLsrjTH0pRQayo6cONu4rWsc+TPN4rbw2E5YXHkLV5npY6CuYd37BYPaPqkNDqHDr5FtjA==; 5:DSSFvr7hnktBgIHE4CMrxNcO4iU1c1u6cuylPXYUQnKhZZMf8kEHn8/7MgffApZ56dl8kmb7iUqUCMvacIpxzLW5Mz5QMIXH/K38m6fWqn6chcApvwRvRBBI8AiXoriV6farZNoB6h76e12W7Aw2ioLGi9pw/78dYj1jRwDuv6U=; 7:yZLmTq+oV+TqY2PvTT049Mvs/H3bGG6AR3nypcjuWAze1Q5FhSBvC3twJgX5bKaBKyeH8Izxpegm/6/5YzA+6VRlXIntu6/YJOqAhsHecsqi/d2B3BgISSZ+MWUUpMfJeToCaBrDJS2wBQD8f91CJA== x-ms-office365-filtering-correlation-id: 39bdad4d-2196-4b43-600f-08d65e6ebce2 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(5600074)(711020)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:VI1PR05MB5087; x-ms-traffictypediagnostic: VI1PR05MB5087: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(3230017)(999002)(6040522)(2401047)(5005006)(8121501046)(93006095)(93001095)(10201501046)(3002001)(3231472)(944501520)(52105112)(6055026)(148016)(149066)(150057)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(201708071742011)(7699051)(76991095); SRVR:VI1PR05MB5087; BCL:0; PCL:0; RULEID:; SRVR:VI1PR05MB5087; x-forefront-prvs: 08828D20BC x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(346002)(396003)(39860400002)(376002)(136003)(366004)(189003)(199004)(86362001)(476003)(105586002)(6486002)(71190400001)(53936002)(5640700003)(6916009)(71200400001)(2351001)(4326008)(106356001)(107886003)(2906002)(66066001)(6512007)(6436002)(97736004)(36756003)(14454004)(1076002)(68736007)(6116002)(3846002)(81166006)(478600001)(54906003)(2501003)(25786009)(99286004)(1730700003)(8936002)(8676002)(81156014)(26005)(186003)(316002)(256004)(7736002)(6506007)(486006)(76176011)(305945005)(2616005)(386003)(66574011)(102836004)(446003)(5660300001)(52116002)(11346002); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR05MB5087; H:VI1PR05MB5630.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: HwK+v7GRxAar/kDFq9OYjNOw4B+422LNApIfEdC8oTL5ZvZ9zK9ZHuoMhKaiCQr5ouEUVx3bPWKjD8AqptawofQNa2PuuacvnLc0DG3Sidk1oMh2vVL4ayA40IIvSlsFVLohafwkk784MKHPrta3AUR4HVTavnew/PsFA2C+dwIafCVvoutxydI2x9ZfL24JFCQrFt+RHrsd15R3dM/GQXGhR5TaxzDtkwsayjvfRmXk6NaWsFgRbVduy+HW8NeQCx3reZbS1aOsGPY7OYzxAiCRQ+/XThD9kkrd33JNfdNsX211L5ms2CW1LXgUhqjr spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 39bdad4d-2196-4b43-600f-08d65e6ebce2 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Dec 2018 07:11:43.1951 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR05MB5087 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Nir Dotan Up until now, when ACL rule was created its action was created with it. It suits well for tc flower where ACL rule always needs an action, however it does not suit multicast router, where the action is created prior to setting a route, which in Spectrum-2 is actually an ACL rule. Add support for rule creation without action creation. Do it by adding afa_block argument to mlxsw_sp_acl_rule_create, which if NULL then an action would be created, also add an indication within struct mlxsw_sp_acl_rule_info that tells if the action should be destroyed when the rule is destroyed. Signed-off-by: Nir Dotan Reviewed-by: Jiri Pirko Signed-off-by: Ido Schimmel --- drivers/net/ethernet/mellanox/mlxsw/spectrum.h | 5 ++++- .../ethernet/mellanox/mlxsw/spectrum1_acl_tcam.c | 2 +- .../net/ethernet/mellanox/mlxsw/spectrum_acl.c | 16 +++++++++++++--- .../ethernet/mellanox/mlxsw/spectrum_flower.c | 2 +- 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.h b/drivers/net/ethernet/mellanox/mlxsw/spectrum.h index edd397f42228..41a5de4a0965 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.h +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.h @@ -563,6 +563,7 @@ struct mlxsw_sp_acl_rule_info { unsigned int priority; struct mlxsw_afk_element_values values; struct mlxsw_afa_block *act_block; + u8 action_created:1; unsigned int counter_index; }; @@ -607,7 +608,8 @@ void mlxsw_sp_acl_ruleset_put(struct mlxsw_sp *mlxsw_sp, u16 mlxsw_sp_acl_ruleset_group_id(struct mlxsw_sp_acl_ruleset *ruleset); struct mlxsw_sp_acl_rule_info * -mlxsw_sp_acl_rulei_create(struct mlxsw_sp_acl *acl); +mlxsw_sp_acl_rulei_create(struct mlxsw_sp_acl *acl, + struct mlxsw_afa_block *afa_block); void mlxsw_sp_acl_rulei_destroy(struct mlxsw_sp_acl_rule_info *rulei); int mlxsw_sp_acl_rulei_commit(struct mlxsw_sp_acl_rule_info *rulei); void mlxsw_sp_acl_rulei_priority(struct mlxsw_sp_acl_rule_info *rulei, @@ -651,6 +653,7 @@ struct mlxsw_sp_acl_rule * mlxsw_sp_acl_rule_create(struct mlxsw_sp *mlxsw_sp, struct mlxsw_sp_acl_ruleset *ruleset, unsigned long cookie, + struct mlxsw_afa_block *afa_block, struct netlink_ext_ack *extack); void mlxsw_sp_acl_rule_destroy(struct mlxsw_sp *mlxsw_sp, struct mlxsw_sp_acl_rule *rule); diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum1_acl_tcam.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum1_acl_tcam.c index 677526e58750..fe270c1a26a6 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum1_acl_tcam.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum1_acl_tcam.c @@ -67,7 +67,7 @@ mlxsw_sp1_acl_ctcam_region_catchall_add(struct mlxsw_sp *mlxsw_sp, mlxsw_sp_acl_ctcam_chunk_init(®ion->cregion, ®ion->catchall.cchunk, MLXSW_SP_ACL_TCAM_CATCHALL_PRIO); - rulei = mlxsw_sp_acl_rulei_create(mlxsw_sp->acl); + rulei = mlxsw_sp_acl_rulei_create(mlxsw_sp->acl, NULL); if (IS_ERR(rulei)) { err = PTR_ERR(rulei); goto err_rulei_create; diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c index 44bbe7c9b68c..695d33358988 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c @@ -435,7 +435,8 @@ u16 mlxsw_sp_acl_ruleset_group_id(struct mlxsw_sp_acl_ruleset *ruleset) } struct mlxsw_sp_acl_rule_info * -mlxsw_sp_acl_rulei_create(struct mlxsw_sp_acl *acl) +mlxsw_sp_acl_rulei_create(struct mlxsw_sp_acl *acl, + struct mlxsw_afa_block *afa_block) { struct mlxsw_sp_acl_rule_info *rulei; int err; @@ -443,11 +444,18 @@ mlxsw_sp_acl_rulei_create(struct mlxsw_sp_acl *acl) rulei = kzalloc(sizeof(*rulei), GFP_KERNEL); if (!rulei) return NULL; + + if (afa_block) { + rulei->act_block = afa_block; + return rulei; + } + rulei->act_block = mlxsw_afa_block_create(acl->mlxsw_sp->afa); if (IS_ERR(rulei->act_block)) { err = PTR_ERR(rulei->act_block); goto err_afa_block_create; } + rulei->action_created = 1; return rulei; err_afa_block_create: @@ -457,7 +465,8 @@ mlxsw_sp_acl_rulei_create(struct mlxsw_sp_acl *acl) void mlxsw_sp_acl_rulei_destroy(struct mlxsw_sp_acl_rule_info *rulei) { - mlxsw_afa_block_destroy(rulei->act_block); + if (rulei->action_created) + mlxsw_afa_block_destroy(rulei->act_block); kfree(rulei); } @@ -623,6 +632,7 @@ struct mlxsw_sp_acl_rule * mlxsw_sp_acl_rule_create(struct mlxsw_sp *mlxsw_sp, struct mlxsw_sp_acl_ruleset *ruleset, unsigned long cookie, + struct mlxsw_afa_block *afa_block, struct netlink_ext_ack *extack) { const struct mlxsw_sp_acl_profile_ops *ops = ruleset->ht_key.ops; @@ -639,7 +649,7 @@ mlxsw_sp_acl_rule_create(struct mlxsw_sp *mlxsw_sp, rule->cookie = cookie; rule->ruleset = ruleset; - rule->rulei = mlxsw_sp_acl_rulei_create(mlxsw_sp->acl); + rule->rulei = mlxsw_sp_acl_rulei_create(mlxsw_sp->acl, afa_block); if (IS_ERR(rule->rulei)) { err = PTR_ERR(rule->rulei); goto err_rulei_create; diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c index 8d211972c5e9..ff072358d950 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c @@ -406,7 +406,7 @@ int mlxsw_sp_flower_replace(struct mlxsw_sp *mlxsw_sp, if (IS_ERR(ruleset)) return PTR_ERR(ruleset); - rule = mlxsw_sp_acl_rule_create(mlxsw_sp, ruleset, f->cookie, + rule = mlxsw_sp_acl_rule_create(mlxsw_sp, ruleset, f->cookie, NULL, f->common.extack); if (IS_ERR(rule)) { err = PTR_ERR(rule);