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=-6.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,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 97313C5DF62 for ; Wed, 6 Nov 2019 07:22:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 610872173B for ; Wed, 6 Nov 2019 07:22:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730105AbfKFHWc convert rfc822-to-8bit (ORCPT ); Wed, 6 Nov 2019 02:22:32 -0500 Received: from mail.fireflyinternet.com ([109.228.58.192]:62944 "EHLO fireflyinternet.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726772AbfKFHWb (ORCPT ); Wed, 6 Nov 2019 02:22:31 -0500 X-Default-Received-SPF: pass (skip=forwardok (res=PASS)) x-ip-name=78.156.65.138; Received: from localhost (unverified [78.156.65.138]) by fireflyinternet.com (Firefly Internet (M1)) with ESMTP (TLS) id 19097373-1500050 for multiple; Wed, 06 Nov 2019 07:22:26 +0000 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8BIT To: intel-gfx@lists.freedesktop.org From: Chris Wilson In-Reply-To: <20190716124931.5870-1-chris@chris-wilson.co.uk> Cc: tvrtko.ursulin@intel.com, Lionel Landwerlin , stable@vger.kernel.org References: <20190716124931.5870-1-chris@chris-wilson.co.uk> Message-ID: <157302494441.18566.9645099809866368384@skylake-alporthouse-com> User-Agent: alot/0.6 Subject: Re: [PATCH 1/5] drm/i915/userptr: Beware recursive lock_page() Date: Wed, 06 Nov 2019 07:22:24 +0000 Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org Quoting Chris Wilson (2019-07-16 13:49:27) > Following a try_to_unmap() we may want to remove the userptr and so call > put_pages(). However, try_to_unmap() acquires the page lock and so we > must avoid recursively locking the pages ourselves -- which means that > we cannot safely acquire the lock around set_page_dirty(). Since we > can't be sure of the lock, we have to risk skip dirtying the page, or > else risk calling set_page_dirty() without a lock and so risk fs > corruption. > > Reported-by: Lionel Landwerlin > Fixes: cb6d7c7dc7ff ("drm/i915/userptr: Acquire the page lock around set_page_dirty()") > Signed-off-by: Chris Wilson > Cc: Lionel Landwerlin > Cc: Tvrtko Ursulin > Cc: stable@vger.kernel.org > --- > drivers/gpu/drm/i915/gem/i915_gem_userptr.c | 16 ++++++++++++++-- > 1 file changed, 14 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c > index b9d2bb15e4a6..1ad2047a6dbd 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c > +++ b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c > @@ -672,7 +672,7 @@ i915_gem_userptr_put_pages(struct drm_i915_gem_object *obj, > obj->mm.dirty = false; > > for_each_sgt_page(page, sgt_iter, pages) { > - if (obj->mm.dirty) > + if (obj->mm.dirty && trylock_page(page)) { > /* > * As this may not be anonymous memory (e.g. shmem) > * but exist on a real mapping, we have to lock > @@ -680,8 +680,20 @@ i915_gem_userptr_put_pages(struct drm_i915_gem_object *obj, > * the page reference is not sufficient to > * prevent the inode from being truncated. > * Play safe and take the lock. > + * > + * However...! > + * > + * The mmu-notifier can be invalidated for a > + * migrate_page, that is alreadying holding the lock > + * on the page. Such a try_to_unmap() will result > + * in us calling put_pages() and so recursively try > + * to lock the page. We avoid that deadlock with > + * a trylock_page() and in exchange we risk missing > + * some page dirtying. > */ > - set_page_dirty_lock(page); > + set_page_dirty(page); > + unlock_page(page); > + } It really seems like we have no choice but to only call set_page_dirty() while under the page lock, and the only way we can guarantee that without recursion is with a trylock... https://bugs.freedesktop.org/show_bug.cgi?id=112012 -Chris 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=-6.7 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED 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 A5A7CC5DF62 for ; Wed, 6 Nov 2019 07:22:58 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 4B00F2173B for ; Wed, 6 Nov 2019 07:22:58 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4B00F2173B Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=chris-wilson.co.uk Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id F1C9D6EC1A; Wed, 6 Nov 2019 07:22:57 +0000 (UTC) Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0BAC86EC1A for ; Wed, 6 Nov 2019 07:22:55 +0000 (UTC) X-Default-Received-SPF: pass (skip=forwardok (res=PASS)) x-ip-name=78.156.65.138; Received: from localhost (unverified [78.156.65.138]) by fireflyinternet.com (Firefly Internet (M1)) with ESMTP (TLS) id 19097373-1500050 for multiple; Wed, 06 Nov 2019 07:22:26 +0000 MIME-Version: 1.0 To: intel-gfx@lists.freedesktop.org From: Chris Wilson In-Reply-To: <20190716124931.5870-1-chris@chris-wilson.co.uk> References: <20190716124931.5870-1-chris@chris-wilson.co.uk> Message-ID: <157302494441.18566.9645099809866368384@skylake-alporthouse-com> User-Agent: alot/0.6 Date: Wed, 06 Nov 2019 07:22:24 +0000 Subject: Re: [Intel-gfx] [PATCH 1/5] drm/i915/userptr: Beware recursive lock_page() X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: stable@vger.kernel.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Message-ID: <20191106072224.IRfvoGpWBEMSX2WG5G8e32YPUKG_w4F72TLk5L0N6ME@z> UXVvdGluZyBDaHJpcyBXaWxzb24gKDIwMTktMDctMTYgMTM6NDk6MjcpCj4gRm9sbG93aW5nIGEg dHJ5X3RvX3VubWFwKCkgd2UgbWF5IHdhbnQgdG8gcmVtb3ZlIHRoZSB1c2VycHRyIGFuZCBzbyBj YWxsCj4gcHV0X3BhZ2VzKCkuIEhvd2V2ZXIsIHRyeV90b191bm1hcCgpIGFjcXVpcmVzIHRoZSBw YWdlIGxvY2sgYW5kIHNvIHdlCj4gbXVzdCBhdm9pZCByZWN1cnNpdmVseSBsb2NraW5nIHRoZSBw YWdlcyBvdXJzZWx2ZXMgLS0gd2hpY2ggbWVhbnMgdGhhdAo+IHdlIGNhbm5vdCBzYWZlbHkgYWNx dWlyZSB0aGUgbG9jayBhcm91bmQgc2V0X3BhZ2VfZGlydHkoKS4gU2luY2Ugd2UKPiBjYW4ndCBi ZSBzdXJlIG9mIHRoZSBsb2NrLCB3ZSBoYXZlIHRvIHJpc2sgc2tpcCBkaXJ0eWluZyB0aGUgcGFn ZSwgb3IKPiBlbHNlIHJpc2sgY2FsbGluZyBzZXRfcGFnZV9kaXJ0eSgpIHdpdGhvdXQgYSBsb2Nr IGFuZCBzbyByaXNrIGZzCj4gY29ycnVwdGlvbi4KPiAKPiBSZXBvcnRlZC1ieTogTGlvbmVsIExh bmR3ZXJsaW4gPGxpb25lbC5nLmxhbmR3ZXJsaW5AaW50ZWwuY29tPgo+IEZpeGVzOiBjYjZkN2M3 ZGM3ZmYgKCJkcm0vaTkxNS91c2VycHRyOiBBY3F1aXJlIHRoZSBwYWdlIGxvY2sgYXJvdW5kIHNl dF9wYWdlX2RpcnR5KCkiKQo+IFNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hy aXMtd2lsc29uLmNvLnVrPgo+IENjOiBMaW9uZWwgTGFuZHdlcmxpbiA8bGlvbmVsLmcubGFuZHdl cmxpbkBpbnRlbC5jb20+Cj4gQ2M6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRl bC5jb20+Cj4gQ2M6IHN0YWJsZUB2Z2VyLmtlcm5lbC5vcmcKPiAtLS0KPiAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3VzZXJwdHIuYyB8IDE2ICsrKysrKysrKysrKysrLS0KPiAg MSBmaWxlIGNoYW5nZWQsIDE0IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCj4gCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV91c2VycHRyLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdXNlcnB0ci5jCj4gaW5kZXggYjlkMmJi MTVlNGE2Li4xYWQyMDQ3YTZkYmQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z2VtL2k5MTVfZ2VtX3VzZXJwdHIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9p OTE1X2dlbV91c2VycHRyLmMKPiBAQCAtNjcyLDcgKzY3Miw3IEBAIGk5MTVfZ2VtX3VzZXJwdHJf cHV0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gICAgICAgICAgICAg ICAgIG9iai0+bW0uZGlydHkgPSBmYWxzZTsKPiAgCj4gICAgICAgICBmb3JfZWFjaF9zZ3RfcGFn ZShwYWdlLCBzZ3RfaXRlciwgcGFnZXMpIHsKPiAtICAgICAgICAgICAgICAgaWYgKG9iai0+bW0u ZGlydHkpCj4gKyAgICAgICAgICAgICAgIGlmIChvYmotPm1tLmRpcnR5ICYmIHRyeWxvY2tfcGFn ZShwYWdlKSkgewo+ICAgICAgICAgICAgICAgICAgICAgICAgIC8qCj4gICAgICAgICAgICAgICAg ICAgICAgICAgICogQXMgdGhpcyBtYXkgbm90IGJlIGFub255bW91cyBtZW1vcnkgKGUuZy4gc2ht ZW0pCj4gICAgICAgICAgICAgICAgICAgICAgICAgICogYnV0IGV4aXN0IG9uIGEgcmVhbCBtYXBw aW5nLCB3ZSBoYXZlIHRvIGxvY2sKPiBAQCAtNjgwLDggKzY4MCwyMCBAQCBpOTE1X2dlbV91c2Vy cHRyX3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAgICAgICAg ICAgICAgICAgICAgICAgICAqIHRoZSBwYWdlIHJlZmVyZW5jZSBpcyBub3Qgc3VmZmljaWVudCB0 bwo+ICAgICAgICAgICAgICAgICAgICAgICAgICAqIHByZXZlbnQgdGhlIGlub2RlIGZyb20gYmVp bmcgdHJ1bmNhdGVkLgo+ICAgICAgICAgICAgICAgICAgICAgICAgICAqIFBsYXkgc2FmZSBhbmQg dGFrZSB0aGUgbG9jay4KPiArICAgICAgICAgICAgICAgICAgICAgICAgKgo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAqIEhvd2V2ZXIuLi4hCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICoK PiArICAgICAgICAgICAgICAgICAgICAgICAgKiBUaGUgbW11LW5vdGlmaWVyIGNhbiBiZSBpbnZh bGlkYXRlZCBmb3IgYQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAqIG1pZ3JhdGVfcGFnZSwg dGhhdCBpcyBhbHJlYWR5aW5nIGhvbGRpbmcgdGhlIGxvY2sKPiArICAgICAgICAgICAgICAgICAg ICAgICAgKiBvbiB0aGUgcGFnZS4gU3VjaCBhIHRyeV90b191bm1hcCgpIHdpbGwgcmVzdWx0Cj4g KyAgICAgICAgICAgICAgICAgICAgICAgICogaW4gdXMgY2FsbGluZyBwdXRfcGFnZXMoKSBhbmQg c28gcmVjdXJzaXZlbHkgdHJ5Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICogdG8gbG9jayB0 aGUgcGFnZS4gV2UgYXZvaWQgdGhhdCBkZWFkbG9jayB3aXRoCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICogYSB0cnlsb2NrX3BhZ2UoKSBhbmQgaW4gZXhjaGFuZ2Ugd2UgcmlzayBtaXNzaW5n Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICogc29tZSBwYWdlIGRpcnR5aW5nLgo+ICAgICAg ICAgICAgICAgICAgICAgICAgICAqLwo+IC0gICAgICAgICAgICAgICAgICAgICAgIHNldF9wYWdl X2RpcnR5X2xvY2socGFnZSk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgc2V0X3BhZ2VfZGly dHkocGFnZSk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgdW5sb2NrX3BhZ2UocGFnZSk7Cj4g KyAgICAgICAgICAgICAgIH0KCkl0IHJlYWxseSBzZWVtcyBsaWtlIHdlIGhhdmUgbm8gY2hvaWNl IGJ1dCB0byBvbmx5IGNhbGwgc2V0X3BhZ2VfZGlydHkoKQp3aGlsZSB1bmRlciB0aGUgcGFnZSBs b2NrLCBhbmQgdGhlIG9ubHkgd2F5IHdlIGNhbiBndWFyYW50ZWUgdGhhdAp3aXRob3V0IHJlY3Vy c2lvbiBpcyB3aXRoIGEgdHJ5bG9jay4uLgoKaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9z aG93X2J1Zy5jZ2k/aWQ9MTEyMDEyCi1DaHJpcwpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pbnRlbC1nZng=