Lines Matching defs:node

81 	struct drm_mm_node *node;
86 node = malloc(sizeof(*node), DRM_MEM_MM, M_NOWAIT | M_ZERO);
89 if (unlikely(node == NULL)) {
95 list_add_tail(&node->node_list, &mm->unused_nodes);
117 struct drm_mm_node *node,
127 BUG_ON(!hole_node->hole_follows || node->allocated);
143 node->start = adj_start;
144 node->size = size;
145 node->mm = mm;
146 node->color = color;
147 node->allocated = 1;
149 INIT_LIST_HEAD(&node->hole_stack);
150 list_add(&node->node_list, &hole_node->node_list);
152 BUG_ON(node->start + node->size > adj_end);
154 node->hole_follows = 0;
155 if (node->start + node->size < hole_end) {
156 list_add(&node->hole_stack, &mm->hole_stack);
157 node->hole_follows = 1;
167 struct drm_mm_node *node;
169 node = drm_mm_kmalloc(hole_node->mm, atomic);
170 if (unlikely(node == NULL))
173 drm_mm_insert_helper(hole_node, node, size, alignment, color);
175 return node;
180 * Search for free space and insert a preallocated memory node. Returns
181 * -ENOSPC if no suitable free area is available. The preallocated memory node
184 int drm_mm_insert_node_generic(struct drm_mm *mm, struct drm_mm_node *node,
195 drm_mm_insert_helper(hole_node, node, size, alignment, color);
200 int drm_mm_insert_node(struct drm_mm *mm, struct drm_mm_node *node,
203 return drm_mm_insert_node_generic(mm, node, size, alignment, 0);
208 struct drm_mm_node *node,
219 BUG_ON(!hole_node->hole_follows || node->allocated);
240 node->start = adj_start;
241 node->size = size;
242 node->mm = mm;
243 node->color = color;
244 node->allocated = 1;
246 INIT_LIST_HEAD(&node->hole_stack);
247 list_add(&node->node_list, &hole_node->node_list);
249 BUG_ON(node->start + node->size > adj_end);
250 BUG_ON(node->start + node->size > end);
252 node->hole_follows = 0;
253 if (node->start + node->size < hole_end) {
254 list_add(&node->hole_stack, &mm->hole_stack);
255 node->hole_follows = 1;
267 struct drm_mm_node *node;
269 node = drm_mm_kmalloc(hole_node->mm, atomic);
270 if (unlikely(node == NULL))
273 drm_mm_insert_helper_range(hole_node, node, size, alignment, color,
276 return node;
281 * Search for free space and insert a preallocated memory node. Returns
283 * restricted allocations. The preallocated memory node must be cleared.
285 int drm_mm_insert_node_in_range_generic(struct drm_mm *mm, struct drm_mm_node *node,
297 drm_mm_insert_helper_range(hole_node, node,
304 int drm_mm_insert_node_in_range(struct drm_mm *mm, struct drm_mm_node *node,
308 return drm_mm_insert_node_in_range_generic(mm, node, size, alignment, 0, start, end);
313 * Remove a memory node from the allocator.
315 void drm_mm_remove_node(struct drm_mm_node *node)
317 struct drm_mm *mm = node->mm;
320 BUG_ON(node->scanned_block || node->scanned_prev_free
321 || node->scanned_next_free);
324 list_entry(node->node_list.prev, struct drm_mm_node, node_list);
326 if (node->hole_follows) {
327 BUG_ON(drm_mm_hole_node_start(node)
328 == drm_mm_hole_node_end(node));
329 list_del(&node->hole_stack);
331 BUG_ON(drm_mm_hole_node_start(node)
332 != drm_mm_hole_node_end(node));
340 list_del(&node->node_list);
341 node->allocated = 0;
346 * Remove a memory node from the allocator and free the allocated struct
350 void drm_mm_put_block(struct drm_mm_node *node)
353 struct drm_mm *mm = node->mm;
355 drm_mm_remove_node(node);
359 list_add(&node->node_list, &mm->unused_nodes);
362 free(node, DRM_MEM_MM);
544 * Add a node to the scan list that might be freed to make space for the desired
549 int drm_mm_scan_add_block(struct drm_mm_node *node)
551 struct drm_mm *mm = node->mm;
558 BUG_ON(node->scanned_block);
559 node->scanned_block = 1;
561 prev_node = list_entry(node->node_list.prev, struct drm_mm_node,
564 node->scanned_preceeds_hole = prev_node->hole_follows;
566 list_del(&node->node_list);
567 node->node_list.prev = &prev_node->node_list;
568 node->node_list.next = &mm->prev_scanned_node->node_list;
569 mm->prev_scanned_node = node;
597 * Remove a node from the scan list.
610 int drm_mm_scan_remove_block(struct drm_mm_node *node)
612 struct drm_mm *mm = node->mm;
617 BUG_ON(!node->scanned_block);
618 node->scanned_block = 0;
620 prev_node = list_entry(node->node_list.prev, struct drm_mm_node,
623 prev_node->hole_follows = node->scanned_preceeds_hole;
624 list_add(&node->node_list, &prev_node->node_list);
626 return (drm_mm_hole_node_end(node) > mm->scan_hit_start &&
627 node->start < mm->scan_hit_end);