mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-03-11 16:33:23 +07:00
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: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Matthew Auld <matthew.auld@intel.com> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: https://patchwork.freedesktop.org/patch/msgid/20191107180601.30815-3-chris@chris-wilson.co.uk
This commit is contained in:
parent
4748aa16d5
commit
85ca528ed7
@ -29,6 +29,7 @@ config DRM_I915_DEBUG
|
||||
select X86_MSR # used by igt/pm_rpm
|
||||
select DRM_VGEM # used by igt/prime_vgem (dmabuf interop checks)
|
||||
select DRM_DEBUG_MM if DRM=y
|
||||
select DRM_EXPORT_FOR_TESTS if m
|
||||
select DRM_DEBUG_SELFTEST
|
||||
select DMABUF_SELFTESTS
|
||||
select SW_SYNC # signaling validation framework (igt/syncobj*)
|
||||
@ -152,6 +153,7 @@ config DRM_I915_SELFTEST
|
||||
bool "Enable selftests upon driver load"
|
||||
depends on DRM_I915
|
||||
default n
|
||||
select DRM_EXPORT_FOR_TESTS if m
|
||||
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;
|
||||
struct file *file;
|
||||
|
||||
inode = kzalloc(sizeof(*inode), GFP_KERNEL);
|
||||
if (!inode) {
|
||||
err = -ENOMEM;
|
||||
goto err;
|
||||
}
|
||||
file = mock_drm_getfile(i915->drm.primary, O_RDWR);
|
||||
if (IS_ERR(file))
|
||||
return ERR_CAST(file);
|
||||
|
||||
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;
|
||||
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 };
|
||||
|
||||
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 */
|
||||
|
Loading…
Reference in New Issue
Block a user