diff options
Diffstat (limited to 'drivers/gpu/drm/i915/i915_request.h')
| -rw-r--r-- | drivers/gpu/drm/i915/i915_request.h | 49 | 
1 files changed, 7 insertions, 42 deletions
diff --git a/drivers/gpu/drm/i915/i915_request.h b/drivers/gpu/drm/i915/i915_request.h index 7d6eb82eeb91..eddbd4245cb3 100644 --- a/drivers/gpu/drm/i915/i915_request.h +++ b/drivers/gpu/drm/i915/i915_request.h @@ -28,13 +28,16 @@  #include <linux/dma-fence.h>  #include "i915_gem.h" +#include "i915_scheduler.h"  #include "i915_sw_fence.h" +#include "i915_scheduler.h"  #include <uapi/drm/i915_drm.h>  struct drm_file;  struct drm_i915_gem_object;  struct i915_request; +struct i915_timeline;  struct intel_wait {  	struct rb_node node; @@ -48,44 +51,6 @@ struct intel_signal_node {  	struct list_head link;  }; -struct i915_dependency { -	struct i915_priotree *signaler; -	struct list_head signal_link; -	struct list_head wait_link; -	struct list_head dfs_link; -	unsigned long flags; -#define I915_DEPENDENCY_ALLOC BIT(0) -}; - -/* - * "People assume that time is a strict progression of cause to effect, but - * actually, from a nonlinear, non-subjective viewpoint, it's more like a big - * ball of wibbly-wobbly, timey-wimey ... stuff." -The Doctor, 2015 - * - * Requests exist in a complex web of interdependencies. Each request - * has to wait for some other request to complete before it is ready to be run - * (e.g. we have to wait until the pixels have been rendering into a texture - * before we can copy from it). We track the readiness of a request in terms - * of fences, but we also need to keep the dependency tree for the lifetime - * of the request (beyond the life of an individual fence). We use the tree - * at various points to reorder the requests whilst keeping the requests - * in order with respect to their various dependencies. - */ -struct i915_priotree { -	struct list_head signalers_list; /* those before us, we depend upon */ -	struct list_head waiters_list; /* those after us, they depend upon us */ -	struct list_head link; -	int priority; -}; - -enum { -	I915_PRIORITY_MIN = I915_CONTEXT_MIN_USER_PRIORITY - 1, -	I915_PRIORITY_NORMAL = I915_CONTEXT_DEFAULT_PRIORITY, -	I915_PRIORITY_MAX = I915_CONTEXT_MAX_USER_PRIORITY + 1, - -	I915_PRIORITY_INVALID = INT_MIN -}; -  struct i915_capture_list {  	struct i915_capture_list *next;  	struct i915_vma *vma; @@ -131,7 +96,7 @@ struct i915_request {  	struct i915_gem_context *ctx;  	struct intel_engine_cs *engine;  	struct intel_ring *ring; -	struct intel_timeline *timeline; +	struct i915_timeline *timeline;  	struct intel_signal_node signaling;  	/* @@ -154,7 +119,7 @@ struct i915_request {  	 * to retirement), i.e. bidirectional dependency information for the  	 * request not tied to individual fences.  	 */ -	struct i915_priotree priotree; +	struct i915_sched_node sched;  	struct i915_dependency dep;  	/** @@ -343,10 +308,10 @@ static inline bool i915_request_started(const struct i915_request *rq)  				 seqno - 1);  } -static inline bool i915_priotree_signaled(const struct i915_priotree *pt) +static inline bool i915_sched_node_signaled(const struct i915_sched_node *node)  {  	const struct i915_request *rq = -		container_of(pt, const struct i915_request, priotree); +		container_of(node, const struct i915_request, sched);  	return i915_request_completed(rq);  }  | 
