]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - net/core/page_pool.c
page_pool: Add API to update numa node
[linux.git] / net / core / page_pool.c
index dfc2501c35d9c8e69f97cb82e7db6764398f9bcd..9b704ea3f4b2104431f511f2f71eb08ceaed925d 100644 (file)
@@ -200,7 +200,7 @@ static s32 page_pool_inflight(struct page_pool *pool)
 
        inflight = _distance(hold_cnt, release_cnt);
 
-       trace_page_pool_inflight(pool, inflight, hold_cnt, release_cnt);
+       trace_page_pool_release(pool, inflight, hold_cnt, release_cnt);
        WARN(inflight < 0, "Negative(%d) inflight packet-pages", inflight);
 
        return inflight;
@@ -349,10 +349,13 @@ static void page_pool_free(struct page_pool *pool)
        kfree(pool);
 }
 
-static void page_pool_scrub(struct page_pool *pool)
+static void page_pool_empty_alloc_cache_once(struct page_pool *pool)
 {
        struct page *page;
 
+       if (pool->destroy_cnt)
+               return;
+
        /* Empty alloc cache, assume caller made sure this is
         * no-longer in use, and page_pool_alloc_pages() cannot be
         * call concurrently.
@@ -361,6 +364,12 @@ static void page_pool_scrub(struct page_pool *pool)
                page = pool->alloc.cache[--pool->alloc.count];
                __page_pool_return_page(pool, page);
        }
+}
+
+static void page_pool_scrub(struct page_pool *pool)
+{
+       page_pool_empty_alloc_cache_once(pool);
+       pool->destroy_cnt++;
 
        /* No more consumers should exist, but producers could still
         * be in-flight.
@@ -427,3 +436,11 @@ void page_pool_destroy(struct page_pool *pool)
        schedule_delayed_work(&pool->release_dw, DEFER_TIME);
 }
 EXPORT_SYMBOL(page_pool_destroy);
+
+/* Caller must provide appropriate safe context, e.g. NAPI. */
+void page_pool_update_nid(struct page_pool *pool, int new_nid)
+{
+       trace_page_pool_update_nid(pool, new_nid);
+       pool->p.nid = new_nid;
+}
+EXPORT_SYMBOL(page_pool_update_nid);