Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 271d81b8 authored by Chris Wilson's avatar Chris Wilson
Browse files

drm/i915: Allow relocation deltas outside of target bo



Userspace has a legitimate requirement to use a delta that points to
outside of the target bo, and so we need to enable this. (As this is an
abi break, albeit a relaxation of the current restrictions, mark the change
with a new flag.)

Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
parent 5d9faa16
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -772,6 +772,9 @@ static int i915_getparam(struct drm_device *dev, void *data,
	case I915_PARAM_HAS_EXEC_CONSTANTS:
		value = INTEL_INFO(dev)->gen >= 4;
		break;
	case I915_PARAM_HAS_RELAXED_DELTA:
		value = 1;
		break;
	default:
		DRM_DEBUG_DRIVER("Unknown parameter %d\n",
				 param->param);
+0 −10
Original line number Diff line number Diff line
@@ -350,16 +350,6 @@ i915_gem_execbuffer_relocate_entry(struct drm_i915_gem_object *obj,
		return ret;
	}

	/* and points to somewhere within the target object. */
	if (unlikely(reloc->delta >= target_obj->size)) {
		DRM_ERROR("Relocation beyond target object bounds: "
			  "obj %p target %d delta %d size %d.\n",
			  obj, reloc->target_handle,
			  (int) reloc->delta,
			  (int) target_obj->size);
		return ret;
	}

	reloc->delta += target_offset;
	if (obj->base.write_domain == I915_GEM_DOMAIN_CPU) {
		uint32_t page_offset = reloc->offset & ~PAGE_MASK;
+1 −0
Original line number Diff line number Diff line
@@ -290,6 +290,7 @@ typedef struct drm_i915_irq_wait {
#define I915_PARAM_HAS_RELAXED_FENCING	 12
#define I915_PARAM_HAS_COHERENT_RINGS	 13
#define I915_PARAM_HAS_EXEC_CONSTANTS	 14
#define I915_PARAM_HAS_RELAXED_DELTA	 15

typedef struct drm_i915_getparam {
	int param;