aboutsummaryrefslogtreecommitdiff
path: root/sys/compat/linuxkpi/common/include/linux
diff options
context:
space:
mode:
authorJean-Sébastien Pédron <dumbbell@FreeBSD.org>2026-04-13 21:39:22 +0000
committerJean-Sébastien Pédron <dumbbell@FreeBSD.org>2026-04-30 07:05:01 +0000
commit783d018cf954f99032a0a4f655af8916024598a8 (patch)
treea21dcfeab21ef69145b70fda872269f9c2e78ca8 /sys/compat/linuxkpi/common/include/linux
parentb683fd0b3206b35214f7f87805246e5c74552942 (diff)
Diffstat (limited to 'sys/compat/linuxkpi/common/include/linux')
-rw-r--r--sys/compat/linuxkpi/common/include/linux/xarray.h26
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 *);