Home | History | Annotate | Download | only in drm

Lines Matching refs:node

133 drm_vma_node_init(struct drm_vma_offset_node *node)
137 *node = zero_node;
139 rw_init(&node->von_lock);
140 node->von_startpage = 0;
141 node->von_npages = 0;
142 rb_tree_init(&node->von_files, &drm_vma_file_rb_ops);
146 drm_vma_node_destroy(struct drm_vma_offset_node *node)
149 KASSERTMSG((RB_TREE_MIN(&node->von_files) == NULL),
150 "drm vma node %p not empty", node);
152 rb_tree_destroy(&node->von_files);
154 KASSERT(node->von_startpage == 0);
155 KASSERT(node->von_npages == 0);
156 rw_destroy(&node->von_lock);
161 struct drm_vma_offset_node *node, unsigned long npages)
169 if (0 < node->von_npages)
181 node->von_startpage = startpage;
182 node->von_npages = npages;
185 collision = rb_tree_insert_node(&mgr->vom_nodes, node);
186 KASSERT(collision == node);
194 struct drm_vma_offset_node *node)
197 if (node->von_npages == 0)
201 rb_tree_remove_node(&mgr->vom_nodes, node);
204 vmem_free(mgr->vom_vmem, node->von_startpage, node->von_npages);
206 node->von_npages = 0;
207 node->von_startpage = 0;
230 struct drm_vma_offset_node *node;
234 node = rb_tree_find_node_leq(&mgr->vom_nodes, &key);
235 if (node == NULL)
237 KASSERT(node->von_startpage <= startpage);
238 if (node->von_npages < npages)
240 if (node->von_npages - npages < startpage - node->von_startpage)
243 return node;
251 struct drm_vma_offset_node *node;
255 node = rb_tree_find_node(&mgr->vom_nodes, &key);
256 if (node == NULL)
258 KASSERT(node->von_startpage == startpage);
259 if (node->von_npages != npages)
262 return node;
269 struct drm_vma_offset_node *node;
272 node = drm_vma_offset_exact_lookup_locked(mgr, startpage, npages);
275 return node;
280 drm_vma_node_allow(struct drm_vma_offset_node *node, struct drm_file *file)
289 rw_enter(&node->von_lock, RW_WRITER);
290 old = rb_tree_insert_node(&node->von_files, new);
291 rw_exit(&node->von_lock);
300 drm_vma_node_revoke(struct drm_vma_offset_node *node, struct drm_file *file)
303 rw_enter(&node->von_lock, RW_WRITER);
305 rb_tree_find_node(&node->von_files, file);
307 rb_tree_remove_node(&node->von_files, found);
308 rw_exit(&node->von_lock);
314 drm_vma_node_is_allowed(struct drm_vma_offset_node *node,
318 rw_enter(&node->von_lock, RW_READER);
320 (rb_tree_find_node(&node->von_files, file) != NULL);
321 rw_exit(&node->von_lock);
327 drm_vma_node_verify_access(struct drm_vma_offset_node *node,
331 if (!drm_vma_node_is_allowed(node, file))