/** * xe_range_fence_insert() - range fence insert * @tree: range fence tree to insert intoi * @rfence: range fence * @ops: range fence ops * @start: start address of range fence * @last: last address of range fence * @fence: dma fence which signals range fence can be removed + freed * * Return: 0 on success, non-zero on failure
*/ int xe_range_fence_insert(struct xe_range_fence_tree *tree, struct xe_range_fence *rfence, conststruct xe_range_fence_ops *ops,
u64 start, u64 last, struct dma_fence *fence)
{ int err = 0;
rfence = xe_range_fence_tree_iter_first(&tree->root, 0, U64_MAX); while (rfence) { /* Should be ok with the minimalistic callback */ if (dma_fence_remove_callback(rfence->fence, &rfence->cb))
llist_add(&rfence->link, &tree->list);
rfence = xe_range_fence_tree_iter_next(rfence, 0, U64_MAX);
}
while (retry)
retry = __xe_range_fence_tree_cleanup(tree);
}
/** * xe_range_fence_tree_init() - Init range fence tree * @tree: range fence tree
*/ void xe_range_fence_tree_init(struct xe_range_fence_tree *tree)
{
memset(tree, 0, sizeof(*tree));
}
/** * xe_range_fence_tree_fini() - Fini range fence tree * @tree: range fence tree
*/ void xe_range_fence_tree_fini(struct xe_range_fence_tree *tree)
{
xe_range_fence_tree_remove_all(tree);
XE_WARN_ON(!RB_EMPTY_ROOT(&tree->root.rb_root));
}
/** * xe_range_fence_tree_first() - range fence tree iterator first * @tree: range fence tree * @start: start address of range fence * @last: last address of range fence * * Return: first range fence found in range or NULL
*/ struct xe_range_fence *
xe_range_fence_tree_first(struct xe_range_fence_tree *tree, u64 start,
u64 last)
{ return xe_range_fence_tree_iter_first(&tree->root, start, last);
}
/** * xe_range_fence_tree_next() - range fence tree iterator next * @rfence: current range fence * @start: start address of range fence * @last: last address of range fence * * Return: next range fence found in range or NULL
*/ struct xe_range_fence *
xe_range_fence_tree_next(struct xe_range_fence *rfence, u64 start, u64 last)
{ return xe_range_fence_tree_iter_next(rfence, start, last);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.