xref: /linux/include/linux/dma-fence.h (revision 40288c9206c17eb66a603262e06a58d300d0f279)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Fence mechanism for dma-buf to allow for asynchronous dma access
4  *
5  * Copyright (C) 2012 Canonical Ltd
6  * Copyright (C) 2012 Texas Instruments
7  *
8  * Authors:
9  * Rob Clark <robdclark@gmail.com>
10  * Maarten Lankhorst <maarten.lankhorst@canonical.com>
11  */
12 
13 #ifndef __LINUX_DMA_FENCE_H
14 #define __LINUX_DMA_FENCE_H
15 
16 #include <linux/err.h>
17 #include <linux/wait.h>
18 #include <linux/list.h>
19 #include <linux/bitops.h>
20 #include <linux/kref.h>
21 #include <linux/sched.h>
22 #include <linux/printk.h>
23 #include <linux/rcupdate.h>
24 #include <linux/timekeeping.h>
25 
26 struct dma_fence;
27 struct dma_fence_ops;
28 struct dma_fence_cb;
29 struct seq_file;
30 
31 /**
32  * struct dma_fence - software synchronization primitive
33  * @refcount: refcount for this fence
34  * @ops: dma_fence_ops associated with this fence
35  * @rcu: used for releasing fence with kfree_rcu
36  * @cb_list: list of all callbacks to call
37  * @extern_lock: external spin_lock_irqsave used for locking (deprecated)
38  * @inline_lock: alternative internal spin_lock_irqsave used for locking
39  * @context: execution context this fence belongs to, returned by
40  *           dma_fence_context_alloc()
41  * @seqno: the sequence number of this fence inside the execution context,
42  * can be compared to decide which fence would be signaled later.
43  * @flags: A mask of DMA_FENCE_FLAG_* defined below
44  * @timestamp: Timestamp when the fence was signaled.
45  * @error: Optional, only valid if < 0, must be set before calling
46  * dma_fence_signal, indicates that the fence has completed with an error.
47  *
48  * the flags member must be manipulated and read using the appropriate
49  * atomic ops (bit_*), so taking the spinlock will not be needed most
50  * of the time.
51  *
52  * DMA_FENCE_FLAG_INITIALIZED_BIT - fence was initialized
53  * DMA_FENCE_FLAG_INLINE_LOCK_BIT - use inline spinlock instead of external one
54  * DMA_FENCE_FLAG_SIGNALED_BIT - fence is already signaled
55  * DMA_FENCE_FLAG_TIMESTAMP_BIT - timestamp recorded for fence signaling
56  * DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT - enable_signaling might have been called
57  * DMA_FENCE_FLAG_USER_BITS - start of the unused bits, can be used by the
58  * implementer of the fence for its own purposes. Can be used in different
59  * ways by different fence implementers, so do not rely on this.
60  *
61  * Since atomic bitops are used, this is not guaranteed to be the case.
62  * Particularly, if the bit was set, but dma_fence_signal was called right
63  * before this bit was set, it would have been able to set the
64  * DMA_FENCE_FLAG_SIGNALED_BIT, before enable_signaling was called.
65  * Adding a check for DMA_FENCE_FLAG_SIGNALED_BIT after setting
66  * DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT closes this race, and makes sure that
67  * after dma_fence_signal was called, any enable_signaling call will have either
68  * been completed, or never called at all.
69  */
70 struct dma_fence {
71 	union {
72 		spinlock_t *extern_lock;
73 		spinlock_t inline_lock;
74 	};
75 	const struct dma_fence_ops __rcu *ops;
76 	/*
77 	 * We clear the callback list on kref_put so that by the time we
78 	 * release the fence it is unused. No one should be adding to the
79 	 * cb_list that they don't themselves hold a reference for.
80 	 *
81 	 * The lifetime of the timestamp is similarly tied to both the
82 	 * rcu freelist and the cb_list. The timestamp is only set upon
83 	 * signaling while simultaneously notifying the cb_list. Ergo, we
84 	 * only use either the cb_list of timestamp. Upon destruction,
85 	 * neither are accessible, and so we can use the rcu. This means
86 	 * that the cb_list is *only* valid until the signal bit is set,
87 	 * and to read either you *must* hold a reference to the fence,
88 	 * and not just the rcu_read_lock.
89 	 *
90 	 * Listed in chronological order.
91 	 */
92 	union {
93 		struct list_head cb_list;
94 		/* @cb_list replaced by @timestamp on dma_fence_signal() */
95 		ktime_t timestamp;
96 		/* @timestamp replaced by @rcu on dma_fence_release() */
97 		struct rcu_head rcu;
98 	};
99 	u64 context;
100 	u64 seqno;
101 	unsigned long flags;
102 	struct kref refcount;
103 	int error;
104 };
105 
106 enum dma_fence_flag_bits {
107 	DMA_FENCE_FLAG_INITIALIZED_BIT,
108 	DMA_FENCE_FLAG_INLINE_LOCK_BIT,
109 	DMA_FENCE_FLAG_SEQNO64_BIT,
110 	DMA_FENCE_FLAG_SIGNALED_BIT,
111 	DMA_FENCE_FLAG_TIMESTAMP_BIT,
112 	DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT,
113 	DMA_FENCE_FLAG_USER_BITS, /* must always be last member */
114 };
115 
116 typedef void (*dma_fence_func_t)(struct dma_fence *fence,
117 				 struct dma_fence_cb *cb);
118 
119 /**
120  * struct dma_fence_cb - callback for dma_fence_add_callback()
121  * @node: used by dma_fence_add_callback() to append this struct to fence::cb_list
122  * @func: dma_fence_func_t to call
123  *
124  * This struct will be initialized by dma_fence_add_callback(), additional
125  * data can be passed along by embedding dma_fence_cb in another struct.
126  */
127 struct dma_fence_cb {
128 	struct list_head node;
129 	dma_fence_func_t func;
130 };
131 
132 /**
133  * struct dma_fence_ops - operations implemented for fence
134  *
135  */
136 struct dma_fence_ops {
137 	/**
138 	 * @get_driver_name:
139 	 *
140 	 * Returns the driver name. This is a callback to allow drivers to
141 	 * compute the name at runtime, without having it to store permanently
142 	 * for each fence, or build a cache of some sort.
143 	 *
144 	 * The returned string is RCU protected and can be freed after the fence
145 	 * signaled and a RCU grace period passed.
146 	 *
147 	 * This callback is mandatory.
148 	 */
149 	const char * (*get_driver_name)(struct dma_fence *fence);
150 
151 	/**
152 	 * @get_timeline_name:
153 	 *
154 	 * Return the name of the context this fence belongs to. This is a
155 	 * callback to allow drivers to compute the name at runtime, without
156 	 * having it to store permanently for each fence, or build a cache of
157 	 * some sort.
158 	 *
159 	 * The returned string is RCU protected and can be freed after the fence
160 	 * signaled and a RCU grace period passed.
161 	 *
162 	 * This callback is mandatory.
163 	 */
164 	const char * (*get_timeline_name)(struct dma_fence *fence);
165 
166 	/**
167 	 * @enable_signaling:
168 	 *
169 	 * Enable software signaling of fence.
170 	 *
171 	 * For fence implementations that have the capability for hw->hw
172 	 * signaling, they can implement this op to enable the necessary
173 	 * interrupts, or insert commands into cmdstream, etc, to avoid these
174 	 * costly operations for the common case where only hw->hw
175 	 * synchronization is required.  This is called in the first
176 	 * dma_fence_wait() or dma_fence_add_callback() path to let the fence
177 	 * implementation know that there is another driver waiting on the
178 	 * signal (ie. hw->sw case).
179 	 *
180 	 * This is called with irq's disabled, so only spinlocks which disable
181 	 * IRQ's can be used in the code outside of this callback.
182 	 *
183 	 * A return value of false indicates the fence already passed,
184 	 * or some failure occurred that made it impossible to enable
185 	 * signaling. True indicates successful enabling.
186 	 *
187 	 * &dma_fence.error may be set in enable_signaling, but only when false
188 	 * is returned.
189 	 *
190 	 * Since many implementations can call dma_fence_signal() even when before
191 	 * @enable_signaling has been called there's a race window, where the
192 	 * dma_fence_signal() might result in the final fence reference being
193 	 * released and its memory freed. To avoid this, implementations of this
194 	 * callback should grab their own reference using dma_fence_get(), to be
195 	 * released when the fence is signalled (through e.g. the interrupt
196 	 * handler).
197 	 *
198 	 * This callback is optional. If this callback is not present, then the
199 	 * driver must always have signaling enabled.
200 	 */
201 	bool (*enable_signaling)(struct dma_fence *fence);
202 
203 	/**
204 	 * @signaled:
205 	 *
206 	 * Peek whether the fence is signaled, as a fastpath optimization for
207 	 * e.g. dma_fence_wait() or dma_fence_add_callback(). Note that this
208 	 * callback does not need to make any guarantees beyond that a fence
209 	 * once indicates as signalled must always return true from this
210 	 * callback. This callback may return false even if the fence has
211 	 * completed already, in this case information hasn't propogated throug
212 	 * the system yet. See also dma_fence_is_signaled().
213 	 *
214 	 * May set &dma_fence.error if returning true.
215 	 *
216 	 * This callback is optional.
217 	 */
218 	bool (*signaled)(struct dma_fence *fence);
219 
220 	/**
221 	 * @wait:
222 	 *
223 	 * Custom wait implementation, defaults to dma_fence_default_wait() if
224 	 * not set.
225 	 *
226 	 * Deprecated and should not be used by new implementations. Only used
227 	 * by existing implementations which need special handling for their
228 	 * hardware reset procedure.
229 	 *
230 	 * Must return -ERESTARTSYS if the wait is intr = true and the wait was
231 	 * interrupted, and remaining jiffies if fence has signaled, or 0 if wait
232 	 * timed out. Can also return other error values on custom implementations,
233 	 * which should be treated as if the fence is signaled. For example a hardware
234 	 * lockup could be reported like that.
235 	 *
236 	 * Implementing this callback prevents the fence from detaching after
237 	 * signaling and so it is necessary for the module providing the
238 	 * dma_fence_ops to stay loaded as long as the dma_fence exists.
239 	 */
240 	signed long (*wait)(struct dma_fence *fence,
241 			    bool intr, signed long timeout);
242 
243 	/**
244 	 * @release:
245 	 *
246 	 * Called on destruction of fence to release additional resources.
247 	 * Can be called from irq context.  This callback is optional. If it is
248 	 * NULL, then dma_fence_free() is instead called as the default
249 	 * implementation.
250 	 *
251 	 * Implementing this callback prevents the fence from detaching after
252 	 * signaling and so it is necessary for the module providing the
253 	 * dma_fence_ops to stay loaded as long as the dma_fence exists.
254 	 *
255 	 * If the callback is implemented the memory backing the dma_fence
256 	 * object must be freed RCU safe.
257 	 */
258 	void (*release)(struct dma_fence *fence);
259 
260 	/**
261 	 * @set_deadline:
262 	 *
263 	 * Callback to allow a fence waiter to inform the fence signaler of
264 	 * an upcoming deadline, such as vblank, by which point the waiter
265 	 * would prefer the fence to be signaled by.  This is intended to
266 	 * give feedback to the fence signaler to aid in power management
267 	 * decisions, such as boosting GPU frequency.
268 	 *
269 	 * This is called without &dma_fence.lock held, it can be called
270 	 * multiple times and from any context.  Locking is up to the callee
271 	 * if it has some state to manage.  If multiple deadlines are set,
272 	 * the expectation is to track the soonest one.  If the deadline is
273 	 * before the current time, it should be interpreted as an immediate
274 	 * deadline.
275 	 *
276 	 * This callback is optional.
277 	 */
278 	void (*set_deadline)(struct dma_fence *fence, ktime_t deadline);
279 };
280 
281 void dma_fence_init(struct dma_fence *fence, const struct dma_fence_ops *ops,
282 		    spinlock_t *lock, u64 context, u64 seqno);
283 
284 void dma_fence_init64(struct dma_fence *fence, const struct dma_fence_ops *ops,
285 		      spinlock_t *lock, u64 context, u64 seqno);
286 
287 void dma_fence_release(struct kref *kref);
288 void dma_fence_free(struct dma_fence *fence);
289 void dma_fence_describe(struct dma_fence *fence, struct seq_file *seq);
290 
291 /**
292  * dma_fence_was_initialized - test if fence was initialized
293  * @fence: fence to test
294  *
295  * Return: True if fence was ever initialized, false otherwise. Works correctly
296  * only when memory backing the fence structure is zero initialized on
297  * allocation.
298  */
dma_fence_was_initialized(struct dma_fence * fence)299 static inline bool dma_fence_was_initialized(struct dma_fence *fence)
300 {
301 	return fence && test_bit(DMA_FENCE_FLAG_INITIALIZED_BIT, &fence->flags);
302 }
303 
304 /**
305  * dma_fence_put - decreases refcount of the fence
306  * @fence: fence to reduce refcount of
307  */
dma_fence_put(struct dma_fence * fence)308 static inline void dma_fence_put(struct dma_fence *fence)
309 {
310 	if (fence)
311 		kref_put(&fence->refcount, dma_fence_release);
312 }
313 
314 /**
315  * dma_fence_get - increases refcount of the fence
316  * @fence: fence to increase refcount of
317  *
318  * Returns the same fence, with refcount increased by 1.
319  */
dma_fence_get(struct dma_fence * fence)320 static inline struct dma_fence *dma_fence_get(struct dma_fence *fence)
321 {
322 	if (fence)
323 		kref_get(&fence->refcount);
324 	return fence;
325 }
326 
327 /**
328  * dma_fence_get_rcu - get a fence from a dma_resv_list with
329  *                     rcu read lock
330  * @fence: fence to increase refcount of
331  *
332  * Function returns NULL if no refcount could be obtained, or the fence.
333  */
dma_fence_get_rcu(struct dma_fence * fence)334 static inline struct dma_fence *dma_fence_get_rcu(struct dma_fence *fence)
335 {
336 	if (kref_get_unless_zero(&fence->refcount))
337 		return fence;
338 	else
339 		return NULL;
340 }
341 
342 /**
343  * dma_fence_get_rcu_safe  - acquire a reference to an RCU tracked fence
344  * @fencep: pointer to fence to increase refcount of
345  *
346  * Function returns NULL if no refcount could be obtained, or the fence.
347  * This function handles acquiring a reference to a fence that may be
348  * reallocated within the RCU grace period (such as with SLAB_TYPESAFE_BY_RCU),
349  * so long as the caller is using RCU on the pointer to the fence.
350  *
351  * An alternative mechanism is to employ a seqlock to protect a bunch of
352  * fences, such as used by struct dma_resv. When using a seqlock,
353  * the seqlock must be taken before and checked after a reference to the
354  * fence is acquired (as shown here).
355  *
356  * The caller is required to hold the RCU read lock.
357  */
358 static inline struct dma_fence *
dma_fence_get_rcu_safe(struct dma_fence __rcu ** fencep)359 dma_fence_get_rcu_safe(struct dma_fence __rcu **fencep)
360 {
361 	do {
362 		struct dma_fence *fence;
363 
364 		fence = rcu_dereference(*fencep);
365 		if (!fence)
366 			return NULL;
367 
368 		if (!dma_fence_get_rcu(fence))
369 			continue;
370 
371 		/* The atomic_inc_not_zero() inside dma_fence_get_rcu()
372 		 * provides a full memory barrier upon success (such as now).
373 		 * This is paired with the write barrier from assigning
374 		 * to the __rcu protected fence pointer so that if that
375 		 * pointer still matches the current fence, we know we
376 		 * have successfully acquire a reference to it. If it no
377 		 * longer matches, we are holding a reference to some other
378 		 * reallocated pointer. This is possible if the allocator
379 		 * is using a freelist like SLAB_TYPESAFE_BY_RCU where the
380 		 * fence remains valid for the RCU grace period, but it
381 		 * may be reallocated. When using such allocators, we are
382 		 * responsible for ensuring the reference we get is to
383 		 * the right fence, as below.
384 		 */
385 		if (fence == rcu_access_pointer(*fencep))
386 			return rcu_pointer_handoff(fence);
387 
388 		dma_fence_put(fence);
389 	} while (1);
390 }
391 
392 /**
393  * dma_fence_spinlock - return pointer to the spinlock protecting the fence
394  * @fence: the fence to get the lock from
395  *
396  * Return either the pointer to the embedded or the external spin lock.
397  */
dma_fence_spinlock(struct dma_fence * fence)398 static inline spinlock_t *dma_fence_spinlock(struct dma_fence *fence)
399 {
400 	return test_bit(DMA_FENCE_FLAG_INLINE_LOCK_BIT, &fence->flags) ?
401 		&fence->inline_lock : fence->extern_lock;
402 }
403 
404 /**
405  * dma_fence_lock_irqsave - irqsave lock the fence
406  * @fence: the fence to lock
407  * @flags: where to store the CPU flags.
408  *
409  * Lock the fence, preventing it from changing to the signaled state.
410  */
411 #define dma_fence_lock_irqsave(fence, flags)	\
412 	spin_lock_irqsave(dma_fence_spinlock(fence), flags)
413 
414 /**
415  * dma_fence_unlock_irqrestore - unlock the fence and irqrestore
416  * @fence: the fence to unlock
417  * @flags: the CPU flags to restore
418  *
419  * Unlock the fence, allowing it to change its state to signaled again.
420  */
421 #define dma_fence_unlock_irqrestore(fence, flags)	\
422 	spin_unlock_irqrestore(dma_fence_spinlock(fence), flags)
423 
424 /**
425  * dma_fence_assert_held - lockdep assertion that fence is locked
426  * @fence: the fence which should be locked
427  */
428 #define dma_fence_assert_held(fence)	\
429 	lockdep_assert_held(dma_fence_spinlock(fence));
430 
431 #ifdef CONFIG_LOCKDEP
432 bool dma_fence_begin_signalling(void);
433 void dma_fence_end_signalling(bool cookie);
434 void __dma_fence_might_wait(void);
435 #else
dma_fence_begin_signalling(void)436 static inline bool dma_fence_begin_signalling(void)
437 {
438 	return true;
439 }
dma_fence_end_signalling(bool cookie)440 static inline void dma_fence_end_signalling(bool cookie) {}
__dma_fence_might_wait(void)441 static inline void __dma_fence_might_wait(void) {}
442 #endif
443 
444 void dma_fence_signal(struct dma_fence *fence);
445 bool dma_fence_check_and_signal(struct dma_fence *fence);
446 bool dma_fence_check_and_signal_locked(struct dma_fence *fence);
447 void dma_fence_signal_locked(struct dma_fence *fence);
448 void dma_fence_signal_timestamp(struct dma_fence *fence, ktime_t timestamp);
449 void dma_fence_signal_timestamp_locked(struct dma_fence *fence, ktime_t timestamp);
450 signed long dma_fence_default_wait(struct dma_fence *fence,
451 				   bool intr, signed long timeout);
452 int dma_fence_add_callback(struct dma_fence *fence,
453 			   struct dma_fence_cb *cb,
454 			   dma_fence_func_t func);
455 bool dma_fence_remove_callback(struct dma_fence *fence,
456 			       struct dma_fence_cb *cb);
457 void dma_fence_enable_signaling(struct dma_fence *fence);
458 
459 /**
460  * DOC: Safe external access to driver provided object members
461  *
462  * All data not stored directly in the dma-fence object, such as the
463  * &dma_fence.lock and memory potentially accessed by functions in the
464  * &dma_fence.ops table, MUST NOT be accessed after the fence has been signalled
465  * because after that point drivers are allowed to free it.
466  *
467  * All code accessing that data via the dma-fence API (or directly, which is
468  * discouraged), MUST make sure to contain the complete access within a
469  * &rcu_read_lock and &rcu_read_unlock pair.
470  *
471  * Some dma-fence API handles this automatically, while other, as for example
472  * &dma_fence_driver_name and &dma_fence_timeline_name, leave that
473  * responsibility to the caller.
474  *
475  * To enable this scheme to work drivers MUST ensure a RCU grace period elapses
476  * between signalling the fence and freeing the said data.
477  *
478  */
479 const char __rcu *dma_fence_driver_name(struct dma_fence *fence);
480 const char __rcu *dma_fence_timeline_name(struct dma_fence *fence);
481 
482 /*
483  * dma_fence_test_signaled_flag - Only check whether a fence is signaled yet.
484  * @fence: the fence to check
485  *
486  * This function just checks whether @fence is signaled, without interacting
487  * with the fence in any way. The user must, therefore, ensure through other
488  * means that fences get signaled eventually.
489  *
490  * This function uses test_bit(), which is thread-safe. Naturally, this function
491  * should be used opportunistically; a fence could get signaled at any moment
492  * after the check is done.
493  *
494  * Return: true if signaled, false otherwise.
495  */
496 static inline bool
dma_fence_test_signaled_flag(struct dma_fence * fence)497 dma_fence_test_signaled_flag(struct dma_fence *fence)
498 {
499 	return test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags);
500 }
501 
502 /**
503  * dma_fence_is_signaled_locked - Return an indication if the fence
504  *                                is signaled yet.
505  * @fence: the fence to check
506  *
507  * Returns true if the fence was already signaled, false if not. Since this
508  * function doesn't enable signaling, it is not guaranteed to ever return
509  * true if dma_fence_add_callback(), dma_fence_wait() or
510  * dma_fence_enable_sw_signaling() haven't been called before.
511  *
512  * This function requires &dma_fence.lock to be held.
513  *
514  * See also dma_fence_is_signaled().
515  */
516 static inline bool
dma_fence_is_signaled_locked(struct dma_fence * fence)517 dma_fence_is_signaled_locked(struct dma_fence *fence)
518 {
519 	const struct dma_fence_ops *ops;
520 
521 	if (dma_fence_test_signaled_flag(fence))
522 		return true;
523 
524 	rcu_read_lock();
525 	ops = rcu_dereference(fence->ops);
526 	if (ops && ops->signaled && ops->signaled(fence)) {
527 		rcu_read_unlock();
528 		dma_fence_signal_locked(fence);
529 		return true;
530 	}
531 	rcu_read_unlock();
532 
533 	return false;
534 }
535 
536 /**
537  * dma_fence_is_signaled - Return an indication if the fence is signaled yet.
538  * @fence: the fence to check
539  *
540  * Returns true if the fence was already signaled, false if not. Since this
541  * function doesn't enable signaling, it is not guaranteed to ever return
542  * true if dma_fence_add_callback(), dma_fence_wait() or
543  * dma_fence_enable_signaling() haven't been called before.
544  *
545  * It's recommended for seqno fences to call dma_fence_signal when the
546  * operation is complete, it makes it possible to prevent issues from
547  * wraparound between time of issue and time of use by checking the return
548  * value of this function before calling hardware-specific wait instructions.
549  *
550  * See also dma_fence_is_signaled_locked().
551  */
552 static inline bool
dma_fence_is_signaled(struct dma_fence * fence)553 dma_fence_is_signaled(struct dma_fence *fence)
554 {
555 	const struct dma_fence_ops *ops;
556 
557 	if (dma_fence_test_signaled_flag(fence))
558 		return true;
559 
560 	rcu_read_lock();
561 	ops = rcu_dereference(fence->ops);
562 	if (ops && ops->signaled && ops->signaled(fence)) {
563 		rcu_read_unlock();
564 		dma_fence_signal(fence);
565 		return true;
566 	}
567 	rcu_read_unlock();
568 
569 	return false;
570 }
571 
572 /**
573  * __dma_fence_is_later - return if f1 is chronologically later than f2
574  * @fence: fence in whose context to do the comparison
575  * @f1: the first fence's seqno
576  * @f2: the second fence's seqno from the same context
577  *
578  * Returns true if f1 is chronologically later than f2. Both fences must be
579  * from the same context, since a seqno is not common across contexts.
580  */
__dma_fence_is_later(struct dma_fence * fence,u64 f1,u64 f2)581 static inline bool __dma_fence_is_later(struct dma_fence *fence, u64 f1, u64 f2)
582 {
583 	/* This is for backward compatibility with drivers which can only handle
584 	 * 32bit sequence numbers. Use a 64bit compare when the driver says to
585 	 * do so.
586 	 */
587 	if (test_bit(DMA_FENCE_FLAG_SEQNO64_BIT, &fence->flags))
588 		return f1 > f2;
589 
590 	return (int)(lower_32_bits(f1) - lower_32_bits(f2)) > 0;
591 }
592 
593 /**
594  * dma_fence_is_later - return if f1 is chronologically later than f2
595  * @f1: the first fence from the same context
596  * @f2: the second fence from the same context
597  *
598  * Returns true if f1 is chronologically later than f2. Both fences must be
599  * from the same context, since a seqno is not re-used across contexts.
600  */
dma_fence_is_later(struct dma_fence * f1,struct dma_fence * f2)601 static inline bool dma_fence_is_later(struct dma_fence *f1,
602 				      struct dma_fence *f2)
603 {
604 	if (WARN_ON(f1->context != f2->context))
605 		return false;
606 
607 	return __dma_fence_is_later(f1, f1->seqno, f2->seqno);
608 }
609 
610 /**
611  * dma_fence_is_later_or_same - return true if f1 is later or same as f2
612  * @f1: the first fence from the same context
613  * @f2: the second fence from the same context
614  *
615  * Returns true if f1 is chronologically later than f2 or the same fence. Both
616  * fences must be from the same context, since a seqno is not re-used across
617  * contexts.
618  */
dma_fence_is_later_or_same(struct dma_fence * f1,struct dma_fence * f2)619 static inline bool dma_fence_is_later_or_same(struct dma_fence *f1,
620 					      struct dma_fence *f2)
621 {
622 	return f1 == f2 || dma_fence_is_later(f1, f2);
623 }
624 
625 /**
626  * dma_fence_later - return the chronologically later fence
627  * @f1:	the first fence from the same context
628  * @f2:	the second fence from the same context
629  *
630  * Returns NULL if both fences are signaled, otherwise the fence that would be
631  * signaled last. Both fences must be from the same context, since a seqno is
632  * not re-used across contexts.
633  */
dma_fence_later(struct dma_fence * f1,struct dma_fence * f2)634 static inline struct dma_fence *dma_fence_later(struct dma_fence *f1,
635 						struct dma_fence *f2)
636 {
637 	if (WARN_ON(f1->context != f2->context))
638 		return NULL;
639 
640 	/*
641 	 * Can't check just DMA_FENCE_FLAG_SIGNALED_BIT here, it may never
642 	 * have been set if enable_signaling wasn't called, and enabling that
643 	 * here is overkill.
644 	 */
645 	if (dma_fence_is_later(f1, f2))
646 		return dma_fence_is_signaled(f1) ? NULL : f1;
647 	else
648 		return dma_fence_is_signaled(f2) ? NULL : f2;
649 }
650 
651 /**
652  * dma_fence_get_status_locked - returns the status upon completion
653  * @fence: the dma_fence to query
654  *
655  * Drivers can supply an optional error status condition before they signal
656  * the fence (to indicate whether the fence was completed due to an error
657  * rather than success). The value of the status condition is only valid
658  * if the fence has been signaled, dma_fence_get_status_locked() first checks
659  * the signal state before reporting the error status.
660  *
661  * Returns 0 if the fence has not yet been signaled, 1 if the fence has
662  * been signaled without an error condition, or a negative error code
663  * if the fence has been completed in err.
664  */
dma_fence_get_status_locked(struct dma_fence * fence)665 static inline int dma_fence_get_status_locked(struct dma_fence *fence)
666 {
667 	if (dma_fence_is_signaled_locked(fence))
668 		return fence->error ?: 1;
669 	else
670 		return 0;
671 }
672 
673 int dma_fence_get_status(struct dma_fence *fence);
674 
675 /**
676  * dma_fence_set_error - flag an error condition on the fence
677  * @fence: the dma_fence
678  * @error: the error to store
679  *
680  * Drivers can supply an optional error status condition before they signal
681  * the fence, to indicate that the fence was completed due to an error
682  * rather than success. This must be set before signaling (so that the value
683  * is visible before any waiters on the signal callback are woken). This
684  * helper exists to help catching erroneous setting of #dma_fence.error.
685  *
686  * Examples of error codes which drivers should use:
687  *
688  * * %-ENODATA	 This operation produced no data, no other operation affected.
689  * * %-ECANCELED All operations from the same context have been canceled.
690  * * %-ETIME	 Operation caused a timeout and potentially device reset.
691  */
dma_fence_set_error(struct dma_fence * fence,int error)692 static inline void dma_fence_set_error(struct dma_fence *fence,
693 				       int error)
694 {
695 	WARN_ON(test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags));
696 	WARN_ON(error >= 0 || error < -MAX_ERRNO);
697 
698 	fence->error = error;
699 }
700 
701 /**
702  * dma_fence_timestamp - helper to get the completion timestamp of a fence
703  * @fence: fence to get the timestamp from.
704  *
705  * After a fence is signaled the timestamp is updated with the signaling time,
706  * but setting the timestamp can race with tasks waiting for the signaling. This
707  * helper busy waits for the correct timestamp to appear.
708  */
dma_fence_timestamp(struct dma_fence * fence)709 static inline ktime_t dma_fence_timestamp(struct dma_fence *fence)
710 {
711 	if (WARN_ON(!test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)))
712 		return ktime_get();
713 
714 	while (!test_bit(DMA_FENCE_FLAG_TIMESTAMP_BIT, &fence->flags))
715 		cpu_relax();
716 
717 	return fence->timestamp;
718 }
719 
720 signed long dma_fence_wait_timeout(struct dma_fence *,
721 				   bool intr, signed long timeout);
722 signed long dma_fence_wait_any_timeout(struct dma_fence **fences,
723 				       uint32_t count,
724 				       bool intr, signed long timeout,
725 				       uint32_t *idx);
726 
727 /**
728  * dma_fence_wait - sleep until the fence gets signaled
729  * @fence: the fence to wait on
730  * @intr: if true, do an interruptible wait
731  *
732  * This function will return -ERESTARTSYS if interrupted by a signal,
733  * or 0 if the fence was signaled. Other error values may be
734  * returned on custom implementations.
735  *
736  * Performs a synchronous wait on this fence. It is assumed the caller
737  * directly or indirectly holds a reference to the fence, otherwise the
738  * fence might be freed before return, resulting in undefined behavior.
739  *
740  * See also dma_fence_wait_timeout() and dma_fence_wait_any_timeout().
741  */
dma_fence_wait(struct dma_fence * fence,bool intr)742 static inline signed long dma_fence_wait(struct dma_fence *fence, bool intr)
743 {
744 	signed long ret;
745 
746 	/* Since dma_fence_wait_timeout cannot timeout with
747 	 * MAX_SCHEDULE_TIMEOUT, only valid return values are
748 	 * -ERESTARTSYS and MAX_SCHEDULE_TIMEOUT.
749 	 */
750 	ret = dma_fence_wait_timeout(fence, intr, MAX_SCHEDULE_TIMEOUT);
751 
752 	return ret < 0 ? ret : 0;
753 }
754 
755 void dma_fence_set_deadline(struct dma_fence *fence, ktime_t deadline);
756 
757 struct dma_fence *dma_fence_get_stub(void);
758 struct dma_fence *dma_fence_allocate_private_stub(ktime_t timestamp);
759 u64 dma_fence_context_alloc(unsigned num);
760 
761 extern const struct dma_fence_ops dma_fence_array_ops;
762 extern const struct dma_fence_ops dma_fence_chain_ops;
763 
764 /**
765  * dma_fence_is_array - check if a fence is from the array subclass
766  * @fence: the fence to test
767  *
768  * Return true if it is a dma_fence_array and false otherwise.
769  */
dma_fence_is_array(struct dma_fence * fence)770 static inline bool dma_fence_is_array(struct dma_fence *fence)
771 {
772 	return rcu_access_pointer(fence->ops) == &dma_fence_array_ops;
773 }
774 
775 /**
776  * dma_fence_is_chain - check if a fence is from the chain subclass
777  * @fence: the fence to test
778  *
779  * Return true if it is a dma_fence_chain and false otherwise.
780  */
dma_fence_is_chain(struct dma_fence * fence)781 static inline bool dma_fence_is_chain(struct dma_fence *fence)
782 {
783 	return rcu_access_pointer(fence->ops) == &dma_fence_chain_ops;
784 }
785 
786 /**
787  * dma_fence_is_container - check if a fence is a container for other fences
788  * @fence: the fence to test
789  *
790  * Return true if this fence is a container for other fences, false otherwise.
791  * This is important since we can't build up large fence structure or otherwise
792  * we run into recursion during operation on those fences.
793  */
dma_fence_is_container(struct dma_fence * fence)794 static inline bool dma_fence_is_container(struct dma_fence *fence)
795 {
796 	return dma_fence_is_array(fence) || dma_fence_is_chain(fence);
797 }
798 
799 #endif /* __LINUX_DMA_FENCE_H */
800