From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sasha Levin Subject: [PATCH AUTOSEL 4.19 160/167] drm/i915/userptr: Acquire the page lock around set_page_dirty() Date: Tue, 3 Sep 2019 12:25:12 -0400 Message-ID: <20190903162519.7136-160-sashal@kernel.org> References: <20190903162519.7136-1-sashal@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190903162519.7136-1-sashal@kernel.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Sasha Levin , Tvrtko Ursulin , Jani Nikula , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org RnJvbTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CgpbIFVwc3RyZWFt IGNvbW1pdCBhYTU2YTI5MmNlNjIzNzM0ZGRkMzBmNTJkNzNmNTI3ZDFmMzUyOWI1IF0KCnNldF9w YWdlX2RpcnR5IHNheXM6CgoJRm9yIHBhZ2VzIHdpdGggYSBtYXBwaW5nIHRoaXMgc2hvdWxkIGJl IGRvbmUgdW5kZXIgdGhlIHBhZ2UgbG9jawoJZm9yIHRoZSBiZW5lZml0IG9mIGFzeW5jaHJvbm91 cyBtZW1vcnkgZXJyb3JzIHdobyBwcmVmZXIgYQoJY29uc2lzdGVudCBkaXJ0eSBzdGF0ZS4gVGhp cyBydWxlIGNhbiBiZSBicm9rZW4gaW4gc29tZSBzcGVjaWFsCgljYXNlcywgYnV0IHNob3VsZCBi ZSBiZXR0ZXIgbm90IHRvLgoKVW5kZXIgdGhvc2UgcnVsZXMsIGl0IGlzIG9ubHkgc2FmZSBmb3Ig dXMgdG8gdXNlIHRoZSBwbGFpbiBzZXRfcGFnZV9kaXJ0eQpjYWxscyBmb3Igc2htZW1mcy9hbm9u eW1vdXMgbWVtb3J5LiBVc2VycHRyIG1heSBiZSB1c2VkIHdpdGggcmVhbAptYXBwaW5ncyBhbmQg c28gbmVlZHMgdG8gdXNlIHRoZSBsb2NrZWQgdmVyc2lvbiAoc2V0X3BhZ2VfZGlydHlfbG9jayku CgpCdWd6aWxsYTogaHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0y MDMzMTcKRml4ZXM6IDVjYzllZDRiOWE3YSAoImRybS9pOTE1OiBJbnRyb2R1Y2UgbWFwcGluZyBv ZiB1c2VyIHBhZ2VzIGludG8gdmlkZW8gbWVtb3J5ICh1c2VycHRyKSBpb2N0bCIpClJlZmVyZW5j ZXM6IDZkY2M2OTNiYzU3ZiAoImV4dDQ6IHdhcm4gd2hlbiBwYWdlIGlzIGRpcnRpZWQgd2l0aG91 dCBidWZmZXJzIikKU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxz b24uY28udWs+CkNjOiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgpD Yzogc3RhYmxlQHZnZXIua2VybmVsLm9yZwpSZXZpZXdlZC1ieTogVHZydGtvIFVyc3VsaW4gPHR2 cnRrby51cnN1bGluQGludGVsLmNvbT4KTGluazogaHR0cHM6Ly9wYXRjaHdvcmsuZnJlZWRlc2t0 b3Aub3JnL3BhdGNoL21zZ2lkLzIwMTkwNzA4MTQwMzI3LjI2ODI1LTEtY2hyaXNAY2hyaXMtd2ls c29uLmNvLnVrCihjaGVycnkgcGlja2VkIGZyb20gY29tbWl0IGNiNmQ3YzdkYzdmZjhjYWNlNjY2 ZGRlYzY2MzM0MTE3YTYwNjhjZTIpClNpZ25lZC1vZmYtYnk6IEphbmkgTmlrdWxhIDxqYW5pLm5p a3VsYUBpbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IFNhc2hhIExldmluIDxzYXNoYWxAa2VybmVs Lm9yZz4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV91c2VycHRyLmMgfCAxMCAr KysrKysrKystCiAxIGZpbGUgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0p CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5jCmluZGV4IDJjOWIyODQwMzZk MTAuLmUxM2VhMmVjZDY2OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX3VzZXJwdHIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV91c2VycHRy LmMKQEAgLTY5Miw3ICs2OTIsMTUgQEAgaTkxNV9nZW1fdXNlcnB0cl9wdXRfcGFnZXMoc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAogCWZvcl9lYWNoX3NndF9wYWdlKHBhZ2UsIHNn dF9pdGVyLCBwYWdlcykgewogCQlpZiAob2JqLT5tbS5kaXJ0eSkKLQkJCXNldF9wYWdlX2RpcnR5 KHBhZ2UpOworCQkJLyoKKwkJCSAqIEFzIHRoaXMgbWF5IG5vdCBiZSBhbm9ueW1vdXMgbWVtb3J5 IChlLmcuIHNobWVtKQorCQkJICogYnV0IGV4aXN0IG9uIGEgcmVhbCBtYXBwaW5nLCB3ZSBoYXZl IHRvIGxvY2sKKwkJCSAqIHRoZSBwYWdlIGluIG9yZGVyIHRvIGRpcnR5IGl0IC0tIGhvbGRpbmcK KwkJCSAqIHRoZSBwYWdlIHJlZmVyZW5jZSBpcyBub3Qgc3VmZmljaWVudCB0bworCQkJICogcHJl dmVudCB0aGUgaW5vZGUgZnJvbSBiZWluZyB0cnVuY2F0ZWQuCisJCQkgKiBQbGF5IHNhZmUgYW5k IHRha2UgdGhlIGxvY2suCisJCQkgKi8KKwkJCXNldF9wYWdlX2RpcnR5X2xvY2socGFnZSk7CiAK IAkJbWFya19wYWdlX2FjY2Vzc2VkKHBhZ2UpOwogCQlwdXRfcGFnZShwYWdlKTsKLS0gCjIuMjAu MQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRl dmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs 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=-10.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,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 31BFCC3A5A2 for ; Tue, 3 Sep 2019 16:32:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 08AAF23431 for ; Tue, 3 Sep 2019 16:32:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1567528371; bh=Fji4NL498Cai/n2scqddjx7OIjLIeml9W+vJebW82Co=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=uqRyBhUuI2otzQR7fv4xPRpx5+mwUEWEDjAAl+MepsKdWtVBhhD17E85YXkbpYh5I kyhWhqPK//JOEqe11DULIRKxvpaOw+TSVUdlczRrgl3VNVxlJqzAdQ0hCrmHRD79pn erSI4zfXy3NzO2MdxmtLuaxk71FzbcUaSO0X+tSk= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730752AbfICQct (ORCPT ); Tue, 3 Sep 2019 12:32:49 -0400 Received: from mail.kernel.org ([198.145.29.99]:55574 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731177AbfICQcJ (ORCPT ); Tue, 3 Sep 2019 12:32:09 -0400 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 581DD238D1; Tue, 3 Sep 2019 16:32:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1567528329; bh=Fji4NL498Cai/n2scqddjx7OIjLIeml9W+vJebW82Co=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OXeNJA8AZGeTky64S71tY/EYRbZ5Xln0fN09fQcxHi5FTAgT/7XURWeJ/gAKstG2W V7+AYnyzdd9/uCyvVNlkGKZU0C7jR7WMzKgSP6n1VFxWtYJ9ri6cswg0gRk87+1FML +0dHPePCeqGJcwDFlo3b/bnZt5fHaNMiGDx4MVjs= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Chris Wilson , Tvrtko Ursulin , Jani Nikula , Sasha Levin , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Subject: [PATCH AUTOSEL 4.19 160/167] drm/i915/userptr: Acquire the page lock around set_page_dirty() Date: Tue, 3 Sep 2019 12:25:12 -0400 Message-Id: <20190903162519.7136-160-sashal@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190903162519.7136-1-sashal@kernel.org> References: <20190903162519.7136-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Chris Wilson [ Upstream commit aa56a292ce623734ddd30f52d73f527d1f3529b5 ] 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). Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=203317 Fixes: 5cc9ed4b9a7a ("drm/i915: Introduce mapping of user pages into video memory (userptr) ioctl") References: 6dcc693bc57f ("ext4: warn when page is dirtied without buffers") Signed-off-by: Chris Wilson Cc: Tvrtko Ursulin Cc: stable@vger.kernel.org Reviewed-by: Tvrtko Ursulin Link: https://patchwork.freedesktop.org/patch/msgid/20190708140327.26825-1-chris@chris-wilson.co.uk (cherry picked from commit cb6d7c7dc7ff8cace666ddec66334117a6068ce2) Signed-off-by: Jani Nikula Signed-off-by: Sasha Levin --- drivers/gpu/drm/i915/i915_gem_userptr.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/i915_gem_userptr.c b/drivers/gpu/drm/i915/i915_gem_userptr.c index 2c9b284036d10..e13ea2ecd669c 100644 --- a/drivers/gpu/drm/i915/i915_gem_userptr.c +++ b/drivers/gpu/drm/i915/i915_gem_userptr.c @@ -692,7 +692,15 @@ i915_gem_userptr_put_pages(struct drm_i915_gem_object *obj, for_each_sgt_page(page, sgt_iter, pages) { if (obj->mm.dirty) - set_page_dirty(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. + */ + set_page_dirty_lock(page); mark_page_accessed(page); put_page(page); -- 2.20.1