From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 70DFCA04AC; Sun, 23 Aug 2020 09:15:02 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 5F671293C; Sun, 23 Aug 2020 09:15:01 +0200 (CEST) Received: from hqnvemgate26.nvidia.com (hqnvemgate26.nvidia.com [216.228.121.65]) by dpdk.org (Postfix) with ESMTP id 687E728EE for ; Sun, 23 Aug 2020 09:14:59 +0200 (CEST) Received: from hqpgpgate101.nvidia.com (Not Verified[216.228.121.13]) by hqnvemgate26.nvidia.com (using TLS: TLSv1.2, DES-CBC3-SHA) id ; Sun, 23 Aug 2020 00:14:44 -0700 Received: from hqmail.nvidia.com ([172.20.161.6]) by hqpgpgate101.nvidia.com (PGP Universal service); Sun, 23 Aug 2020 00:14:58 -0700 X-PGP-Universal: processed; by hqpgpgate101.nvidia.com on Sun, 23 Aug 2020 00:14:58 -0700 Received: from HQMAIL101.nvidia.com (172.20.187.10) by HQMAIL109.nvidia.com (172.20.187.15) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Sun, 23 Aug 2020 07:14:58 +0000 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (104.47.55.177) by HQMAIL101.nvidia.com (172.20.187.10) with Microsoft SMTP Server (TLS) id 15.0.1473.3 via Frontend Transport; Sun, 23 Aug 2020 07:14:58 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=g5o7Z/QZ1N1TcWtChbgpxFM+p/ZlPR2Dac4CeWcn48cFZJIl0aLB0Qz2qIulyNFXu1TkwibeibRpG0n9Kff8nxDOXRXXTabIQBswyGE9VFhrywn3PlCfKx3Qa3A0u/+S7fg5ghjJBLxKoH2ZW+213W8LusdCnr0fbCuEs5xkeDOx0FtINIu9xQBy064BPblX1gNLpQqKXSoHezEppC6+4E+IqqJCzGsE095ie8YsVm+GHH6tf9THmLcomMGXPl3rQ46yx8OQKVkaYJBA5tJR4f58t8gc8kWDBk4WnIciSYOgcPkau23G5V9Oxb7N6Wa40xXfzK6OKX6u3TwTsjByBw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BAwiQE2/BgmrerTpnvi6qfO2Yuz7NuBeVlEVh9NZvb0=; b=aP9iSodHkzWXhWP9zn0oZJtMfHQaerE+uQ+SyjDPxyvrUCnrel1QzO9WZNEFjNyw3kXkxUZoumUGxX0wrdwH/QvxI0x6gIeIJh6FFmw59iHeyCVKldHy5MES/eE8+GVqMLQ9sNl5oE/BIzb+UgGqvr+pZJVGG50Ky0kN7cYtfXSM0gGH13GPNc2PJG3nSxUdO9RIbq2mbGzbu9gktt6Ywty5fUWj/USyXIHYGkCJMzUTD9Bc2/xnmiwYCfIb6FDHsyRPMGHP4lU4hn3UxgHVga6LZ7yBvVvykiyxA550VG22qUS/dswbXVYva/LbsItuoW4b2QlEGGREpkgAc9BbhA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none Received: from DM6PR12MB2748.namprd12.prod.outlook.com (2603:10b6:5:43::28) by DM6PR12MB2633.namprd12.prod.outlook.com (2603:10b6:5:50::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3305.24; Sun, 23 Aug 2020 07:14:56 +0000 Received: from DM6PR12MB2748.namprd12.prod.outlook.com ([fe80::d476:6252:66de:2c7c]) by DM6PR12MB2748.namprd12.prod.outlook.com ([fe80::d476:6252:66de:2c7c%7]) with mapi id 15.20.3305.026; Sun, 23 Aug 2020 07:14:56 +0000 From: Raslan Darawsheh To: Suanming Mou , Slava Ovsiienko , Matan Azrad CC: Raslan Darawsheh , "dev@dpdk.org" Thread-Topic: [PATCH 1/2] net/mlx5: add hash list extended lookup and insert Thread-Index: AQHWbM9HlGsGPE+q/0SUbeZ13f96GKlFYGrw Date: Sun, 23 Aug 2020 07:14:56 +0000 Message-ID: References: <1596166458-150683-1-git-send-email-suanmingm@mellanox.com> <1596166458-150683-2-git-send-email-suanmingm@mellanox.com> In-Reply-To: <1596166458-150683-2-git-send-email-suanmingm@mellanox.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: mellanox.com; dkim=none (message not signed) header.d=none;mellanox.com; dmarc=none action=none header.from=nvidia.com; x-originating-ip: [212.29.221.74] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 376e52ce-106f-4171-ae1f-08d847343d59 x-ms-traffictypediagnostic: DM6PR12MB2633: x-microsoft-antispam-prvs: x-ms-exchange-transport-forked: True x-ms-oob-tlc-oobclassifiers: OLM:338; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: xvXSK40cBt2tHhVmr31eSW6DDj7d9C8e5jQ3SMLPwLxnp/Oo1UgkVjUBR8LWz8lCemflGQkAkebT3ZjVU8+l5K2IrcnT9QvYZBd33GVCW+MiVvA6pF3hGL8qExjLp9kWLrU39RUGJHw04zXeUJdY+nd9u+suRGPRU8dXLyVFlohCvHvPc+QvnMn8RuojqtZCa5hbLUV/Gxfqf7qkcdIWH/D62Lddh75pv+rHQ1g4PNDeQNhHHin8agxqVQXGPmFSsIZojCfLgRSOftEQCJ/l94LAJn6o9lrJSlC34iJ067uUf04YJA4ILuU5Vzqyt0DWuiJLt8MkDEWma1JeyKMmpg== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR12MB2748.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(346002)(396003)(39850400004)(366004)(376002)(136003)(6506007)(71200400001)(53546011)(5660300002)(83380400001)(54906003)(52536014)(316002)(110136005)(8936002)(4326008)(8676002)(86362001)(7696005)(2906002)(66446008)(76116006)(66556008)(33656002)(64756008)(66476007)(186003)(66946007)(9686003)(26005)(478600001)(55016002); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: NxiubXOLq2I5EYb6qfiHOSlNWI9WnR/4tjrbZKmcYwk9PSYxs8j9u0FCjD7s7OEgo4aJfO7cbwx7R9wK6cOc0n03/e9I2yqVKXD79uIhP/ZroTQX2lHGbdFpsocJAqix9S6ff8S38zgr0WtvLn3HH1pB8kGEGUUZ/woMt4zAnKYvi72lnCmTwCZcxTRxWs/dvoiWZO6L9Z0doSB0IQZV1zVjBaswkUgykfVLp5H7fGzuSsDKaBV80hsqq95n/8BXVtllI/aoPCCngy3S9MkeIo6Fl4oAbm8Lf1pbYVDt2eLWZp/mUkWE+tJpbv4ecBwYXf7cFbiOcJJV8mzfh3H+OIJAAdqYamPgvEHU9P7dtMHfsTMTidcTgvMFfwsrsOT1Vo35t3TGSHl800Z014djwzMl1bXJinCxcnDlMTLKksWKSDMnLyIWDrYEnS/AxnS1dIqh3k6nfyWgpF9xXsx8/XMo65Xehrkeu2Gl9Kd+u3VC5Ql2BGAn5ELnulkRckvPZK8u1dbQU1EIYRH06b1r5Fh5BVQz3bIzx2gQuJVA99H1t+/hBo4eGm7uLTmLkdxFqq9Sp+XJX/1Lbce3ggHbUlqVPYvQgMN7KrTUv8gxz8MnDnVzNvrzKb69KzvLBEj9yh9nPJY6vDsdtm2W3+YYvQ== Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM6PR12MB2748.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 376e52ce-106f-4171-ae1f-08d847343d59 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Aug 2020 07:14:56.4754 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: xcdhm6aySJXctDNdGMwNqpDmHE7/raU3OM7UjjSzTc/rUOXEX6Z7uRpKU/VFnh2AmSa1z8UcBz7f2kZNz15c3g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB2633 X-OriginatorOrg: Nvidia.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nvidia.com; s=n1; t=1598166884; bh=BAwiQE2/BgmrerTpnvi6qfO2Yuz7NuBeVlEVh9NZvb0=; h=X-PGP-Universal:ARC-Seal:ARC-Message-Signature: ARC-Authentication-Results:From:To:CC:Subject:Thread-Topic: Thread-Index:Date:Message-ID:References:In-Reply-To: Accept-Language:Content-Language:X-MS-Has-Attach: X-MS-TNEF-Correlator:authentication-results:x-originating-ip: x-ms-publictraffictype:x-ms-office365-filtering-correlation-id: x-ms-traffictypediagnostic:x-microsoft-antispam-prvs: x-ms-exchange-transport-forked:x-ms-oob-tlc-oobclassifiers: x-ms-exchange-senderadcheck:x-microsoft-antispam: x-microsoft-antispam-message-info:x-forefront-antispam-report: x-ms-exchange-antispam-messagedata:Content-Type: Content-Transfer-Encoding:MIME-Version: X-MS-Exchange-CrossTenant-AuthAs: X-MS-Exchange-CrossTenant-AuthSource: X-MS-Exchange-CrossTenant-Network-Message-Id: X-MS-Exchange-CrossTenant-originalarrivaltime: X-MS-Exchange-CrossTenant-fromentityheader: X-MS-Exchange-CrossTenant-id:X-MS-Exchange-CrossTenant-mailboxtype: X-MS-Exchange-CrossTenant-userprincipalname: X-MS-Exchange-Transport-CrossTenantHeadersStamped:X-OriginatorOrg; b=YjIU+nFqM3r721cPiJ0h70wF8nfbwlz+q4Lc8NCSjYBz7got+EC3ejSGrohxwymJQ 8AtQYzrpLQaHLt+VpMJWxWsq9IsNdThT/KJQt2vdqWIJsvCmruQHjWbKEcamZ71atu sh3i9KT0iCuQm0XgtoG71V75xq9SlASkOoKw9sIPpx5d6Jnm1tlGn3q1UsmoRrjjxS CKaWpek2FcmxDZi0fiyyxMnOxO6g91ab2xcozHEP3JHbxZ5R42NhX2/wJLL2wimSYN 6sXPZehiFyg3FLk4O4B4EbM33Y0lqErvXjPLJFHoJXAv9+L2Wo5Z0topASe0p07V6I ZX1HsdwCOtnzA== Subject: Re: [dpdk-dev] [PATCH 1/2] net/mlx5: add hash list extended lookup and insert X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Hi, > -----Original Message----- > From: Suanming Mou > Sent: Friday, July 31, 2020 6:34 AM > To: Slava Ovsiienko ; Matan Azrad > > Cc: Raslan Darawsheh ; dev@dpdk.org > Subject: [PATCH 1/2] net/mlx5: add hash list extended lookup and insert >=20 > The mlx5 PMD hashed list was designed in approach to contain the items > with unique keys only. Now there is the need to store the objects with > possible key collisions. It is not expected to have many collisions > (very likely to have a few ones), but keys become not unique. >=20 > This commit adds the hash list extended functions in order to support > insertion and lookup for the lists with non-unique keys. >=20 > Signed-off-by: Suanming Mou > Acked-by: Viacheslav Ovsiienko > --- > drivers/net/mlx5/mlx5_utils.c | 38 +++++++++++++++++++++++++++++ > drivers/net/mlx5/mlx5_utils.h | 57 > +++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 95 insertions(+) >=20 > diff --git a/drivers/net/mlx5/mlx5_utils.c b/drivers/net/mlx5/mlx5_utils.= c > index 25e8b27..fefe833 100644 > --- a/drivers/net/mlx5/mlx5_utils.c > +++ b/drivers/net/mlx5/mlx5_utils.c > @@ -81,6 +81,44 @@ struct mlx5_hlist_entry * > return 0; > } >=20 > +struct mlx5_hlist_entry * > +mlx5_hlist_lookup_ex(struct mlx5_hlist *h, uint64_t key, > + mlx5_hlist_match_callback_fn cb, void *ctx) > +{ > + uint32_t idx; > + struct mlx5_hlist_head *first; > + struct mlx5_hlist_entry *node; > + > + MLX5_ASSERT(h && cb && ctx); > + idx =3D rte_hash_crc_8byte(key, 0) & h->mask; > + first =3D &h->heads[idx]; > + LIST_FOREACH(node, first, next) { > + if (!cb(node, ctx)) > + return node; > + } > + return NULL; > +} > + > +int > +mlx5_hlist_insert_ex(struct mlx5_hlist *h, struct mlx5_hlist_entry *entr= y, > + mlx5_hlist_match_callback_fn cb, void *ctx) > +{ > + uint32_t idx; > + struct mlx5_hlist_head *first; > + struct mlx5_hlist_entry *node; > + > + MLX5_ASSERT(h && entry && cb && ctx); > + idx =3D rte_hash_crc_8byte(entry->key, 0) & h->mask; > + first =3D &h->heads[idx]; > + /* No need to reuse the lookup function. */ > + LIST_FOREACH(node, first, next) { > + if (!cb(node, ctx)) > + return -EEXIST; > + } > + LIST_INSERT_HEAD(first, entry, next); > + return 0; > +} > + > void > mlx5_hlist_remove(struct mlx5_hlist *h __rte_unused, > struct mlx5_hlist_entry *entry) > diff --git a/drivers/net/mlx5/mlx5_utils.h b/drivers/net/mlx5/mlx5_utils.= h > index 562b9b1..97d931f 100644 > --- a/drivers/net/mlx5/mlx5_utils.h > +++ b/drivers/net/mlx5/mlx5_utils.h > @@ -265,6 +265,20 @@ struct mlx5_hlist_entry { > /** Type of function that is used to handle the data before freeing. */ > typedef void (*mlx5_hlist_destroy_callback_fn)(void *p, void *ctx); >=20 > +/** > + * Type of function for user defined matching. > + * > + * @param entry > + * The entry in the list. > + * @param ctx > + * The pointer to new entry context. > + * > + * @return > + * 0 if matching, -1 otherwise. > + */ > +typedef int (*mlx5_hlist_match_callback_fn)(struct mlx5_hlist_entry > *entry, > + void *ctx); > + > /** hash list table structure */ > struct mlx5_hlist { > char name[MLX5_HLIST_NAMESIZE]; /**< Name of the hash list. */ > @@ -323,6 +337,49 @@ struct mlx5_hlist { > int mlx5_hlist_insert(struct mlx5_hlist *h, struct mlx5_hlist_entry *ent= ry); >=20 > /** > + * Extended routine to search an entry matching the context with > + * user defined match function. > + * > + * @param h > + * Pointer to the hast list table. > + * @param key > + * Key for the searching entry. > + * @param cb > + * Callback function to match the node with context. > + * @param ctx > + * Common context parameter used by callback function. > + * > + * @return > + * Pointer of the hlist entry if found, NULL otherwise. > + */ > +struct mlx5_hlist_entry *mlx5_hlist_lookup_ex(struct mlx5_hlist *h, > + uint64_t key, > + mlx5_hlist_match_callback_fn cb, > + void *ctx); > + > +/** > + * Extended routine to insert an entry to the list with key collisions. > + * > + * For the list have key collision, the extra user defined match functio= n > + * allows node with same key will be inserted. > + * > + * @param h > + * Pointer to the hast list table. > + * @param entry > + * Entry to be inserted into the hash list table. > + * @param cb > + * Callback function to match the node with context. > + * @param ctx > + * Common context parameter used by callback function. > + * > + * @return > + * - zero for success. > + * - -EEXIST if the entry is already inserted. > + */ > +int mlx5_hlist_insert_ex(struct mlx5_hlist *h, struct mlx5_hlist_entry > *entry, > + mlx5_hlist_match_callback_fn cb, void *ctx); > + > +/** > * Remove an entry from the hash list table. User should guarantee the > validity > * of the entry. > * > -- > 1.8.3.1 Series applied to next-net-mlx, Kindest regards Raslan Darawsheh