From patchwork Thu Sep 8 14:50:12 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hemant Agrawal X-Patchwork-Id: 15689 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 [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 6F6E99392; Thu, 8 Sep 2016 11:16:23 +0200 (CEST) Received: from NAM01-BN3-obe.outbound.protection.outlook.com (mail-bn3nam01on0047.outbound.protection.outlook.com [104.47.33.47]) by dpdk.org (Postfix) with ESMTP id 5661291DD for ; Thu, 8 Sep 2016 11:16:21 +0200 (CEST) Received: from BLUPR0301CA0006.namprd03.prod.outlook.com (10.162.113.144) by CY1PR0301MB2009.namprd03.prod.outlook.com (10.164.2.15) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.609.9; Thu, 8 Sep 2016 09:16:19 +0000 Received: from BY2FFO11FD016.protection.gbl (2a01:111:f400:7c0c::113) by BLUPR0301CA0006.outlook.office365.com (2a01:111:e400:5259::16) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.609.9 via Frontend Transport; Thu, 8 Sep 2016 09:16:13 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed) header.d=none; nxp.com; dmarc=fail action=none header.from=nxp.com; nxp.com; dkim=none (message not signed) header.d=none; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BY2FFO11FD016.mail.protection.outlook.com (10.1.14.148) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.587.6 via Frontend Transport; Thu, 8 Sep 2016 09:16:12 +0000 Received: from netperf1.ap.freescale.net ([10.232.134.28]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id u889G83m026891; Thu, 8 Sep 2016 02:16:09 -0700 From: Hemant Agrawal To: CC: , , , Hemant Agrawal Date: Thu, 8 Sep 2016 20:20:12 +0530 Message-ID: <1473346213-6038-1-git-send-email-hemant.agrawal@nxp.com> X-Mailer: git-send-email 1.9.1 X-EOPAttributedMessage: 0 X-Matching-Connectors: 131177997726926535; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(7916002)(2980300002)(1109001)(1110001)(339900001)(189002)(199003)(81166006)(81156014)(50986999)(8936002)(8676002)(87936001)(85426001)(104016004)(92566002)(4326007)(2906002)(47776003)(68736007)(50226002)(36756003)(586003)(77096005)(48376002)(50466002)(626004)(97736004)(5660300001)(110136002)(33646002)(106466001)(105606002)(2351001)(5003940100001)(19580395003)(19580405001)(356003)(8666005)(229853001)(7846002)(189998001)(305945005)(86362001)(7059030); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR0301MB2009; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BY2FFO11FD016; 1:PUtF2lUu0hsQ/5b5mON8gbFVfVzCOPaWTy2SlVPeBAXT1cWfWVaOave+gtGBUrz6043tN2y4L3I7hxjxH8hRcvUa3iRNW/Dnh2rY6hK7sgGxVSP1v23/mqmIaQKTBJtw5/Vz+3KvxryDoK9wrOWKIqTKqwhK/1KvKRdTXNOMmDJzkdX9Pvda/qXFPzC/vbOnnpJFrQc7jgqJUNcm7dWjfHLCt3xtgrzzpb/90JJvXhNQxt1tpn8w6OI8Djpi0up2xoSNZzYh4qUA+FNxi2KOVJJPtzl05dR2VqVmUp0lanvd4/1fDMAcH/XUgh/dHKnaWAmahP3Ubgy7XNpOPduKr9WOiy5RLzyR3b2/akLFLLtV12hhKhXAuSDYuXR1eJ2foxYELwGGlbYShDduvdSQAs1P+5tSvqKg2EIRGAwzd8uKd+3M4BMaroP+wJRxIaaJgNPFcqxKHRquqCdqEw2JiDZlaVZvF9rUpJt90KoBUKLsRYBa1v4Nl5sJHL0v2W/2s/VuIGiYuDBAGfMI4XXFuo4Hp9taz5iwYsvLHjGBF2HMV4bfAYkOIr5qqyIbucJSa95Wc2/+sD9SugIeMXvOow4XxQS02zhj6m/wL3FeeQlvgr+QOsc5EJ04uwoeY0k0mbXNgwEdeJQ65kr8VUwelvYbH5dJ0ix/iyZn6XjBnFJdRImQHgia34EUAAR89phfwGZwUn4fviyvLMZRH9jippXw61E0xLubZNJv4xiM8M837XQtpOGlS7zpXdcP40LT7SgfY6TVo47vEDRulqs1gA== MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: dab69195-ee41-4f7b-46c7-08d3d7c8c753 X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB2009; 2:toKJTcce9za+9Ne1UKfGDNm8Ng77wUoTSg5KNNNTVt1ZuB0zOy8mRQMvgEEgI+wCTofH6rz+MAnM33WhvOgMsb+0ejmrZ+ZusoO/FtDD9s6fH4nd5YMO0aQX1CNaA7NIsWpygicqVggCv3k6eRrbQXHe3FHJWTrsOxhAIGEVthfoRJ7c+G+yNNwlVuBubGEk; 3:9q9sulKZRxWrtgR88a9ywWBoGBPmnozE0f0iCgOPYSu7FnTaDK5bxU7rGHd8vcnPGJ1xHbvD8vXwQ4ldr1lWBxWuGwXB9nHcutmJywfzjSglpJ/Yxgb+YnxIqLugrK0OpYXk2hxDTHrKk7lJs1/8zuhytVEWrBjDnQ5O9MiPvbohuslAbc+Y4myJgfvVsgaC5ODmZPDsovnAMozTRkmXLel3bfibEZjhwS7ViLyFW0s= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0301MB2009; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB2009; 25:iunfMdvIxfwM90Pt8g0weREkHx+0e7pzEMh9dDYbHCF2v6jneeCNoWyA6ymN0+NtJH+0UMcTc4lK61+Kk8o2LAfKt/BBZCXv3k1ByLbD1+Ih7Yl1mV+tAgt9HKAwD8t57bSfouIpoOHXJRgM1RcUpNWY0dvH58AC/rdX1S4FyQS1+WTvheuWUkWjjQVU+1gFWtndvI/L+YkLXLAXQLb7ma36ebPwb0Fwgjwnt7C6LJ7Ez2GpHrG/J1Dmngy8UDjokCQMuasKOGNtlvA4xWqhOhhLtPRFmJGRiSip3BG1ipZV4XV/QzfWrVF9KAfpsQImvCVH/75Qy0DgdH1Lmt0KoAF9z/mzFVm7+/wOhajBYMPrNv+X+eqxVLvQrBZnN0H/nnwo5yt9kI5yHyD/yzj1bxLtpnUDqUM7cp4b3hSLPDMmNyfFLMjW/GTnXV6Fks9764Qyo+izKCneKRHPwUkt4uiS4cRMRybWDpm7r8CAAzIInViDPzJqhMUhGhT7sYpAROPiaKG2/9ezNEcWfh7g77ShMU1wrOzRWzBSi/QQcK/xxrrxmeZqkQ4Cn4NsTpzxuvtl9bl4VPszKdMSrF5d0l5S+xibWd5VSLvOrI1NR2B9gxUXzvorYTQj31atQNcFR0hiMqhGd2kmRFV8EfgNgR0muGHAJfTR0EcZenNrxVEEpag/MOHfIAOXEdj2ZOm6F5a9POQTexTgTXUMQlypJd8JC0RI83P4+AzevCwWH61bulb++mx14MsHsRfdkQxF X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB2009; 31:a5oqGiMr5wy4fhmR2v4knMORJoCWFJo0JeWFtZIXVf7BvKi7QB9UJtL7fR0l62IT4RY0mj2/8bWADEDPCzA+7olGreeUFU0PRicq6swvxrHg09iq6yUBj5ZTkVc/t7TqbIz3MU+bxjhsWhbXK0gA9uCzcFLv5E+hs3XZKybF5Pm1ByUcboUChLc0a2wxTsXcesdsIlbT+8iQMl+ynRyndAGz4MTW/DpfaZe5z/mUslI=; 4:jVvEi5KUsp+9WXnnyk6Jg25jc/tIPEiTw1pN8iB1S3zeXaISd2xMIijJP4fElMK2R/pf9YV5K7f1pG32uiWIpCsmgIkscFPmexo3Oh6e78kR41lghTRlSjsOUzZ6erav0e/QAxt3owI9E5KUmKWqgd4njZqW0HX3TkzXBh5qUizGDCqlj5XHL+1oNf/I6aU3t6aJpgsZUd3EtW5GL+xRulJ0XCJlNmMb2vma4Aev6mr8u7K9F5VsvZpLBosJwEw6RjI4KHyVH6rv3qld+DK8KlDCaLDWE+49pZp6LYFiSNs6uysD3wczpr/RpnoRft9tV+oUXjnbSsqGHSzsSYhBxZkpmmhsWEU/aD3WzlyMyyLH/BSQrgu58mFpNZGGIysnrQOG/te8mJXUot6CMLqEDNSZDqQTwDizZbk5FYbUDwnx4ImtzlqF7Eol8owPmzAKV/hCWqRlz1UfNkqFrZ5gHgN/1lJCHyHNK6iQkdB9gVnWHi7SIdTypb7BXqbxIsBiypY/Dg/mhDk0j0UcqJPQ5hJ9x71ca9CEmEtMBvyrm3c= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040176)(601004)(2401047)(13017025)(13015025)(13023025)(13024025)(13018025)(8121501046)(5005006)(10201501046)(3002001)(6055026); SRVR:CY1PR0301MB2009; BCL:0; PCL:0; RULEID:(400006); SRVR:CY1PR0301MB2009; X-Forefront-PRVS: 00594E8DBA X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR0301MB2009; 23:nPbk/667VN9aVBcpeQws3nCnoE4thxhANnFV/5Y?= =?us-ascii?Q?v/YqwpRDDNqxXSj6OTqUhDUrIE7J0vkHIAuPF/SdkhT6RHkrTaG+oE2fhLkY?= =?us-ascii?Q?Y+T+L3U/Tpkdym/gACmPcDxYdY/KjTlAG98LyqseeO057bh+zLNKPl/u2XKY?= =?us-ascii?Q?DDJ4Rq99Px19sirhEr6eweu6HQvCeO11alBWPE3dYcsaCtQoWS9cyP4p/jTT?= =?us-ascii?Q?bdaApUR5/gUCvwCKfZLfCFSkeRk9Zp2HsI14yCqdR/K2rMRHLQZNJ74iSjkN?= =?us-ascii?Q?7anCKXYkZoQaXl/0DJppUdLdoXl4gkxX4Y7m3suCO3IifnbQM72XaXGPNPyV?= =?us-ascii?Q?uw+p9uB77F1WDlc/T04PgkIdjL12SkGsm5CvnqmBEL6JIYhAU73wmrR+EUyc?= =?us-ascii?Q?6JsneemBo8UHnhQdUVcb8ml5gx0zp/zutLGWOm4oa+aW3hUWl1bQvD/Q9Grv?= =?us-ascii?Q?F0ExPPqQ/NpsPb6XSUYaPBpdvjq399LTMmilCjxfjqfpc2OfDzASmXD9Oz0z?= =?us-ascii?Q?Jlo1e7MJGOUSMxUzwxJyQCk0//roeJk2wg1UkV5UcveLp9rxjTs40gIlg+2Z?= =?us-ascii?Q?5TVe2KzsAku2oL+XDCzcJBUfmST8o8BoHLBukrtPU6JkL+DUsEwfe7g4t5yH?= =?us-ascii?Q?z9gCF5vcKwCxn2szZNoy5NidxWCQsI0it6xsj79S/uDqQajXxC1rLlrFq1YH?= =?us-ascii?Q?7rK0ALgOHacwE1+D+ooarrNtA6cEH2JPvdJNbRH2JeneSrMHIdZJ7VCbAooq?= =?us-ascii?Q?21f0R+9gmp4nSs8XJdc1dpMI7rgj32ZDdZTjLNRok5orGpQhib7+jzFZ2JoJ?= =?us-ascii?Q?r5aAq0TJiWwLNFAfkIPIfTvnoV/x9w6LOpkE8FvEsA/rZ9hXaEzoy8SBZ/Zc?= =?us-ascii?Q?yUthBJzjzlYVLbPDrrFM3KjNKH1n4LR3ewj6iiFAGiODDtVWRbhelCidKYZ/?= =?us-ascii?Q?bY8timNEgRQOv27i1kAnJkYn6aBLQBPZRIhpiQ9LLibrlbfAepLy2WLVLXXA?= =?us-ascii?Q?FG2u69rb9vlWj1lwsQev02Pmypt9diFNfpR65fPrXg6KRMqU9G0rvB4xPVTX?= =?us-ascii?Q?UgMlEaLlBv1y7l5S7tz0Qf5ND92z/c8w87q5ZAOrn+Uk7EOzjsg=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB2009; 6:TyVBDkjQ5YJ8YCiqUOA5g7ybSRQ7N2dGqSvQMmo01MF5CZNRi7kk/JUuQQwKYxFyzzIHUYIQKsOw8BLE+3/beiLmwhNFScWml7qp7+DfG/idyPgBO1tuacRmrV47yiaeSpwq4QMXbyTdAYHljGt5zUVQagwIsjcb7r+DLARwPIHUEsQnsZe+nwQlBjuJMugrdllyDFVUHyelUr+tCa98jdd7qEtThCBo6YE9uY1+vE9jg+8RD5PL+tzIBvuA5NFSpnMUjGUJrK/X7Kkc+bQTLyk+Qvo88KDUqrwEuYLyfLs=; 5:w84RVMqpm4WpIWh0lFjwP1q7r7/kBS57ddRD1yIJKWUUV+I3KXLvVztuJ6fkPLRK4VRkmK5stn0MXRkMsoSHCtOsp2aE563acTOLRgDINBZJw65n7GZnRM6adU2YHDJDRHzJ36FenA0OAv8zBAJNG/dkzFjwE+DK3WPT/fNNL8o=; 24:ibEeP/vDKPuUFuDchL/5quwVH3OaV2udlBUELsxMg5+mhx45ViatVMy5DYiRkiUwSAvr9Ytg1sSdwLI0Cr6HGVNLXgdbUkHyMFTMqS7/+Ls=; 7:EpiztKLFG63SaKCZXpL8bHBnmwDcq/YVs3atFjbrLaXThUpWkt+2QhXJ0eR1PGT2QH3/nQzTEBtnP+y1RboywEPPYYTGfhGhkhpZuSSY+ZV80loEbq3dZabmWl8jcey8PZhstTmmanUnbFn94tPWk6ddP1uxjlMoMxxJkLKZ7LsEb4jwCkeGLwgeCmhC5yEQQZf7RaCZLHfJfouN/lEksNZbz5v2+8ofae/XdRaHispF942XTJ57Vcxf/SAjxvlB SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Sep 2016 09:16:12.5054 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0301MB2009 Subject: [dpdk-dev] [PATCH 1/2] eal/mempool: introduce check for external mempool availability X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" External offloaded mempool may not be available always. This check enables run time verification of the presence of external mempool before the mempool ops are installed. An application built with a specific external mempool may work fine on host. But, may not work on VM, specificaly if non-hw specific interfaces are used e.g. virtio-net. This is required to make sure that same application can work in all environment for a given hw platform. The solution proposed here is that rte_mempool_set_ops_byname should return specific error in case the current execution environment is not supporting the given mempool. Thereby allowing it to fallback on software mempool implementation e.g. "ring_mp_mc" This patch introduces new optional "pool_verify" as mempool ops function to check if external mempool instance is available or not. Signed-off-by: Hemant Agrawal --- lib/librte_mempool/rte_mempool.h | 21 +++++++++++++++++++++ lib/librte_mempool/rte_mempool_ops.c | 18 ++++++++++++++++++ lib/librte_mempool/rte_mempool_ring.c | 4 ++++ lib/librte_mempool/rte_mempool_stack.c | 3 ++- 4 files changed, 45 insertions(+), 1 deletion(-) diff --git a/lib/librte_mempool/rte_mempool.h b/lib/librte_mempool/rte_mempool.h index 059ad9e..67e12d1 100644 --- a/lib/librte_mempool/rte_mempool.h +++ b/lib/librte_mempool/rte_mempool.h @@ -385,6 +385,12 @@ typedef int (*rte_mempool_dequeue_t)(struct rte_mempool *mp, */ typedef unsigned (*rte_mempool_get_count)(const struct rte_mempool *mp); +/** + * Return if the given external mempool is available for this instance. + * it is optional to implement for mempools + */ +typedef int (*rte_mempool_pool_verify)(const struct rte_mempool *mp); + /** Structure defining mempool operations structure */ struct rte_mempool_ops { char name[RTE_MEMPOOL_OPS_NAMESIZE]; /**< Name of mempool ops struct. */ @@ -393,6 +399,8 @@ struct rte_mempool_ops { rte_mempool_enqueue_t enqueue; /**< Enqueue an object. */ rte_mempool_dequeue_t dequeue; /**< Dequeue an object. */ rte_mempool_get_count get_count; /**< Get qty of available objs. */ + rte_mempool_pool_verify pool_verify; + /**< Verify if external mempool is available for usages*/ } __rte_cache_aligned; #define RTE_MEMPOOL_MAX_OPS_IDX 16 /**< Max registered ops structs */ @@ -514,6 +522,18 @@ void rte_mempool_ops_free(struct rte_mempool *mp); /** + * @internal wrapper to verify the external mempool availability + * + * @param mp + * Pointer to the memory pool. + * @return + * 0: Success; external mempool instance is available + * - <0: Error; external mempool instance is not available + */ +int +rte_mempool_ops_pool_verify(const struct rte_mempool *mp); + +/** * Set the ops of a mempool. * * This can only be done on a mempool that is not populated, i.e. just after @@ -529,6 +549,7 @@ rte_mempool_ops_free(struct rte_mempool *mp); * - 0: Success; the mempool is now using the requested ops functions. * - -EINVAL - Invalid ops struct name provided. * - -EEXIST - mempool already has an ops struct assigned. + * - -EOPNOTSUPP - mempool instance not available. */ int rte_mempool_set_ops_byname(struct rte_mempool *mp, const char *name, diff --git a/lib/librte_mempool/rte_mempool_ops.c b/lib/librte_mempool/rte_mempool_ops.c index 5f24de2..4119882 100644 --- a/lib/librte_mempool/rte_mempool_ops.c +++ b/lib/librte_mempool/rte_mempool_ops.c @@ -123,6 +123,18 @@ rte_mempool_ops_get_count(const struct rte_mempool *mp) return ops->get_count(mp); } +/* wrapper to check if given external mempool is available for this instance.*/ +int +rte_mempool_ops_pool_verify(const struct rte_mempool *mp) +{ + struct rte_mempool_ops *ops; + + ops = rte_mempool_get_ops(mp->ops_index); + if (ops->pool_verify) + return ops->pool_verify(mp); + return 0; +} + /* sets mempool ops previously registered by rte_mempool_register_ops. */ int rte_mempool_set_ops_byname(struct rte_mempool *mp, const char *name, @@ -146,6 +158,12 @@ rte_mempool_set_ops_byname(struct rte_mempool *mp, const char *name, if (ops == NULL) return -EINVAL; + /*verify if the given mempool is available for this instance */ + if (ops->pool_verify) { + if (ops->pool_verify(mp)) + return -EOPNOTSUPP; + } + mp->ops_index = i; mp->pool_config = pool_config; return 0; diff --git a/lib/librte_mempool/rte_mempool_ring.c b/lib/librte_mempool/rte_mempool_ring.c index b9aa64d..d86d5e0 100644 --- a/lib/librte_mempool/rte_mempool_ring.c +++ b/lib/librte_mempool/rte_mempool_ring.c @@ -126,6 +126,7 @@ static const struct rte_mempool_ops ops_mp_mc = { .enqueue = common_ring_mp_enqueue, .dequeue = common_ring_mc_dequeue, .get_count = common_ring_get_count, + .pool_verify = NULL, }; static const struct rte_mempool_ops ops_sp_sc = { @@ -135,6 +136,7 @@ static const struct rte_mempool_ops ops_sp_sc = { .enqueue = common_ring_sp_enqueue, .dequeue = common_ring_sc_dequeue, .get_count = common_ring_get_count, + .pool_verify = NULL, }; static const struct rte_mempool_ops ops_mp_sc = { @@ -144,6 +146,7 @@ static const struct rte_mempool_ops ops_mp_sc = { .enqueue = common_ring_mp_enqueue, .dequeue = common_ring_sc_dequeue, .get_count = common_ring_get_count, + .pool_verify = NULL, }; static const struct rte_mempool_ops ops_sp_mc = { @@ -153,6 +156,7 @@ static const struct rte_mempool_ops ops_sp_mc = { .enqueue = common_ring_sp_enqueue, .dequeue = common_ring_mc_dequeue, .get_count = common_ring_get_count, + .pool_verify = NULL, }; MEMPOOL_REGISTER_OPS(ops_mp_mc); diff --git a/lib/librte_mempool/rte_mempool_stack.c b/lib/librte_mempool/rte_mempool_stack.c index 5fd8af2..0198b70 100644 --- a/lib/librte_mempool/rte_mempool_stack.c +++ b/lib/librte_mempool/rte_mempool_stack.c @@ -141,7 +141,8 @@ static struct rte_mempool_ops ops_stack = { .free = stack_free, .enqueue = stack_enqueue, .dequeue = stack_dequeue, - .get_count = stack_get_count + .get_count = stack_get_count, + .pool_verify = NULL, }; MEMPOOL_REGISTER_OPS(ops_stack);