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 *);

Reply via email to