Commit 41a9c75d authored by Chris Wilson's avatar Chris Wilson
Browse files

drm/i915/gem: Move stolen node into GEM object union



The obj->stolen is currently used to identify an object allocated from
stolen memory. This dates back to when there were just 1.5 types of
objects, an object backed by shmemfs and an object backed by shmemfs
with a contiguous physical address. Now that we have several different
types of objects, we no longer want to treat stolen objects as a special
case.

Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarMatthew Auld <matthew.auld@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210119214336.1463-3-chris@chris-wilson.co.uk
parent 30d2bfd0
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -256,7 +256,7 @@ static int intelfb_create(struct drm_fb_helper *helper,
	 * If the object is stolen however, it will be full of whatever
	 * garbage was left in there.
	 */
	if (vma->obj->stolen && !prealloc)
	if (!i915_gem_object_is_shmem(vma->obj) && !prealloc)
		memset_io(info->screen_base, 0, info->screen_size);

	/* Use default scratch pixmap (info->pixmap.flags = FB_PIXMAP_SYSTEM) */
@@ -595,7 +595,7 @@ void intel_fbdev_set_suspend(struct drm_device *dev, int state, bool synchronous
	 * full of whatever garbage was left in there.
	 */
	if (state == FBINFO_STATE_RUNNING &&
	    intel_fb_obj(&ifbdev->fb->base)->stolen)
	    !i915_gem_object_is_shmem(intel_fb_obj(&ifbdev->fb->base)))
		memset_io(info->screen_base, 0, info->screen_size);

	drm_fb_helper_set_suspend(&ifbdev->helper, state);
+2 −0
Original line number Diff line number Diff line
@@ -531,4 +531,6 @@ i915_gem_object_invalidate_frontbuffer(struct drm_i915_gem_object *obj,
		__i915_gem_object_invalidate_frontbuffer(obj, origin);
}

bool i915_gem_object_is_shmem(const struct drm_i915_gem_object *obj);

#endif
+2 −2
Original line number Diff line number Diff line
@@ -150,8 +150,6 @@ struct drm_i915_gem_object {
	 */
	struct list_head obj_link;

	/** Stolen memory for this object, instead of being backed by shmem. */
	struct drm_mm_node *stolen;
	union {
		struct rcu_head rcu;
		struct llist_node freed;
@@ -303,6 +301,8 @@ struct drm_i915_gem_object {
			struct work_struct *work;
		} userptr;

		struct drm_mm_node *stolen;

		unsigned long scratch;
		u64 encode;

+1 −1
Original line number Diff line number Diff line
@@ -213,7 +213,7 @@ int i915_gem_object_attach_phys(struct drm_i915_gem_object *obj, int align)
	if (obj->ops == &i915_gem_phys_ops)
		return 0;

	if (obj->ops != &i915_gem_shmem_ops)
	if (!i915_gem_object_is_shmem(obj))
		return -EINVAL;

	err = i915_gem_object_unbind(obj, I915_GEM_OBJECT_UNBIND_ACTIVE);
+5 −0
Original line number Diff line number Diff line
@@ -612,3 +612,8 @@ struct intel_memory_region *i915_gem_shmem_setup(struct drm_i915_private *i915)
					  PAGE_SIZE, 0,
					  &shmem_region_ops);
}

bool i915_gem_object_is_shmem(const struct drm_i915_gem_object *obj)
{
	return obj->ops == &i915_gem_shmem_ops;
}
Loading