Commit 85ca528e authored by Chris Wilson's avatar Chris Wilson

drm/i915/selftests: Replace mock_file hackery with drm's true fake

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.

Danial suggested that the mock_file_put() wrapper was suitable for
drm-core, along with the mock_drm_getfile() [and that the vestigal
mock_drm_file() in this patch should perhaps be the drm interface
itself]. However, the eventual goal is to remove the mock_drm_file() and
use the struct file and fput() directly, in this patch we take a simple
transition in that direction.
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarMatthew Auld <matthew.auld@intel.com>
Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/20191107180601.30815-3-chris@chris-wilson.co.uk
parent 4748aa16
...@@ -29,6 +29,7 @@ config DRM_I915_DEBUG ...@@ -29,6 +29,7 @@ config DRM_I915_DEBUG
select X86_MSR # used by igt/pm_rpm select X86_MSR # used by igt/pm_rpm
select DRM_VGEM # used by igt/prime_vgem (dmabuf interop checks) select DRM_VGEM # used by igt/prime_vgem (dmabuf interop checks)
select DRM_DEBUG_MM if DRM=y select DRM_DEBUG_MM if DRM=y
select DRM_EXPORT_FOR_TESTS if m
select DRM_DEBUG_SELFTEST select DRM_DEBUG_SELFTEST
select DMABUF_SELFTESTS select DMABUF_SELFTESTS
select SW_SYNC # signaling validation framework (igt/syncobj*) select SW_SYNC # signaling validation framework (igt/syncobj*)
...@@ -152,6 +153,7 @@ config DRM_I915_SELFTEST ...@@ -152,6 +153,7 @@ config DRM_I915_SELFTEST
bool "Enable selftests upon driver load" bool "Enable selftests upon driver load"
depends on DRM_I915 depends on DRM_I915
default n default n
select DRM_EXPORT_FOR_TESTS if m
select FAULT_INJECTION select FAULT_INJECTION
select PRIME_NUMBERS select PRIME_NUMBERS
help help
......
...@@ -1944,6 +1944,6 @@ int i915_gem_huge_page_live_selftests(struct drm_i915_private *i915) ...@@ -1944,6 +1944,6 @@ int i915_gem_huge_page_live_selftests(struct drm_i915_private *i915)
err = i915_subtests(tests, ctx); err = i915_subtests(tests, ctx);
out_file: out_file:
mock_file_free(i915, file); mock_file_put(file);
return err; return err;
} }
...@@ -149,7 +149,7 @@ static int live_nop_switch(void *arg) ...@@ -149,7 +149,7 @@ static int live_nop_switch(void *arg)
} }
out_file: out_file:
mock_file_free(i915, file); mock_file_put(file);
return err; return err;
} }
...@@ -377,7 +377,7 @@ static int live_parallel_switch(void *arg) ...@@ -377,7 +377,7 @@ static int live_parallel_switch(void *arg)
} }
kfree(data); kfree(data);
out_file: out_file:
mock_file_free(i915, file); mock_file_put(file);
return err; return err;
} }
...@@ -716,7 +716,7 @@ static int igt_ctx_exec(void *arg) ...@@ -716,7 +716,7 @@ static int igt_ctx_exec(void *arg)
if (igt_live_test_end(&t)) if (igt_live_test_end(&t))
err = -EIO; err = -EIO;
mock_file_free(i915, file); mock_file_put(file);
if (err) if (err)
return err; return err;
...@@ -854,7 +854,7 @@ static int igt_shared_ctx_exec(void *arg) ...@@ -854,7 +854,7 @@ static int igt_shared_ctx_exec(void *arg)
if (igt_live_test_end(&t)) if (igt_live_test_end(&t))
err = -EIO; err = -EIO;
out_file: out_file:
mock_file_free(i915, file); mock_file_put(file);
return err; return err;
} }
...@@ -1426,7 +1426,7 @@ static int igt_ctx_readonly(void *arg) ...@@ -1426,7 +1426,7 @@ static int igt_ctx_readonly(void *arg)
if (igt_live_test_end(&t)) if (igt_live_test_end(&t))
err = -EIO; err = -EIO;
mock_file_free(i915, file); mock_file_put(file);
return err; return err;
} }
...@@ -1750,7 +1750,7 @@ static int igt_vm_isolation(void *arg) ...@@ -1750,7 +1750,7 @@ static int igt_vm_isolation(void *arg)
out_file: out_file:
if (igt_live_test_end(&t)) if (igt_live_test_end(&t))
err = -EIO; err = -EIO;
mock_file_free(i915, file); mock_file_put(file);
return err; return err;
} }
......
...@@ -301,7 +301,7 @@ static int igt_fill_blt_thread(void *arg) ...@@ -301,7 +301,7 @@ static int igt_fill_blt_thread(void *arg)
intel_context_put(ce); intel_context_put(ce);
out_file: out_file:
mock_file_free(i915, file); mock_file_put(file);
return err; return err;
} }
...@@ -432,7 +432,7 @@ static int igt_copy_blt_thread(void *arg) ...@@ -432,7 +432,7 @@ static int igt_copy_blt_thread(void *arg)
intel_context_put(ce); intel_context_put(ce);
out_file: out_file:
mock_file_free(i915, file); mock_file_put(file);
return err; return err;
} }
......
...@@ -313,7 +313,7 @@ static int live_active_context(void *arg) ...@@ -313,7 +313,7 @@ static int live_active_context(void *arg)
} }
out_file: out_file:
mock_file_free(gt->i915, file); mock_file_put(file);
return err; return err;
} }
...@@ -423,7 +423,7 @@ static int live_remote_context(void *arg) ...@@ -423,7 +423,7 @@ static int live_remote_context(void *arg)
} }
out_file: out_file:
mock_file_free(gt->i915, file); mock_file_put(file);
return err; return err;
} }
......
...@@ -439,7 +439,7 @@ static int igt_reset_nop(void *arg) ...@@ -439,7 +439,7 @@ static int igt_reset_nop(void *arg)
err = igt_flush_test(gt->i915); err = igt_flush_test(gt->i915);
out: out:
mock_file_free(gt->i915, file); mock_file_put(file);
if (intel_gt_is_wedged(gt)) if (intel_gt_is_wedged(gt))
err = -EIO; err = -EIO;
return err; return err;
...@@ -535,7 +535,7 @@ static int igt_reset_nop_engine(void *arg) ...@@ -535,7 +535,7 @@ static int igt_reset_nop_engine(void *arg)
err = igt_flush_test(gt->i915); err = igt_flush_test(gt->i915);
out: out:
mock_file_free(gt->i915, file); mock_file_put(file);
if (intel_gt_is_wedged(gt)) if (intel_gt_is_wedged(gt))
err = -EIO; err = -EIO;
return err; return err;
...@@ -752,7 +752,7 @@ static int active_engine(void *data) ...@@ -752,7 +752,7 @@ static int active_engine(void *data)
} }
err_file: err_file:
mock_file_free(engine->i915, file); mock_file_put(file);
return err; return err;
} }
...@@ -1325,7 +1325,7 @@ static int igt_reset_evict_ppgtt(void *arg) ...@@ -1325,7 +1325,7 @@ static int igt_reset_evict_ppgtt(void *arg)
i915_vm_put(vm); i915_vm_put(vm);
out: out:
mock_file_free(gt->i915, file); mock_file_put(file);
return err; return err;
} }
......
...@@ -739,7 +739,7 @@ static int live_dirty_whitelist(void *arg) ...@@ -739,7 +739,7 @@ static int live_dirty_whitelist(void *arg)
} }
out_file: out_file:
mock_file_free(gt->i915, file); mock_file_put(file);
return err; return err;
} }
......
...@@ -163,7 +163,7 @@ static int igt_gem_suspend(void *arg) ...@@ -163,7 +163,7 @@ static int igt_gem_suspend(void *arg)
err = switch_to_context(ctx); err = switch_to_context(ctx);
out: out:
mock_file_free(i915, file); mock_file_put(file);
return err; return err;
} }
...@@ -198,7 +198,7 @@ static int igt_gem_hibernate(void *arg) ...@@ -198,7 +198,7 @@ static int igt_gem_hibernate(void *arg)
err = switch_to_context(ctx); err = switch_to_context(ctx);
out: out:
mock_file_free(i915, file); mock_file_put(file);
return err; return err;
} }
......
...@@ -515,7 +515,7 @@ static int igt_evict_contexts(void *arg) ...@@ -515,7 +515,7 @@ static int igt_evict_contexts(void *arg)
pr_info("Submitted %lu contexts/requests on %s\n", pr_info("Submitted %lu contexts/requests on %s\n",
count, engine->name); count, engine->name);
mock_file_free(i915, file); mock_file_put(file);
if (err) if (err)
break; break;
} }
......
...@@ -1026,7 +1026,7 @@ static int exercise_ppgtt(struct drm_i915_private *dev_priv, ...@@ -1026,7 +1026,7 @@ static int exercise_ppgtt(struct drm_i915_private *dev_priv,
i915_vm_put(&ppgtt->vm); i915_vm_put(&ppgtt->vm);
out_free: out_free:
mock_file_free(dev_priv, file); mock_file_put(file);
return err; return err;
} }
...@@ -2022,7 +2022,7 @@ static int igt_cs_tlb(void *arg) ...@@ -2022,7 +2022,7 @@ static int igt_cs_tlb(void *arg)
out_vm: out_vm:
i915_vm_put(vm); i915_vm_put(vm);
out_unlock: out_unlock:
mock_file_free(i915, file); mock_file_put(file);
return err; return err;
} }
......
...@@ -1430,7 +1430,7 @@ static int live_breadcrumbs_smoketest(void *arg) ...@@ -1430,7 +1430,7 @@ static int live_breadcrumbs_smoketest(void *arg)
out_smoke: out_smoke:
kfree(smoke); kfree(smoke);
out_file: out_file:
mock_file_free(i915, file); mock_file_put(file);
out_rpm: out_rpm:
intel_runtime_pm_put(&i915->runtime_pm, wakeref); intel_runtime_pm_put(&i915->runtime_pm, wakeref);
......
...@@ -439,7 +439,7 @@ static int igt_lmem_write_gpu(void *arg) ...@@ -439,7 +439,7 @@ static int igt_lmem_write_gpu(void *arg)
out_put: out_put:
i915_gem_object_put(obj); i915_gem_object_put(obj);
out_file: out_file:
mock_file_free(i915, file); mock_file_put(file);
return err; return err;
} }
......
...@@ -22,52 +22,17 @@ ...@@ -22,52 +22,17 @@
* *
*/ */
#include <drm/drm_file.h>
#include "mock_drm.h" #include "mock_drm.h"
struct drm_file *mock_file(struct drm_i915_private *i915) struct drm_file *mock_file(struct drm_i915_private *i915)
{ {
struct file *filp; struct file *file;
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;
file = filp->private_data; file = mock_drm_getfile(i915->drm.primary, O_RDWR);
memset(&file->filp, POISON_INUSE, sizeof(file->filp)); if (IS_ERR(file))
file->authenticated = true; return ERR_CAST(file);
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 };
drm_release(NULL, &filp); return file->private_data;
} }
...@@ -25,7 +25,13 @@ ...@@ -25,7 +25,13 @@
#ifndef __MOCK_DRM_H #ifndef __MOCK_DRM_H
#define __MOCK_DRM_H #define __MOCK_DRM_H
struct drm_file;
struct drm_i915_private;
struct drm_file *mock_file(struct drm_i915_private *i915); 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 */ #endif /* !__MOCK_DRM_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment