Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/external/bsd/drm2 Add idr_get_next and idr_for_each_entry.
details: https://anonhg.NetBSD.org/src/rev/c3cd2f07bbe1
branches: trunk
changeset: 834914:c3cd2f07bbe1
user: riastradh <riastradh%NetBSD.org@localhost>
date: Mon Aug 27 06:55:01 2018 +0000
description:
Add idr_get_next and idr_for_each_entry.
diffstat:
sys/external/bsd/drm2/include/linux/idr.h | 7 ++++++-
sys/external/bsd/drm2/linux/linux_idr.c | 23 +++++++++++++++++++++--
2 files changed, 27 insertions(+), 3 deletions(-)
diffs (79 lines):
diff -r a18d2368660c -r c3cd2f07bbe1 sys/external/bsd/drm2/include/linux/idr.h
--- a/sys/external/bsd/drm2/include/linux/idr.h Mon Aug 27 06:54:51 2018 +0000
+++ b/sys/external/bsd/drm2/include/linux/idr.h Mon Aug 27 06:55:01 2018 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: idr.h,v 1.4 2018/08/27 06:54:51 riastradh Exp $ */
+/* $NetBSD: idr.h,v 1.5 2018/08/27 06:55:01 riastradh Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -51,6 +51,7 @@
#define idr_destroy linux_idr_destroy
#define idr_find linux_idr_find
#define idr_for_each linux_idr_for_each
+#define idr_get_next linux_idr_get_next
#define idr_init linux_idr_init
#define idr_is_empty linux_idr_is_empty
#define idr_preload linux_idr_preload
@@ -65,6 +66,7 @@
void idr_destroy(struct idr *);
bool idr_is_empty(struct idr *);
void *idr_find(struct idr *, int);
+void *idr_get_next(struct idr *, int *);
void *idr_replace(struct idr *, void *, int);
void idr_remove(struct idr *, int);
void idr_preload(gfp_t);
@@ -72,6 +74,9 @@
void idr_preload_end(void);
int idr_for_each(struct idr *, int (*)(int, void *, void *), void *);
+#define idr_for_each_entry(IDR, ENTRY, ID) \
+ for ((ID) = 0; ((ENTRY) = idr_get_next((IDR), &(ID))) != NULL; (ID)++)
+
struct ida {
struct idr ida_idr;
};
diff -r a18d2368660c -r c3cd2f07bbe1 sys/external/bsd/drm2/linux/linux_idr.c
--- a/sys/external/bsd/drm2/linux/linux_idr.c Mon Aug 27 06:54:51 2018 +0000
+++ b/sys/external/bsd/drm2/linux/linux_idr.c Mon Aug 27 06:55:01 2018 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: linux_idr.c,v 1.6 2017/07/26 03:40:39 riastradh Exp $ */
+/* $NetBSD: linux_idr.c,v 1.7 2018/08/27 06:55:01 riastradh Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_idr.c,v 1.6 2017/07/26 03:40:39 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_idr.c,v 1.7 2018/08/27 06:55:01 riastradh Exp $");
#include <sys/param.h>
#include <sys/atomic.h>
@@ -151,6 +151,25 @@
}
void *
+idr_get_next(struct idr *idr, int *idp)
+{
+ const struct idr_node *node;
+ void *data;
+
+ mutex_spin_enter(&idr->idr_lock);
+ node = rb_tree_find_node_geq(&idr->idr_tree, idp);
+ if (node == NULL) {
+ data = NULL;
+ } else {
+ data = node->in_data;
+ *idp = node->in_index;
+ }
+ mutex_spin_exit(&idr->idr_lock);
+
+ return data;
+}
+
+void *
idr_replace(struct idr *idr, void *replacement, int id)
{
struct idr_node *node;
Home |
Main Index |
Thread Index |
Old Index