page_pool: Add recycle stats to page_pool_put_page_bulk
authorLorenzo Bianconi <lorenzo@kernel.org>
Mon, 11 Apr 2022 14:05:26 +0000 (16:05 +0200)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 12 Apr 2022 13:25:34 +0000 (15:25 +0200)
Add missing recycle stats to page_pool_put_page_bulk routine.

Reviewed-by: Joe Damato <jdamato@fastly.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Link: https://lore.kernel.org/r/3712178b51c007cfaed910ea80e68f00c916b1fa.1649685634.git.lorenzo@kernel.org
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
net/core/page_pool.c

index 1943c0f..4af55d2 100644 (file)
                this_cpu_inc(s->__stat);                                                \
        } while (0)
 
+#define recycle_stat_add(pool, __stat, val)                                            \
+       do {                                                                            \
+               struct page_pool_recycle_stats __percpu *s = pool->recycle_stats;       \
+               this_cpu_add(s->__stat, val);                                           \
+       } while (0)
+
 bool page_pool_get_stats(struct page_pool *pool,
                         struct page_pool_stats *stats)
 {
@@ -63,6 +69,7 @@ EXPORT_SYMBOL(page_pool_get_stats);
 #else
 #define alloc_stat_inc(pool, __stat)
 #define recycle_stat_inc(pool, __stat)
+#define recycle_stat_add(pool, __stat, val)
 #endif
 
 static int page_pool_init(struct page_pool *pool,
@@ -566,9 +573,13 @@ void page_pool_put_page_bulk(struct page_pool *pool, void **data,
        /* Bulk producer into ptr_ring page_pool cache */
        page_pool_ring_lock(pool);
        for (i = 0; i < bulk_len; i++) {
-               if (__ptr_ring_produce(&pool->ring, data[i]))
-                       break; /* ring full */
+               if (__ptr_ring_produce(&pool->ring, data[i])) {
+                       /* ring full */
+                       recycle_stat_inc(pool, ring_full);
+                       break;
+               }
        }
+       recycle_stat_add(pool, ring, i);
        page_pool_ring_unlock(pool);
 
        /* Hopefully all pages was return into ptr_ring */