From patchwork Thu Jul 24 12:28:44 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chris Wilson X-Patchwork-Id: 4617301 Return-Path: X-Original-To: patchwork-intel-gfx@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 3339D9F295 for ; Thu, 24 Jul 2014 12:28:55 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 62597201DC for ; Thu, 24 Jul 2014 12:28:54 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 8D1DC20160 for ; Thu, 24 Jul 2014 12:28:53 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 9BC0F6E6E0; Thu, 24 Jul 2014 05:28:52 -0700 (PDT) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from fireflyinternet.com (mail.fireflyinternet.com [87.106.93.118]) by gabe.freedesktop.org (Postfix) with ESMTP id 491636E6E0 for ; Thu, 24 Jul 2014 05:28:51 -0700 (PDT) X-Default-Received-SPF: pass (skip=forwardok (res=PASS)) x-ip-name=78.156.65.138; Received: from nuc-i3427.intel.com (unverified [78.156.65.138]) by fireflyinternet.com (Firefly Internet (M1)) with ESMTP id 28148803-1500048 for multiple; Thu, 24 Jul 2014 13:29:57 +0100 From: Chris Wilson To: intel-gfx@lists.freedesktop.org Date: Thu, 24 Jul 2014 13:28:44 +0100 Message-Id: <1406204924-7370-1-git-send-email-chris@chris-wilson.co.uk> X-Mailer: git-send-email 1.9.1 X-Originating-IP: 78.156.65.138 X-Country: code=GB country="United Kingdom" ip=78.156.65.138 Cc: Julia Lawall Subject: [Intel-gfx] [PATCH] drm/i915/userptr: Keep spin_lock/unlock in the same block X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.15 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-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Move the code around in order to acquire and release the spinlock in the same function and in the same block. This keeps static analysers happy and the reader sane. Suggested-by: Julia Lawall Signed-off-by: Chris Wilson Cc: Julia Lawall --- drivers/gpu/drm/i915/i915_gem_userptr.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_gem_userptr.c b/drivers/gpu/drm/i915/i915_gem_userptr.c index 12358fd..4ef5a92 100644 --- a/drivers/gpu/drm/i915/i915_gem_userptr.c +++ b/drivers/gpu/drm/i915/i915_gem_userptr.c @@ -96,10 +96,10 @@ static unsigned long cancel_userptr(struct drm_i915_gem_object *obj) return end; } -static void invalidate_range__linear(struct i915_mmu_notifier *mn, - struct mm_struct *mm, - unsigned long start, - unsigned long end) +static void *invalidate_range__linear(struct i915_mmu_notifier *mn, + struct mm_struct *mm, + unsigned long start, + unsigned long end) { struct i915_mmu_object *mo; unsigned long serial; @@ -123,7 +123,7 @@ restart: goto restart; } - spin_unlock(&mn->lock); + return NULL; } static void i915_gem_userptr_mn_invalidate_range_start(struct mmu_notifier *_mn, @@ -138,13 +138,12 @@ static void i915_gem_userptr_mn_invalidate_range_start(struct mmu_notifier *_mn, end--; /* interval ranges are inclusive, but invalidate range is exclusive */ while (next < end) { - struct drm_i915_gem_object *obj; + struct drm_i915_gem_object *obj = NULL; - obj = NULL; spin_lock(&mn->lock); if (mn->has_linear) - return invalidate_range__linear(mn, mm, start, end); - if (serial == mn->serial) + it = invalidate_range__linear(mn, mm, start, end); + else if (serial == mn->serial) it = interval_tree_iter_next(it, next, end); else it = interval_tree_iter_first(&mn->objects, start, end);