forked from luck/tmp_suning_uos_patched
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: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
parent
5d9faa16a7
commit
271d81b841
|
@ -772,6 +772,9 @@ static int i915_getparam(struct drm_device *dev, void *data,
|
||||||
case I915_PARAM_HAS_EXEC_CONSTANTS:
|
case I915_PARAM_HAS_EXEC_CONSTANTS:
|
||||||
value = INTEL_INFO(dev)->gen >= 4;
|
value = INTEL_INFO(dev)->gen >= 4;
|
||||||
break;
|
break;
|
||||||
|
case I915_PARAM_HAS_RELAXED_DELTA:
|
||||||
|
value = 1;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
DRM_DEBUG_DRIVER("Unknown parameter %d\n",
|
DRM_DEBUG_DRIVER("Unknown parameter %d\n",
|
||||||
param->param);
|
param->param);
|
||||||
|
|
|
@ -350,16 +350,6 @@ i915_gem_execbuffer_relocate_entry(struct drm_i915_gem_object *obj,
|
||||||
return ret;
|
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;
|
reloc->delta += target_offset;
|
||||||
if (obj->base.write_domain == I915_GEM_DOMAIN_CPU) {
|
if (obj->base.write_domain == I915_GEM_DOMAIN_CPU) {
|
||||||
uint32_t page_offset = reloc->offset & ~PAGE_MASK;
|
uint32_t page_offset = reloc->offset & ~PAGE_MASK;
|
||||||
|
|
|
@ -290,6 +290,7 @@ typedef struct drm_i915_irq_wait {
|
||||||
#define I915_PARAM_HAS_RELAXED_FENCING 12
|
#define I915_PARAM_HAS_RELAXED_FENCING 12
|
||||||
#define I915_PARAM_HAS_COHERENT_RINGS 13
|
#define I915_PARAM_HAS_COHERENT_RINGS 13
|
||||||
#define I915_PARAM_HAS_EXEC_CONSTANTS 14
|
#define I915_PARAM_HAS_EXEC_CONSTANTS 14
|
||||||
|
#define I915_PARAM_HAS_RELAXED_DELTA 15
|
||||||
|
|
||||||
typedef struct drm_i915_getparam {
|
typedef struct drm_i915_getparam {
|
||||||
int param;
|
int param;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user