return err;
}
-static int igt_write_huge(struct drm_i915_gem_object *obj)
+static int igt_write_huge(struct i915_gem_context *ctx,
+ struct drm_i915_gem_object *obj)
{
struct drm_i915_private *i915 = to_i915(obj->base.dev);
- struct i915_gem_context *ctx = i915->kernel_context;
struct i915_address_space *vm = ctx->ppgtt ? &ctx->ppgtt->base : &i915->ggtt.base;
struct intel_engine_cs *engine;
struct i915_vma *vma;
static int igt_ppgtt_exhaust_huge(void *arg)
{
- struct drm_i915_private *i915 = arg;
+ struct i915_gem_context *ctx = arg;
+ struct drm_i915_private *i915 = ctx->i915;
unsigned long supported = INTEL_INFO(i915)->page_sizes;
static unsigned int pages[ARRAY_SIZE(page_sizes)];
struct drm_i915_gem_object *obj;
/* Force the page-size for the gtt insertion */
obj->mm.page_sizes.sg = page_sizes;
- err = igt_write_huge(obj);
+ err = igt_write_huge(ctx, obj);
if (err) {
pr_err("exhaust write-huge failed with size=%u\n",
size);
static int igt_ppgtt_internal_huge(void *arg)
{
- struct drm_i915_private *i915 = arg;
+ struct i915_gem_context *ctx = arg;
+ struct drm_i915_private *i915 = ctx->i915;
struct drm_i915_gem_object *obj;
static const unsigned int sizes[] = {
SZ_64K,
goto out_unpin;
}
- err = igt_write_huge(obj);
+ err = igt_write_huge(ctx, obj);
if (err) {
pr_err("internal write-huge failed with size=%u\n",
size);
static int igt_ppgtt_gemfs_huge(void *arg)
{
- struct drm_i915_private *i915 = arg;
+ struct i915_gem_context *ctx = arg;
+ struct drm_i915_private *i915 = ctx->i915;
struct drm_i915_gem_object *obj;
static const unsigned int sizes[] = {
SZ_2M,
goto out_unpin;
}
- err = igt_write_huge(obj);
+ err = igt_write_huge(ctx, obj);
if (err) {
pr_err("gemfs write-huge failed with size=%u\n",
size);
static int igt_ppgtt_pin_update(void *arg)
{
- struct drm_i915_private *dev_priv = arg;
+ struct i915_gem_context *ctx = arg;
+ struct drm_i915_private *dev_priv = ctx->i915;
unsigned long supported = INTEL_INFO(dev_priv)->page_sizes;
- struct i915_hw_ppgtt *ppgtt = dev_priv->kernel_context->ppgtt;
+ struct i915_hw_ppgtt *ppgtt = ctx->ppgtt;
struct drm_i915_gem_object *obj;
struct i915_vma *vma;
unsigned int flags = PIN_USER | PIN_OFFSET_FIXED;
* land in the now stale 2M page.
*/
- err = gpu_write(vma, dev_priv->kernel_context, dev_priv->engine[RCS],
- 0, 0xdeadbeaf);
+ err = gpu_write(vma, ctx, dev_priv->engine[RCS], 0, 0xdeadbeaf);
if (err)
goto out_unpin;
static int igt_tmpfs_fallback(void *arg)
{
- struct drm_i915_private *i915 = arg;
+ struct i915_gem_context *ctx = arg;
+ struct drm_i915_private *i915 = ctx->i915;
struct vfsmount *gemfs = i915->mm.gemfs;
- struct i915_gem_context *ctx = i915->kernel_context;
struct i915_address_space *vm = ctx->ppgtt ? &ctx->ppgtt->base : &i915->ggtt.base;
struct drm_i915_gem_object *obj;
struct i915_vma *vma;
static int igt_shrink_thp(void *arg)
{
- struct drm_i915_private *i915 = arg;
- struct i915_gem_context *ctx = i915->kernel_context;
+ struct i915_gem_context *ctx = arg;
+ struct drm_i915_private *i915 = ctx->i915;
struct i915_address_space *vm = ctx->ppgtt ? &ctx->ppgtt->base : &i915->ggtt.base;
struct drm_i915_gem_object *obj;
struct i915_vma *vma;
if (err)
goto out_unpin;
- err = gpu_write(vma, i915->kernel_context, i915->engine[RCS], 0,
- 0xdeadbeaf);
+ err = gpu_write(vma, ctx, i915->engine[RCS], 0, 0xdeadbeaf);
if (err)
goto out_unpin;
SUBTEST(igt_ppgtt_gemfs_huge),
SUBTEST(igt_ppgtt_internal_huge),
};
+ struct drm_file *file;
+ struct i915_gem_context *ctx;
int err;
if (!USES_PPGTT(dev_priv)) {
return 0;
}
+ file = mock_file(dev_priv);
+ if (IS_ERR(file))
+ return PTR_ERR(file);
+
mutex_lock(&dev_priv->drm.struct_mutex);
- err = i915_subtests(tests, dev_priv);
+
+ ctx = live_context(dev_priv, file);
+ if (IS_ERR(ctx)) {
+ err = PTR_ERR(ctx);
+ goto out_unlock;
+ }
+
+ err = i915_subtests(tests, ctx);
+
+out_unlock:
mutex_unlock(&dev_priv->drm.struct_mutex);
+ mock_file_free(dev_priv, file);
+
return err;
}