From mboxrd@z Thu Jan 1 00:00:00 1970 From: jglisse@redhat.com Subject: [PATCH v4 8/9] gpu/drm/i915: optimize out the case when a range is updated to read only Date: Wed, 23 Jan 2019 17:23:14 -0500 Message-ID: <20190123222315.1122-9-jglisse@redhat.com> References: <20190123222315.1122-1-jglisse@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190123222315.1122-1-jglisse@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: linux-mm@kvack.org Cc: Ralph Campbell , Jan Kara , Arnd Bergmann , kvm@vger.kernel.org, Matthew Wilcox , linux-rdma@vger.kernel.org, John Hubbard , Felix Kuehling , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Dan Williams , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Michal Hocko , =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , Jason Gunthorpe , Ross Zwisler , linux-fsdevel@vger.kernel.org, Paolo Bonzini , Andrew Morton , =?UTF-8?q?Christian=20K=C3=B6nig?= List-Id: linux-rdma@vger.kernel.org RnJvbTogSsOpcsO0bWUgR2xpc3NlIDxqZ2xpc3NlQHJlZGhhdC5jb20+CgpXaGVuIHJhbmdlIG9m IHZpcnR1YWwgYWRkcmVzcyBpcyB1cGRhdGVkIHJlYWQgb25seSBhbmQgY29ycmVzcG9uZGluZwp1 c2VyIHB0ciBvYmplY3QgYXJlIGFscmVhZHkgcmVhZCBvbmx5IGl0IGlzIHBvaW50bGVzcyB0byBk byBhbnl0aGluZy4KT3B0aW1pemUgdGhpcyBjYXNlIG91dC4KClNpZ25lZC1vZmYtYnk6IErDqXLD tG1lIEdsaXNzZSA8amdsaXNzZUByZWRoYXQuY29tPgpDYzogQ2hyaXN0aWFuIEvDtm5pZyA8Y2hy aXN0aWFuLmtvZW5pZ0BhbWQuY29tPgpDYzogSmFuIEthcmEgPGphY2tAc3VzZS5jej4KQ2M6IEZl bGl4IEt1ZWhsaW5nIDxGZWxpeC5LdWVobGluZ0BhbWQuY29tPgpDYzogSmFzb24gR3VudGhvcnBl IDxqZ2dAbWVsbGFub3guY29tPgpDYzogQW5kcmV3IE1vcnRvbiA8YWtwbUBsaW51eC1mb3VuZGF0 aW9uLm9yZz4KQ2M6IE1hdHRoZXcgV2lsY294IDxtYXdpbGNveEBtaWNyb3NvZnQuY29tPgpDYzog Um9zcyBad2lzbGVyIDx6d2lzbGVyQGtlcm5lbC5vcmc+CkNjOiBEYW4gV2lsbGlhbXMgPGRhbi5q LndpbGxpYW1zQGludGVsLmNvbT4KQ2M6IFBhb2xvIEJvbnppbmkgPHBib256aW5pQHJlZGhhdC5j b20+CkNjOiBSYWRpbSBLcsSNbcOhxZkgPHJrcmNtYXJAcmVkaGF0LmNvbT4KQ2M6IE1pY2hhbCBI b2NrbyA8bWhvY2tvQGtlcm5lbC5vcmc+CkNjOiBSYWxwaCBDYW1wYmVsbCA8cmNhbXBiZWxsQG52 aWRpYS5jb20+CkNjOiBKb2huIEh1YmJhcmQgPGpodWJiYXJkQG52aWRpYS5jb20+CkNjOiBrdm1A dmdlci5rZXJuZWwub3JnCkNjOiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCkNjOiBs aW51eC1yZG1hQHZnZXIua2VybmVsLm9yZwpDYzogbGludXgtZnNkZXZlbEB2Z2VyLmtlcm5lbC5v cmcKQ2M6IEFybmQgQmVyZ21hbm4gPGFybmRAYXJuZGIuZGU+Ci0tLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5jIHwgMTYgKysrKysrKysrKysrKysrKwogMSBmaWxlIGNo YW5nZWQsIDE2IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV91c2VycHRyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV91c2Vy cHRyLmMKaW5kZXggOTU1ODU4MmMxMDVlLi4yMzMzMGFjM2Q3ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3VzZXJwdHIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV91c2VycHRyLmMKQEAgLTU5LDYgKzU5LDcgQEAgc3RydWN0IGk5MTVfbW11 X29iamVjdCB7CiAJc3RydWN0IGludGVydmFsX3RyZWVfbm9kZSBpdDsKIAlzdHJ1Y3QgbGlzdF9o ZWFkIGxpbms7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJYm9vbCByZWFkX29ubHk7CiAJ Ym9vbCBhdHRhY2hlZDsKIH07CiAKQEAgLTExOSw2ICsxMjAsNyBAQCBzdGF0aWMgaW50IGk5MTVf Z2VtX3VzZXJwdHJfbW5faW52YWxpZGF0ZV9yYW5nZV9zdGFydChzdHJ1Y3QgbW11X25vdGlmaWVy ICpfbW4sCiAJCWNvbnRhaW5lcl9vZihfbW4sIHN0cnVjdCBpOTE1X21tdV9ub3RpZmllciwgbW4p OwogCXN0cnVjdCBpOTE1X21tdV9vYmplY3QgKm1vOwogCXN0cnVjdCBpbnRlcnZhbF90cmVlX25v ZGUgKml0OworCWJvb2wgdXBkYXRlX3RvX3JlYWRfb25seTsKIAlMSVNUX0hFQUQoY2FuY2VsbGVk KTsKIAl1bnNpZ25lZCBsb25nIGVuZDsKIApAQCAtMTI4LDYgKzEzMCw4IEBAIHN0YXRpYyBpbnQg aTkxNV9nZW1fdXNlcnB0cl9tbl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbXVfbm90 aWZpZXIgKl9tbiwKIAkvKiBpbnRlcnZhbCByYW5nZXMgYXJlIGluY2x1c2l2ZSwgYnV0IGludmFs aWRhdGUgcmFuZ2UgaXMgZXhjbHVzaXZlICovCiAJZW5kID0gcmFuZ2UtPmVuZCAtIDE7CiAKKwl1 cGRhdGVfdG9fcmVhZF9vbmx5ID0gbW11X25vdGlmaWVyX3JhbmdlX3VwZGF0ZV90b19yZWFkX29u bHkocmFuZ2UpOworCiAJc3Bpbl9sb2NrKCZtbi0+bG9jayk7CiAJaXQgPSBpbnRlcnZhbF90cmVl X2l0ZXJfZmlyc3QoJm1uLT5vYmplY3RzLCByYW5nZS0+c3RhcnQsIGVuZCk7CiAJd2hpbGUgKGl0 KSB7CkBAIC0xNDUsNiArMTQ5LDE3IEBAIHN0YXRpYyBpbnQgaTkxNV9nZW1fdXNlcnB0cl9tbl9p bnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbXVfbm90aWZpZXIgKl9tbiwKIAkJICogb2Jq ZWN0IGlmIGl0IGlzIG5vdCBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBkZXN0cm95ZWQuCiAJCSAq LwogCQltbyA9IGNvbnRhaW5lcl9vZihpdCwgc3RydWN0IGk5MTVfbW11X29iamVjdCwgaXQpOwor CisJCS8qCisJCSAqIElmIGl0IGlzIGFscmVhZHkgcmVhZCBvbmx5IGFuZCB3ZSBhcmUgdXBkYXRp bmcgdG8KKwkJICogcmVhZCBvbmx5IHRoZW4gd2UgZG8gbm90IG5lZWQgdG8gY2hhbmdlIGFueXRo aW5nLgorCQkgKiBTbyBzYXZlIHRpbWUgYW5kIHNraXAgdGhpcyBvbmUuCisJCSAqLworCQlpZiAo dXBkYXRlX3RvX3JlYWRfb25seSAmJiBtby0+cmVhZF9vbmx5KSB7CisJCQlpdCA9IGludGVydmFs X3RyZWVfaXRlcl9uZXh0KGl0LCByYW5nZS0+c3RhcnQsIGVuZCk7CisJCQljb250aW51ZTsKKwkJ fQorCiAJCWlmIChrcmVmX2dldF91bmxlc3NfemVybygmbW8tPm9iai0+YmFzZS5yZWZjb3VudCkp CiAJCQlxdWV1ZV93b3JrKG1uLT53cSwgJm1vLT53b3JrKTsKIApAQCAtMjcwLDYgKzI4NSw3IEBA IGk5MTVfZ2VtX3VzZXJwdHJfaW5pdF9fbW11X25vdGlmaWVyKHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmosCiAJbW8tPm1uID0gbW47CiAJbW8tPm9iaiA9IG9iajsKIAltby0+aXQuc3Rh cnQgPSBvYmotPnVzZXJwdHIucHRyOworCW1vLT5yZWFkX29ubHkgPSBpOTE1X2dlbV9vYmplY3Rf aXNfcmVhZG9ubHkob2JqKTsKIAltby0+aXQubGFzdCA9IG9iai0+dXNlcnB0ci5wdHIgKyBvYmot PmJhc2Uuc2l6ZSAtIDE7CiAJSU5JVF9XT1JLKCZtby0+d29yaywgY2FuY2VsX3VzZXJwdHIpOwog Ci0tIAoyLjE3LjIKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZl bAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6CF65C282C0 for ; Wed, 23 Jan 2019 22:24:04 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 4293F20856 for ; Wed, 23 Jan 2019 22:24:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727364AbfAWWXz (ORCPT ); Wed, 23 Jan 2019 17:23:55 -0500 Received: from mx1.redhat.com ([209.132.183.28]:54554 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727335AbfAWWXw (ORCPT ); Wed, 23 Jan 2019 17:23:52 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 067D8432C1; Wed, 23 Jan 2019 22:23:52 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-120-127.rdu2.redhat.com [10.10.120.127]) by smtp.corp.redhat.com (Postfix) with ESMTP id 5CF0E5D965; Wed, 23 Jan 2019 22:23:49 +0000 (UTC) From: jglisse@redhat.com To: linux-mm@kvack.org Cc: Andrew Morton , linux-kernel@vger.kernel.org, =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , =?UTF-8?q?Christian=20K=C3=B6nig?= , Jan Kara , Felix Kuehling , Jason Gunthorpe , Matthew Wilcox , Ross Zwisler , Dan Williams , Paolo Bonzini , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Michal Hocko , Ralph Campbell , John Hubbard , kvm@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-rdma@vger.kernel.org, linux-fsdevel@vger.kernel.org, Arnd Bergmann Subject: [PATCH v4 8/9] gpu/drm/i915: optimize out the case when a range is updated to read only Date: Wed, 23 Jan 2019 17:23:14 -0500 Message-Id: <20190123222315.1122-9-jglisse@redhat.com> In-Reply-To: <20190123222315.1122-1-jglisse@redhat.com> References: <20190123222315.1122-1-jglisse@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Wed, 23 Jan 2019 22:23:52 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jérôme Glisse When range of virtual address is updated read only and corresponding user ptr object are already read only it is pointless to do anything. Optimize this case out. Signed-off-by: Jérôme Glisse Cc: Christian König Cc: Jan Kara Cc: Felix Kuehling Cc: Jason Gunthorpe Cc: Andrew Morton Cc: Matthew Wilcox Cc: Ross Zwisler Cc: Dan Williams Cc: Paolo Bonzini Cc: Radim Krčmář Cc: Michal Hocko Cc: Ralph Campbell Cc: John Hubbard Cc: kvm@vger.kernel.org Cc: dri-devel@lists.freedesktop.org Cc: linux-rdma@vger.kernel.org Cc: linux-fsdevel@vger.kernel.org Cc: Arnd Bergmann --- drivers/gpu/drm/i915/i915_gem_userptr.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/drivers/gpu/drm/i915/i915_gem_userptr.c b/drivers/gpu/drm/i915/i915_gem_userptr.c index 9558582c105e..23330ac3d7ea 100644 --- a/drivers/gpu/drm/i915/i915_gem_userptr.c +++ b/drivers/gpu/drm/i915/i915_gem_userptr.c @@ -59,6 +59,7 @@ struct i915_mmu_object { struct interval_tree_node it; struct list_head link; struct work_struct work; + bool read_only; bool attached; }; @@ -119,6 +120,7 @@ static int i915_gem_userptr_mn_invalidate_range_start(struct mmu_notifier *_mn, container_of(_mn, struct i915_mmu_notifier, mn); struct i915_mmu_object *mo; struct interval_tree_node *it; + bool update_to_read_only; LIST_HEAD(cancelled); unsigned long end; @@ -128,6 +130,8 @@ static int i915_gem_userptr_mn_invalidate_range_start(struct mmu_notifier *_mn, /* interval ranges are inclusive, but invalidate range is exclusive */ end = range->end - 1; + update_to_read_only = mmu_notifier_range_update_to_read_only(range); + spin_lock(&mn->lock); it = interval_tree_iter_first(&mn->objects, range->start, end); while (it) { @@ -145,6 +149,17 @@ static int i915_gem_userptr_mn_invalidate_range_start(struct mmu_notifier *_mn, * object if it is not in the process of being destroyed. */ mo = container_of(it, struct i915_mmu_object, it); + + /* + * If it is already read only and we are updating to + * read only then we do not need to change anything. + * So save time and skip this one. + */ + if (update_to_read_only && mo->read_only) { + it = interval_tree_iter_next(it, range->start, end); + continue; + } + if (kref_get_unless_zero(&mo->obj->base.refcount)) queue_work(mn->wq, &mo->work); @@ -270,6 +285,7 @@ i915_gem_userptr_init__mmu_notifier(struct drm_i915_gem_object *obj, mo->mn = mn; mo->obj = obj; mo->it.start = obj->userptr.ptr; + mo->read_only = i915_gem_object_is_readonly(obj); mo->it.last = obj->userptr.ptr + obj->base.size - 1; INIT_WORK(&mo->work, cancel_userptr); -- 2.17.2