[ovs-dev] [branch-2.6 PATCH] netdev-dpdk: Remove use of rte_mempool_ops_get_count.

Kevin Traynor ktraynor at redhat.com
Wed May 23 09:56:00 UTC 2018


rte_mempool_ops_get_count is not exported by DPDK so it means it
cannot be used by OVS when using DPDK as a shared library.

It was only being used for extra paranoid, things might change in
the future mode anyway, so remove it and just use rte_mempool_full.

The mempools are still removed later and are checked to see
that the buffers are back in it. Previously the mempools were removed
straight away and there was no checking.

Fixes: 5b611ab9a983 ("netdev-dpdk: Free mempool only when no in-use mbufs.")
Reported-by: Timothy Redaelli <tredaelli at redhat.com>
Reported-by: Markos Chandras <mchandras at suse.de>
Signed-off-by: Kevin Traynor <ktraynor at redhat.com>
---
 lib/netdev-dpdk.c | 20 +-------------------
 1 file changed, 1 insertion(+), 19 deletions(-)

diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
index 23daf87..23032d1 100644
--- a/lib/netdev-dpdk.c
+++ b/lib/netdev-dpdk.c
@@ -463,22 +463,4 @@ ovs_rte_pktmbuf_init(struct rte_mempool *mp,
 }
 
-static int
-dpdk_mp_full(const struct rte_mempool *mp) OVS_REQUIRES(dpdk_mutex)
-{
-    unsigned ring_count;
-    /* This logic is needed because rte_mempool_full() is not guaranteed to
-     * be atomic and mbufs could be moved from mempool cache --> mempool ring
-     * during the call. However, as no mbufs will be taken from the mempool
-     * at this time, we can work around it by also checking the ring entries
-     * separately and ensuring that they have not changed.
-     */
-    ring_count = rte_mempool_ops_get_count(mp);
-    if (rte_mempool_full(mp) && rte_mempool_ops_get_count(mp) == ring_count) {
-        return 1;
-    }
-
-    return 0;
-}
-
 /* Free unused mempools. */
 static void
@@ -488,5 +470,5 @@ dpdk_mp_sweep(void) OVS_REQUIRES(dpdk_mutex)
 
     LIST_FOR_EACH_SAFE (dmp, next, list_node, &dpdk_mp_list) {
-        if (!dmp->refcount && dpdk_mp_full(dmp->mp)) {
+        if (!dmp->refcount && rte_mempool_full(dmp->mp)) {
             ovs_list_remove(&dmp->list_node);
             rte_mempool_free(dmp->mp);
-- 
1.8.3.1



More information about the dev mailing list