Lines Matching refs:node
19 node_to_request(const struct i915_sched_node *node) in node_to_request() argument
21 return container_of(node, const struct i915_request, sched); in node_to_request()
24 static inline bool node_started(const struct i915_sched_node *node) in node_started() argument
26 return i915_request_started(node_to_request(node)); in node_started()
29 static inline bool node_signaled(const struct i915_sched_node *node) in node_signaled() argument
31 return i915_request_completed(node_to_request(node)); in node_signaled()
36 return rb_entry(rb, struct i915_priolist, node); in to_priolist()
113 rb_link_node(&p->node, rb, parent); in i915_sched_lookup_priolist()
114 rb_insert_color_cached(&p->node, &sched_engine->queue, first); in i915_sched_lookup_priolist()
129 lock_sched_engine(struct i915_sched_node *node, in lock_sched_engine() argument
133 const struct i915_request *rq = node_to_request(node); in lock_sched_engine()
155 static void __i915_schedule(struct i915_sched_node *node, in __i915_schedule() argument
158 const int prio = max(attr->priority, node->attr.priority); in __i915_schedule()
169 if (node_signaled(node)) in __i915_schedule()
172 stack.signaler = node; in __i915_schedule()
194 struct i915_sched_node *node = dep->signaler; in __i915_schedule() local
197 if (node_started(node)) in __i915_schedule()
206 list_for_each_entry(p, &node->signalers_list, signal_link) { in __i915_schedule()
223 if (node->attr.priority == I915_PRIORITY_INVALID) { in __i915_schedule()
224 GEM_BUG_ON(!list_empty(&node->link)); in __i915_schedule()
225 node->attr = *attr; in __i915_schedule()
234 sched_engine = node_to_request(node)->engine->sched_engine; in __i915_schedule()
238 sched_engine = lock_sched_engine(node, sched_engine, &cache); in __i915_schedule()
245 node = dep->signaler; in __i915_schedule()
246 sched_engine = lock_sched_engine(node, sched_engine, &cache); in __i915_schedule()
250 if (prio <= node->attr.priority || node_signaled(node)) in __i915_schedule()
253 GEM_BUG_ON(node_to_request(node)->engine->sched_engine != in __i915_schedule()
260 WRITE_ONCE(node->attr.priority, prio); in __i915_schedule()
270 if (list_empty(&node->link)) in __i915_schedule()
273 if (i915_request_in_priority_queue(node_to_request(node))) { in __i915_schedule()
278 list_move_tail(&node->link, cache.priolist); in __i915_schedule()
283 sched_engine->kick_backend(node_to_request(node), prio); in __i915_schedule()
296 void i915_sched_node_init(struct i915_sched_node *node) in i915_sched_node_init() argument
298 INIT_LIST_HEAD(&node->signalers_list); in i915_sched_node_init()
299 INIT_LIST_HEAD(&node->waiters_list); in i915_sched_node_init()
300 INIT_LIST_HEAD(&node->link); in i915_sched_node_init()
302 i915_sched_node_reinit(node); in i915_sched_node_init()
305 void i915_sched_node_reinit(struct i915_sched_node *node) in i915_sched_node_reinit() argument
307 node->attr.priority = I915_PRIORITY_INVALID; in i915_sched_node_reinit()
308 node->semaphores = 0; in i915_sched_node_reinit()
309 node->flags = 0; in i915_sched_node_reinit()
311 GEM_BUG_ON(!list_empty(&node->signalers_list)); in i915_sched_node_reinit()
312 GEM_BUG_ON(!list_empty(&node->waiters_list)); in i915_sched_node_reinit()
313 GEM_BUG_ON(!list_empty(&node->link)); in i915_sched_node_reinit()
328 bool __i915_sched_node_add_dependency(struct i915_sched_node *node, in __i915_sched_node_add_dependency() argument
340 dep->waiter = node; in __i915_sched_node_add_dependency()
344 list_add_rcu(&dep->signal_link, &node->signalers_list); in __i915_sched_node_add_dependency()
348 node->flags |= signal->flags; in __i915_sched_node_add_dependency()
357 int i915_sched_node_add_dependency(struct i915_sched_node *node, in i915_sched_node_add_dependency() argument
367 if (!__i915_sched_node_add_dependency(node, signal, dep, in i915_sched_node_add_dependency()
374 void i915_sched_node_fini(struct i915_sched_node *node) in i915_sched_node_fini() argument
386 list_for_each_entry_safe(dep, tmp, &node->signalers_list, signal_link) { in i915_sched_node_fini()
393 INIT_LIST_HEAD(&node->signalers_list); in i915_sched_node_fini()
396 list_for_each_entry_safe(dep, tmp, &node->waiters_list, wait_link) { in i915_sched_node_fini()
397 GEM_BUG_ON(dep->signaler != node); in i915_sched_node_fini()
404 INIT_LIST_HEAD(&node->waiters_list); in i915_sched_node_fini()