There is already a list of requests outstanding for a given client. Keeping a count is easy, and will give some information necessary to enable a more fair throttling scheme.
For now a client is uniquely identified by its file descriptor, however this may change in the future with new process APIs. Signed-off-by: Ben Widawsky <b...@bwidawsk.net> --- drivers/gpu/drm/i915/i915_drv.h | 1 + drivers/gpu/drm/i915/i915_gem.c | 8 ++++++++ 2 files changed, 9 insertions(+), 0 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 06a37f4..a251d22 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -919,6 +919,7 @@ struct drm_i915_file_private { struct { struct spinlock lock; struct list_head request_list; + atomic_t outstanding_requests; } mm; }; diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 6651c36..20d8a41 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -1678,6 +1678,7 @@ i915_add_request(struct intel_ring_buffer *ring, request->file_priv = file_priv; list_add_tail(&request->client_list, &file_priv->mm.request_list); + atomic_inc(&file_priv->mm.outstanding_requests); spin_unlock(&file_priv->mm.lock); } @@ -1706,6 +1707,10 @@ i915_gem_request_remove_from_client(struct drm_i915_gem_request *request) spin_lock(&file_priv->mm.lock); if (request->file_priv) { + atomic_dec(&file_priv->mm.outstanding_requests); + if (WARN_ON(atomic_read(&file_priv->mm.outstanding_requests) < 0)) { + atomic_set(&file_priv->mm.outstanding_requests, 0); + } list_del(&request->client_list); request->file_priv = NULL; } @@ -4119,6 +4124,9 @@ void i915_gem_release(struct drm_device *dev, struct drm_file *file) struct drm_i915_gem_request, client_list); list_del(&request->client_list); + atomic_dec(&file_priv->mm.outstanding_requests); + if (WARN_ON(atomic_read(&file_priv->mm.outstanding_requests))) + atomic_set(&file_priv->mm.outstanding_requests, 0); request->file_priv = NULL; } spin_unlock(&file_priv->mm.lock); -- 1.7.7.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx