Lines Matching refs:node

286 static void ggtt_node_remove(struct xe_ggtt_node *node)  in ggtt_node_remove()  argument
288 struct xe_ggtt *ggtt = node->ggtt; in ggtt_node_remove()
297 xe_ggtt_clear(ggtt, node->base.start, node->base.size); in ggtt_node_remove()
298 drm_mm_remove_node(&node->base); in ggtt_node_remove()
299 node->base.size = 0; in ggtt_node_remove()
305 if (node->invalidate_on_remove) in ggtt_node_remove()
311 xe_ggtt_node_fini(node); in ggtt_node_remove()
316 struct xe_ggtt_node *node = container_of(work, typeof(*node), in ggtt_node_remove_work_func() local
318 struct xe_device *xe = tile_to_xe(node->ggtt->tile); in ggtt_node_remove_work_func()
321 ggtt_node_remove(node); in ggtt_node_remove_work_func()
330 void xe_ggtt_node_remove(struct xe_ggtt_node *node, bool invalidate) in xe_ggtt_node_remove() argument
335 if (!node || !node->ggtt) in xe_ggtt_node_remove()
338 ggtt = node->ggtt; in xe_ggtt_node_remove()
341 node->invalidate_on_remove = invalidate; in xe_ggtt_node_remove()
344 ggtt_node_remove(node); in xe_ggtt_node_remove()
347 queue_work(ggtt->wq, &node->delayed_removal_work); in xe_ggtt_node_remove()
420 const struct drm_mm_node *node, const char *description) in xe_ggtt_dump_node() argument
425 string_get_size(node->size, 1, STRING_UNITS_2, buf, sizeof(buf)); in xe_ggtt_dump_node()
427 node->start, node->start + node->size, buf, description); in xe_ggtt_dump_node()
441 int xe_ggtt_node_insert_balloon(struct xe_ggtt_node *node, u64 start, u64 end) in xe_ggtt_node_insert_balloon() argument
443 struct xe_ggtt *ggtt = node->ggtt; in xe_ggtt_node_insert_balloon()
449 xe_tile_assert(ggtt->tile, !drm_mm_node_allocated(&node->base)); in xe_ggtt_node_insert_balloon()
451 node->base.color = 0; in xe_ggtt_node_insert_balloon()
452 node->base.start = start; in xe_ggtt_node_insert_balloon()
453 node->base.size = end - start; in xe_ggtt_node_insert_balloon()
456 err = drm_mm_reserve_node(&ggtt->mm, &node->base); in xe_ggtt_node_insert_balloon()
461 node->base.start, node->base.start + node->base.size, ERR_PTR(err))) in xe_ggtt_node_insert_balloon()
464 xe_ggtt_dump_node(ggtt, &node->base, "balloon"); in xe_ggtt_node_insert_balloon()
474 void xe_ggtt_node_remove_balloon(struct xe_ggtt_node *node) in xe_ggtt_node_remove_balloon() argument
476 if (!node || !node->ggtt) in xe_ggtt_node_remove_balloon()
479 if (!drm_mm_node_allocated(&node->base)) in xe_ggtt_node_remove_balloon()
482 xe_ggtt_dump_node(node->ggtt, &node->base, "remove-balloon"); in xe_ggtt_node_remove_balloon()
484 mutex_lock(&node->ggtt->lock); in xe_ggtt_node_remove_balloon()
485 drm_mm_remove_node(&node->base); in xe_ggtt_node_remove_balloon()
486 mutex_unlock(&node->ggtt->lock); in xe_ggtt_node_remove_balloon()
489 xe_ggtt_node_fini(node); in xe_ggtt_node_remove_balloon()
504 int xe_ggtt_node_insert_locked(struct xe_ggtt_node *node, in xe_ggtt_node_insert_locked() argument
507 return drm_mm_insert_node_generic(&node->ggtt->mm, &node->base, size, align, 0, in xe_ggtt_node_insert_locked()
521 int xe_ggtt_node_insert(struct xe_ggtt_node *node, u32 size, u32 align) in xe_ggtt_node_insert() argument
525 if (!node || !node->ggtt) in xe_ggtt_node_insert()
528 mutex_lock(&node->ggtt->lock); in xe_ggtt_node_insert()
529 ret = xe_ggtt_node_insert_locked(node, size, align, in xe_ggtt_node_insert()
531 mutex_unlock(&node->ggtt->lock); in xe_ggtt_node_insert()
551 struct xe_ggtt_node *node = kzalloc(sizeof(*node), GFP_NOFS); in xe_ggtt_node_init() local
553 if (!node) in xe_ggtt_node_init()
556 INIT_WORK(&node->delayed_removal_work, ggtt_node_remove_work_func); in xe_ggtt_node_init()
557 node->ggtt = ggtt; in xe_ggtt_node_init()
559 return node; in xe_ggtt_node_init()
570 void xe_ggtt_node_fini(struct xe_ggtt_node *node) in xe_ggtt_node_fini() argument
572 kfree(node); in xe_ggtt_node_fini()
581 bool xe_ggtt_node_allocated(const struct xe_ggtt_node *node) in xe_ggtt_node_allocated() argument
583 if (!node || !node->ggtt) in xe_ggtt_node_allocated()
586 return drm_mm_node_allocated(&node->base); in xe_ggtt_node_allocated()
748 static void xe_ggtt_assign_locked(struct xe_ggtt *ggtt, const struct drm_mm_node *node, u16 vfid) in xe_ggtt_assign_locked() argument
750 u64 start = node->start; in xe_ggtt_assign_locked()
751 u64 size = node->size; in xe_ggtt_assign_locked()
757 if (!drm_mm_node_allocated(node)) in xe_ggtt_assign_locked()
777 void xe_ggtt_assign(const struct xe_ggtt_node *node, u16 vfid) in xe_ggtt_assign() argument
779 mutex_lock(&node->ggtt->lock); in xe_ggtt_assign()
780 xe_ggtt_assign_locked(node->ggtt, &node->base, vfid); in xe_ggtt_assign()
781 mutex_unlock(&node->ggtt->lock); in xe_ggtt_assign()