diff options
| author | Jakub Kicinski <[email protected]> | 2023-11-26 23:07:29 +0000 |
|---|---|---|
| committer | Paolo Abeni <[email protected]> | 2023-11-28 14:48:39 +0000 |
| commit | f17c69649c698e4df3cfe0010b7bbf142dec3e40 (patch) | |
| tree | b6d39f97735510c1fdb92ea0afc5bb5e9cf57512 /net/core/page_pool_user.c | |
| parent | net: page_pool: factor out uninit (diff) | |
| download | kernel-f17c69649c698e4df3cfe0010b7bbf142dec3e40.tar.gz kernel-f17c69649c698e4df3cfe0010b7bbf142dec3e40.zip | |
net: page_pool: id the page pools
To give ourselves the flexibility of creating netlink commands
and ability to refer to page pool instances in uAPIs create
IDs for page pools.
Reviewed-by: Ilias Apalodimas <[email protected]>
Reviewed-by: Eric Dumazet <[email protected]>
Acked-by: Jesper Dangaard Brouer <[email protected]>
Signed-off-by: Jakub Kicinski <[email protected]>
Reviewed-by: Shakeel Butt <[email protected]>
Signed-off-by: Paolo Abeni <[email protected]>
Diffstat (limited to 'net/core/page_pool_user.c')
| -rw-r--r-- | net/core/page_pool_user.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/net/core/page_pool_user.c b/net/core/page_pool_user.c new file mode 100644 index 000000000000..630d1eeecf2a --- /dev/null +++ b/net/core/page_pool_user.c @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: GPL-2.0 + +#include <linux/mutex.h> +#include <linux/xarray.h> +#include <net/page_pool/types.h> + +#include "page_pool_priv.h" + +static DEFINE_XARRAY_FLAGS(page_pools, XA_FLAGS_ALLOC1); +static DEFINE_MUTEX(page_pools_lock); + +int page_pool_list(struct page_pool *pool) +{ + static u32 id_alloc_next; + int err; + + mutex_lock(&page_pools_lock); + err = xa_alloc_cyclic(&page_pools, &pool->user.id, pool, xa_limit_32b, + &id_alloc_next, GFP_KERNEL); + if (err < 0) + goto err_unlock; + + mutex_unlock(&page_pools_lock); + return 0; + +err_unlock: + mutex_unlock(&page_pools_lock); + return err; +} + +void page_pool_unlist(struct page_pool *pool) +{ + mutex_lock(&page_pools_lock); + xa_erase(&page_pools, pool->user.id); + mutex_unlock(&page_pools_lock); +} |
