Lines Matching full:active

40  * can then perform any action, such as delayed freeing of an active
44 void i915_active_retire_noop(struct i915_active_request *active,
49 * @active - the active tracker
54 * i915_active_request_init() prepares the embedded @active struct for use as
55 * an activity tracker, that is for tracking the last known active request
60 i915_active_request_init(struct i915_active_request *active, in i915_active_request_init() argument
65 RCU_INIT_POINTER(active->request, rq); in i915_active_request_init()
66 INIT_LIST_HEAD(&active->link); in i915_active_request_init()
67 active->retire = retire ?: i915_active_retire_noop; in i915_active_request_init()
69 active->lock = lock; in i915_active_request_init()
78 * @active - the active tracker
82 * that @request is busy, the @active reports busy. When that @request is
83 * retired, the @active tracker is updated to report idle.
86 __i915_active_request_set(struct i915_active_request *active, in __i915_active_request_set() argument
90 lockdep_assert_held(active->lock); in __i915_active_request_set()
92 list_move(&active->link, &request->active_list); in __i915_active_request_set()
93 rcu_assign_pointer(active->request, request); in __i915_active_request_set()
97 i915_active_request_set(struct i915_active_request *active,
101 * i915_active_request_raw - return the active request
102 * @active - the active tracker
109 i915_active_request_raw(const struct i915_active_request *active, in i915_active_request_raw() argument
112 return rcu_dereference_protected(active->request, in i915_active_request_raw()
117 * i915_active_request_peek - report the active request being monitored
118 * @active - the active tracker
121 * still active, or NULL. It does not obtain a reference on the request
125 i915_active_request_peek(const struct i915_active_request *active, in i915_active_request_peek() argument
130 request = i915_active_request_raw(active, mutex); in i915_active_request_peek()
138 * i915_active_request_get - return a reference to the active request
139 * @active - the active tracker
141 * i915_active_request_get() returns a reference to the active request, or NULL
142 * if the active tracker is idle. The caller must hold struct_mutex.
145 i915_active_request_get(const struct i915_active_request *active, in i915_active_request_get() argument
148 return i915_request_get(i915_active_request_peek(active, mutex)); in i915_active_request_get()
152 * __i915_active_request_get_rcu - return a reference to the active request
153 * @active - the active tracker
155 * __i915_active_request_get() returns a reference to the active request,
156 * or NULL if the active tracker is idle. The caller must hold the RCU read
160 __i915_active_request_get_rcu(const struct i915_active_request *active) in __i915_active_request_get_rcu() argument
163 * Performing a lockless retrieval of the active request is super in __i915_active_request_get_rcu()
171 * rq = active.request in __i915_active_request_get_rcu()
174 * active.request = NULL in __i915_active_request_get_rcu()
185 * check that our request remains the active request across in __i915_active_request_get_rcu()
192 * before the active tracker is updated. Querying whether the in __i915_active_request_get_rcu()
198 * reallocated, that means the active tracker's request was complete. in __i915_active_request_get_rcu()
200 * just report the active tracker is idle. If the new request is in __i915_active_request_get_rcu()
202 * it remained the active request. in __i915_active_request_get_rcu()
211 request = rcu_dereference(active->request); in __i915_active_request_get_rcu()
235 * the request, we may not notice a change in the active in __i915_active_request_get_rcu()
258 if (!request || request == rcu_access_pointer(active->request)) in __i915_active_request_get_rcu()
266 * i915_active_request_get_unlocked - return a reference to the active request
267 * @active - the active tracker
269 * i915_active_request_get_unlocked() returns a reference to the active request,
270 * or NULL if the active tracker is idle. The reference is obtained under RCU,
276 i915_active_request_get_unlocked(const struct i915_active_request *active) in i915_active_request_get_unlocked() argument
281 request = __i915_active_request_get_rcu(active); in i915_active_request_get_unlocked()
288 * i915_active_request_isset - report whether the active tracker is assigned
289 * @active - the active tracker
291 * i915_active_request_isset() returns true if the active tracker is currently
296 i915_active_request_isset(const struct i915_active_request *active) in i915_active_request_isset() argument
298 return rcu_access_pointer(active->request); in i915_active_request_isset()
303 * @active - the active request on which to wait
307 * @active tracker is called before returning. If the @active
311 i915_active_request_retire(struct i915_active_request *active, in i915_active_request_retire() argument
317 request = i915_active_request_raw(active, mutex); in i915_active_request_retire()
327 list_del_init(&active->link); in i915_active_request_retire()
328 RCU_INIT_POINTER(active->request, NULL); in i915_active_request_retire()
330 active->retire(active, request); in i915_active_request_retire()
363 int (*active)(struct i915_active *ref),
366 #define i915_active_init(i915, ref, active, retire) do { \ argument
369 __i915_active_init(i915, ref, active, retire, &__key); \
381 struct i915_active_request *active);