Skip to content

Commit 3844ed5

Browse files
Radhakrishna Sripadatursulin
authored andcommitted
drm/i915/dpt: Use shmem for dpt objects
Dpt objects that are created from internal get evicted when there is memory pressure and do not get restored when pinned during scanout. The pinned page table entries look corrupted and programming the display engine with the incorrect pte's result in DE throwing pipe faults. Create DPT objects from shmem and mark the object as dirty when pinning so that the object is restored when shrinker evicts an unpinned buffer object. v2: Unconditionally mark the dpt objects dirty during pinning(Chris). Fixes: 0dc987b ("drm/i915/display: Add smem fallback allocation for dpt") Cc: <stable@vger.kernel.org> # v6.0+ Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com> Suggested-by: Chris Wilson <chris.p.wilson@intel.com> Signed-off-by: Fei Yang <fei.yang@intel.com> Signed-off-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20230718225118.2562132-1-radhakrishna.sripada@intel.com (cherry picked from commit e91a777) Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
1 parent 6eaae19 commit 3844ed5

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

drivers/gpu/drm/i915/display/intel_dpt.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,8 @@ struct i915_vma *intel_dpt_pin(struct i915_address_space *vm)
166166
i915_vma_get(vma);
167167
}
168168

169+
dpt->obj->mm.dirty = true;
170+
169171
atomic_dec(&i915->gpu_error.pending_fb_pin);
170172
intel_runtime_pm_put(&i915->runtime_pm, wakeref);
171173

@@ -261,7 +263,7 @@ intel_dpt_create(struct intel_framebuffer *fb)
261263
dpt_obj = i915_gem_object_create_stolen(i915, size);
262264
if (IS_ERR(dpt_obj) && !HAS_LMEM(i915)) {
263265
drm_dbg_kms(&i915->drm, "Allocating dpt from smem\n");
264-
dpt_obj = i915_gem_object_create_internal(i915, size);
266+
dpt_obj = i915_gem_object_create_shmem(i915, size);
265267
}
266268
if (IS_ERR(dpt_obj))
267269
return ERR_CAST(dpt_obj);

0 commit comments

Comments
 (0)