drm/i915: Mark contents as dirty on a write fault
Since dropping the set-to-gtt-domain in commita679f58d05
("drm/i915: Flush pages on acquisition"), we no longer mark the contents as dirty on a write fault. This has the issue of us then not marking the pages as dirty on releasing the buffer, which means the contents are not written out to the swap device (should we ever pick that buffer as a victim). Notably, this is visible in the dumb buffer interface used for cursors. Having updated the cursor contents via mmap, and swapped away, if the shrinker should evict the old cursor, upon next reuse, the cursor would be invisible. E.g. echo 80 > /proc/sys/kernel/sysrq ; echo f > /proc/sysrq-trigger Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=111541 Fixes:a679f58d05
("drm/i915: Flush pages on acquisition") Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Matthew Auld <matthew.william.auld@gmail.com> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> Cc: <stable@vger.kernel.org> # v5.2+ Reviewed-by: Matthew Auld <matthew.william.auld@gmail.com> Link: https://patchwork.freedesktop.org/patch/msgid/20190920121821.7223-1-chris@chris-wilson.co.uk
This commit is contained in:
parent
e2144503bf
commit
5028851cdf
|
@ -319,7 +319,11 @@ vm_fault_t i915_gem_fault(struct vm_fault *vmf)
|
|||
intel_wakeref_auto(&i915->ggtt.userfault_wakeref,
|
||||
msecs_to_jiffies_timeout(CONFIG_DRM_I915_USERFAULT_AUTOSUSPEND));
|
||||
|
||||
i915_vma_set_ggtt_write(vma);
|
||||
if (write) {
|
||||
GEM_BUG_ON(!i915_gem_object_has_pinned_pages(obj));
|
||||
i915_vma_set_ggtt_write(vma);
|
||||
obj->mm.dirty = true;
|
||||
}
|
||||
|
||||
err_fence:
|
||||
i915_vma_unpin_fence(vma);
|
||||
|
|
Loading…
Reference in New Issue