On Tue, Oct 15, 2024 at 04:53:39PM +0200, Alexander Lobakin wrote: > From: Toke Høiland-Jørgensen <toke@xxxxxxxxxx> > > To make the system page pool usable as a source for allocating XDP > frames, we need to register it with xdp_reg_mem_model(), so that page > return works correctly. This is done in preparation for using the system > page pool for the XDP live frame mode in BPF_TEST_RUN; for the same > reason, make the per-cpu variable non-static so we can access it from > the test_run code as well. Again, to me BPF_TEST_RUN has nothing to do with libeth/idpf XDP support :< > > Signed-off-by: Toke Høiland-Jørgensen <toke@xxxxxxxxxx> > Signed-off-by: Alexander Lobakin <aleksander.lobakin@xxxxxxxxx> > --- > include/linux/netdevice.h | 1 + > net/core/dev.c | 10 +++++++++- > 2 files changed, 10 insertions(+), 1 deletion(-) > > diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h > index 72f53e7610ec..692f21c28ea5 100644 > --- a/include/linux/netdevice.h > +++ b/include/linux/netdevice.h > @@ -3308,6 +3308,7 @@ struct softnet_data { > }; > > DECLARE_PER_CPU_ALIGNED(struct softnet_data, softnet_data); > +DECLARE_PER_CPU(struct page_pool *, system_page_pool); > > #ifndef CONFIG_PREEMPT_RT > static inline int dev_recursion_level(void) > diff --git a/net/core/dev.c b/net/core/dev.c > index b857abb5c0e9..773388f26d4f 100644 > --- a/net/core/dev.c > +++ b/net/core/dev.c > @@ -460,7 +460,7 @@ EXPORT_PER_CPU_SYMBOL(softnet_data); > * PP consumers must pay attention to run APIs in the appropriate context > * (e.g. NAPI context). > */ > -static DEFINE_PER_CPU(struct page_pool *, system_page_pool); > +DEFINE_PER_CPU(struct page_pool *, system_page_pool); > > #ifdef CONFIG_LOCKDEP > /* > @@ -12103,11 +12103,18 @@ static int net_page_pool_create(int cpuid) > .nid = cpu_to_mem(cpuid), > }; > struct page_pool *pp_ptr; > + int err; > > pp_ptr = page_pool_create_percpu(&page_pool_params, cpuid); > if (IS_ERR(pp_ptr)) > return -ENOMEM; > > + err = xdp_reg_page_pool(pp_ptr); > + if (err) { > + page_pool_destroy(pp_ptr); > + return err; > + } > + > per_cpu(system_page_pool, cpuid) = pp_ptr; > #endif > return 0; > @@ -12241,6 +12248,7 @@ static int __init net_dev_init(void) > if (!pp_ptr) > continue; > > + xdp_unreg_page_pool(pp_ptr); > page_pool_destroy(pp_ptr); > per_cpu(system_page_pool, i) = NULL; > } > -- > 2.46.2 >