From patchwork Wed Nov 9 21:17:56 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chris Wilson X-Patchwork-Id: 9420177 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id EB9D460585 for ; Wed, 9 Nov 2016 21:18:08 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id DEA892933B for ; Wed, 9 Nov 2016 21:18:08 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D3656293E9; Wed, 9 Nov 2016 21:18:08 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.6 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED,RCVD_IN_SORBS_SPAM,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 800B7293D3 for ; Wed, 9 Nov 2016 21:18:07 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E09136E742; Wed, 9 Nov 2016 21:18:06 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-wm0-x243.google.com (mail-wm0-x243.google.com [IPv6:2a00:1450:400c:c09::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id D8D5E6E740 for ; Wed, 9 Nov 2016 21:18:04 +0000 (UTC) Received: by mail-wm0-x243.google.com with SMTP id g23so504449wme.1 for ; Wed, 09 Nov 2016 13:18:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=aijjY8GNqN8zrCexT7jkcH6CkB5c319n86HW/PpgTI0=; b=KNWLlYHilA0zRYYfeKyq2PbRkyZUVOk7IzO0+bKehyzuxIdIDROOVDcR366iojBNQC 5+jFp3t2k36xa6dfIM4WDlcInZcOvYDSgYvMl2mwi8c/I1KTXRDshvlPYM0pywl7eXgT p3vzKk0Jn28bMR9aVpj5K/cjSjGN2PwvZ6jR9y4ZskroMfCDy37Hvk+LT6bvHqqNk1II 4yXSiggrMdixXsz+A5FE/ilhizfSfxjdHpUwW2iOOwSaHeHihAOr2c/aVqhIfXZ8ivoR +xld9TB8PLKJyXWLeT3PUGCUC2YiQaYq9l44OQMencSZnj/s/Hgp2tw5CWy14mdYFvzI WBbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=aijjY8GNqN8zrCexT7jkcH6CkB5c319n86HW/PpgTI0=; b=VUuQ+oXFRxN0wUq746AjgREezdxT87mXqq5kJswkOzW1EZ3P6qylKY4QgGTER8x6NG 7NOuPyYV1mjuvzLThLur34Qt7Pi5x7hpI/SQWrfJRVGM4nt6YO2ndKCu8AG6FySQpj6H ekju0r0m3R1RfS/s0qRsN6ubUxvzdw0T+SC/YfpVzzIo101abtNTCkOdGnXmnku5c0L9 kzrF4ugiemW6A/n+Ng8QMrJQDW6H9VZad4ddh1ZULt738WxyImQriRCgzmdlTv4nQ8Ge aManlCN0pI6KqE/mVtF8nF4FC7eAUcJC/WpEbTBXxDRt8XTcWcqpZayC65RmoF539LCc nOXA== X-Gm-Message-State: ABUngvcFR6gztyPx6lBCByLZqJf/a62xP+m0FfqLOPfzoOtbHNL9OLGdRjEko0MlkZ3mKA== X-Received: by 10.28.152.137 with SMTP id a131mr4260377wme.56.1478726283298; Wed, 09 Nov 2016 13:18:03 -0800 (PST) Received: from haswell.alporthouse.com ([78.156.65.138]) by smtp.gmail.com with ESMTPSA id h2sm1642226wjy.40.2016.11.09.13.18.02 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 09 Nov 2016 13:18:02 -0800 (PST) From: Chris Wilson To: intel-gfx@lists.freedesktop.org Date: Wed, 9 Nov 2016 21:17:56 +0000 Message-Id: <20161109211758.12160-3-chris@chris-wilson.co.uk> X-Mailer: git-send-email 2.10.2 In-Reply-To: <20161109211758.12160-1-chris@chris-wilson.co.uk> References: <20161109211758.12160-1-chris@chris-wilson.co.uk> Subject: [Intel-gfx] [PATCH 3/5] drm/i915: Remove struct_mutex for destroying framebuffers X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" X-Virus-Scanned: ClamAV using ClamSMTP We do not need to hold struct_mutex for destroying drm_i915_gem_objects any longer, and with a little care taken over tracking obj->framebuffer_references, we can relinquish BKL locking around the destroy of intel_framebuffer. Signed-off-by: Chris Wilson --- drivers/gpu/drm/i915/i915_drv.h | 2 +- drivers/gpu/drm/i915/i915_gem_shrinker.c | 2 +- drivers/gpu/drm/i915/i915_gem_tiling.c | 2 +- drivers/gpu/drm/i915/intel_display.c | 10 +++++----- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 30777dee3f9c..1b42fa9145a0 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -2328,7 +2328,7 @@ struct drm_i915_gem_object { struct reservation_object *resv; /** References from framebuffers, locks out tiling changes. */ - unsigned long framebuffer_references; + atomic_t framebuffer_references; /** Record of address bit 17 of each page at last unbind. */ unsigned long *bit_17; diff --git a/drivers/gpu/drm/i915/i915_gem_shrinker.c b/drivers/gpu/drm/i915/i915_gem_shrinker.c index a6fc1bdc48af..3e6eabde1827 100644 --- a/drivers/gpu/drm/i915/i915_gem_shrinker.c +++ b/drivers/gpu/drm/i915/i915_gem_shrinker.c @@ -216,7 +216,7 @@ i915_gem_shrink(struct drm_i915_private *dev_priv, if (!(flags & I915_SHRINK_ACTIVE) && (i915_gem_object_is_active(obj) || - obj->framebuffer_references)) + atomic_read(&obj->framebuffer_references))) continue; if (!can_release_pages(obj)) diff --git a/drivers/gpu/drm/i915/i915_gem_tiling.c b/drivers/gpu/drm/i915/i915_gem_tiling.c index 251d51b01174..07531c350ef2 100644 --- a/drivers/gpu/drm/i915/i915_gem_tiling.c +++ b/drivers/gpu/drm/i915/i915_gem_tiling.c @@ -206,7 +206,7 @@ i915_gem_set_tiling(struct drm_device *dev, void *data, } mutex_lock(&dev->struct_mutex); - if (obj->pin_display || obj->framebuffer_references) { + if (obj->pin_display || atomic_read(&obj->framebuffer_references)) { err = -EBUSY; goto err; } diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 318d0002d2ca..9274386fba31 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -15664,14 +15664,14 @@ static void intel_setup_outputs(struct drm_device *dev) static void intel_user_framebuffer_destroy(struct drm_framebuffer *fb) { - struct drm_device *dev = fb->dev; struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb); drm_framebuffer_cleanup(fb); - mutex_lock(&dev->struct_mutex); - WARN_ON(!intel_fb->obj->framebuffer_references--); + + WARN_ON(atomic_read(&intel_fb->obj->framebuffer_references) == 0); + atomic_dec(&intel_fb->obj->framebuffer_references); i915_gem_object_put(intel_fb->obj); - mutex_unlock(&dev->struct_mutex); + kfree(intel_fb); } @@ -15916,7 +15916,7 @@ static int intel_framebuffer_init(struct drm_device *dev, return ret; } - intel_fb->obj->framebuffer_references++; + atomic_inc(&intel_fb->obj->framebuffer_references); return 0; }