@@ -38,6 +38,7 @@ config DRM_I915_DEBUG
select DRM_VGEM # used by igt/prime_vgem (dmabuf interop checks)
select DRM_DEBUG_MM if DRM=y
select DRM_DEBUG_SELFTEST
+ select DRM_DEBUG_SELFTEST_MODULE
select DMABUF_SELFTESTS
select SW_SYNC # signaling validation framework (igt/syncobj*)
select DRM_I915_SW_FENCE_DEBUG_OBJECTS
@@ -160,6 +161,7 @@ config DRM_I915_SELFTEST
bool "Enable selftests upon driver load"
depends on DRM_I915
default n
+ select DRM_DEBUG_SELFTEST_MODULE
select FAULT_INJECTION
select PRIME_NUMBERS
help
@@ -1944,6 +1944,6 @@ int i915_gem_huge_page_live_selftests(struct drm_i915_private *i915)
err = i915_subtests(tests, ctx);
out_file:
- mock_file_free(i915, file);
+ mock_file_put(file);
return err;
}
@@ -149,7 +149,7 @@ static int live_nop_switch(void *arg)
}
out_file:
- mock_file_free(i915, file);
+ mock_file_put(file);
return err;
}
@@ -377,7 +377,7 @@ static int live_parallel_switch(void *arg)
}
kfree(data);
out_file:
- mock_file_free(i915, file);
+ mock_file_put(file);
return err;
}
@@ -716,7 +716,7 @@ static int igt_ctx_exec(void *arg)
if (igt_live_test_end(&t))
err = -EIO;
- mock_file_free(i915, file);
+ mock_file_put(file);
if (err)
return err;
@@ -854,7 +854,7 @@ static int igt_shared_ctx_exec(void *arg)
if (igt_live_test_end(&t))
err = -EIO;
out_file:
- mock_file_free(i915, file);
+ mock_file_put(file);
return err;
}
@@ -1426,7 +1426,7 @@ static int igt_ctx_readonly(void *arg)
if (igt_live_test_end(&t))
err = -EIO;
- mock_file_free(i915, file);
+ mock_file_put(file);
return err;
}
@@ -1750,7 +1750,7 @@ static int igt_vm_isolation(void *arg)
out_file:
if (igt_live_test_end(&t))
err = -EIO;
- mock_file_free(i915, file);
+ mock_file_put(file);
return err;
}
@@ -301,7 +301,7 @@ static int igt_fill_blt_thread(void *arg)
intel_context_put(ce);
out_file:
- mock_file_free(i915, file);
+ mock_file_put(file);
return err;
}
@@ -432,7 +432,7 @@ static int igt_copy_blt_thread(void *arg)
intel_context_put(ce);
out_file:
- mock_file_free(i915, file);
+ mock_file_put(file);
return err;
}
@@ -313,7 +313,7 @@ static int live_active_context(void *arg)
}
out_file:
- mock_file_free(gt->i915, file);
+ mock_file_put(file);
return err;
}
@@ -423,7 +423,7 @@ static int live_remote_context(void *arg)
}
out_file:
- mock_file_free(gt->i915, file);
+ mock_file_put(file);
return err;
}
@@ -439,7 +439,7 @@ static int igt_reset_nop(void *arg)
err = igt_flush_test(gt->i915);
out:
- mock_file_free(gt->i915, file);
+ mock_file_put(file);
if (intel_gt_is_wedged(gt))
err = -EIO;
return err;
@@ -535,7 +535,7 @@ static int igt_reset_nop_engine(void *arg)
err = igt_flush_test(gt->i915);
out:
- mock_file_free(gt->i915, file);
+ mock_file_put(file);
if (intel_gt_is_wedged(gt))
err = -EIO;
return err;
@@ -752,7 +752,7 @@ static int active_engine(void *data)
}
err_file:
- mock_file_free(engine->i915, file);
+ mock_file_put(file);
return err;
}
@@ -1325,7 +1325,7 @@ static int igt_reset_evict_ppgtt(void *arg)
i915_vm_put(vm);
out:
- mock_file_free(gt->i915, file);
+ mock_file_put(file);
return err;
}
@@ -739,7 +739,7 @@ static int live_dirty_whitelist(void *arg)
}
out_file:
- mock_file_free(gt->i915, file);
+ mock_file_put(file);
return err;
}
@@ -163,7 +163,7 @@ static int igt_gem_suspend(void *arg)
err = switch_to_context(ctx);
out:
- mock_file_free(i915, file);
+ mock_file_put(file);
return err;
}
@@ -198,7 +198,7 @@ static int igt_gem_hibernate(void *arg)
err = switch_to_context(ctx);
out:
- mock_file_free(i915, file);
+ mock_file_put(file);
return err;
}
@@ -515,7 +515,7 @@ static int igt_evict_contexts(void *arg)
pr_info("Submitted %lu contexts/requests on %s\n",
count, engine->name);
- mock_file_free(i915, file);
+ mock_file_put(file);
if (err)
break;
}
@@ -1026,7 +1026,7 @@ static int exercise_ppgtt(struct drm_i915_private *dev_priv,
i915_vm_put(&ppgtt->vm);
out_free:
- mock_file_free(dev_priv, file);
+ mock_file_put(file);
return err;
}
@@ -2022,7 +2022,7 @@ static int igt_cs_tlb(void *arg)
out_vm:
i915_vm_put(vm);
out_unlock:
- mock_file_free(i915, file);
+ mock_file_put(file);
return err;
}
@@ -1430,7 +1430,7 @@ static int live_breadcrumbs_smoketest(void *arg)
out_smoke:
kfree(smoke);
out_file:
- mock_file_free(i915, file);
+ mock_file_put(file);
out_rpm:
intel_runtime_pm_put(&i915->runtime_pm, wakeref);
@@ -439,7 +439,7 @@ static int igt_lmem_write_gpu(void *arg)
out_put:
i915_gem_object_put(obj);
out_file:
- mock_file_free(i915, file);
+ mock_file_put(file);
return err;
}
@@ -22,52 +22,17 @@
*
*/
+#include <drm/drm_file.h>
+
#include "mock_drm.h"
struct drm_file *mock_file(struct drm_i915_private *i915)
{
- struct file *filp;
- struct inode *inode;
- struct drm_file *file;
- int err;
-
- inode = kzalloc(sizeof(*inode), GFP_KERNEL);
- if (!inode) {
- err = -ENOMEM;
- goto err;
- }
-
- inode->i_rdev = i915->drm.primary->index;
-
- filp = kzalloc(sizeof(*filp), GFP_KERNEL);
- if (!filp) {
- err = -ENOMEM;
- goto err_inode;
- }
-
- err = drm_open(inode, filp);
- if (err)
- goto err_filp;
+ struct file *file;
- file = filp->private_data;
- memset(&file->filp, POISON_INUSE, sizeof(file->filp));
- file->authenticated = true;
-
- kfree(filp);
- kfree(inode);
- return file;
-
-err_filp:
- kfree(filp);
-err_inode:
- kfree(inode);
-err:
- return ERR_PTR(err);
-}
-
-void mock_file_free(struct drm_i915_private *i915, struct drm_file *file)
-{
- struct file filp = { .private_data = file };
+ file = mock_drm_getfile(i915->drm.primary, O_RDWR);
+ if (IS_ERR(file))
+ return ERR_CAST(file);
- drm_release(NULL, &filp);
+ return file->private_data;
}
@@ -25,7 +25,13 @@
#ifndef __MOCK_DRM_H
#define __MOCK_DRM_H
+struct drm_file;
+struct drm_i915_private;
+
struct drm_file *mock_file(struct drm_i915_private *i915);
-void mock_file_free(struct drm_i915_private *i915, struct drm_file *file);
+static inline void mock_file_put(struct drm_file *file)
+{
+ fput(file->filp);
+}
#endif /* !__MOCK_DRM_H */
As drm now exports a method to create an anonymous struct file around a drm_device for internal use, make use of it to avoid our horrible hacks. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> --- drivers/gpu/drm/i915/Kconfig.debug | 2 + .../gpu/drm/i915/gem/selftests/huge_pages.c | 2 +- .../drm/i915/gem/selftests/i915_gem_context.c | 12 ++--- .../i915/gem/selftests/i915_gem_object_blt.c | 4 +- drivers/gpu/drm/i915/gt/selftest_context.c | 4 +- drivers/gpu/drm/i915/gt/selftest_hangcheck.c | 8 +-- .../gpu/drm/i915/gt/selftest_workarounds.c | 2 +- drivers/gpu/drm/i915/selftests/i915_gem.c | 4 +- .../gpu/drm/i915/selftests/i915_gem_evict.c | 2 +- drivers/gpu/drm/i915/selftests/i915_gem_gtt.c | 4 +- drivers/gpu/drm/i915/selftests/i915_request.c | 2 +- .../drm/i915/selftests/intel_memory_region.c | 2 +- drivers/gpu/drm/i915/selftests/mock_drm.c | 49 +++---------------- drivers/gpu/drm/i915/selftests/mock_drm.h | 8 ++- 14 files changed, 39 insertions(+), 66 deletions(-)