Commit d04f2a85 authored by Lorenzo Bianconi's avatar Lorenzo Bianconi Committed by Jiantao Xiao
Browse files

page_pool: Add recycle stats to page_pool_put_page_bulk

mainline inclusion
from mainline-v5.19-rc1
commit 590032a4
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I8BNYE
CVE: NA

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=590032a4d2133ecc10d3078a8db1d85a4842f12c



----------------------------------------------------------------------

Add missing recycle stats to page_pool_put_page_bulk routine.

Reviewed-by: default avatarJoe Damato <jdamato@fastly.com>
Signed-off-by: default avatarLorenzo Bianconi <lorenzo@kernel.org>
Reviewed-by: default avatarIlias Apalodimas <ilias.apalodimas@linaro.org>
Link: https://lore.kernel.org/r/3712178b51c007cfaed910ea80e68f00c916b1fa.1649685634.git.lorenzo@kernel.org


Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent a5b48ff9
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -36,6 +36,12 @@
		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,
@@ -571,9 +578,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 */