Home Home > GIT Browse > SLE12-SP4
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2019-08-08 12:21:57 +0200
committerTakashi Iwai <tiwai@suse.de>2019-08-08 12:22:01 +0200
commit6ff490777a36d405af5c50ccf8e6de69e47a0e96 (patch)
tree27fde600f497a1b4c6943ee8d78a634a6ef9cfaa
parent92dbc279d016e4a5ec615f675bbe24d4cbc57412 (diff)
drm/i915/userptr: Acquire the page lock around set_page_dirty()
(bsc#1051510).
-rw-r--r--patches.drm/drm-i915-userptr-Acquire-the-page-lock-around-set_pa.patch56
-rw-r--r--series.conf1
2 files changed, 57 insertions, 0 deletions
diff --git a/patches.drm/drm-i915-userptr-Acquire-the-page-lock-around-set_pa.patch b/patches.drm/drm-i915-userptr-Acquire-the-page-lock-around-set_pa.patch
new file mode 100644
index 0000000000..02b297e411
--- /dev/null
+++ b/patches.drm/drm-i915-userptr-Acquire-the-page-lock-around-set_pa.patch
@@ -0,0 +1,56 @@
+From aa56a292ce623734ddd30f52d73f527d1f3529b5 Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Mon, 8 Jul 2019 15:03:27 +0100
+Subject: [PATCH] drm/i915/userptr: Acquire the page lock around set_page_dirty()
+Git-commit: aa56a292ce623734ddd30f52d73f527d1f3529b5
+Patch-mainline: v5.3-rc3
+No-fix: cb6d7c7dc7ff8cace666ddec66334117a6068ce2
+References: bsc#1051510
+
+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 <chris@chris-wilson.co.uk>
+Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
+Cc: stable@vger.kernel.org
+Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
+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 <jani.nikula@intel.com>
+Acked-by: Takashi Iwai <tiwai@suse.de>
+
+---
+ drivers/gpu/drm/i915/i915_gem_userptr.c | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/i915/i915_gem_userptr.c
++++ b/drivers/gpu/drm/i915/i915_gem_userptr.c
+@@ -703,7 +703,15 @@ i915_gem_userptr_put_pages(struct drm_i9
+
+ 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);
diff --git a/series.conf b/series.conf
index e3a5f6f554..7dfaf6c53b 100644
--- a/series.conf
+++ b/series.conf
@@ -23222,6 +23222,7 @@
patches.drivers/ACPI-PM-Fix-regression-in-acpi_device_set_power.patch
patches.drivers/libata-zpodd-Fix-small-read-overflow-in-zpodd_get_me.patch
patches.drivers/ata-libahci-do-not-complain-in-case-of-deferred-prob.patch
+ patches.drm/drm-i915-userptr-Acquire-the-page-lock-around-set_pa.patch
patches.drivers/0013-HID-wacom-fix-bit-shift-for-Cintiq-Companion-2.patch
patches.drivers/hid-input-fix-a4tech-horizontal-wheel-custom-usage.patch
patches.fixes/bonding-Force-slave-speed-check-after-link-state-rec.patch