summaryrefslogtreecommitdiff
path: root/sys/external/bsd/drm2/include/linux/xarray.h
diff options
context:
space:
mode:
authorriastradh <riastradh@NetBSD.org>2021-12-19 11:51:07 +0000
committerriastradh <riastradh@NetBSD.org>2021-12-19 11:51:07 +0000
commitbbdbe46ed83b6d8f8135684ff4be338b246fca73 (patch)
tree8b42dce096e447379b737bc34e4ddf3ebe870a01 /sys/external/bsd/drm2/include/linux/xarray.h
parent0643055931e04a6eb351ab466dd5a6727222edef (diff)
linux: Draft half-arsed xarray shims
Diffstat (limited to 'sys/external/bsd/drm2/include/linux/xarray.h')
-rw-r--r--sys/external/bsd/drm2/include/linux/xarray.h26
1 files changed, 19 insertions, 7 deletions
diff --git a/sys/external/bsd/drm2/include/linux/xarray.h b/sys/external/bsd/drm2/include/linux/xarray.h
index e9268b23882..c3c7da29480 100644
--- a/sys/external/bsd/drm2/include/linux/xarray.h
+++ b/sys/external/bsd/drm2/include/linux/xarray.h
@@ -1,4 +1,4 @@
-/* $NetBSD: xarray.h,v 1.7 2021/12/19 11:50:47 riastradh Exp $ */
+/* $NetBSD: xarray.h,v 1.8 2021/12/19 11:51:07 riastradh Exp $ */
/*-
* Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -36,22 +36,34 @@
struct xarray;
struct xa_limit;
+struct xa_limit {
+ uint32_t max;
+ uint32_t min;
+};
+
struct xarray {
kmutex_t xa_lock;
struct radix_tree xa_tree;
gfp_t xa_gfp;
};
-struct xa_limit {
- uint32_t max;
- uint32_t min;
-};
-
#define xa_for_each(XA, INDEX, ENTRY) \
- for ((INDEX) = 0, (ENTRY) = xa_find((XA), &(INDEX), ULONG_MAX, 0); \
+ for ((INDEX) = 0, (ENTRY) = xa_find((XA), &(INDEX), ULONG_MAX, -1); \
(ENTRY) != NULL; \
(ENTRY) = xa_find_after((XA), &(INDEX), ULONG_MAX, 0))
+#define XA_ERROR(error) ((void *)(((uintptr_t)error << 2) | 2))
+
+static inline int
+xa_err(void *cookie)
+{
+
+ if (((uintptr_t)cookie & 3) != 2)
+ return 0;
+
+ return (uintptr_t)cookie >> 2;
+}
+
#define XA_FLAGS_ALLOC 0
#define xa_alloc linux_xa_alloc