From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ben Widawsky Subject: [PATCH 07/15] drm/i915: Keep track of request counts Date: Fri, 18 Nov 2011 18:24:24 -0800 Message-ID: <1321669472-8045-8-git-send-email-ben@bwidawsk.net> References: <1321669472-8045-1-git-send-email-ben@bwidawsk.net> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from cloud01.chad-versace.us (184-106-247-128.static.cloud-ips.com [184.106.247.128]) by gabe.freedesktop.org (Postfix) with ESMTP id 0D9CAA0282 for ; Fri, 18 Nov 2011 18:24:57 -0800 (PST) In-Reply-To: <1321669472-8045-1-git-send-email-ben@bwidawsk.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org Errors-To: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org To: intel-gfx@lists.freedesktop.org Cc: Ben Widawsky List-Id: intel-gfx@lists.freedesktop.org There is already a list of requests outstanding for a given client. Keeping a count is easy, and will give a quick way to determine when a particular client has gotten too greedy. For now a client is uniquely identified by its file descriptor. This is a limitation in the design which is acceptable for now. Signed-off-by: Ben Widawsky --- drivers/gpu/drm/i915/i915_dma.c | 1 + drivers/gpu/drm/i915/i915_drv.h | 1 + drivers/gpu/drm/i915/i915_gem.c | 10 ++++++++++ 3 files changed, 12 insertions(+), 0 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c index 697db7b..d1c9a6f 100644 --- a/drivers/gpu/drm/i915/i915_dma.c +++ b/drivers/gpu/drm/i915/i915_dma.c @@ -2205,6 +2205,7 @@ int i915_driver_open(struct drm_device *dev, struct drm_file *file) spin_lock_init(&file_priv->lock); INIT_LIST_HEAD(&file_priv->request_list); + file_priv->outstanding_requests = 0; return 0; } diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index b0ce5c8..406279c 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -921,6 +921,7 @@ struct drm_i915_file_private { struct spinlock lock; struct list_head request_list; + int outstanding_requests; }; #define INTEL_INFO(dev) (((struct drm_i915_private *) (dev)->dev_private)->info) diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index c90c4b4..ee9a77a 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->request_list); + file_priv->outstanding_requests++; spin_unlock(&file_priv->lock); } @@ -1706,6 +1707,10 @@ i915_gem_request_remove_from_client(struct drm_i915_gem_request *request) spin_lock(&file_priv->lock); if (request->file_priv) { + file_priv->outstanding_requests--; + if (WARN_ON(file_priv->outstanding_requests < 0)) { + file_priv->outstanding_requests = 0; + } list_del(&request->client_list); request->file_priv = NULL; } @@ -4139,8 +4144,13 @@ void i915_gem_release(struct drm_device *dev, struct drm_file *file) struct drm_i915_gem_request, client_list); list_del(&request->client_list); + file_priv->outstanding_requests--; request->file_priv = NULL; } + if (file_priv->outstanding_requests != 0) { + DRM_ERROR("Count was %d\n", file_priv->outstanding_requests); + } + file_priv->outstanding_requests = -1; spin_unlock(&file_priv->lock); } -- 1.7.7.3