On 20 December 2016 at 13:08, Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> wrote: > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/i915/i915_gem.c | 1 + > drivers/gpu/drm/i915/selftests/mock_gem_device.c | 109 +++++++++++++++++++++++ > drivers/gpu/drm/i915/selftests/mock_gem_device.h | 8 ++ > drivers/gpu/drm/i915/selftests/mock_gem_object.h | 8 ++ > 4 files changed, 126 insertions(+) > create mode 100644 drivers/gpu/drm/i915/selftests/mock_gem_device.c > create mode 100644 drivers/gpu/drm/i915/selftests/mock_gem_device.h > create mode 100644 drivers/gpu/drm/i915/selftests/mock_gem_object.h > > diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c > index 4547d4cd2064..f52f1aafb4b9 100644 > --- a/drivers/gpu/drm/i915/i915_gem.c > +++ b/drivers/gpu/drm/i915/i915_gem.c > @@ -4976,4 +4976,5 @@ i915_gem_object_get_dma_address(struct drm_i915_gem_object *obj, > > #if IS_ENABLED(CONFIG_DRM_I915_SELFTEST) > #include "selftests/scatterlist.c" > +#include "selftests/mock_gem_device.c" > #endif > diff --git a/drivers/gpu/drm/i915/selftests/mock_gem_device.c b/drivers/gpu/drm/i915/selftests/mock_gem_device.c > new file mode 100644 > index 000000000000..95cf1d845bf1 > --- /dev/null > +++ b/drivers/gpu/drm/i915/selftests/mock_gem_device.c > @@ -0,0 +1,109 @@ > +/* > + * 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 <linux/pm_runtime.h> > + > +#include "mock_gem_device.h" > +#include "mock_gem_object.h" > + > +static void mock_device_release(struct drm_device *dev) > +{ > + struct drm_i915_private *i915 = to_i915(dev); > + > + rcu_barrier(); > + while (flush_work(&i915->mm.free_work)) > + rcu_barrier(); > + > + kmem_cache_destroy(i915->objects); > + put_device(&i915->drm.pdev->dev); > +} > + > +static struct drm_driver mock_driver = { > + .name = "mock", > + .driver_features = DRIVER_GEM, > + .release = mock_device_release, > + > + .gem_close_object = i915_gem_close_object, > + .gem_free_object_unlocked = i915_gem_free_object, > +}; > + > +static void release_dev(struct device *dev) > +{ > + struct pci_dev *pdev = to_pci_dev(dev); > + > + kfree(pdev); > +} > + > +struct drm_i915_private *mock_gem_device(void) > +{ > + struct drm_i915_private *i915; > + struct pci_dev *pdev; > + int err; > + > + i915 = kzalloc(sizeof(*i915), GFP_TEMPORARY); > + if (!i915) > + return NULL; > + > + pdev = kzalloc(sizeof(*pdev), GFP_TEMPORARY); > + if (!pdev) { > + kfree(i915); > + return NULL; goto err_device; > + } > + > + device_initialize(&pdev->dev); > + pdev->dev.release = release_dev; > + dev_set_name(&pdev->dev, "mock"); > + dma_coerce_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32)); > + > + pm_runtime_dont_use_autosuspend(&pdev->dev); > + pm_runtime_get_sync(&pdev->dev); > + pci_set_drvdata(pdev, i915); > + > + err = drm_dev_init(&i915->drm, &mock_driver, &pdev->dev); > + if (err) { > + pr_err("Failed to initialise mock GEM device: err=%d\n", err); > + put_device(&pdev->dev); > + kfree(i915); > + return NULL; goto err_device; > + } > + i915->drm.pdev = pdev; > + i915->drm.dev_private = i915; > + > + 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); > + > + i915->objects = KMEM_CACHE(mock_object, SLAB_HWCACHE_ALIGN); > + if (!i915->objects) put_device(&pdev->dev); With a proper commit message: Reviewed-by: Matthew Auld <matthew.auld@xxxxxxxxx> > + goto err_device; > + > + return i915; > + > +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 > new file mode 100644 > index 000000000000..7ff7c848f731 > --- /dev/null > +++ b/drivers/gpu/drm/i915/selftests/mock_gem_device.h > @@ -0,0 +1,8 @@ > +#ifndef __MOCK_GEM_DEVICE_H__ > +#define __MOCK_GEM_DEVICE_H__ > + > +#include "i915_drv.h" > + > +struct drm_i915_private *mock_gem_device(void); > + > +#endif /* !__MOCK_GEM_DEVICE_H__ */ > diff --git a/drivers/gpu/drm/i915/selftests/mock_gem_object.h b/drivers/gpu/drm/i915/selftests/mock_gem_object.h > new file mode 100644 > index 000000000000..9fbf67321662 > --- /dev/null > +++ b/drivers/gpu/drm/i915/selftests/mock_gem_object.h > @@ -0,0 +1,8 @@ > +#ifndef __MOCK_GEM_OBJECT_H__ > +#define __MOCK_GEM_OBJECT_H__ > + > +struct mock_object { > + struct drm_i915_gem_object base; > +}; > + > +#endif /* !__MOCK_GEM_OBJECT_H__ */ > -- > 2.11.0 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/intel-gfx _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx