Module Name: src Committed By: riastradh Date: Sun Dec 19 01:15:21 UTC 2021
Modified Files: src/sys/external/bsd/drm2/include/linux: idr.h src/sys/external/bsd/drm2/linux: linux_idr.c Log Message: Teach idr_remove to accept failure. But teach it to return the data if it succeeds too. To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/sys/external/bsd/drm2/include/linux/idr.h cvs rdiff -u -r1.13 -r1.14 src/sys/external/bsd/drm2/linux/linux_idr.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/external/bsd/drm2/include/linux/idr.h diff -u src/sys/external/bsd/drm2/include/linux/idr.h:1.8 src/sys/external/bsd/drm2/include/linux/idr.h:1.9 --- src/sys/external/bsd/drm2/include/linux/idr.h:1.8 Sun Dec 19 01:00:17 2021 +++ src/sys/external/bsd/drm2/include/linux/idr.h Sun Dec 19 01:15:21 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: idr.h,v 1.8 2021/12/19 01:00:17 riastradh Exp $ */ +/* $NetBSD: idr.h,v 1.9 2021/12/19 01:15:21 riastradh Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -69,7 +69,7 @@ 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_remove(struct idr *, int); void idr_preload(gfp_t); int idr_alloc(struct idr *, void *, int, int, gfp_t); void idr_preload_end(void); Index: src/sys/external/bsd/drm2/linux/linux_idr.c diff -u src/sys/external/bsd/drm2/linux/linux_idr.c:1.13 src/sys/external/bsd/drm2/linux/linux_idr.c:1.14 --- src/sys/external/bsd/drm2/linux/linux_idr.c:1.13 Sun Dec 19 01:00:17 2021 +++ src/sys/external/bsd/drm2/linux/linux_idr.c Sun Dec 19 01:15:21 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: linux_idr.c,v 1.13 2021/12/19 01:00:17 riastradh Exp $ */ +/* $NetBSD: linux_idr.c,v 1.14 2021/12/19 01:15:21 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.13 2021/12/19 01:00:17 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: linux_idr.c,v 1.14 2021/12/19 01:15:21 riastradh Exp $"); #include <sys/param.h> #include <sys/atomic.h> @@ -259,19 +259,26 @@ idr_replace(struct idr *idr, void *repla return result; } -void +void * idr_remove(struct idr *idr, int id) { struct idr_node *node; + void *data; mutex_spin_enter(&idr->idr_lock); node = rb_tree_find_node(&idr->idr_tree, &id); - KASSERTMSG((node != NULL), "idr %p has no entry for id %d", idr, id); - SDT_PROBE3(sdt, linux, idr, remove, idr, id, node->in_data); - rb_tree_remove_node(&idr->idr_tree, node); + if (node == NULL) { + data = NULL; + } else { + data = node->in_data; + SDT_PROBE3(sdt, linux, idr, remove, idr, id, data); + rb_tree_remove_node(&idr->idr_tree, node); + } mutex_spin_exit(&idr->idr_lock); kmem_free(node, sizeof(*node)); + + return data; } void