Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> writes: > The physical object is treated as permanently pinned. If we fail to take > this initial pin during i915_gem_object_attach_phys() we need to revert > it back to an ordinary shmemfs object before reporting the failure. > > v2: git-add > > Reported-by: Mika Kuoppala <mika.kuoppala@xxxxxxxxx> > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > Cc: Mika Kuoppala <mika.kuoppala@xxxxxxxxx> Reviewed-by: Mika Kuoppala <mika.kuoppala@xxxxxxxxx> > --- > drivers/gpu/drm/i915/i915_gem.c | 13 ++++++++++++- > 1 file changed, 12 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c > index 71297920fdf4..dc799db0446c 100644 > --- a/drivers/gpu/drm/i915/i915_gem.c > +++ b/drivers/gpu/drm/i915/i915_gem.c > @@ -313,6 +313,8 @@ static const struct drm_i915_gem_object_ops i915_gem_phys_ops = { > .release = i915_gem_object_release_phys, > }; > > +static const struct drm_i915_gem_object_ops i915_gem_object_ops; > + > int i915_gem_object_unbind(struct drm_i915_gem_object *obj) > { > struct i915_vma *vma; > @@ -586,9 +588,18 @@ i915_gem_object_attach_phys(struct drm_i915_gem_object *obj, > if (obj->mm.pages) > return -EBUSY; > > + GEM_BUG_ON(obj->ops != &i915_gem_object_ops); > obj->ops = &i915_gem_phys_ops; > > - return i915_gem_object_pin_pages(obj); > + ret = i915_gem_object_pin_pages(obj); > + if (ret) > + goto err_xfer; > + > + return 0; > + > +err_xfer: > + obj->ops = &i915_gem_object_ops; > + return ret; > } > > static int > -- > 2.11.0 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx