Module Name: src Committed By: riastradh Date: Sun Dec 19 11:57:27 UTC 2021
Modified Files: src/sys/external/bsd/drm2/drm: drm_vma_manager.c src/sys/external/bsd/drm2/include/drm: drm_vma_manager.h Log Message: drm: Add drm_vma_offset_exact_lookup_locked. To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/sys/external/bsd/drm2/drm/drm_vma_manager.c cvs rdiff -u -r1.6 -r1.7 \ src/sys/external/bsd/drm2/include/drm/drm_vma_manager.h 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/drm/drm_vma_manager.c diff -u src/sys/external/bsd/drm2/drm/drm_vma_manager.c:1.7 src/sys/external/bsd/drm2/drm/drm_vma_manager.c:1.8 --- src/sys/external/bsd/drm2/drm/drm_vma_manager.c:1.7 Sun Dec 19 11:34:20 2021 +++ src/sys/external/bsd/drm2/drm/drm_vma_manager.c Sun Dec 19 11:57:27 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: drm_vma_manager.c,v 1.7 2021/12/19 11:34:20 riastradh Exp $ */ +/* $NetBSD: drm_vma_manager.c,v 1.8 2021/12/19 11:57:27 riastradh Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: drm_vma_manager.c,v 1.7 2021/12/19 11:34:20 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: drm_vma_manager.c,v 1.8 2021/12/19 11:57:27 riastradh Exp $"); #include <sys/kmem.h> #include <sys/rbtree.h> @@ -242,24 +242,34 @@ drm_vma_offset_lookup_locked(struct drm_ } struct drm_vma_offset_node * -drm_vma_offset_exact_lookup(struct drm_vma_offset_manager *mgr, +drm_vma_offset_exact_lookup_locked(struct drm_vma_offset_manager *mgr, unsigned long startpage, unsigned long npages) { const vmem_addr_t key = startpage; struct drm_vma_offset_node *node; - rw_enter(&mgr->vom_lock, RW_READER); + KASSERT(rw_lock_held(&mgr->vom_lock)); node = rb_tree_find_node(&mgr->vom_nodes, &key); if (node == NULL) - goto out; + return NULL; KASSERT(node->von_startpage == startpage); - if (node->von_npages != npages) { - node = NULL; - goto out; - } + if (node->von_npages != npages) + return NULL; + + return node; +} + +struct drm_vma_offset_node * +drm_vma_offset_exact_lookup(struct drm_vma_offset_manager *mgr, + unsigned long startpage, unsigned long npages) +{ + struct drm_vma_offset_node *node; + + rw_enter(&mgr->vom_lock, RW_READER); + node = drm_vma_offset_exact_lookup_locked(mgr, startpage, npages); + rw_exit(&mgr->vom_lock); -out: rw_exit(&mgr->vom_lock); return node; } Index: src/sys/external/bsd/drm2/include/drm/drm_vma_manager.h diff -u src/sys/external/bsd/drm2/include/drm/drm_vma_manager.h:1.6 src/sys/external/bsd/drm2/include/drm/drm_vma_manager.h:1.7 --- src/sys/external/bsd/drm2/include/drm/drm_vma_manager.h:1.6 Sun Dec 19 09:47:59 2021 +++ src/sys/external/bsd/drm2/include/drm/drm_vma_manager.h Sun Dec 19 11:57:27 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: drm_vma_manager.h,v 1.6 2021/12/19 09:47:59 riastradh Exp $ */ +/* $NetBSD: drm_vma_manager.h,v 1.7 2021/12/19 11:57:27 riastradh Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -122,6 +122,9 @@ struct drm_vma_offset_node * struct drm_vma_offset_node * drm_vma_offset_exact_lookup(struct drm_vma_offset_manager *, unsigned long, unsigned long); +struct drm_vma_offset_node * + drm_vma_offset_exact_lookup_locked(struct drm_vma_offset_manager *, + unsigned long, unsigned long); int drm_vma_node_allow(struct drm_vma_offset_node *, struct drm_file *); void drm_vma_node_revoke(struct drm_vma_offset_node *, struct drm_file *);