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,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 97B67C282D5 for ; Wed, 30 Jan 2019 08:58:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 4CB7E2087F for ; Wed, 30 Jan 2019 08:58:43 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=Mellanox.com header.i=@Mellanox.com header.b="Hj0JPV0U" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730280AbfA3I6m (ORCPT ); Wed, 30 Jan 2019 03:58:42 -0500 Received: from mail-eopbgr60061.outbound.protection.outlook.com ([40.107.6.61]:27472 "EHLO EUR04-DB3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725850AbfA3I6l (ORCPT ); Wed, 30 Jan 2019 03:58:41 -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=3SfBtQp02OstQ4j0ggmUEqi7vr8QPpDgdRUwv6NkrFA=; b=Hj0JPV0UM6FfS1fk+WhoxVyA0q7KYssFMEgWzve8Ks3H8sS9CmX3CdmnJcI5PB6IuWV+X7gdLAzpGknojCGZCAzZ/5oDOPU6aX03ZWbemodqshM3/PBQgy2z5xnaSlDF6443k5kqK0DwenBVdIHJH42EpEFnA6HcOFxyKHJ9M4s= Received: from DB7PR05MB4940.eurprd05.prod.outlook.com (20.176.235.152) by DB7PR05MB5771.eurprd05.prod.outlook.com (20.178.105.208) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1580.16; Wed, 30 Jan 2019 08:58:35 +0000 Received: from DB7PR05MB4940.eurprd05.prod.outlook.com ([fe80::6161:97fd:d315:7b07]) by DB7PR05MB4940.eurprd05.prod.outlook.com ([fe80::6161:97fd:d315:7b07%6]) with mapi id 15.20.1558.023; Wed, 30 Jan 2019 08:58:35 +0000 From: Ido Schimmel To: "netdev@vger.kernel.org" CC: "davem@davemloft.net" , Jiri Pirko , mlxsw , Ido Schimmel Subject: [PATCH net-next 1/5] mlxsw: spectrum_acl: Include delta bits into hashtable key Thread-Topic: [PATCH net-next 1/5] mlxsw: spectrum_acl: Include delta bits into hashtable key Thread-Index: AQHUuHn6SzItvmIQnkiGM/Pua0OzGg== Date: Wed, 30 Jan 2019 08:58:33 +0000 Message-ID: <20190130085813.32161-2-idosch@mellanox.com> References: <20190130085813.32161-1-idosch@mellanox.com> In-Reply-To: <20190130085813.32161-1-idosch@mellanox.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6P193CA0024.EURP193.PROD.OUTLOOK.COM (2603:10a6:209:3e::37) To DB7PR05MB4940.eurprd05.prod.outlook.com (2603:10a6:10:1e::24) 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;DB7PR05MB5771;6:Zv+MVEFYT/qa96gi+d6LJ2xAEmgDKCIaNVPRcz8EsnwBqRbhCePAYuYMvk9duutNK8B8FoKRniU2JcoFIZ0UeToIYwEVWATKm4pGgJrheJAjhihiJZMoVy155LTc7umBjP3CX0FacxFTrIiZPDzPZtntIU2WXnKUW0V/lDi9GhXLMfI28Afthps1A9c8sYqfMqM6yQLE20vmLe5Zl9nJoX4L2Ig3b0/wPTRj0bdyAc1rkjrZbQLwPROQzmGFYQVb43kQSjL0EZNTmGPr1LBLypheLnkOeH2y4XyVy32juxzBJwXqDHa5t7EGuDCgB3Ya8FwypwerV/4FOGSwZ4Lkpdld4coSlY0OLl7Ew4BnHZ6ho0O9ZjJ+JVOETbBCv9tZmaWP51ITkfAdgQBbZAEMnG4rMXjMKgcOLTA0gZvCvtgsCrB8z/XbyH80flw0hkmkxyqXPVHXLn2zt0jMS8z52w==;5:CFOmbEhEFxeV0mf+9lp9M1o3WsNr8CkNOgL+8oNJdEl+s/T58G1uD7IlD0VmfUlKus8QuOd+Ce0PnCsrp7JpCMuBDXri6RXLgWkBGr39FdOfC50NoXxFeIM4on+wwjqvKbkyJKoEtrWPZReX4SbA6Ts6mERRE2r9DIpKgv+AYAbkWqWUzr1S8BbuyhqZhok6N6c5LsX84i4AYzqYmtCLWw==;7:KupU11nGfZ4x1GL5C7xx96755SJ2SscUYbzlaYBCLBwOx7NZuYK0MP+KRg17UjolBwWIqW2xvLLGV8sahCk67GGmyVpIn0S2y6fuwEEVCh1jFo8yKus+5o51wF/lQEuREpv+aMiRnf9nGMIIYyb17Q== x-ms-office365-filtering-correlation-id: 9b3aac2c-6b5e-4666-f893-08d686911ce2 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:DB7PR05MB5771; x-ms-traffictypediagnostic: DB7PR05MB5771: x-microsoft-antispam-prvs: x-forefront-prvs: 0933E9FD8D x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(396003)(39860400002)(376002)(346002)(366004)(136003)(189003)(199004)(6916009)(6116002)(71190400001)(68736007)(50226002)(6512007)(86362001)(316002)(5640700003)(66066001)(52116002)(3846002)(99286004)(1076003)(2906002)(105586002)(6506007)(186003)(102836004)(386003)(53936002)(106356001)(107886003)(476003)(81156014)(76176011)(256004)(446003)(2501003)(2351001)(97736004)(8676002)(81166006)(1730700003)(4326008)(8936002)(54906003)(14444005)(11346002)(2616005)(26005)(305945005)(486006)(7736002)(6486002)(14454004)(6436002)(71200400001)(25786009)(36756003)(478600001);DIR:OUT;SFP:1101;SCL:1;SRVR:DB7PR05MB5771;H:DB7PR05MB4940.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-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: pRUXmP11lJSyy3ARAnO3KwbAfVbsxI+92ULm5W+pRvdnsP0b1w08dmW7TEczt2p/TlCQiFXTDI+fXLS6tAlXt/Be9Ia63VlXrjZwN2PrQxWPU3rTHGaeGcV8IY6kWK5BhbtTiOINnWBJ8nTg4OBPQGqDbD9hh3cb5rF8puqHa9TCrtUBx/ZElW5PNIyJcEVbMtrrgRU6XslBPdBNtZ+LGNmPQizWWIZ2bWmWaw7VW1DU63UOpD/jcItB5IrkfKp34VKIpOBjZjiQlbV6l4ow9fooyyVshnYkJYp9PpZpXR+c8q5YRaEBwTVtBKYR/Pc1lDeQHTg0bVwmMOSFMlmUXclnyyuc28z60CQyCbMduD3RtcMycXiaEyuLpP60Ru3LEtYQYeNd1xYoBWHWjqiA8amfjhS/+A0JN2kEEsgmAsQ= 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: 9b3aac2c-6b5e-4666-f893-08d686911ce2 X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Jan 2019 08:58:32.6956 (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: DB7PR05MB5771 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Jiri Pirko Currently only ERP mask masked bits in key are considered for the hashtable key. That leads to false negative collisions and fallbacks to C-TCAM in case two keys differ only in delta bits. Fix this by taking full encoded key as a hashtable key, including delta bits. Reported-by: Nir Dotan Signed-off-by: Jiri Pirko Signed-off-by: Ido Schimmel --- .../mellanox/mlxsw/spectrum_acl_atcam.c | 21 +++++++++---------- .../mlxsw/spectrum_acl_bloom_filter.c | 2 +- .../mellanox/mlxsw/spectrum_acl_tcam.h | 10 +++++---- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_atcam.c b/dri= vers/net/ethernet/mellanox/mlxsw/spectrum_acl_atcam.c index 40dc76a5c412..cda0a7170c34 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_atcam.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_atcam.c @@ -390,8 +390,7 @@ mlxsw_sp_acl_atcam_region_entry_insert(struct mlxsw_sp = *mlxsw_sp, if (err) return err; =20 - lkey_id =3D aregion->ops->lkey_id_get(aregion, aentry->ht_key.enc_key, - erp_id); + lkey_id =3D aregion->ops->lkey_id_get(aregion, aentry->enc_key, erp_id); if (IS_ERR(lkey_id)) return PTR_ERR(lkey_id); aentry->lkey_id =3D lkey_id; @@ -399,7 +398,7 @@ mlxsw_sp_acl_atcam_region_entry_insert(struct mlxsw_sp = *mlxsw_sp, kvdl_index =3D mlxsw_afa_block_first_kvdl_index(rulei->act_block); mlxsw_reg_ptce3_pack(ptce3_pl, true, MLXSW_REG_PTCE3_OP_WRITE_WRITE, priority, region->tcam_region_info, - aentry->ht_key.enc_key, erp_id, + aentry->enc_key, erp_id, aentry->delta_info.start, aentry->delta_info.mask, aentry->delta_info.value, @@ -424,12 +423,11 @@ mlxsw_sp_acl_atcam_region_entry_remove(struct mlxsw_s= p *mlxsw_sp, struct mlxsw_sp_acl_atcam_lkey_id *lkey_id =3D aentry->lkey_id; struct mlxsw_sp_acl_tcam_region *region =3D aregion->region; u8 erp_id =3D mlxsw_sp_acl_erp_mask_erp_id(aentry->erp_mask); - char *enc_key =3D aentry->ht_key.enc_key; char ptce3_pl[MLXSW_REG_PTCE3_LEN]; =20 mlxsw_reg_ptce3_pack(ptce3_pl, false, MLXSW_REG_PTCE3_OP_WRITE_WRITE, 0, region->tcam_region_info, - enc_key, erp_id, + aentry->enc_key, erp_id, aentry->delta_info.start, aentry->delta_info.mask, aentry->delta_info.value, @@ -458,7 +456,7 @@ mlxsw_sp_acl_atcam_region_entry_action_replace(struct m= lxsw_sp *mlxsw_sp, kvdl_index =3D mlxsw_afa_block_first_kvdl_index(rulei->act_block); mlxsw_reg_ptce3_pack(ptce3_pl, true, MLXSW_REG_PTCE3_OP_WRITE_UPDATE, priority, region->tcam_region_info, - aentry->ht_key.enc_key, erp_id, + aentry->enc_key, erp_id, aentry->delta_info.start, aentry->delta_info.mask, aentry->delta_info.value, @@ -481,15 +479,15 @@ __mlxsw_sp_acl_atcam_entry_add(struct mlxsw_sp *mlxsw= _sp, int err; =20 mlxsw_afk_encode(afk, region->key_info, &rulei->values, - aentry->full_enc_key, mask); + aentry->ht_key.full_enc_key, mask); =20 erp_mask =3D mlxsw_sp_acl_erp_mask_get(aregion, mask, false); if (IS_ERR(erp_mask)) return PTR_ERR(erp_mask); aentry->erp_mask =3D erp_mask; aentry->ht_key.erp_id =3D mlxsw_sp_acl_erp_mask_erp_id(erp_mask); - memcpy(aentry->ht_key.enc_key, aentry->full_enc_key, - sizeof(aentry->ht_key.enc_key)); + memcpy(aentry->enc_key, aentry->ht_key.full_enc_key, + sizeof(aentry->enc_key)); =20 /* Compute all needed delta information and clear the delta bits * from the encrypted key. @@ -498,8 +496,9 @@ __mlxsw_sp_acl_atcam_entry_add(struct mlxsw_sp *mlxsw_s= p, aentry->delta_info.start =3D mlxsw_sp_acl_erp_delta_start(delta); aentry->delta_info.mask =3D mlxsw_sp_acl_erp_delta_mask(delta); aentry->delta_info.value =3D - mlxsw_sp_acl_erp_delta_value(delta, aentry->full_enc_key); - mlxsw_sp_acl_erp_delta_clear(delta, aentry->ht_key.enc_key); + mlxsw_sp_acl_erp_delta_value(delta, + aentry->ht_key.full_enc_key); + mlxsw_sp_acl_erp_delta_clear(delta, aentry->enc_key); =20 /* Add rule to the list of A-TCAM rules, assuming this * rule is intended to A-TCAM. In case this rule does diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_bloom_filter.= c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_bloom_filter.c index f5c381dcb015..9545b572747e 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_bloom_filter.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_bloom_filter.c @@ -133,7 +133,7 @@ mlxsw_sp_acl_bf_key_encode(struct mlxsw_sp_acl_atcam_re= gion *aregion, memcpy(chunk + MLXSW_BLOOM_CHUNK_PAD_BYTES, &erp_region_id, sizeof(erp_region_id)); memcpy(chunk + MLXSW_BLOOM_CHUNK_KEY_OFFSET, - &aentry->ht_key.enc_key[chunk_key_offsets[chunk_index]], + &aentry->enc_key[chunk_key_offsets[chunk_index]], MLXSW_BLOOM_CHUNK_KEY_BYTES); chunk +=3D MLXSW_BLOOM_KEY_CHUNK_BYTES; } diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.h b/driv= ers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.h index 10512b7c6d50..0858d5b06353 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.h +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.h @@ -161,9 +161,9 @@ struct mlxsw_sp_acl_atcam_region { }; =20 struct mlxsw_sp_acl_atcam_entry_ht_key { - char enc_key[MLXSW_REG_PTCEX_FLEX_KEY_BLOCKS_LEN]; /* Encoded key, - * minus delta bits. - */ + char full_enc_key[MLXSW_REG_PTCEX_FLEX_KEY_BLOCKS_LEN]; /* Encoded + * key. + */ u8 erp_id; }; =20 @@ -175,7 +175,9 @@ struct mlxsw_sp_acl_atcam_entry { struct rhash_head ht_node; struct list_head list; /* Member in entries_list */ struct mlxsw_sp_acl_atcam_entry_ht_key ht_key; - char full_enc_key[MLXSW_REG_PTCEX_FLEX_KEY_BLOCKS_LEN]; /* Encoded key */ + char enc_key[MLXSW_REG_PTCEX_FLEX_KEY_BLOCKS_LEN]; /* Encoded key, + * minus delta bits. + */ struct { u16 start; u8 mask; --=20 2.20.1