diff options
| author | Jean-Sébastien Pédron <dumbbell@FreeBSD.org> | 2026-04-13 21:39:22 +0000 |
|---|---|---|
| committer | Jean-Sébastien Pédron <dumbbell@FreeBSD.org> | 2026-04-30 07:05:01 +0000 |
| commit | 783d018cf954f99032a0a4f655af8916024598a8 (patch) | |
| tree | a21dcfeab21ef69145b70fda872269f9c2e78ca8 /sys/compat/linuxkpi/common/include/linux | |
| parent | b683fd0b3206b35214f7f87805246e5c74552942 (diff) | |
Diffstat (limited to 'sys/compat/linuxkpi/common/include/linux')
| -rw-r--r-- | sys/compat/linuxkpi/common/include/linux/xarray.h | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/sys/compat/linuxkpi/common/include/linux/xarray.h b/sys/compat/linuxkpi/common/include/linux/xarray.h index fba36eea0ab5..e6511130d50c 100644 --- a/sys/compat/linuxkpi/common/include/linux/xarray.h +++ b/sys/compat/linuxkpi/common/include/linux/xarray.h @@ -34,9 +34,6 @@ #include <sys/lock.h> #include <sys/mutex.h> -#define XA_LIMIT(min, max) \ - ({ CTASSERT((min) == 0); (uint32_t)(max); }) - #define XA_FLAGS_ALLOC (1U << 0) #define XA_FLAGS_LOCK_IRQ (1U << 1) #define XA_FLAGS_ALLOC1 (1U << 2) @@ -47,8 +44,6 @@ #define xa_is_err(x) \ IS_ERR(x) -#define xa_limit_32b XA_LIMIT(0, 0xFFFFFFFF) - #define XA_ASSERT_LOCKED(xa) mtx_assert(&(xa)->xa_lock, MA_OWNED) #define xa_lock(xa) mtx_lock(&(xa)->xa_lock) #define xa_unlock(xa) mtx_unlock(&(xa)->xa_lock) @@ -59,15 +54,26 @@ struct xarray { uint32_t xa_flags; /* see XA_FLAGS_XXX */ }; +struct xa_limit { + uint32_t max; + uint32_t min; +}; + +#define XA_LIMIT(min_, max_) (struct xa_limit){ .min = (min_), .max = (max_) } + +#define xa_limit_16b XA_LIMIT(0, USHRT_MAX) +#define xa_limit_31b XA_LIMIT(0, INT_MAX) +#define xa_limit_32b XA_LIMIT(0, UINT_MAX) + /* * Extensible arrays API implemented as a wrapper * around the radix tree implementation. */ void *xa_erase(struct xarray *, uint32_t); void *xa_load(struct xarray *, uint32_t); -int xa_alloc(struct xarray *, uint32_t *, void *, uint32_t, gfp_t); -int xa_alloc_cyclic(struct xarray *, uint32_t *, void *, uint32_t, uint32_t *, gfp_t); -int xa_alloc_cyclic_irq(struct xarray *, uint32_t *, void *, uint32_t, uint32_t *, gfp_t); +int xa_alloc(struct xarray *, uint32_t *, void *, struct xa_limit, gfp_t); +int xa_alloc_cyclic(struct xarray *, uint32_t *, void *, struct xa_limit, uint32_t *, gfp_t); +int xa_alloc_cyclic_irq(struct xarray *, uint32_t *, void *, struct xa_limit, uint32_t *, gfp_t); int xa_insert(struct xarray *, uint32_t, void *, gfp_t); void *xa_store(struct xarray *, uint32_t, void *, gfp_t); void xa_init_flags(struct xarray *, uint32_t); @@ -83,8 +89,8 @@ void *xa_next(struct xarray *, unsigned long *, bool); * Unlocked version of functions above. */ void *__xa_erase(struct xarray *, uint32_t); -int __xa_alloc(struct xarray *, uint32_t *, void *, uint32_t, gfp_t); -int __xa_alloc_cyclic(struct xarray *, uint32_t *, void *, uint32_t, uint32_t *, gfp_t); +int __xa_alloc(struct xarray *, uint32_t *, void *, struct xa_limit, gfp_t); +int __xa_alloc_cyclic(struct xarray *, uint32_t *, void *, struct xa_limit, uint32_t *, gfp_t); int __xa_insert(struct xarray *, uint32_t, void *, gfp_t); void *__xa_store(struct xarray *, uint32_t, void *, gfp_t); bool __xa_empty(struct xarray *); |
