On 20 December 2016 at 13:08, Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> wrote: > A very simple mockery, just a random manager and timeline. Useful for > inserting objects and ordering retirement; and not much else. > > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/i915/i915_gem_gtt.c | 4 ++ > drivers/gpu/drm/i915/selftests/mock_gem_device.c | 22 +++++++ > drivers/gpu/drm/i915/selftests/mock_gem_device.h | 1 + > drivers/gpu/drm/i915/selftests/mock_ggtt.c | 79 ++++++++++++++++++++++++ > 4 files changed, 106 insertions(+) > create mode 100644 drivers/gpu/drm/i915/selftests/mock_ggtt.c > > diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c > index d35c46b477a6..5a98e2ca5a53 100644 > --- a/drivers/gpu/drm/i915/i915_gem_gtt.c > +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c > @@ -3576,3 +3576,7 @@ int i915_gem_gtt_insert(struct i915_address_space *vm, > size, alignment, colour, > start, end, DRM_MM_INSERT_EVICT); > } > + > +#if IS_ENABLED(CONFIG_DRM_I915_SELFTEST) > +#include "selftests/mock_ggtt.c" > +#endif > diff --git a/drivers/gpu/drm/i915/selftests/mock_gem_device.c b/drivers/gpu/drm/i915/selftests/mock_gem_device.c > index 95cf1d845bf1..025012ba92eb 100644 > --- a/drivers/gpu/drm/i915/selftests/mock_gem_device.c > +++ b/drivers/gpu/drm/i915/selftests/mock_gem_device.c > @@ -35,6 +35,7 @@ static void mock_device_release(struct drm_device *dev) > while (flush_work(&i915->mm.free_work)) > rcu_barrier(); > > + kmem_cache_destroy(i915->vmas); i915_gem_timeline_fini also. > kmem_cache_destroy(i915->objects); > put_device(&i915->drm.pdev->dev); > } > @@ -90,19 +91,40 @@ struct drm_i915_private *mock_gem_device(void) > i915->drm.pdev = pdev; > i915->drm.dev_private = i915; > > + drm_mode_config_init(&i915->drm); > + Why do we need this for mocking the ggtt ? > mkwrite_device_info(i915)->gen = -1; > > spin_lock_init(&i915->mm.object_stat_lock); > > INIT_WORK(&i915->mm.free_work, __i915_gem_free_work); > init_llist_head(&i915->mm.free_list); > + INIT_LIST_HEAD(&i915->mm.unbound_list); > + INIT_LIST_HEAD(&i915->mm.bound_list); > > i915->objects = KMEM_CACHE(mock_object, SLAB_HWCACHE_ALIGN); > if (!i915->objects) > goto err_device; > > + i915->vmas = KMEM_CACHE(i915_vma, SLAB_HWCACHE_ALIGN); > + if (!i915->vmas) > + goto err_objects; > + > + mutex_lock(&i915->drm.struct_mutex); > + INIT_LIST_HEAD(&i915->gt.timelines); > + err = i915_gem_timeline_init__global(i915); > + if (err) mutex_unlock(&i915->drm.struct_mutex); > + goto err_vmas; > + > + mock_init_ggtt(i915); > + mutex_unlock(&i915->drm.struct_mutex); > + > return i915; > > +err_vmas: > + kmem_cache_destroy(i915->vmas); > +err_objects: > + kmem_cache_destroy(i915->objects); > err_device: > kfree(i915); > return NULL; > diff --git a/drivers/gpu/drm/i915/selftests/mock_gem_device.h b/drivers/gpu/drm/i915/selftests/mock_gem_device.h > index 7ff7c848f731..5189f684a17e 100644 > --- a/drivers/gpu/drm/i915/selftests/mock_gem_device.h > +++ b/drivers/gpu/drm/i915/selftests/mock_gem_device.h > @@ -4,5 +4,6 @@ > #include "i915_drv.h" > > struct drm_i915_private *mock_gem_device(void); > +void mock_init_ggtt(struct drm_i915_private *i915); > > #endif /* !__MOCK_GEM_DEVICE_H__ */ > diff --git a/drivers/gpu/drm/i915/selftests/mock_ggtt.c b/drivers/gpu/drm/i915/selftests/mock_ggtt.c > new file mode 100644 > index 000000000000..d5f2811bc220 > --- /dev/null > +++ b/drivers/gpu/drm/i915/selftests/mock_ggtt.c > @@ -0,0 +1,79 @@ > +/* > + * 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 "mock_gem_device.h" > + > +static void mock_insert_page(struct i915_address_space *vm, > + dma_addr_t addr, > + uint64_t offset, > + enum i915_cache_level level, > + u32 flags) > +{ > +} > + > +static void mock_insert_entries(struct i915_address_space *vm, > + struct sg_table *st, > + uint64_t start, > + enum i915_cache_level level, u32 flags) > +{ > +} > + > +static int mock_bind_vma(struct i915_vma *vma, > + enum i915_cache_level cache_level, > + u32 flags) > +{ > + vma->pages = vma->obj->mm.pages; > + vma->flags |= I915_VMA_GLOBAL_BIND | I915_VMA_LOCAL_BIND; > + return 0; > +} > + > +static void mock_unbind_vma(struct i915_vma *vma) > +{ > +} > + > +static void mock_remove(struct i915_address_space *vm) > +{ > +} > + > +void mock_init_ggtt(struct drm_i915_private *i915) > +{ > + struct i915_ggtt *ggtt = &i915->ggtt; > + > + INIT_LIST_HEAD(&i915->vm_list); > + > + ggtt->base.i915 = i915; > + > + ggtt->mappable_base = 0; > + ggtt->mappable_end = 2048 * PAGE_SIZE; > + ggtt->base.total = 4096 * PAGE_SIZE; > + > + ggtt->base.clear_range = nop_clear_range; > + ggtt->base.insert_page = mock_insert_page; > + ggtt->base.insert_entries = mock_insert_entries; > + ggtt->base.bind_vma = mock_bind_vma; > + ggtt->base.unbind_vma = mock_unbind_vma; > + ggtt->base.cleanup = mock_remove; > + > + i915_address_space_init(&ggtt->base, i915, "global"); > +} Perhaps add a mock_fini_ggtt for device_release, with a call to i915_address_space_fini ? With that: Reviewed-by: Matthew Auld <matthew.auld@xxxxxxxxx> _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx