diff options
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem.c')
| -rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 19 | 
1 files changed, 18 insertions, 1 deletions
| diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 95e7c52cf8ed..98305d987ac1 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -964,11 +964,28 @@ i915_gem_object_ggtt_pin(struct drm_i915_gem_object *obj,  {  	struct drm_i915_private *dev_priv = to_i915(obj->base.dev);  	struct i915_address_space *vm = &dev_priv->ggtt.vm; + +	return i915_gem_object_pin(obj, vm, view, size, alignment, +				   flags | PIN_GLOBAL); +} + +struct i915_vma * +i915_gem_object_pin(struct drm_i915_gem_object *obj, +		    struct i915_address_space *vm, +		    const struct i915_ggtt_view *view, +		    u64 size, +		    u64 alignment, +		    u64 flags) +{ +	struct drm_i915_private *dev_priv = to_i915(obj->base.dev);  	struct i915_vma *vma;  	int ret;  	lockdep_assert_held(&obj->base.dev->struct_mutex); +	if (i915_gem_object_never_bind_ggtt(obj)) +		return ERR_PTR(-ENODEV); +  	if (flags & PIN_MAPPABLE &&  	    (!view || view->type == I915_GGTT_VIEW_NORMAL)) {  		/* If the required space is larger than the available @@ -1035,7 +1052,7 @@ i915_gem_object_ggtt_pin(struct drm_i915_gem_object *obj,  			return ERR_PTR(ret);  	} -	ret = i915_vma_pin(vma, size, alignment, flags | PIN_GLOBAL); +	ret = i915_vma_pin(vma, size, alignment, flags);  	if (ret)  		return ERR_PTR(ret); | 
