From patchwork Mon May 14 21:09:16 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vijaya Mohan Guvva X-Patchwork-Id: 40018 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 8DB0A1CC2F; Mon, 14 May 2018 23:09:36 +0200 (CEST) Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02on0082.outbound.protection.outlook.com [104.47.36.82]) by dpdk.org (Postfix) with ESMTP id C4FA21CC2B for ; Mon, 14 May 2018 23:09:35 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=8NnePb0J1v0Njoj0qDWJXB9K0E/32f3YPUVdC8pLOS4=; b=SdnfveQh6xmP/UVKG0DFd7xoxPPT3szemDof+/o750WQu+JwVz7wbEnfMcBkhwDoA8BEw87JV/sKCohAucNrY2dqEgfexz+fBAesRXfLQJuWDE/VFJO+ZlT39fChvHe1ZYeLRdDpbyH19pVqmeGjYy8LqSk0GyxVJ0bOka29oh8= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Vijaya.Guvva@cavium.com; Received: from vsr-t630.caveonetworks.com (50.233.148.156) by DM6PR07MB4889.namprd07.prod.outlook.com (2603:10b6:5:a2::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.755.16; Mon, 14 May 2018 21:09:33 +0000 From: Vijaya Mohan Guvva To: Bruce Richardson , Pablo de Lara Cc: dev@dpdk.org, Vijaya Mohan Guvva Date: Mon, 14 May 2018 14:09:16 -0700 Message-Id: <1526332156-19804-1-git-send-email-vguvva@caviumnetworks.com> X-Mailer: git-send-email 1.8.3.1 MIME-Version: 1.0 X-Originating-IP: [50.233.148.156] X-ClientProxiedBy: CO2PR05CA0089.namprd05.prod.outlook.com (2603:10b6:104:1::15) To DM6PR07MB4889.namprd07.prod.outlook.com (2603:10b6:5:a2::30) X-MS-PublicTrafficType: Email X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:DM6PR07MB4889; X-Microsoft-Exchange-Diagnostics: 1; DM6PR07MB4889; 3:lIVOqmYwZqw5GzcxvVNwXwILtt4xEUbiDyR8GBi42cjdJku4TTMrhGHRh+JCBWeHNbw0bBIMB5CFa8cYYQMaqbtGGu3b6Zwj5S1QXMHTJCDgWsp+4XzCog2eQPCNWHWeXUHjEapyVvUazTesKMelkKE1fDT2ARXsAsqVp/OzxejalRBu8jAIRtQodgRFdQmrBv/QL+iOaINLBwzQrOMwMJCOmoOSaqXeE6XMVQiZ+dzwbHS9lipd4MuKTBUhG/J4; 25:xDBLN0rIHTc1JJzqSBixqkAPhaGn8xO7HGpxDg5pik/9QqvzcjjY2OG1Dna3LNjpRnI3M9D8ZVBz9WevKWgYEz+OEx+R/n5gGEiMwup71BEOlS4LZumWgqztPLnN7BNtt0/bBGCThiZckZ1YG14u8sh1gw/Gn/4RVnk5xGuPgRNt50lb3xM5kSgr8CkXmfUfPX2Tro5yP24WtKu00aOTzzYP/Oh9bgGBdd9Or1vM/XFX0teUbZ1rhsWE4bSnUK19tQSKP585lgTpCZDSYVeIMXzzsstvhbYG4D11byvF5qLvaH8RP1e/NVNu7yZvQd4eG3ozwvVG5BsfKrVhKM+++w==; 31:XWz4Owot01lkFcYgTUU/3XZCXEu/uo2WGpJZ7JvEQrh9hGDAeKo4GjnjoGDJzdNCsLbwHPgW1kcZMfLzDFCxvp122D59wmUp2MSAmXZ5CGRAv0gMtFHoFV/QnwX1mw8GzRyopKu1aY/Co8LUL4tBOZEQsZ15JLgkBZZAkhNSCo1GV518X8tSHRF0RJTi6SZKmseJChHEpgiL6/t9U7k/+r3lssMTwgkojBd0pEzJG8g= X-MS-TrafficTypeDiagnostic: DM6PR07MB4889: X-Microsoft-Exchange-Diagnostics: 1; DM6PR07MB4889; 20:VOWOTfXlOPMnUp3I+Pp8nMgiDQZGAGyb3T3Z7FuO+NKtYErug2LS6+5L/UWRvjyzsy+smEEaNsLtJpi6hmx+0AA5Q6cBoJmBgi6ns4lUvsx75wyaVctKv5P+WGlp+f1smF5mj3nEfrfXEBxQ/rGu41DYaUfeOf3Z3L9D9+0LLp9OL7sq8LJ+XnxSFrbXvCgYiMlC9fdBMhrnlYVSXVdkHzo9P8Tq8AfY+L7Pwuwx7mJq9Pj4ZbluyyU5foadiDuQXnbkRATfzwmwDdT+JGHs8OX2ygOzbCNbqpL2lRCLnZN7htczXdoL3FxnqTwnJAtikN4Gpu6yxEB5MdYBVCTQ1pgPW1Z6nnUIRtsY9HwrkwVYfB0fHb1M/96XKcroXv1IK5h93zFs9aAf9S3V6gaLm/a/tip+Vf6KG/Nth0Qvm2tGgnqOcQqn3w6BJ9CWa0JlbAI6DY80R13zYwXiF7sBbePLGr4VcPCMKo4RGB7A0Zda/mKoH5CjwBV5X1fVpOI2feLp1dF1cp+wEJYk8qFxXp3K/GyOjBGV8OVYRZaGvYcfMyvO/Yrh2QOXItNtBw9BU6IXgUCBjvRkupYKdvscNVkVKDKTr1bJGO/lYdXuV5o=; 4:H0F8j5hX8lW7o+T/2l0gDUcrfQt+vjZtlxan9HNBB0eNxXKh5gJAZ6a8MWVxHen3PAvdT63SRNyxuqoeEjFNy1U7nlff2bI7Qh2Lg3aBbAYRObEi/PA0zgVgHttxM7xF6ucMihqq6f1vgyKqH2KrvZc2qMjWUobNsIsxJ8+yJFElmuGLQh0FQ6ptKvkN0DDPFMFZXnf9IYAc4ZEA/RD/HXcYz0vcze+IQohuvPQKu0dF79O+7UB8khaSv3wagwCvDWHKf9COle9h53bETE+o4g== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(10201501046)(93006095)(3231254)(944501410)(52105095)(149027)(150027)(6041310)(20161123560045)(20161123558120)(20161123564045)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:DM6PR07MB4889; BCL:0; PCL:0; RULEID:; SRVR:DM6PR07MB4889; X-Forefront-PRVS: 067270ECAF X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(376002)(39380400002)(39860400002)(396003)(346002)(189003)(199004)(305945005)(6666003)(316002)(486006)(6116002)(3846002)(48376002)(36756003)(25786009)(53936002)(50226002)(476003)(2616005)(8936002)(7736002)(81166006)(106356001)(50466002)(42882007)(4326008)(107886003)(8676002)(69596002)(81156014)(105586002)(6512007)(16586007)(2906002)(956004)(59450400001)(6506007)(66066001)(53416004)(68736007)(97736004)(110136005)(51416003)(478600001)(386003)(186003)(26005)(72206003)(16526019)(6486002)(4720700003)(5660300001)(1857600001)(52116002)(47776003); DIR:OUT; SFP:1101; SCL:1; SRVR:DM6PR07MB4889; H:vsr-t630.caveonetworks.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM6PR07MB4889; 23:AKOfvHV2mS7+1SOIuEDenORBPX7P2W+AHJ5fffmrc?= 7sYgNGeAbgGaMCkdEbBSzsH3LJ8O9bYeRVRsyOP1cyokN2O053pM+dMnR8GlX0j1PaY0RUtIQd2iOTkN7j1WHTTit/yIAXQccq79EOpM9bC+nqCU1e00nNzNQv0Zy3+btCh909i7O/Rb6cvmhH+CaeOgu1jmPAJ+xsavgJwI9LNCJ0dKozeEJiOGTPPtC7R1qeplGb5fzSFzraS7QKRK6Rk5uNEJlruCXcb0ky/pjn5/VdTSxeQqWiGWifMK9vOHUHN8tBjeuAxxHXg5olGmNWTkZN5MSg5tmEa16Z+dR41yr06Wi6C9JSxxC+yrWB7eFTFkc8DA2i0xPbZmF/FP3S6TSHi3FROMLemGpOFBg/lZ/pU7PIAj0v0HZiRmrvQqTvx0KL3+CWR1qpIUP0Jq7Efa/9CFIbP3bgHCjcShmlv2sWSQSkEUOhxffNMghPvLHfB5dY7i6CuXG8jYtuKczJZBppiL6cUNyK7uKPQAhIa3x3ePnes5tmgHu9M2CbubObhb/T3DXmryb5wvZLtPsVPoPXY2tRK7iCMpVIKSH178qDmwY0a3J1R4Exh6OEZ3JZRBp5o8l3CsvJXp/7rQC74KFbE0P1ZNXyV+t9to2508qs/SjGwPJv+ZToDMkaEGhJ28902CAAMr8cCjHzLcBAgknHTZpKBNXBd8pkHuiBZU+iZ2upR1ooJZJNak2QLxEalB8029a9DtXVFaYiGFObi978GYq5z4yjbLdlW7FcZepQdQOsO7EP/oEE7it3/+ebuu0tYNNZsIYCHqXUYVquxyAzN/FBnfX/zqJTLYYGH8/EZ3C7V/ax76DPxxzmK6pRMjq77hwwtkTHJIPM0F3TWRN8GRfnEf3+m+LggHVRdsgIpSOQwmuvkQsg4f2aSyvbef15y6+fqwYc/c41ftqgti5fh8wXovaLOqROM6mvn7g9+hwDlSt3JEtlesmjT/SCjvHEdjbU/jvWOOnRLsVz+jBw7scSLACqlkZgcbjR1V4L1HNLrfvkf81gwZpF54W5NNn7b7Hwlv+IY294zi/6y13+1KQdFhggs5gV6g+/jbj7DHXSB/J52g/SyGo/n1oGHZStF+GiE2WSaujxMWHYGlIkQKy1c03yx+YPBUfaTM4NN5c2D8Rb0CLOCLmdrltiWZXimqh0l9W2WwsEsUtupG6Vq0JOsGcU+q2wYeKhhjIlDA+8SWdcPlb3tn2ebcy1zoqNmWaByyMJfLJ3L2o+iluLH4toslilyzekUzIYXPg== X-Microsoft-Antispam-Message-Info: YJmLzl1TVouAgdmqHES04oSP01QrblZZb1xl7C4pppzeFDmTlP7sRYazdb4y6J24cm7UAGF79OuWsUOtZG9KiXJ8aSPPxp0/ITNylLdCSuXmXVtSr0UX+tINyhEuLPviE2j12JzMwVAumYRTIiS4MeFyeJ5QEPinhJp5TFiDtnhXNK65QKjdIM7d0EQEhz3p X-Microsoft-Exchange-Diagnostics: 1; DM6PR07MB4889; 6:Qp0l6d0qqeKIac2zK14eDLEybHvzMXPfFouTDTMquLoRuf56DruxTVfJ9XaLG/akWZfSUzSHcS47Bi8oaH6VFtKQZSAfDlVOkspqrRGRSb6xxsIbO7PDQ2Y9YJ8baWuvjrrmx+TShw6xHciKjCglAfQtnHQWb7L8mNufZ+mJPNSioiVMvrgDMh5sAH0ZpHOKUOR2w2dW4bpB9p2yz081vgoffVqt9Pc/PdwwjzbspbNf185azmJm57dV+6hbOOtEM4Cyx13ANcNRSWC9GHjZY3AtziJA1LT5+5Ad7QDWWEBn2x+R/vxY3KvdVduJCTWLOM0LeO6yJkBMul4ABlbMOwyTBN+4LUxmkGvqiAdgpL4gzMf7Vd07yEWnI8hX06FwWEuXSDHQfiByiCJrMFfKiZxuk4qunpuSPOgcMABSmeWkauBUuwhRBPA5LkyIAzQOrgUrwOrW8erfZB4vDloehw==; 5:8SS1VWsGDIM7VqBpAbsQACP4hXX3EhoU4kmXv1nGO8PcYINZDKxT0BdCLfAAWitNkKW/Qa1IdVGD14fo/v1bbAqZRZ+TpZZebYhZARt1V8jLsfbKLyJrWqFNPnX+xf5D1kW74mV4T11TLh9uWbSLo3ApXFhty2C6o2U0uDb8D/s=; 24:F71MyWrpQxx9yLlxdvX9e1n9uh7wHsLH2Nve6vDlFwdsQgmSTcVNYSMN0hamSknhZrrgTZhotTWQI8C9DxTmwfvil8RDv0zNbPoCmBnlnlA= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM6PR07MB4889; 7:wqX+n/LI6GBERa2m1BLzJjSfbhTWkY992Tc+cz2trhsteN+LVH+Depg+extYrvgueRsXtUeKwZIQozAWjKHvp9U9IEaKsICQTxXxpgsMB3pRhNmKewKb5Fe4C+LYpSKy2p7r85cU7CCPt08WIEsGbuZ0WEPL3At/JIgJAfAU5Tr8oy0UNV+Jho8D6pkO9nVaF2TO7g7QtfEpqP89zeZQi3Gr8REzI3R8kS4vmow3tu0lq3rTXRfxehZYP6E/rcyu X-MS-Office365-Filtering-Correlation-Id: 11ee4e5c-acaa-4ad6-4a55-08d5b9defe2e X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 May 2018 21:09:33.7524 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 11ee4e5c-acaa-4ad6-4a55-08d5b9defe2e X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR07MB4889 Subject: [dpdk-dev] [PATCH] librte_hash: new hash del abi to returns stored value 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" Add a new key delete interface rte_hash_del_key_with_hash_data to delete the key from hash and return the value stored. This is useful for hash users to free the data stored in the table after key delete and to avoid maintaining a user data array in the dpdk application. Signed-off-by: Vijaya Mohan Guvva --- lib/librte_hash/rte_cuckoo_hash.c | 20 +++++++++++++++++--- lib/librte_hash/rte_hash.h | 24 ++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/lib/librte_hash/rte_cuckoo_hash.c b/lib/librte_hash/rte_cuckoo_hash.c index a07543a..693b543 100644 --- a/lib/librte_hash/rte_cuckoo_hash.c +++ b/lib/librte_hash/rte_cuckoo_hash.c @@ -808,7 +808,7 @@ struct rte_hash * static inline int32_t __rte_hash_del_key_with_hash(const struct rte_hash *h, const void *key, - hash_sig_t sig) + hash_sig_t sig, void **data) { uint32_t bucket_idx; hash_sig_t alt_hash; @@ -827,6 +827,8 @@ struct rte_hash * k = (struct rte_hash_key *) ((char *)keys + bkt->key_idx[i] * h->key_entry_size); if (rte_hash_cmp_eq(key, k->key, h) == 0) { + if (data != NULL) + *data = k->pdata; remove_entry(h, bkt, i); /* @@ -852,6 +854,8 @@ struct rte_hash * k = (struct rte_hash_key *) ((char *)keys + bkt->key_idx[i] * h->key_entry_size); if (rte_hash_cmp_eq(key, k->key, h) == 0) { + if (data != NULL) + *data = k->pdata; remove_entry(h, bkt, i); /* @@ -869,18 +873,28 @@ struct rte_hash * } int32_t +rte_hash_del_key_with_hash_data(const struct rte_hash *h, + const void *key, hash_sig_t sig, void **data) +{ + RETURN_IF_TRUE(((h == NULL) || (key == NULL) || + (data == NULL)), -EINVAL); + return __rte_hash_del_key_with_hash(h, key, sig, data); +} + +int32_t rte_hash_del_key_with_hash(const struct rte_hash *h, const void *key, hash_sig_t sig) { RETURN_IF_TRUE(((h == NULL) || (key == NULL)), -EINVAL); - return __rte_hash_del_key_with_hash(h, key, sig); + return __rte_hash_del_key_with_hash(h, key, sig, NULL); } int32_t rte_hash_del_key(const struct rte_hash *h, const void *key) { RETURN_IF_TRUE(((h == NULL) || (key == NULL)), -EINVAL); - return __rte_hash_del_key_with_hash(h, key, rte_hash_hash(h, key)); + return __rte_hash_del_key_with_hash(h, key, + rte_hash_hash(h, key), NULL); } int diff --git a/lib/librte_hash/rte_hash.h b/lib/librte_hash/rte_hash.h index f71ca9f..73e1efb 100644 --- a/lib/librte_hash/rte_hash.h +++ b/lib/librte_hash/rte_hash.h @@ -222,6 +222,30 @@ struct rte_hash * rte_hash_del_key(const struct rte_hash *h, const void *key); /** + * Remove a key from an existing hash table and return the data stored. + * This operation is not multi-thread safe + * and should only be called from one thread. + * + * @param h + * Hash table to remove the key from. + * @param key + * Key to remove from the hash table. + * @param sig + * Precomputed hash value for 'key'. + * @param data + * Output with pointer to data returned from the hash table. + * @return + * - -EINVAL if the parameters are invalid. + * - -ENOENT if the key is not found. + * - A positive value that can be used by the caller as an offset into an + * array of user data. This value is unique for this key, and is the same + * value that was returned when the key was added. + */ +int32_t +rte_hash_del_key_with_hash_data(const struct rte_hash *h, const void *key, + hash_sig_t sig, void **data); + +/** * Remove a key from an existing hash table. * This operation is not multi-thread safe * and should only be called from one thread.