From patchwork Mon Jan 11 11:01:21 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chris Wilson X-Patchwork-Id: 8002161 Return-Path: X-Original-To: patchwork-intel-gfx@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 5925BBEEE5 for ; Mon, 11 Jan 2016 11:03:25 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 7884D20304 for ; Mon, 11 Jan 2016 11:03:24 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 9954020303 for ; Mon, 11 Jan 2016 11:03:22 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 74EDE8933D; Mon, 11 Jan 2016 03:03:21 -0800 (PST) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-wm0-f65.google.com (mail-wm0-f65.google.com [74.125.82.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id A19146E487 for ; Mon, 11 Jan 2016 03:02:30 -0800 (PST) Received: by mail-wm0-f65.google.com with SMTP id u188so25685921wmu.0 for ; Mon, 11 Jan 2016 03:02:30 -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=ClRLv5tn2xouWGWEcSslcVuruKheOi2WhKAbThCAXjw=; b=f8MKhM1TnfL39r2uopPWiGTdCk25sT7xB2JdjHGVXYbsT9JWEMOOsZo7OuS7Km1WbW 8L5SyFU3sh2buFKEeebhqnSLjGAm6KT5Q14ps5VqvizBTb8QGsKV2E7S9N+M8y7ogcVa pXqvI3xaN1zvQ+cJhkiZtgZzELYRCuE3YGHBEfDFmiV2dLrdgm4qbeEMRE5kQAZ4ShDW akptEdoAs8GsnCtA4wRSuXFkuA3GTr3Bpj4oJSob9KjFr6a1BBuHE3AaFMT0snlYge1j MISzr3QCDQSDTz2W3J5H66MpxTWqeU0w2W0IXq/sXz3Vqgq0puwCGdW5rk7WG7TgWiKS JYag== X-Received: by 10.194.79.8 with SMTP id f8mr135167837wjx.6.1452510149384; Mon, 11 Jan 2016 03:02:29 -0800 (PST) Received: from haswell.alporthouse.com ([78.156.65.138]) by smtp.gmail.com with ESMTPSA id 73sm12311579wmm.7.2016.01.11.03.02.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 11 Jan 2016 03:02:28 -0800 (PST) From: Chris Wilson To: intel-gfx@lists.freedesktop.org Date: Mon, 11 Jan 2016 11:01:21 +0000 Message-Id: <1452510091-6833-39-git-send-email-chris@chris-wilson.co.uk> X-Mailer: git-send-email 2.7.0.rc3 In-Reply-To: <1452510091-6833-1-git-send-email-chris@chris-wilson.co.uk> References: <1452503961-14837-1-git-send-email-chris@chris-wilson.co.uk> <1452510091-6833-1-git-send-email-chris@chris-wilson.co.uk> Subject: [Intel-gfx] [PATCH 180/190] drm/i915: Micro-optimise i915_gem_object_get_dirty_page() 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-Spam-Status: No, score=-4.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED,RP_MATCHES_RCVD,T_DKIM_INVALID,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 We can skip the set_page_dirty() calls if we already know that the entire object is dirty. Futhermore, the WARN is redundant (we'll crash shortly afterwards) but adds substantial overhead to the function (roughly increasing the relocation per-page cost by 10%). Fixes regression from commit 033908aed5a596f6202c848c6bbc8a40fb1a8490 Author: Dave Gordon Date: Thu Dec 10 18:51:23 2015 +0000 drm/i915: mark GEM object pages dirty when mapped & written by the CPU Signed-off-by: Chris Wilson --- drivers/gpu/drm/i915/i915_drv.h | 8 +++++--- drivers/gpu/drm/i915/i915_gem.c | 14 +++++--------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 6827e26b5681..2f8b5e7f9320 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -2807,16 +2807,18 @@ int i915_gem_obj_prepare_shmem_write(struct drm_i915_gem_object *obj, int __must_check i915_gem_object_get_pages(struct drm_i915_gem_object *obj); -static inline int __sg_page_count(struct scatterlist *sg) +static inline int __sg_page_count(const struct scatterlist *sg) { return sg->length >> PAGE_SHIFT; } struct page * -i915_gem_object_get_dirty_page(struct drm_i915_gem_object *obj, int n); +i915_gem_object_get_dirty_page(struct drm_i915_gem_object *obj, + unsigned int n); static inline struct page * -i915_gem_object_get_page(struct drm_i915_gem_object *obj, int n) +i915_gem_object_get_page(struct drm_i915_gem_object *obj, + unsigned int n) { if (WARN_ON(n >= obj->base.size >> PAGE_SHIFT)) return NULL; diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index d452499ae5a9..9cd161645041 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -4388,16 +4388,12 @@ void i915_gem_track_fb(struct drm_i915_gem_object *old, /* Like i915_gem_object_get_page(), but mark the returned page dirty */ struct page * -i915_gem_object_get_dirty_page(struct drm_i915_gem_object *obj, int n) +i915_gem_object_get_dirty_page(struct drm_i915_gem_object *obj, + unsigned int n) { - struct page *page; - - /* Only default objects have per-page dirty tracking */ - if (WARN_ON(obj->ops != &i915_gem_object_ops)) - return NULL; - - page = i915_gem_object_get_page(obj, n); - set_page_dirty(page); + struct page *page = i915_gem_object_get_page(obj, n); + if (!i915_gem_object_is_dirty(obj)) + set_page_dirty(page); return page; }