Quoting Matthew Auld (2019-10-04 18:04:34) > @@ -98,10 +103,12 @@ i915_gem_object_get_pages_buddy(struct drm_i915_gem_object *obj) > } > > void i915_gem_object_init_memory_region(struct drm_i915_gem_object *obj, > - struct intel_memory_region *mem) > + struct intel_memory_region *mem, > + unsigned long flags) > { > INIT_LIST_HEAD(&obj->mm.blocks); > obj->mm.region = intel_memory_region_get(mem); > + obj->flags = flags; This is odd as you don't necessarily have exclusive control of obj->flags Looks like this may be a wart in the api. > +static struct drm_i915_gem_object * > +igt_object_create(struct intel_memory_region *mem, > + struct list_head *objects, > + u64 size, > + unsigned int flags) > +{ > + struct drm_i915_gem_object *obj; > + int err; > + > + obj = i915_gem_object_create_region(mem, size, flags); > + if (IS_ERR(obj)) > + return obj; > + > + err = i915_gem_object_pin_pages(obj); > + if (err) > + goto put; > + > + list_add(&obj->st_link, objects); > + return obj; > + > +put: > + i915_gem_object_put(obj); > + return ERR_PTR(err); > +} > + > +static void igt_object_release(struct drm_i915_gem_object *obj) > +{ > + i915_gem_object_unpin_pages(obj); > + __i915_gem_object_put_pages(obj, I915_MM_NORMAL); > + i915_gem_object_put(obj); > + list_del(&obj->st_link); Did you just put the object before operating on it? Did you have a spare reference lying around? :) -Chris _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx