On 20 December 2016 at 13:08, Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> wrote: > Very simple tests to just ask eviction to find some free space in a full > GTT and one with some available space. > > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/i915/i915_gem_evict.c | 4 + > drivers/gpu/drm/i915/selftests/i915_gem_evict.c | 237 +++++++++++++++++++++ > .../gpu/drm/i915/selftests/i915_mock_selftests.h | 1 + > 3 files changed, 242 insertions(+) > create mode 100644 drivers/gpu/drm/i915/selftests/i915_gem_evict.c > > diff --git a/drivers/gpu/drm/i915/i915_gem_evict.c b/drivers/gpu/drm/i915/i915_gem_evict.c > index f92f63e8749a..c01a9dd6298c 100644 > --- a/drivers/gpu/drm/i915/i915_gem_evict.c > +++ b/drivers/gpu/drm/i915/i915_gem_evict.c > @@ -383,3 +383,7 @@ int i915_gem_evict_vm(struct i915_address_space *vm, bool do_idle) > > return 0; > } > + > +#if IS_ENABLED(CONFIG_DRM_I915_SELFTEST) > +#include "selftests/i915_gem_evict.c" > +#endif > diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c > new file mode 100644 > index 000000000000..c31e6a6c98cd > --- /dev/null > +++ b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c > @@ -0,0 +1,237 @@ > +/* > + * Copyright © 2016 Intel Corporation > + * > + * Permission is hereby granted, free of charge, to any person obtaining a > + * copy of this software and associated documentation files (the "Software"), > + * to deal in the Software without restriction, including without limitation > + * the rights to use, copy, modify, merge, publish, distribute, sublicense, > + * and/or sell copies of the Software, and to permit persons to whom the > + * Software is furnished to do so, subject to the following conditions: > + * > + * The above copyright notice and this permission notice (including the next > + * paragraph) shall be included in all copies or substantial portions of the > + * Software. > + * > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL > + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING > + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS > + * IN THE SOFTWARE. > + * > + */ > + > +#include "i915_selftest.h" > + > +#include "mock_gem_device.h" > + > +static int populate_ggtt(struct drm_i915_private *i915) > +{ > + struct drm_i915_gem_object *obj; > + u64 size; > + > + for (size = 0; size < i915->ggtt.base.total; size += PAGE_SIZE) { > + struct i915_vma *vma; > + > + obj = i915_gem_object_create_internal(i915, PAGE_SIZE); > + if (IS_ERR(obj)) > + return PTR_ERR(obj); > + > + vma = i915_gem_object_ggtt_pin(obj, NULL, 0, 0, 0); > + if (IS_ERR(vma)) > + return PTR_ERR(vma); > + } > + > + if (!list_empty(&i915->mm.unbound_list)) { > + size = 0; > + list_for_each_entry(obj, &i915->mm.unbound_list, global_link) > + size++; > + > + pr_err("Found %lld objects unbound!\n", size); > + return -EINVAL; > + } > + > + if (list_empty(&i915->ggtt.base.inactive_list)) { > + pr_err("No objects on the GGTT inactive list!\n"); > + return -EINVAL; > + } > + > + return 0; > +} > + > +static void unpin_ggtt(struct drm_i915_private *i915) > +{ > + struct i915_vma *vma; > + > + list_for_each_entry(vma, &i915->ggtt.base.inactive_list, vm_link) > + i915_vma_unpin(vma); > +} > + > +static void cleanup_objects(struct drm_i915_private *i915) > +{ > + struct drm_i915_gem_object *obj, *on; > + > + list_for_each_entry_safe(obj, on, &i915->mm.unbound_list, global_link) > + i915_gem_object_put(obj); > + > + list_for_each_entry_safe(obj, on, &i915->mm.bound_list, global_link) > + i915_gem_object_put(obj); > + > + mutex_unlock(&i915->drm.struct_mutex); > + > + rcu_barrier(); > + while (flush_work(&i915->mm.free_work)) > + rcu_barrier(); i915_gem_drain_freed_objects(i915), likewise for device_release ? Reviewed-by: Matthew Auld <matthew.auld@xxxxxxxxx> _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx