diff options
Diffstat (limited to 'drivers/gpu/drm/i915/i915_scheduler.h')
-rw-r--r-- | drivers/gpu/drm/i915/i915_scheduler.h | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/i915_scheduler.h b/drivers/gpu/drm/i915/i915_scheduler.h index 5c33c83630a7..464c051fede6 100644 --- a/drivers/gpu/drm/i915/i915_scheduler.h +++ b/drivers/gpu/drm/i915/i915_scheduler.h @@ -80,6 +80,36 @@ struct i915_scheduler_node_states { uint32_t queued; }; +struct i915_scheduler_stats { + /* Batch buffer counts: */ + uint32_t queued; + uint32_t submitted; + uint32_t completed; + uint32_t expired; + + /* Other stuff: */ + uint32_t flush_obj; + uint32_t flush_req; + uint32_t flush_stamp; + uint32_t flush_all; + uint32_t flush_bump; + uint32_t flush_submit; + + uint32_t exec_early; + uint32_t exec_again; + uint32_t exec_dead; + uint32_t kill_flying; + uint32_t kill_queued; + + uint32_t file_wait; + uint32_t file_stall; + uint32_t file_lost; +}; + +struct i915_scheduler_stats_nodes { + uint32_t counts[I915_SQS_MAX + 1]; +}; + struct i915_scheduler { struct list_head node_queue[I915_NUM_ENGINES]; uint32_t flags[I915_NUM_ENGINES]; @@ -95,6 +125,9 @@ struct i915_scheduler { int32_t priority_level_preempt; uint32_t min_flying; uint32_t file_queue_max; + + /* Statistics: */ + struct i915_scheduler_stats stats[I915_NUM_ENGINES]; }; /* Flag bits for i915_scheduler::flags */ @@ -117,6 +150,9 @@ int i915_scheduler_flush(struct intel_engine_cs *engine, bool is_locked); int i915_scheduler_flush_stamp(struct intel_engine_cs *engine, unsigned long stamp, bool is_locked); bool i915_scheduler_is_mutex_required(struct drm_i915_gem_request *req); -bool i915_scheduler_file_queue_wait(struct drm_file *file); +int i915_scheduler_query_stats(struct intel_engine_cs *engine, + struct i915_scheduler_stats_nodes *stats); +bool i915_scheduler_file_queue_wait(struct drm_file *file, + struct intel_engine_cs *engine); #endif /* _I915_SCHEDULER_H_ */ |