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=-9.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_GIT 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 84251C5DF61 for ; Thu, 7 Nov 2019 08:12:59 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 5289F2077C for ; Thu, 7 Nov 2019 08:12:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726982AbfKGIM7 (ORCPT ); Thu, 7 Nov 2019 03:12:59 -0500 Received: from mail.fireflyinternet.com ([109.228.58.192]:63804 "EHLO fireflyinternet.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726829AbfKGIM6 (ORCPT ); Thu, 7 Nov 2019 03:12:58 -0500 X-Default-Received-SPF: pass (skip=forwardok (res=PASS)) x-ip-name=78.156.65.138; Received: from haswell.alporthouse.com (unverified [78.156.65.138]) by fireflyinternet.com (Firefly Internet (M1)) with ESMTP id 19110664-1500050 for multiple; Thu, 07 Nov 2019 08:12:55 +0000 From: Chris Wilson To: intel-gfx@lists.freedesktop.org Cc: Chris Wilson , Lionel Landwerlin , Tvrtko Ursulin , Joonas Lahtinen , stable@vger.kernel.org Subject: [PATCH 07/28] drm/i915/userptr: Try to acquire the page lock around set_page_dirty() Date: Thu, 7 Nov 2019 08:12:31 +0000 Message-Id: <20191107081252.10542-7-chris@chris-wilson.co.uk> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191107081252.10542-1-chris@chris-wilson.co.uk> References: <20191107081252.10542-1-chris@chris-wilson.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org set_page_dirty says: For pages with a mapping this should be done under the page lock for the benefit of asynchronous memory errors who prefer a consistent dirty state. This rule can be broken in some special cases, but should be better not to. Under those rules, it is only safe for us to use the plain set_page_dirty calls for shmemfs/anonymous memory. Userptr may be used with real mappings and so needs to use the locked version (set_page_dirty_lock). However, 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. Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=203317 Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=112012 Fixes: 5cc9ed4b9a7a ("drm/i915: Introduce mapping of user pages into video m References: cb6d7c7dc7ff ("drm/i915/userptr: Acquire the page lock around set_page_dirty()") References: 505a8ec7e11a ("Revert "drm/i915/userptr: Acquire the page lock around set_page_dirty()"") References: 6dcc693bc57f ("ext4: warn when page is dirtied without buffers") Signed-off-by: Chris Wilson Cc: Lionel Landwerlin Cc: Tvrtko Ursulin Cc: Joonas Lahtinen Cc: stable@vger.kernel.org --- drivers/gpu/drm/i915/gem/i915_gem_userptr.c | 22 ++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c index 1e045c337044..4c72d74d6576 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c @@ -646,8 +646,28 @@ 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 + * the page in order to dirty it -- holding + * 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(page); + unlock_page(page); + } mark_page_accessed(page); put_page(page); -- 2.24.0 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=-9.7 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_GIT 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 55CE8C5DF60 for ; Thu, 7 Nov 2019 08:13:20 +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 355382077C for ; Thu, 7 Nov 2019 08:13:20 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 355382077C 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 C846F6EED2; Thu, 7 Nov 2019 08:13:11 +0000 (UTC) Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6EA536EEC0 for ; Thu, 7 Nov 2019 08:13:08 +0000 (UTC) X-Default-Received-SPF: pass (skip=forwardok (res=PASS)) x-ip-name=78.156.65.138; Received: from haswell.alporthouse.com (unverified [78.156.65.138]) by fireflyinternet.com (Firefly Internet (M1)) with ESMTP id 19110664-1500050 for multiple; Thu, 07 Nov 2019 08:12:55 +0000 From: Chris Wilson To: intel-gfx@lists.freedesktop.org Date: Thu, 7 Nov 2019 08:12:31 +0000 Message-Id: <20191107081252.10542-7-chris@chris-wilson.co.uk> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191107081252.10542-1-chris@chris-wilson.co.uk> References: <20191107081252.10542-1-chris@chris-wilson.co.uk> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH 07/28] drm/i915/userptr: Try to acquire the page lock around set_page_dirty() 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: <20191107081231.Hi4uEPLpepZq1G841t9h5neyBcQiIuuAYzwRaMWCUgU@z> c2V0X3BhZ2VfZGlydHkgc2F5czoKCglGb3IgcGFnZXMgd2l0aCBhIG1hcHBpbmcgdGhpcyBzaG91 bGQgYmUgZG9uZSB1bmRlciB0aGUgcGFnZSBsb2NrCglmb3IgdGhlIGJlbmVmaXQgb2YgYXN5bmNo cm9ub3VzIG1lbW9yeSBlcnJvcnMgd2hvIHByZWZlciBhCgljb25zaXN0ZW50IGRpcnR5IHN0YXRl LiBUaGlzIHJ1bGUgY2FuIGJlIGJyb2tlbiBpbiBzb21lIHNwZWNpYWwKCWNhc2VzLCBidXQgc2hv dWxkIGJlIGJldHRlciBub3QgdG8uCgpVbmRlciB0aG9zZSBydWxlcywgaXQgaXMgb25seSBzYWZl IGZvciB1cyB0byB1c2UgdGhlIHBsYWluIHNldF9wYWdlX2RpcnR5CmNhbGxzIGZvciBzaG1lbWZz L2Fub255bW91cyBtZW1vcnkuIFVzZXJwdHIgbWF5IGJlIHVzZWQgd2l0aCByZWFsCm1hcHBpbmdz IGFuZCBzbyBuZWVkcyB0byB1c2UgdGhlIGxvY2tlZCB2ZXJzaW9uIChzZXRfcGFnZV9kaXJ0eV9s b2NrKS4KCkhvd2V2ZXIsIGZvbGxvd2luZyBhIHRyeV90b191bm1hcCgpIHdlIG1heSB3YW50IHRv IHJlbW92ZSB0aGUgdXNlcnB0ciBhbmQKc28gY2FsbCBwdXRfcGFnZXMoKS4gSG93ZXZlciwgdHJ5 X3RvX3VubWFwKCkgYWNxdWlyZXMgdGhlIHBhZ2UgbG9jayBhbmQKc28gd2UgbXVzdCBhdm9pZCBy ZWN1cnNpdmVseSBsb2NraW5nIHRoZSBwYWdlcyBvdXJzZWx2ZXMgLS0gd2hpY2ggbWVhbnMKdGhh dCB3ZSBjYW5ub3Qgc2FmZWx5IGFjcXVpcmUgdGhlIGxvY2sgYXJvdW5kIHNldF9wYWdlX2RpcnR5 KCkuIFNpbmNlIHdlCmNhbid0IGJlIHN1cmUgb2YgdGhlIGxvY2ssIHdlIGhhdmUgdG8gcmlzayBz a2lwIGRpcnR5aW5nIHRoZSBwYWdlLCBvcgplbHNlIHJpc2sgY2FsbGluZyBzZXRfcGFnZV9kaXJ0 eSgpIHdpdGhvdXQgYSBsb2NrIGFuZCBzbyByaXNrIGZzCmNvcnJ1cHRpb24uCgpCdWd6aWxsYTog aHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDMzMTcKQnVnemls bGE6IGh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjAxMgpG aXhlczogNWNjOWVkNGI5YTdhICgiZHJtL2k5MTU6IEludHJvZHVjZSBtYXBwaW5nIG9mIHVzZXIg cGFnZXMgaW50byB2aWRlbyBtClJlZmVyZW5jZXM6IGNiNmQ3YzdkYzdmZiAoImRybS9pOTE1L3Vz ZXJwdHI6IEFjcXVpcmUgdGhlIHBhZ2UgbG9jayBhcm91bmQgc2V0X3BhZ2VfZGlydHkoKSIpClJl ZmVyZW5jZXM6IDUwNWE4ZWM3ZTExYSAoIlJldmVydCAiZHJtL2k5MTUvdXNlcnB0cjogQWNxdWly ZSB0aGUgcGFnZSBsb2NrIGFyb3VuZCBzZXRfcGFnZV9kaXJ0eSgpIiIpClJlZmVyZW5jZXM6IDZk Y2M2OTNiYzU3ZiAoImV4dDQ6IHdhcm4gd2hlbiBwYWdlIGlzIGRpcnRpZWQgd2l0aG91dCBidWZm ZXJzIikKU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28u dWs+CkNjOiBMaW9uZWwgTGFuZHdlcmxpbiA8bGlvbmVsLmcubGFuZHdlcmxpbkBpbnRlbC5jb20+ CkNjOiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgpDYzogSm9vbmFz IExhaHRpbmVuIDxqb29uYXMubGFodGluZW5AbGludXguaW50ZWwuY29tPgpDYzogc3RhYmxlQHZn ZXIua2VybmVsLm9yZwotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV91c2Vy cHRyLmMgfCAyMiArKysrKysrKysrKysrKysrKysrKy0KIDEgZmlsZSBjaGFuZ2VkLCAyMSBpbnNl cnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ2VtL2k5MTVfZ2VtX3VzZXJwdHIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1 X2dlbV91c2VycHRyLmMKaW5kZXggMWUwNDVjMzM3MDQ0Li40YzcyZDc0ZDY1NzYgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV91c2VycHRyLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3VzZXJwdHIuYwpAQCAtNjQ2LDggKzY0Niwy OCBAQCBpOTE1X2dlbV91c2VycHRyX3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqLAogCQlvYmotPm1tLmRpcnR5ID0gZmFsc2U7CiAKIAlmb3JfZWFjaF9zZ3RfcGFnZShw YWdlLCBzZ3RfaXRlciwgcGFnZXMpIHsKLQkJaWYgKG9iai0+bW0uZGlydHkpCisJCWlmIChvYmot Pm1tLmRpcnR5ICYmIHRyeWxvY2tfcGFnZShwYWdlKSkgeworCQkJLyoKKwkJCSAqIEFzIHRoaXMg bWF5IG5vdCBiZSBhbm9ueW1vdXMgbWVtb3J5IChlLmcuIHNobWVtKQorCQkJICogYnV0IGV4aXN0 IG9uIGEgcmVhbCBtYXBwaW5nLCB3ZSBoYXZlIHRvIGxvY2sKKwkJCSAqIHRoZSBwYWdlIGluIG9y ZGVyIHRvIGRpcnR5IGl0IC0tIGhvbGRpbmcKKwkJCSAqIHRoZSBwYWdlIHJlZmVyZW5jZSBpcyBu b3Qgc3VmZmljaWVudCB0bworCQkJICogcHJldmVudCB0aGUgaW5vZGUgZnJvbSBiZWluZyB0cnVu Y2F0ZWQuCisJCQkgKiBQbGF5IHNhZmUgYW5kIHRha2UgdGhlIGxvY2suCisJCQkgKgorCQkJICog SG93ZXZlci4uLiEKKwkJCSAqCisJCQkgKiBUaGUgbW11LW5vdGlmaWVyIGNhbiBiZSBpbnZhbGlk YXRlZCBmb3IgYQorCQkJICogbWlncmF0ZV9wYWdlLCB0aGF0IGlzIGFscmVhZHlpbmcgaG9sZGlu ZyB0aGUgbG9jaworCQkJICogb24gdGhlIHBhZ2UuIFN1Y2ggYSB0cnlfdG9fdW5tYXAoKSB3aWxs IHJlc3VsdAorCQkJICogaW4gdXMgY2FsbGluZyBwdXRfcGFnZXMoKSBhbmQgc28gcmVjdXJzaXZl bHkgdHJ5CisJCQkgKiB0byBsb2NrIHRoZSBwYWdlLiBXZSBhdm9pZCB0aGF0IGRlYWRsb2NrIHdp dGgKKwkJCSAqIGEgdHJ5bG9ja19wYWdlKCkgYW5kIGluIGV4Y2hhbmdlIHdlIHJpc2sgbWlzc2lu ZworCQkJICogc29tZSBwYWdlIGRpcnR5aW5nLgorCQkJICovCiAJCQlzZXRfcGFnZV9kaXJ0eShw YWdlKTsKKwkJCXVubG9ja19wYWdlKHBhZ2UpOworCQl9CiAKIAkJbWFya19wYWdlX2FjY2Vzc2Vk KHBhZ2UpOwogCQlwdXRfcGFnZShwYWdlKTsKLS0gCjIuMjQuMAoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRl bC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4