All of lore.kernel.org
 help / color / mirror / Atom feed
* mock_drm_getfile(), take three
@ 2019-11-06 14:24 ` Chris Wilson
  0 siblings, 0 replies; 34+ messages in thread
From: Chris Wilson @ 2019-11-06 14:24 UTC (permalink / raw)
  To: dri-devel; +Cc: intel-gfx

Like v2, but with more Kconfig hackery so that i915.ko can request
builtin-drm (and drm-selftests) export the symbols it requires for its
selftests.
-Chris


_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [Intel-gfx] mock_drm_getfile(), take three
@ 2019-11-06 14:24 ` Chris Wilson
  0 siblings, 0 replies; 34+ messages in thread
From: Chris Wilson @ 2019-11-06 14:24 UTC (permalink / raw)
  To: dri-devel; +Cc: intel-gfx

Like v2, but with more Kconfig hackery so that i915.ko can request
builtin-drm (and drm-selftests) export the symbols it requires for its
selftests.
-Chris


_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [PATCH v3 1/5] drm: Move EXPORT_SYMBOL_FOR_TESTS_ONLY under a separate Kconfig
@ 2019-11-06 14:24   ` Chris Wilson
  0 siblings, 0 replies; 34+ messages in thread
From: Chris Wilson @ 2019-11-06 14:24 UTC (permalink / raw)
  To: dri-devel; +Cc: Daniel Vetter, intel-gfx

Currently, we only export symbols for drm-selftests which are either
compiled as modules or into the main drm builtin. However, if we want to
export symbols from drm.ko for the drivers' selftests, we require a
means of controlling that export separately. So we add a new Kconfig to
determine whether or not the EXPORT_SYMBOL_FOR_TESTS_ONLY() takes
effect.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
---
 drivers/gpu/drm/Kconfig | 4 ++++
 include/drm/drm_util.h  | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index 617d9c3a86c3..d3560afe34d3 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -54,6 +54,9 @@ config DRM_DEBUG_MM
 
 	  If in doubt, say "N".
 
+config DRM_EXPORT_FOR_TESTS
+	bool
+
 config DRM_DEBUG_SELFTEST
 	tristate "kselftests for DRM"
 	depends on DRM
@@ -61,6 +64,7 @@ config DRM_DEBUG_SELFTEST
 	select PRIME_NUMBERS
 	select DRM_LIB_RANDOM
 	select DRM_KMS_HELPER
+	select DRM_EXPORT_FOR_TESTS if m
 	default n
 	help
 	  This option provides kernel modules that can be used to run
diff --git a/include/drm/drm_util.h b/include/drm/drm_util.h
index 07b8e9f04599..79952d8c4bba 100644
--- a/include/drm/drm_util.h
+++ b/include/drm/drm_util.h
@@ -41,7 +41,7 @@
  * Use EXPORT_SYMBOL_FOR_TESTS_ONLY() for functions that shall
  * only be visible for drmselftests.
  */
-#if defined(CONFIG_DRM_DEBUG_SELFTEST_MODULE)
+#if defined(CONFIG_DRM_EXPORT_FOR_TESTS)
 #define EXPORT_SYMBOL_FOR_TESTS_ONLY(x) EXPORT_SYMBOL(x)
 #else
 #define EXPORT_SYMBOL_FOR_TESTS_ONLY(x)
-- 
2.24.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH v3 1/5] drm: Move EXPORT_SYMBOL_FOR_TESTS_ONLY under a separate Kconfig
@ 2019-11-06 14:24   ` Chris Wilson
  0 siblings, 0 replies; 34+ messages in thread
From: Chris Wilson @ 2019-11-06 14:24 UTC (permalink / raw)
  To: dri-devel; +Cc: Daniel Vetter, intel-gfx

Currently, we only export symbols for drm-selftests which are either
compiled as modules or into the main drm builtin. However, if we want to
export symbols from drm.ko for the drivers' selftests, we require a
means of controlling that export separately. So we add a new Kconfig to
determine whether or not the EXPORT_SYMBOL_FOR_TESTS_ONLY() takes
effect.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
---
 drivers/gpu/drm/Kconfig | 4 ++++
 include/drm/drm_util.h  | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index 617d9c3a86c3..d3560afe34d3 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -54,6 +54,9 @@ config DRM_DEBUG_MM
 
 	  If in doubt, say "N".
 
+config DRM_EXPORT_FOR_TESTS
+	bool
+
 config DRM_DEBUG_SELFTEST
 	tristate "kselftests for DRM"
 	depends on DRM
@@ -61,6 +64,7 @@ config DRM_DEBUG_SELFTEST
 	select PRIME_NUMBERS
 	select DRM_LIB_RANDOM
 	select DRM_KMS_HELPER
+	select DRM_EXPORT_FOR_TESTS if m
 	default n
 	help
 	  This option provides kernel modules that can be used to run
diff --git a/include/drm/drm_util.h b/include/drm/drm_util.h
index 07b8e9f04599..79952d8c4bba 100644
--- a/include/drm/drm_util.h
+++ b/include/drm/drm_util.h
@@ -41,7 +41,7 @@
  * Use EXPORT_SYMBOL_FOR_TESTS_ONLY() for functions that shall
  * only be visible for drmselftests.
  */
-#if defined(CONFIG_DRM_DEBUG_SELFTEST_MODULE)
+#if defined(CONFIG_DRM_EXPORT_FOR_TESTS)
 #define EXPORT_SYMBOL_FOR_TESTS_ONLY(x) EXPORT_SYMBOL(x)
 #else
 #define EXPORT_SYMBOL_FOR_TESTS_ONLY(x)
-- 
2.24.0

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [Intel-gfx] [PATCH v3 1/5] drm: Move EXPORT_SYMBOL_FOR_TESTS_ONLY under a separate Kconfig
@ 2019-11-06 14:24   ` Chris Wilson
  0 siblings, 0 replies; 34+ messages in thread
From: Chris Wilson @ 2019-11-06 14:24 UTC (permalink / raw)
  To: dri-devel; +Cc: Daniel Vetter, intel-gfx

Currently, we only export symbols for drm-selftests which are either
compiled as modules or into the main drm builtin. However, if we want to
export symbols from drm.ko for the drivers' selftests, we require a
means of controlling that export separately. So we add a new Kconfig to
determine whether or not the EXPORT_SYMBOL_FOR_TESTS_ONLY() takes
effect.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
---
 drivers/gpu/drm/Kconfig | 4 ++++
 include/drm/drm_util.h  | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index 617d9c3a86c3..d3560afe34d3 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -54,6 +54,9 @@ config DRM_DEBUG_MM
 
 	  If in doubt, say "N".
 
+config DRM_EXPORT_FOR_TESTS
+	bool
+
 config DRM_DEBUG_SELFTEST
 	tristate "kselftests for DRM"
 	depends on DRM
@@ -61,6 +64,7 @@ config DRM_DEBUG_SELFTEST
 	select PRIME_NUMBERS
 	select DRM_LIB_RANDOM
 	select DRM_KMS_HELPER
+	select DRM_EXPORT_FOR_TESTS if m
 	default n
 	help
 	  This option provides kernel modules that can be used to run
diff --git a/include/drm/drm_util.h b/include/drm/drm_util.h
index 07b8e9f04599..79952d8c4bba 100644
--- a/include/drm/drm_util.h
+++ b/include/drm/drm_util.h
@@ -41,7 +41,7 @@
  * Use EXPORT_SYMBOL_FOR_TESTS_ONLY() for functions that shall
  * only be visible for drmselftests.
  */
-#if defined(CONFIG_DRM_DEBUG_SELFTEST_MODULE)
+#if defined(CONFIG_DRM_EXPORT_FOR_TESTS)
 #define EXPORT_SYMBOL_FOR_TESTS_ONLY(x) EXPORT_SYMBOL(x)
 #else
 #define EXPORT_SYMBOL_FOR_TESTS_ONLY(x)
-- 
2.24.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH v3 2/5] drm: Expose a method for creating anonymous struct file around drm_minor
@ 2019-11-06 14:24   ` Chris Wilson
  0 siblings, 0 replies; 34+ messages in thread
From: Chris Wilson @ 2019-11-06 14:24 UTC (permalink / raw)
  To: dri-devel; +Cc: Daniel Vetter, intel-gfx

Sometimes we need to create a struct file to wrap a drm_device, as it
the user were to have opened /dev/dri/card0 but to do so anonymously
(i.e. for internal use). Provide a utility method to create a struct
file with the drm_device->driver.fops, that wrap the drm_device.

v2: Restrict usage to selftests

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
---
 drivers/gpu/drm/drm_file.c | 42 ++++++++++++++++++++++++++++++++++++++
 include/drm/drm_file.h     |  3 +++
 2 files changed, 45 insertions(+)

diff --git a/drivers/gpu/drm/drm_file.c b/drivers/gpu/drm/drm_file.c
index ea34bc991858..4d9385d1bf2d 100644
--- a/drivers/gpu/drm/drm_file.c
+++ b/drivers/gpu/drm/drm_file.c
@@ -31,7 +31,9 @@
  * OTHER DEALINGS IN THE SOFTWARE.
  */
 
+#include <linux/anon_inodes.h>
 #include <linux/dma-fence.h>
+#include <linux/file.h>
 #include <linux/module.h>
 #include <linux/pci.h>
 #include <linux/poll.h>
@@ -754,3 +756,43 @@ void drm_send_event(struct drm_device *dev, struct drm_pending_event *e)
 	spin_unlock_irqrestore(&dev->event_lock, irqflags);
 }
 EXPORT_SYMBOL(drm_send_event);
+
+/**
+ * mock_drm_getfile - Create a new struct file for the drm device
+ * @minor: drm minor to wrap (e.g. #drm_device.primary)
+ * @flags: file creation mode (O_RDWR etc)
+ *
+ * This create a new struct file that wraps a DRM file context around a
+ * DRM minor. This mimicks userspace opening e.g. /dev/dri/card0, but without
+ * invoking userspace. The struct file may be operated on using its f_op
+ * (the drm_device.driver.fops) to mimick userspace operations, or be supplied
+ * to userspace facing functions as an internal/anonymous client.
+ *
+ * RETURNS:
+ * Pointer to newly created struct file, ERR_PTR on failure.
+ */
+struct file *mock_drm_getfile(struct drm_minor *minor, unsigned int flags)
+{
+	struct drm_device *dev = minor->dev;
+	struct drm_file *priv;
+	struct file *file;
+
+	priv = drm_file_alloc(minor);
+	if (IS_ERR(priv))
+		return ERR_CAST(priv);
+
+	file = anon_inode_getfile("drm", dev->driver->fops, priv, flags);
+	if (IS_ERR(file)) {
+		drm_file_free(priv);
+		return file;
+	}
+
+	/* Everyone shares a single global address space */
+	file->f_mapping = dev->anon_inode->i_mapping;
+
+	drm_dev_get(dev);
+	priv->filp = file;
+
+	return file;
+}
+EXPORT_SYMBOL_FOR_TESTS_ONLY(mock_drm_getfile);
diff --git a/include/drm/drm_file.h b/include/drm/drm_file.h
index 67af60bb527a..8b099b347817 100644
--- a/include/drm/drm_file.h
+++ b/include/drm/drm_file.h
@@ -42,6 +42,7 @@ struct dma_fence;
 struct drm_file;
 struct drm_device;
 struct device;
+struct file;
 
 /*
  * FIXME: Not sure we want to have drm_minor here in the end, but to avoid
@@ -387,4 +388,6 @@ void drm_event_cancel_free(struct drm_device *dev,
 void drm_send_event_locked(struct drm_device *dev, struct drm_pending_event *e);
 void drm_send_event(struct drm_device *dev, struct drm_pending_event *e);
 
+struct file *mock_drm_getfile(struct drm_minor *minor, unsigned int flags);
+
 #endif /* _DRM_FILE_H_ */
-- 
2.24.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH v3 2/5] drm: Expose a method for creating anonymous struct file around drm_minor
@ 2019-11-06 14:24   ` Chris Wilson
  0 siblings, 0 replies; 34+ messages in thread
From: Chris Wilson @ 2019-11-06 14:24 UTC (permalink / raw)
  To: dri-devel; +Cc: Daniel Vetter, intel-gfx

Sometimes we need to create a struct file to wrap a drm_device, as it
the user were to have opened /dev/dri/card0 but to do so anonymously
(i.e. for internal use). Provide a utility method to create a struct
file with the drm_device->driver.fops, that wrap the drm_device.

v2: Restrict usage to selftests

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
---
 drivers/gpu/drm/drm_file.c | 42 ++++++++++++++++++++++++++++++++++++++
 include/drm/drm_file.h     |  3 +++
 2 files changed, 45 insertions(+)

diff --git a/drivers/gpu/drm/drm_file.c b/drivers/gpu/drm/drm_file.c
index ea34bc991858..4d9385d1bf2d 100644
--- a/drivers/gpu/drm/drm_file.c
+++ b/drivers/gpu/drm/drm_file.c
@@ -31,7 +31,9 @@
  * OTHER DEALINGS IN THE SOFTWARE.
  */
 
+#include <linux/anon_inodes.h>
 #include <linux/dma-fence.h>
+#include <linux/file.h>
 #include <linux/module.h>
 #include <linux/pci.h>
 #include <linux/poll.h>
@@ -754,3 +756,43 @@ void drm_send_event(struct drm_device *dev, struct drm_pending_event *e)
 	spin_unlock_irqrestore(&dev->event_lock, irqflags);
 }
 EXPORT_SYMBOL(drm_send_event);
+
+/**
+ * mock_drm_getfile - Create a new struct file for the drm device
+ * @minor: drm minor to wrap (e.g. #drm_device.primary)
+ * @flags: file creation mode (O_RDWR etc)
+ *
+ * This create a new struct file that wraps a DRM file context around a
+ * DRM minor. This mimicks userspace opening e.g. /dev/dri/card0, but without
+ * invoking userspace. The struct file may be operated on using its f_op
+ * (the drm_device.driver.fops) to mimick userspace operations, or be supplied
+ * to userspace facing functions as an internal/anonymous client.
+ *
+ * RETURNS:
+ * Pointer to newly created struct file, ERR_PTR on failure.
+ */
+struct file *mock_drm_getfile(struct drm_minor *minor, unsigned int flags)
+{
+	struct drm_device *dev = minor->dev;
+	struct drm_file *priv;
+	struct file *file;
+
+	priv = drm_file_alloc(minor);
+	if (IS_ERR(priv))
+		return ERR_CAST(priv);
+
+	file = anon_inode_getfile("drm", dev->driver->fops, priv, flags);
+	if (IS_ERR(file)) {
+		drm_file_free(priv);
+		return file;
+	}
+
+	/* Everyone shares a single global address space */
+	file->f_mapping = dev->anon_inode->i_mapping;
+
+	drm_dev_get(dev);
+	priv->filp = file;
+
+	return file;
+}
+EXPORT_SYMBOL_FOR_TESTS_ONLY(mock_drm_getfile);
diff --git a/include/drm/drm_file.h b/include/drm/drm_file.h
index 67af60bb527a..8b099b347817 100644
--- a/include/drm/drm_file.h
+++ b/include/drm/drm_file.h
@@ -42,6 +42,7 @@ struct dma_fence;
 struct drm_file;
 struct drm_device;
 struct device;
+struct file;
 
 /*
  * FIXME: Not sure we want to have drm_minor here in the end, but to avoid
@@ -387,4 +388,6 @@ void drm_event_cancel_free(struct drm_device *dev,
 void drm_send_event_locked(struct drm_device *dev, struct drm_pending_event *e);
 void drm_send_event(struct drm_device *dev, struct drm_pending_event *e);
 
+struct file *mock_drm_getfile(struct drm_minor *minor, unsigned int flags);
+
 #endif /* _DRM_FILE_H_ */
-- 
2.24.0

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [Intel-gfx] [PATCH v3 2/5] drm: Expose a method for creating anonymous struct file around drm_minor
@ 2019-11-06 14:24   ` Chris Wilson
  0 siblings, 0 replies; 34+ messages in thread
From: Chris Wilson @ 2019-11-06 14:24 UTC (permalink / raw)
  To: dri-devel; +Cc: Daniel Vetter, intel-gfx

Sometimes we need to create a struct file to wrap a drm_device, as it
the user were to have opened /dev/dri/card0 but to do so anonymously
(i.e. for internal use). Provide a utility method to create a struct
file with the drm_device->driver.fops, that wrap the drm_device.

v2: Restrict usage to selftests

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
---
 drivers/gpu/drm/drm_file.c | 42 ++++++++++++++++++++++++++++++++++++++
 include/drm/drm_file.h     |  3 +++
 2 files changed, 45 insertions(+)

diff --git a/drivers/gpu/drm/drm_file.c b/drivers/gpu/drm/drm_file.c
index ea34bc991858..4d9385d1bf2d 100644
--- a/drivers/gpu/drm/drm_file.c
+++ b/drivers/gpu/drm/drm_file.c
@@ -31,7 +31,9 @@
  * OTHER DEALINGS IN THE SOFTWARE.
  */
 
+#include <linux/anon_inodes.h>
 #include <linux/dma-fence.h>
+#include <linux/file.h>
 #include <linux/module.h>
 #include <linux/pci.h>
 #include <linux/poll.h>
@@ -754,3 +756,43 @@ void drm_send_event(struct drm_device *dev, struct drm_pending_event *e)
 	spin_unlock_irqrestore(&dev->event_lock, irqflags);
 }
 EXPORT_SYMBOL(drm_send_event);
+
+/**
+ * mock_drm_getfile - Create a new struct file for the drm device
+ * @minor: drm minor to wrap (e.g. #drm_device.primary)
+ * @flags: file creation mode (O_RDWR etc)
+ *
+ * This create a new struct file that wraps a DRM file context around a
+ * DRM minor. This mimicks userspace opening e.g. /dev/dri/card0, but without
+ * invoking userspace. The struct file may be operated on using its f_op
+ * (the drm_device.driver.fops) to mimick userspace operations, or be supplied
+ * to userspace facing functions as an internal/anonymous client.
+ *
+ * RETURNS:
+ * Pointer to newly created struct file, ERR_PTR on failure.
+ */
+struct file *mock_drm_getfile(struct drm_minor *minor, unsigned int flags)
+{
+	struct drm_device *dev = minor->dev;
+	struct drm_file *priv;
+	struct file *file;
+
+	priv = drm_file_alloc(minor);
+	if (IS_ERR(priv))
+		return ERR_CAST(priv);
+
+	file = anon_inode_getfile("drm", dev->driver->fops, priv, flags);
+	if (IS_ERR(file)) {
+		drm_file_free(priv);
+		return file;
+	}
+
+	/* Everyone shares a single global address space */
+	file->f_mapping = dev->anon_inode->i_mapping;
+
+	drm_dev_get(dev);
+	priv->filp = file;
+
+	return file;
+}
+EXPORT_SYMBOL_FOR_TESTS_ONLY(mock_drm_getfile);
diff --git a/include/drm/drm_file.h b/include/drm/drm_file.h
index 67af60bb527a..8b099b347817 100644
--- a/include/drm/drm_file.h
+++ b/include/drm/drm_file.h
@@ -42,6 +42,7 @@ struct dma_fence;
 struct drm_file;
 struct drm_device;
 struct device;
+struct file;
 
 /*
  * FIXME: Not sure we want to have drm_minor here in the end, but to avoid
@@ -387,4 +388,6 @@ void drm_event_cancel_free(struct drm_device *dev,
 void drm_send_event_locked(struct drm_device *dev, struct drm_pending_event *e);
 void drm_send_event(struct drm_device *dev, struct drm_pending_event *e);
 
+struct file *mock_drm_getfile(struct drm_minor *minor, unsigned int flags);
+
 #endif /* _DRM_FILE_H_ */
-- 
2.24.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH v3 3/5] drm/i915/selftests: Replace mock_file hackery with drm's true fake
@ 2019-11-06 14:24   ` Chris Wilson
  0 siblings, 0 replies; 34+ messages in thread
From: Chris Wilson @ 2019-11-06 14:24 UTC (permalink / raw)
  To: dri-devel; +Cc: intel-gfx

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(-)

diff --git a/drivers/gpu/drm/i915/Kconfig.debug b/drivers/gpu/drm/i915/Kconfig.debug
index ef123eb29168..1140525da75a 100644
--- a/drivers/gpu/drm/i915/Kconfig.debug
+++ b/drivers/gpu/drm/i915/Kconfig.debug
@@ -37,6 +37,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*)
@@ -160,6 +161,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
diff --git a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
index 688c49a24f32..06dad7b0db82 100644
--- a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
+++ b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
@@ -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;
 }
diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
index 62fabc023a83..47890c92534c 100644
--- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
@@ -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;
 }
 
diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c
index e8132aca0bb6..d9fdfddb7091 100644
--- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c
+++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c
@@ -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;
 }
 
diff --git a/drivers/gpu/drm/i915/gt/selftest_context.c b/drivers/gpu/drm/i915/gt/selftest_context.c
index bc720defc6b8..a5688f7d9073 100644
--- a/drivers/gpu/drm/i915/gt/selftest_context.c
+++ b/drivers/gpu/drm/i915/gt/selftest_context.c
@@ -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;
 }
 
diff --git a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
index 85e9ccf5c304..cdaaee4432b2 100644
--- a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
+++ b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
@@ -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;
 }
 
diff --git a/drivers/gpu/drm/i915/gt/selftest_workarounds.c b/drivers/gpu/drm/i915/gt/selftest_workarounds.c
index abce6e4ec9c0..5c69ec5c5ef9 100644
--- a/drivers/gpu/drm/i915/gt/selftest_workarounds.c
+++ b/drivers/gpu/drm/i915/gt/selftest_workarounds.c
@@ -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;
 }
 
diff --git a/drivers/gpu/drm/i915/selftests/i915_gem.c b/drivers/gpu/drm/i915/selftests/i915_gem.c
index d83f6bf6d9d4..aa6282adfd09 100644
--- a/drivers/gpu/drm/i915/selftests/i915_gem.c
+++ b/drivers/gpu/drm/i915/selftests/i915_gem.c
@@ -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;
 }
 
diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
index 42e948144f1b..41092dcea5b1 100644
--- a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
+++ b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
@@ -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;
 	}
diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
index 3f7e80fb3bbd..c3e0d63c4d0c 100644
--- a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
@@ -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;
 }
 
diff --git a/drivers/gpu/drm/i915/selftests/i915_request.c b/drivers/gpu/drm/i915/selftests/i915_request.c
index 9e6d3159cd80..7c56ee38cc5b 100644
--- a/drivers/gpu/drm/i915/selftests/i915_request.c
+++ b/drivers/gpu/drm/i915/selftests/i915_request.c
@@ -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);
 
diff --git a/drivers/gpu/drm/i915/selftests/intel_memory_region.c b/drivers/gpu/drm/i915/selftests/intel_memory_region.c
index 19e1cca8f143..fa283ce4532a 100644
--- a/drivers/gpu/drm/i915/selftests/intel_memory_region.c
+++ b/drivers/gpu/drm/i915/selftests/intel_memory_region.c
@@ -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;
 }
 
diff --git a/drivers/gpu/drm/i915/selftests/mock_drm.c b/drivers/gpu/drm/i915/selftests/mock_drm.c
index 09c704153456..c100c3efe239 100644
--- a/drivers/gpu/drm/i915/selftests/mock_drm.c
+++ b/drivers/gpu/drm/i915/selftests/mock_drm.c
@@ -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;
 }
diff --git a/drivers/gpu/drm/i915/selftests/mock_drm.h b/drivers/gpu/drm/i915/selftests/mock_drm.h
index b39beee9f8f6..dc4190bd3f5a 100644
--- a/drivers/gpu/drm/i915/selftests/mock_drm.h
+++ b/drivers/gpu/drm/i915/selftests/mock_drm.h
@@ -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 */
-- 
2.24.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH v3 3/5] drm/i915/selftests: Replace mock_file hackery with drm's true fake
@ 2019-11-06 14:24   ` Chris Wilson
  0 siblings, 0 replies; 34+ messages in thread
From: Chris Wilson @ 2019-11-06 14:24 UTC (permalink / raw)
  To: dri-devel; +Cc: intel-gfx

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(-)

diff --git a/drivers/gpu/drm/i915/Kconfig.debug b/drivers/gpu/drm/i915/Kconfig.debug
index ef123eb29168..1140525da75a 100644
--- a/drivers/gpu/drm/i915/Kconfig.debug
+++ b/drivers/gpu/drm/i915/Kconfig.debug
@@ -37,6 +37,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*)
@@ -160,6 +161,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
diff --git a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
index 688c49a24f32..06dad7b0db82 100644
--- a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
+++ b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
@@ -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;
 }
diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
index 62fabc023a83..47890c92534c 100644
--- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
@@ -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;
 }
 
diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c
index e8132aca0bb6..d9fdfddb7091 100644
--- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c
+++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c
@@ -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;
 }
 
diff --git a/drivers/gpu/drm/i915/gt/selftest_context.c b/drivers/gpu/drm/i915/gt/selftest_context.c
index bc720defc6b8..a5688f7d9073 100644
--- a/drivers/gpu/drm/i915/gt/selftest_context.c
+++ b/drivers/gpu/drm/i915/gt/selftest_context.c
@@ -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;
 }
 
diff --git a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
index 85e9ccf5c304..cdaaee4432b2 100644
--- a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
+++ b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
@@ -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;
 }
 
diff --git a/drivers/gpu/drm/i915/gt/selftest_workarounds.c b/drivers/gpu/drm/i915/gt/selftest_workarounds.c
index abce6e4ec9c0..5c69ec5c5ef9 100644
--- a/drivers/gpu/drm/i915/gt/selftest_workarounds.c
+++ b/drivers/gpu/drm/i915/gt/selftest_workarounds.c
@@ -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;
 }
 
diff --git a/drivers/gpu/drm/i915/selftests/i915_gem.c b/drivers/gpu/drm/i915/selftests/i915_gem.c
index d83f6bf6d9d4..aa6282adfd09 100644
--- a/drivers/gpu/drm/i915/selftests/i915_gem.c
+++ b/drivers/gpu/drm/i915/selftests/i915_gem.c
@@ -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;
 }
 
diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
index 42e948144f1b..41092dcea5b1 100644
--- a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
+++ b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
@@ -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;
 	}
diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
index 3f7e80fb3bbd..c3e0d63c4d0c 100644
--- a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
@@ -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;
 }
 
diff --git a/drivers/gpu/drm/i915/selftests/i915_request.c b/drivers/gpu/drm/i915/selftests/i915_request.c
index 9e6d3159cd80..7c56ee38cc5b 100644
--- a/drivers/gpu/drm/i915/selftests/i915_request.c
+++ b/drivers/gpu/drm/i915/selftests/i915_request.c
@@ -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);
 
diff --git a/drivers/gpu/drm/i915/selftests/intel_memory_region.c b/drivers/gpu/drm/i915/selftests/intel_memory_region.c
index 19e1cca8f143..fa283ce4532a 100644
--- a/drivers/gpu/drm/i915/selftests/intel_memory_region.c
+++ b/drivers/gpu/drm/i915/selftests/intel_memory_region.c
@@ -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;
 }
 
diff --git a/drivers/gpu/drm/i915/selftests/mock_drm.c b/drivers/gpu/drm/i915/selftests/mock_drm.c
index 09c704153456..c100c3efe239 100644
--- a/drivers/gpu/drm/i915/selftests/mock_drm.c
+++ b/drivers/gpu/drm/i915/selftests/mock_drm.c
@@ -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;
 }
diff --git a/drivers/gpu/drm/i915/selftests/mock_drm.h b/drivers/gpu/drm/i915/selftests/mock_drm.h
index b39beee9f8f6..dc4190bd3f5a 100644
--- a/drivers/gpu/drm/i915/selftests/mock_drm.h
+++ b/drivers/gpu/drm/i915/selftests/mock_drm.h
@@ -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 */
-- 
2.24.0

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [Intel-gfx] [PATCH v3 3/5] drm/i915/selftests: Replace mock_file hackery with drm's true fake
@ 2019-11-06 14:24   ` Chris Wilson
  0 siblings, 0 replies; 34+ messages in thread
From: Chris Wilson @ 2019-11-06 14:24 UTC (permalink / raw)
  To: dri-devel; +Cc: intel-gfx

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(-)

diff --git a/drivers/gpu/drm/i915/Kconfig.debug b/drivers/gpu/drm/i915/Kconfig.debug
index ef123eb29168..1140525da75a 100644
--- a/drivers/gpu/drm/i915/Kconfig.debug
+++ b/drivers/gpu/drm/i915/Kconfig.debug
@@ -37,6 +37,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*)
@@ -160,6 +161,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
diff --git a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
index 688c49a24f32..06dad7b0db82 100644
--- a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
+++ b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
@@ -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;
 }
diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
index 62fabc023a83..47890c92534c 100644
--- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
@@ -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;
 }
 
diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c
index e8132aca0bb6..d9fdfddb7091 100644
--- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c
+++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c
@@ -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;
 }
 
diff --git a/drivers/gpu/drm/i915/gt/selftest_context.c b/drivers/gpu/drm/i915/gt/selftest_context.c
index bc720defc6b8..a5688f7d9073 100644
--- a/drivers/gpu/drm/i915/gt/selftest_context.c
+++ b/drivers/gpu/drm/i915/gt/selftest_context.c
@@ -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;
 }
 
diff --git a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
index 85e9ccf5c304..cdaaee4432b2 100644
--- a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
+++ b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
@@ -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;
 }
 
diff --git a/drivers/gpu/drm/i915/gt/selftest_workarounds.c b/drivers/gpu/drm/i915/gt/selftest_workarounds.c
index abce6e4ec9c0..5c69ec5c5ef9 100644
--- a/drivers/gpu/drm/i915/gt/selftest_workarounds.c
+++ b/drivers/gpu/drm/i915/gt/selftest_workarounds.c
@@ -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;
 }
 
diff --git a/drivers/gpu/drm/i915/selftests/i915_gem.c b/drivers/gpu/drm/i915/selftests/i915_gem.c
index d83f6bf6d9d4..aa6282adfd09 100644
--- a/drivers/gpu/drm/i915/selftests/i915_gem.c
+++ b/drivers/gpu/drm/i915/selftests/i915_gem.c
@@ -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;
 }
 
diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
index 42e948144f1b..41092dcea5b1 100644
--- a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
+++ b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
@@ -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;
 	}
diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
index 3f7e80fb3bbd..c3e0d63c4d0c 100644
--- a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
@@ -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;
 }
 
diff --git a/drivers/gpu/drm/i915/selftests/i915_request.c b/drivers/gpu/drm/i915/selftests/i915_request.c
index 9e6d3159cd80..7c56ee38cc5b 100644
--- a/drivers/gpu/drm/i915/selftests/i915_request.c
+++ b/drivers/gpu/drm/i915/selftests/i915_request.c
@@ -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);
 
diff --git a/drivers/gpu/drm/i915/selftests/intel_memory_region.c b/drivers/gpu/drm/i915/selftests/intel_memory_region.c
index 19e1cca8f143..fa283ce4532a 100644
--- a/drivers/gpu/drm/i915/selftests/intel_memory_region.c
+++ b/drivers/gpu/drm/i915/selftests/intel_memory_region.c
@@ -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;
 }
 
diff --git a/drivers/gpu/drm/i915/selftests/mock_drm.c b/drivers/gpu/drm/i915/selftests/mock_drm.c
index 09c704153456..c100c3efe239 100644
--- a/drivers/gpu/drm/i915/selftests/mock_drm.c
+++ b/drivers/gpu/drm/i915/selftests/mock_drm.c
@@ -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;
 }
diff --git a/drivers/gpu/drm/i915/selftests/mock_drm.h b/drivers/gpu/drm/i915/selftests/mock_drm.h
index b39beee9f8f6..dc4190bd3f5a 100644
--- a/drivers/gpu/drm/i915/selftests/mock_drm.h
+++ b/drivers/gpu/drm/i915/selftests/mock_drm.h
@@ -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 */
-- 
2.24.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH v3 4/5] drm/i915/selftests: Wrap vm_mmap() around GEM objects
@ 2019-11-06 14:24   ` Chris Wilson
  0 siblings, 0 replies; 34+ messages in thread
From: Chris Wilson @ 2019-11-06 14:24 UTC (permalink / raw)
  To: dri-devel; +Cc: intel-gfx

Provide a utility function to create a vma corresponding to an mmap() of
our device. And use it to exercise the equivalent of userspace
performing a GTT mmap of our objects.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Abdiel Janulgue <abdiel.janulgue@linux.intel.com>
---
 drivers/gpu/drm/i915/Makefile                 |  1 +
 .../drm/i915/gem/selftests/i915_gem_mman.c    | 97 +++++++++++++++++++
 drivers/gpu/drm/i915/selftests/igt_mmap.c     | 39 ++++++++
 drivers/gpu/drm/i915/selftests/igt_mmap.h     | 19 ++++
 4 files changed, 156 insertions(+)
 create mode 100644 drivers/gpu/drm/i915/selftests/igt_mmap.c
 create mode 100644 drivers/gpu/drm/i915/selftests/igt_mmap.h

diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
index 90dcf09f52cc..e0fd10c0cfb8 100644
--- a/drivers/gpu/drm/i915/Makefile
+++ b/drivers/gpu/drm/i915/Makefile
@@ -259,6 +259,7 @@ i915-$(CONFIG_DRM_I915_SELFTEST) += \
 	selftests/i915_selftest.o \
 	selftests/igt_flush_test.o \
 	selftests/igt_live_test.o \
+	selftests/igt_mmap.o \
 	selftests/igt_reset.o \
 	selftests/igt_spinner.o
 
diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
index 29b2077b73d2..3c8f2297be86 100644
--- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
+++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
@@ -12,6 +12,7 @@
 #include "i915_selftest.h"
 #include "selftests/i915_random.h"
 #include "selftests/igt_flush_test.h"
+#include "selftests/igt_mmap.h"
 
 struct tile {
 	unsigned int width;
@@ -694,12 +695,108 @@ static int igt_mmap_offset_exhaustion(void *arg)
 	goto out;
 }
 
+#define expand32(x) (((x) << 0) | ((x) << 8) | ((x) << 16) | ((x) << 24))
+static int igt_mmap_gtt(void *arg)
+{
+	struct drm_i915_private *i915 = arg;
+	struct drm_i915_gem_object *obj;
+	struct vm_area_struct *area;
+	unsigned long addr;
+	void *vaddr;
+	int err, i;
+
+	obj = i915_gem_object_create_internal(i915, PAGE_SIZE);
+	if (IS_ERR(obj))
+		return PTR_ERR(obj);
+
+	vaddr = i915_gem_object_pin_map(obj, I915_MAP_WB);
+	if (IS_ERR(vaddr)) {
+		err = PTR_ERR(vaddr);
+		goto out;
+	}
+	memset(vaddr, POISON_INUSE, PAGE_SIZE);
+	i915_gem_object_flush_map(obj);
+	i915_gem_object_unpin_map(obj);
+
+	err = create_mmap_offset(obj);
+	if (err)
+		goto out;
+
+	addr = igt_mmap_node(i915, &obj->base.vma_node,
+			     0, PROT_WRITE, MAP_SHARED);
+	if (IS_ERR_VALUE(addr)) {
+		err = addr;
+		goto out;
+	}
+
+	pr_debug("igt_mmap(obj:gtt) @ %lx\n", addr);
+
+	area = find_vma(current->mm, addr);
+	if (!area) {
+		pr_err("Did not create a vm_area_struct for the mmap\n");
+		err = -EINVAL;
+		goto out_unmap;
+	}
+
+	if (area->vm_private_data != obj) {
+		pr_err("vm_area_struct did not point back to our object!\n");
+		err = -EINVAL;
+		goto out_unmap;
+	}
+
+	for (i = 0; i < PAGE_SIZE / sizeof(u32); i++) {
+		u32 __user *ux = u64_to_user_ptr((u64)(addr + i * sizeof*(ux)));
+		u32 x;
+
+		if (get_user(x, ux)) {
+			pr_err("Unable to read from GTT mmap, offset:%zd\n",
+			       i * sizeof(x));
+			err = -EFAULT;
+			break;
+		}
+
+		if (x != expand32(POISON_INUSE)) {
+			pr_err("Read incorrect value from GTT mmap, offset:%zd, found:%x, expected:%x\n",
+			       i * sizeof(x), x, expand32(POISON_INUSE));
+			err = -EINVAL;
+			break;
+		}
+
+		x = expand32(POISON_FREE);
+		if (put_user(x, ux)) {
+			pr_err("Unable to write to GTT mmap, offset:%zd\n",
+			       i * sizeof(x));
+			err = -EFAULT;
+			break;
+		}
+	}
+
+out_unmap:
+	vm_munmap(addr, PAGE_SIZE);
+
+	vaddr = i915_gem_object_pin_map(obj, I915_MAP_FORCE_WC);
+	if (IS_ERR(vaddr)) {
+		err = PTR_ERR(vaddr);
+		goto out;
+	}
+	if (err == 0 && memchr_inv(vaddr, POISON_FREE, PAGE_SIZE)) {
+		pr_err("Write via GGTT mmap did not land in backing store\n");
+		err = -EINVAL;
+	}
+	i915_gem_object_unpin_map(obj);
+
+out:
+	i915_gem_object_put(obj);
+	return err;
+}
+
 int i915_gem_mman_live_selftests(struct drm_i915_private *i915)
 {
 	static const struct i915_subtest tests[] = {
 		SUBTEST(igt_partial_tiling),
 		SUBTEST(igt_smoke_tiling),
 		SUBTEST(igt_mmap_offset_exhaustion),
+		SUBTEST(igt_mmap_gtt),
 	};
 
 	return i915_subtests(tests, i915);
diff --git a/drivers/gpu/drm/i915/selftests/igt_mmap.c b/drivers/gpu/drm/i915/selftests/igt_mmap.c
new file mode 100644
index 000000000000..583a4ff8b8c9
--- /dev/null
+++ b/drivers/gpu/drm/i915/selftests/igt_mmap.c
@@ -0,0 +1,39 @@
+/*
+ * SPDX-License-Identifier: MIT
+ *
+ * Copyright © 2019 Intel Corporation
+ */
+
+#include <drm/drm_file.h>
+
+#include "i915_drv.h"
+#include "igt_mmap.h"
+
+unsigned long igt_mmap_node(struct drm_i915_private *i915,
+			    struct drm_vma_offset_node *node,
+			    unsigned long addr,
+			    unsigned long prot,
+			    unsigned long flags)
+{
+	struct file *file;
+	int err;
+
+	/* Pretend to open("/dev/dri/card0") */
+	file = mock_drm_getfile(i915->drm.primary, O_RDWR);
+	if (IS_ERR(file))
+		return PTR_ERR(file);
+
+	err = drm_vma_node_allow(node, file->private_data);
+	if (err) {
+		addr = err;
+		goto out_file;
+	}
+
+	addr = vm_mmap(file, addr, drm_vma_node_size(node) << PAGE_SHIFT,
+		       prot, flags, drm_vma_node_offset_addr(node));
+
+	drm_vma_node_revoke(node, file->private_data);
+out_file:
+	fput(file);
+	return addr;
+}
diff --git a/drivers/gpu/drm/i915/selftests/igt_mmap.h b/drivers/gpu/drm/i915/selftests/igt_mmap.h
new file mode 100644
index 000000000000..6e716cb59d7e
--- /dev/null
+++ b/drivers/gpu/drm/i915/selftests/igt_mmap.h
@@ -0,0 +1,19 @@
+/*
+ * SPDX-License-Identifier: MIT
+ *
+ * Copyright © 2019 Intel Corporation
+ */
+
+#ifndef IGT_MMAP_H
+#define IGT_MMAP_H
+
+struct drm_i915_private;
+struct drm_vma_offset_node;
+
+unsigned long igt_mmap_node(struct drm_i915_private *i915,
+			    struct drm_vma_offset_node *node,
+			    unsigned long addr,
+			    unsigned long prot,
+			    unsigned long flags);
+
+#endif /* IGT_MMAP_H */
-- 
2.24.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH v3 4/5] drm/i915/selftests: Wrap vm_mmap() around GEM objects
@ 2019-11-06 14:24   ` Chris Wilson
  0 siblings, 0 replies; 34+ messages in thread
From: Chris Wilson @ 2019-11-06 14:24 UTC (permalink / raw)
  To: dri-devel; +Cc: Abdiel Janulgue, intel-gfx

Provide a utility function to create a vma corresponding to an mmap() of
our device. And use it to exercise the equivalent of userspace
performing a GTT mmap of our objects.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Abdiel Janulgue <abdiel.janulgue@linux.intel.com>
---
 drivers/gpu/drm/i915/Makefile                 |  1 +
 .../drm/i915/gem/selftests/i915_gem_mman.c    | 97 +++++++++++++++++++
 drivers/gpu/drm/i915/selftests/igt_mmap.c     | 39 ++++++++
 drivers/gpu/drm/i915/selftests/igt_mmap.h     | 19 ++++
 4 files changed, 156 insertions(+)
 create mode 100644 drivers/gpu/drm/i915/selftests/igt_mmap.c
 create mode 100644 drivers/gpu/drm/i915/selftests/igt_mmap.h

diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
index 90dcf09f52cc..e0fd10c0cfb8 100644
--- a/drivers/gpu/drm/i915/Makefile
+++ b/drivers/gpu/drm/i915/Makefile
@@ -259,6 +259,7 @@ i915-$(CONFIG_DRM_I915_SELFTEST) += \
 	selftests/i915_selftest.o \
 	selftests/igt_flush_test.o \
 	selftests/igt_live_test.o \
+	selftests/igt_mmap.o \
 	selftests/igt_reset.o \
 	selftests/igt_spinner.o
 
diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
index 29b2077b73d2..3c8f2297be86 100644
--- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
+++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
@@ -12,6 +12,7 @@
 #include "i915_selftest.h"
 #include "selftests/i915_random.h"
 #include "selftests/igt_flush_test.h"
+#include "selftests/igt_mmap.h"
 
 struct tile {
 	unsigned int width;
@@ -694,12 +695,108 @@ static int igt_mmap_offset_exhaustion(void *arg)
 	goto out;
 }
 
+#define expand32(x) (((x) << 0) | ((x) << 8) | ((x) << 16) | ((x) << 24))
+static int igt_mmap_gtt(void *arg)
+{
+	struct drm_i915_private *i915 = arg;
+	struct drm_i915_gem_object *obj;
+	struct vm_area_struct *area;
+	unsigned long addr;
+	void *vaddr;
+	int err, i;
+
+	obj = i915_gem_object_create_internal(i915, PAGE_SIZE);
+	if (IS_ERR(obj))
+		return PTR_ERR(obj);
+
+	vaddr = i915_gem_object_pin_map(obj, I915_MAP_WB);
+	if (IS_ERR(vaddr)) {
+		err = PTR_ERR(vaddr);
+		goto out;
+	}
+	memset(vaddr, POISON_INUSE, PAGE_SIZE);
+	i915_gem_object_flush_map(obj);
+	i915_gem_object_unpin_map(obj);
+
+	err = create_mmap_offset(obj);
+	if (err)
+		goto out;
+
+	addr = igt_mmap_node(i915, &obj->base.vma_node,
+			     0, PROT_WRITE, MAP_SHARED);
+	if (IS_ERR_VALUE(addr)) {
+		err = addr;
+		goto out;
+	}
+
+	pr_debug("igt_mmap(obj:gtt) @ %lx\n", addr);
+
+	area = find_vma(current->mm, addr);
+	if (!area) {
+		pr_err("Did not create a vm_area_struct for the mmap\n");
+		err = -EINVAL;
+		goto out_unmap;
+	}
+
+	if (area->vm_private_data != obj) {
+		pr_err("vm_area_struct did not point back to our object!\n");
+		err = -EINVAL;
+		goto out_unmap;
+	}
+
+	for (i = 0; i < PAGE_SIZE / sizeof(u32); i++) {
+		u32 __user *ux = u64_to_user_ptr((u64)(addr + i * sizeof*(ux)));
+		u32 x;
+
+		if (get_user(x, ux)) {
+			pr_err("Unable to read from GTT mmap, offset:%zd\n",
+			       i * sizeof(x));
+			err = -EFAULT;
+			break;
+		}
+
+		if (x != expand32(POISON_INUSE)) {
+			pr_err("Read incorrect value from GTT mmap, offset:%zd, found:%x, expected:%x\n",
+			       i * sizeof(x), x, expand32(POISON_INUSE));
+			err = -EINVAL;
+			break;
+		}
+
+		x = expand32(POISON_FREE);
+		if (put_user(x, ux)) {
+			pr_err("Unable to write to GTT mmap, offset:%zd\n",
+			       i * sizeof(x));
+			err = -EFAULT;
+			break;
+		}
+	}
+
+out_unmap:
+	vm_munmap(addr, PAGE_SIZE);
+
+	vaddr = i915_gem_object_pin_map(obj, I915_MAP_FORCE_WC);
+	if (IS_ERR(vaddr)) {
+		err = PTR_ERR(vaddr);
+		goto out;
+	}
+	if (err == 0 && memchr_inv(vaddr, POISON_FREE, PAGE_SIZE)) {
+		pr_err("Write via GGTT mmap did not land in backing store\n");
+		err = -EINVAL;
+	}
+	i915_gem_object_unpin_map(obj);
+
+out:
+	i915_gem_object_put(obj);
+	return err;
+}
+
 int i915_gem_mman_live_selftests(struct drm_i915_private *i915)
 {
 	static const struct i915_subtest tests[] = {
 		SUBTEST(igt_partial_tiling),
 		SUBTEST(igt_smoke_tiling),
 		SUBTEST(igt_mmap_offset_exhaustion),
+		SUBTEST(igt_mmap_gtt),
 	};
 
 	return i915_subtests(tests, i915);
diff --git a/drivers/gpu/drm/i915/selftests/igt_mmap.c b/drivers/gpu/drm/i915/selftests/igt_mmap.c
new file mode 100644
index 000000000000..583a4ff8b8c9
--- /dev/null
+++ b/drivers/gpu/drm/i915/selftests/igt_mmap.c
@@ -0,0 +1,39 @@
+/*
+ * SPDX-License-Identifier: MIT
+ *
+ * Copyright © 2019 Intel Corporation
+ */
+
+#include <drm/drm_file.h>
+
+#include "i915_drv.h"
+#include "igt_mmap.h"
+
+unsigned long igt_mmap_node(struct drm_i915_private *i915,
+			    struct drm_vma_offset_node *node,
+			    unsigned long addr,
+			    unsigned long prot,
+			    unsigned long flags)
+{
+	struct file *file;
+	int err;
+
+	/* Pretend to open("/dev/dri/card0") */
+	file = mock_drm_getfile(i915->drm.primary, O_RDWR);
+	if (IS_ERR(file))
+		return PTR_ERR(file);
+
+	err = drm_vma_node_allow(node, file->private_data);
+	if (err) {
+		addr = err;
+		goto out_file;
+	}
+
+	addr = vm_mmap(file, addr, drm_vma_node_size(node) << PAGE_SHIFT,
+		       prot, flags, drm_vma_node_offset_addr(node));
+
+	drm_vma_node_revoke(node, file->private_data);
+out_file:
+	fput(file);
+	return addr;
+}
diff --git a/drivers/gpu/drm/i915/selftests/igt_mmap.h b/drivers/gpu/drm/i915/selftests/igt_mmap.h
new file mode 100644
index 000000000000..6e716cb59d7e
--- /dev/null
+++ b/drivers/gpu/drm/i915/selftests/igt_mmap.h
@@ -0,0 +1,19 @@
+/*
+ * SPDX-License-Identifier: MIT
+ *
+ * Copyright © 2019 Intel Corporation
+ */
+
+#ifndef IGT_MMAP_H
+#define IGT_MMAP_H
+
+struct drm_i915_private;
+struct drm_vma_offset_node;
+
+unsigned long igt_mmap_node(struct drm_i915_private *i915,
+			    struct drm_vma_offset_node *node,
+			    unsigned long addr,
+			    unsigned long prot,
+			    unsigned long flags);
+
+#endif /* IGT_MMAP_H */
-- 
2.24.0

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [Intel-gfx] [PATCH v3 4/5] drm/i915/selftests: Wrap vm_mmap() around GEM objects
@ 2019-11-06 14:24   ` Chris Wilson
  0 siblings, 0 replies; 34+ messages in thread
From: Chris Wilson @ 2019-11-06 14:24 UTC (permalink / raw)
  To: dri-devel; +Cc: intel-gfx

Provide a utility function to create a vma corresponding to an mmap() of
our device. And use it to exercise the equivalent of userspace
performing a GTT mmap of our objects.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Abdiel Janulgue <abdiel.janulgue@linux.intel.com>
---
 drivers/gpu/drm/i915/Makefile                 |  1 +
 .../drm/i915/gem/selftests/i915_gem_mman.c    | 97 +++++++++++++++++++
 drivers/gpu/drm/i915/selftests/igt_mmap.c     | 39 ++++++++
 drivers/gpu/drm/i915/selftests/igt_mmap.h     | 19 ++++
 4 files changed, 156 insertions(+)
 create mode 100644 drivers/gpu/drm/i915/selftests/igt_mmap.c
 create mode 100644 drivers/gpu/drm/i915/selftests/igt_mmap.h

diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
index 90dcf09f52cc..e0fd10c0cfb8 100644
--- a/drivers/gpu/drm/i915/Makefile
+++ b/drivers/gpu/drm/i915/Makefile
@@ -259,6 +259,7 @@ i915-$(CONFIG_DRM_I915_SELFTEST) += \
 	selftests/i915_selftest.o \
 	selftests/igt_flush_test.o \
 	selftests/igt_live_test.o \
+	selftests/igt_mmap.o \
 	selftests/igt_reset.o \
 	selftests/igt_spinner.o
 
diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
index 29b2077b73d2..3c8f2297be86 100644
--- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
+++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
@@ -12,6 +12,7 @@
 #include "i915_selftest.h"
 #include "selftests/i915_random.h"
 #include "selftests/igt_flush_test.h"
+#include "selftests/igt_mmap.h"
 
 struct tile {
 	unsigned int width;
@@ -694,12 +695,108 @@ static int igt_mmap_offset_exhaustion(void *arg)
 	goto out;
 }
 
+#define expand32(x) (((x) << 0) | ((x) << 8) | ((x) << 16) | ((x) << 24))
+static int igt_mmap_gtt(void *arg)
+{
+	struct drm_i915_private *i915 = arg;
+	struct drm_i915_gem_object *obj;
+	struct vm_area_struct *area;
+	unsigned long addr;
+	void *vaddr;
+	int err, i;
+
+	obj = i915_gem_object_create_internal(i915, PAGE_SIZE);
+	if (IS_ERR(obj))
+		return PTR_ERR(obj);
+
+	vaddr = i915_gem_object_pin_map(obj, I915_MAP_WB);
+	if (IS_ERR(vaddr)) {
+		err = PTR_ERR(vaddr);
+		goto out;
+	}
+	memset(vaddr, POISON_INUSE, PAGE_SIZE);
+	i915_gem_object_flush_map(obj);
+	i915_gem_object_unpin_map(obj);
+
+	err = create_mmap_offset(obj);
+	if (err)
+		goto out;
+
+	addr = igt_mmap_node(i915, &obj->base.vma_node,
+			     0, PROT_WRITE, MAP_SHARED);
+	if (IS_ERR_VALUE(addr)) {
+		err = addr;
+		goto out;
+	}
+
+	pr_debug("igt_mmap(obj:gtt) @ %lx\n", addr);
+
+	area = find_vma(current->mm, addr);
+	if (!area) {
+		pr_err("Did not create a vm_area_struct for the mmap\n");
+		err = -EINVAL;
+		goto out_unmap;
+	}
+
+	if (area->vm_private_data != obj) {
+		pr_err("vm_area_struct did not point back to our object!\n");
+		err = -EINVAL;
+		goto out_unmap;
+	}
+
+	for (i = 0; i < PAGE_SIZE / sizeof(u32); i++) {
+		u32 __user *ux = u64_to_user_ptr((u64)(addr + i * sizeof*(ux)));
+		u32 x;
+
+		if (get_user(x, ux)) {
+			pr_err("Unable to read from GTT mmap, offset:%zd\n",
+			       i * sizeof(x));
+			err = -EFAULT;
+			break;
+		}
+
+		if (x != expand32(POISON_INUSE)) {
+			pr_err("Read incorrect value from GTT mmap, offset:%zd, found:%x, expected:%x\n",
+			       i * sizeof(x), x, expand32(POISON_INUSE));
+			err = -EINVAL;
+			break;
+		}
+
+		x = expand32(POISON_FREE);
+		if (put_user(x, ux)) {
+			pr_err("Unable to write to GTT mmap, offset:%zd\n",
+			       i * sizeof(x));
+			err = -EFAULT;
+			break;
+		}
+	}
+
+out_unmap:
+	vm_munmap(addr, PAGE_SIZE);
+
+	vaddr = i915_gem_object_pin_map(obj, I915_MAP_FORCE_WC);
+	if (IS_ERR(vaddr)) {
+		err = PTR_ERR(vaddr);
+		goto out;
+	}
+	if (err == 0 && memchr_inv(vaddr, POISON_FREE, PAGE_SIZE)) {
+		pr_err("Write via GGTT mmap did not land in backing store\n");
+		err = -EINVAL;
+	}
+	i915_gem_object_unpin_map(obj);
+
+out:
+	i915_gem_object_put(obj);
+	return err;
+}
+
 int i915_gem_mman_live_selftests(struct drm_i915_private *i915)
 {
 	static const struct i915_subtest tests[] = {
 		SUBTEST(igt_partial_tiling),
 		SUBTEST(igt_smoke_tiling),
 		SUBTEST(igt_mmap_offset_exhaustion),
+		SUBTEST(igt_mmap_gtt),
 	};
 
 	return i915_subtests(tests, i915);
diff --git a/drivers/gpu/drm/i915/selftests/igt_mmap.c b/drivers/gpu/drm/i915/selftests/igt_mmap.c
new file mode 100644
index 000000000000..583a4ff8b8c9
--- /dev/null
+++ b/drivers/gpu/drm/i915/selftests/igt_mmap.c
@@ -0,0 +1,39 @@
+/*
+ * SPDX-License-Identifier: MIT
+ *
+ * Copyright © 2019 Intel Corporation
+ */
+
+#include <drm/drm_file.h>
+
+#include "i915_drv.h"
+#include "igt_mmap.h"
+
+unsigned long igt_mmap_node(struct drm_i915_private *i915,
+			    struct drm_vma_offset_node *node,
+			    unsigned long addr,
+			    unsigned long prot,
+			    unsigned long flags)
+{
+	struct file *file;
+	int err;
+
+	/* Pretend to open("/dev/dri/card0") */
+	file = mock_drm_getfile(i915->drm.primary, O_RDWR);
+	if (IS_ERR(file))
+		return PTR_ERR(file);
+
+	err = drm_vma_node_allow(node, file->private_data);
+	if (err) {
+		addr = err;
+		goto out_file;
+	}
+
+	addr = vm_mmap(file, addr, drm_vma_node_size(node) << PAGE_SHIFT,
+		       prot, flags, drm_vma_node_offset_addr(node));
+
+	drm_vma_node_revoke(node, file->private_data);
+out_file:
+	fput(file);
+	return addr;
+}
diff --git a/drivers/gpu/drm/i915/selftests/igt_mmap.h b/drivers/gpu/drm/i915/selftests/igt_mmap.h
new file mode 100644
index 000000000000..6e716cb59d7e
--- /dev/null
+++ b/drivers/gpu/drm/i915/selftests/igt_mmap.h
@@ -0,0 +1,19 @@
+/*
+ * SPDX-License-Identifier: MIT
+ *
+ * Copyright © 2019 Intel Corporation
+ */
+
+#ifndef IGT_MMAP_H
+#define IGT_MMAP_H
+
+struct drm_i915_private;
+struct drm_vma_offset_node;
+
+unsigned long igt_mmap_node(struct drm_i915_private *i915,
+			    struct drm_vma_offset_node *node,
+			    unsigned long addr,
+			    unsigned long prot,
+			    unsigned long flags);
+
+#endif /* IGT_MMAP_H */
-- 
2.24.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH v3 5/5] drm/i915/selftests: Verify mmap_gtt revocation on unbinding
@ 2019-11-06 14:24   ` Chris Wilson
  0 siblings, 0 replies; 34+ messages in thread
From: Chris Wilson @ 2019-11-06 14:24 UTC (permalink / raw)
  To: dri-devel; +Cc: Abdiel Janulgue, intel-gfx

Whenever, we unbind (or change fence registers) on an object, we must
revoke any and all mmap_gtt using the previous bindings. Those user PTEs
point at the GGTT which know points into a new object, the wrong object.
Ergo, those PTEs must be cleared so that any user access provokes a new
page fault.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Abdiel Janulgue <abdiel.janulgue@linux.intel.com>
---
 .../drm/i915/gem/selftests/i915_gem_mman.c    | 107 ++++++++++++++++++
 1 file changed, 107 insertions(+)

diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
index 3c8f2297be86..687750388cd5 100644
--- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
+++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
@@ -790,6 +790,112 @@ static int igt_mmap_gtt(void *arg)
 	return err;
 }
 
+static int check_present_pte(pte_t *pte, unsigned long addr, void *data)
+{
+	if (!pte_present(*pte) || pte_none(*pte)) {
+		pr_err("missing PTE:%lx\n",
+		       (addr - (unsigned long)data) >> PAGE_SHIFT);
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static int check_absent_pte(pte_t *pte, unsigned long addr, void *data)
+{
+	if (pte_present(*pte) && !pte_none(*pte)) {
+		pr_err("present PTE:%lx; expected to be revoked\n",
+		       (addr - (unsigned long)data) >> PAGE_SHIFT);
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static int check_present(unsigned long addr, unsigned long len)
+{
+	return apply_to_page_range(current->mm, addr, len,
+				   check_present_pte, (void *)addr);
+}
+
+static int check_absent(unsigned long addr, unsigned long len)
+{
+	return apply_to_page_range(current->mm, addr, len,
+				   check_absent_pte, (void *)addr);
+}
+
+static int prefault_range(u64 start, u64 len)
+{
+	const char __user *addr, *end;
+	char __maybe_unused c;
+
+	addr = u64_to_user_ptr(start);
+	end = addr + len;
+
+	for (; addr < end; addr += PAGE_SIZE) {
+		int err = __get_user(c, addr);
+		if (err)
+			return err;
+	}
+
+	return __get_user(c, end - 1);
+}
+
+static int igt_mmap_gtt_revoke(void *arg)
+{
+	struct drm_i915_private *i915 = arg;
+	struct drm_i915_gem_object *obj;
+	unsigned long addr;
+	int err;
+
+	obj = i915_gem_object_create_internal(i915, SZ_4M);
+	if (IS_ERR(obj))
+		return PTR_ERR(obj);
+
+	err = create_mmap_offset(obj);
+	if (err)
+		goto out;
+
+	addr = igt_mmap_node(i915, &obj->base.vma_node,
+			     0, PROT_WRITE, MAP_SHARED);
+	if (IS_ERR_VALUE(addr)) {
+		err = addr;
+		goto out;
+	}
+
+	err = prefault_range(addr, obj->base.size);
+	if (err)
+		goto out_unmap;
+
+	GEM_BUG_ON(!atomic_read(&obj->bind_count));
+
+	err = check_present(addr, obj->base.size);
+	if (err)
+		goto out_unmap;
+
+	/*
+	 * After unbinding the object from the GGTT, its address may be reused
+	 * for other objects. Ergo we have to revoke the previous mmap PTE
+	 * access as it no longer points to the same object.
+	 */
+	err = i915_gem_object_unbind(obj, I915_GEM_OBJECT_UNBIND_ACTIVE);
+	if (err) {
+		pr_err("Failed to unbind object!\n");
+		goto out_unmap;
+	}
+	GEM_BUG_ON(atomic_read(&obj->bind_count));
+
+	err = check_absent(addr, obj->base.size);
+	if (err)
+		goto out_unmap;
+
+out_unmap:
+	vm_munmap(addr, obj->base.size);
+out:
+	i915_gem_object_put(obj);
+	return err;
+}
+
 int i915_gem_mman_live_selftests(struct drm_i915_private *i915)
 {
 	static const struct i915_subtest tests[] = {
@@ -797,6 +903,7 @@ int i915_gem_mman_live_selftests(struct drm_i915_private *i915)
 		SUBTEST(igt_smoke_tiling),
 		SUBTEST(igt_mmap_offset_exhaustion),
 		SUBTEST(igt_mmap_gtt),
+		SUBTEST(igt_mmap_gtt_revoke),
 	};
 
 	return i915_subtests(tests, i915);
-- 
2.24.0

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [Intel-gfx] [PATCH v3 5/5] drm/i915/selftests: Verify mmap_gtt revocation on unbinding
@ 2019-11-06 14:24   ` Chris Wilson
  0 siblings, 0 replies; 34+ messages in thread
From: Chris Wilson @ 2019-11-06 14:24 UTC (permalink / raw)
  To: dri-devel; +Cc: intel-gfx

Whenever, we unbind (or change fence registers) on an object, we must
revoke any and all mmap_gtt using the previous bindings. Those user PTEs
point at the GGTT which know points into a new object, the wrong object.
Ergo, those PTEs must be cleared so that any user access provokes a new
page fault.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Abdiel Janulgue <abdiel.janulgue@linux.intel.com>
---
 .../drm/i915/gem/selftests/i915_gem_mman.c    | 107 ++++++++++++++++++
 1 file changed, 107 insertions(+)

diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
index 3c8f2297be86..687750388cd5 100644
--- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
+++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
@@ -790,6 +790,112 @@ static int igt_mmap_gtt(void *arg)
 	return err;
 }
 
+static int check_present_pte(pte_t *pte, unsigned long addr, void *data)
+{
+	if (!pte_present(*pte) || pte_none(*pte)) {
+		pr_err("missing PTE:%lx\n",
+		       (addr - (unsigned long)data) >> PAGE_SHIFT);
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static int check_absent_pte(pte_t *pte, unsigned long addr, void *data)
+{
+	if (pte_present(*pte) && !pte_none(*pte)) {
+		pr_err("present PTE:%lx; expected to be revoked\n",
+		       (addr - (unsigned long)data) >> PAGE_SHIFT);
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static int check_present(unsigned long addr, unsigned long len)
+{
+	return apply_to_page_range(current->mm, addr, len,
+				   check_present_pte, (void *)addr);
+}
+
+static int check_absent(unsigned long addr, unsigned long len)
+{
+	return apply_to_page_range(current->mm, addr, len,
+				   check_absent_pte, (void *)addr);
+}
+
+static int prefault_range(u64 start, u64 len)
+{
+	const char __user *addr, *end;
+	char __maybe_unused c;
+
+	addr = u64_to_user_ptr(start);
+	end = addr + len;
+
+	for (; addr < end; addr += PAGE_SIZE) {
+		int err = __get_user(c, addr);
+		if (err)
+			return err;
+	}
+
+	return __get_user(c, end - 1);
+}
+
+static int igt_mmap_gtt_revoke(void *arg)
+{
+	struct drm_i915_private *i915 = arg;
+	struct drm_i915_gem_object *obj;
+	unsigned long addr;
+	int err;
+
+	obj = i915_gem_object_create_internal(i915, SZ_4M);
+	if (IS_ERR(obj))
+		return PTR_ERR(obj);
+
+	err = create_mmap_offset(obj);
+	if (err)
+		goto out;
+
+	addr = igt_mmap_node(i915, &obj->base.vma_node,
+			     0, PROT_WRITE, MAP_SHARED);
+	if (IS_ERR_VALUE(addr)) {
+		err = addr;
+		goto out;
+	}
+
+	err = prefault_range(addr, obj->base.size);
+	if (err)
+		goto out_unmap;
+
+	GEM_BUG_ON(!atomic_read(&obj->bind_count));
+
+	err = check_present(addr, obj->base.size);
+	if (err)
+		goto out_unmap;
+
+	/*
+	 * After unbinding the object from the GGTT, its address may be reused
+	 * for other objects. Ergo we have to revoke the previous mmap PTE
+	 * access as it no longer points to the same object.
+	 */
+	err = i915_gem_object_unbind(obj, I915_GEM_OBJECT_UNBIND_ACTIVE);
+	if (err) {
+		pr_err("Failed to unbind object!\n");
+		goto out_unmap;
+	}
+	GEM_BUG_ON(atomic_read(&obj->bind_count));
+
+	err = check_absent(addr, obj->base.size);
+	if (err)
+		goto out_unmap;
+
+out_unmap:
+	vm_munmap(addr, obj->base.size);
+out:
+	i915_gem_object_put(obj);
+	return err;
+}
+
 int i915_gem_mman_live_selftests(struct drm_i915_private *i915)
 {
 	static const struct i915_subtest tests[] = {
@@ -797,6 +903,7 @@ int i915_gem_mman_live_selftests(struct drm_i915_private *i915)
 		SUBTEST(igt_smoke_tiling),
 		SUBTEST(igt_mmap_offset_exhaustion),
 		SUBTEST(igt_mmap_gtt),
+		SUBTEST(igt_mmap_gtt_revoke),
 	};
 
 	return i915_subtests(tests, i915);
-- 
2.24.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* ✗ Fi.CI.CHECKPATCH: warning for series starting with [v3,1/5] drm: Move EXPORT_SYMBOL_FOR_TESTS_ONLY under a separate Kconfig
@ 2019-11-06 18:35   ` Patchwork
  0 siblings, 0 replies; 34+ messages in thread
From: Patchwork @ 2019-11-06 18:35 UTC (permalink / raw)
  To: Chris Wilson; +Cc: intel-gfx

== Series Details ==

Series: series starting with [v3,1/5] drm: Move EXPORT_SYMBOL_FOR_TESTS_ONLY under a separate Kconfig
URL   : https://patchwork.freedesktop.org/series/69068/
State : warning

== Summary ==

$ dim checkpatch origin/drm-tip
7737267b3477 drm: Move EXPORT_SYMBOL_FOR_TESTS_ONLY under a separate Kconfig
5f9905382080 drm: Expose a method for creating anonymous struct file around drm_minor
41e223fd88e7 drm/i915/selftests: Replace mock_file hackery with drm's true fake
3616b97058ec drm/i915/selftests: Wrap vm_mmap() around GEM objects
-:41: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'x' - possible side-effects?
#41: FILE: drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c:698:
+#define expand32(x) (((x) << 0) | ((x) << 8) | ((x) << 16) | ((x) << 24))

-:91: ERROR:SPACING: space required before that '*' (ctx:VxV)
#91: FILE: drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c:748:
+		u32 __user *ux = u64_to_user_ptr((u64)(addr + i * sizeof*(ux)));
 		                                                        ^

-:147: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#147: 
new file mode 100644

-:152: WARNING:SPDX_LICENSE_TAG: Missing or malformed SPDX-License-Identifier tag in line 1
#152: FILE: drivers/gpu/drm/i915/selftests/igt_mmap.c:1:
+/*

-:153: WARNING:SPDX_LICENSE_TAG: Misplaced SPDX-License-Identifier tag - use line 1 instead
#153: FILE: drivers/gpu/drm/i915/selftests/igt_mmap.c:2:
+ * SPDX-License-Identifier: MIT

-:197: WARNING:SPDX_LICENSE_TAG: Missing or malformed SPDX-License-Identifier tag in line 1
#197: FILE: drivers/gpu/drm/i915/selftests/igt_mmap.h:1:
+/*

-:198: WARNING:SPDX_LICENSE_TAG: Misplaced SPDX-License-Identifier tag - use line 1 instead
#198: FILE: drivers/gpu/drm/i915/selftests/igt_mmap.h:2:
+ * SPDX-License-Identifier: MIT

total: 1 errors, 5 warnings, 1 checks, 180 lines checked
a60113661a13 drm/i915/selftests: Verify mmap_gtt revocation on unbinding
-:67: WARNING:LINE_SPACING: Missing a blank line after declarations
#67: FILE: drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c:837:
+		int err = __get_user(c, addr);
+		if (err)

total: 0 errors, 1 warnings, 0 checks, 119 lines checked

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for series starting with [v3,1/5] drm: Move EXPORT_SYMBOL_FOR_TESTS_ONLY under a separate Kconfig
@ 2019-11-06 18:35   ` Patchwork
  0 siblings, 0 replies; 34+ messages in thread
From: Patchwork @ 2019-11-06 18:35 UTC (permalink / raw)
  To: Chris Wilson; +Cc: intel-gfx

== Series Details ==

Series: series starting with [v3,1/5] drm: Move EXPORT_SYMBOL_FOR_TESTS_ONLY under a separate Kconfig
URL   : https://patchwork.freedesktop.org/series/69068/
State : warning

== Summary ==

$ dim checkpatch origin/drm-tip
7737267b3477 drm: Move EXPORT_SYMBOL_FOR_TESTS_ONLY under a separate Kconfig
5f9905382080 drm: Expose a method for creating anonymous struct file around drm_minor
41e223fd88e7 drm/i915/selftests: Replace mock_file hackery with drm's true fake
3616b97058ec drm/i915/selftests: Wrap vm_mmap() around GEM objects
-:41: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'x' - possible side-effects?
#41: FILE: drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c:698:
+#define expand32(x) (((x) << 0) | ((x) << 8) | ((x) << 16) | ((x) << 24))

-:91: ERROR:SPACING: space required before that '*' (ctx:VxV)
#91: FILE: drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c:748:
+		u32 __user *ux = u64_to_user_ptr((u64)(addr + i * sizeof*(ux)));
 		                                                        ^

-:147: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#147: 
new file mode 100644

-:152: WARNING:SPDX_LICENSE_TAG: Missing or malformed SPDX-License-Identifier tag in line 1
#152: FILE: drivers/gpu/drm/i915/selftests/igt_mmap.c:1:
+/*

-:153: WARNING:SPDX_LICENSE_TAG: Misplaced SPDX-License-Identifier tag - use line 1 instead
#153: FILE: drivers/gpu/drm/i915/selftests/igt_mmap.c:2:
+ * SPDX-License-Identifier: MIT

-:197: WARNING:SPDX_LICENSE_TAG: Missing or malformed SPDX-License-Identifier tag in line 1
#197: FILE: drivers/gpu/drm/i915/selftests/igt_mmap.h:1:
+/*

-:198: WARNING:SPDX_LICENSE_TAG: Misplaced SPDX-License-Identifier tag - use line 1 instead
#198: FILE: drivers/gpu/drm/i915/selftests/igt_mmap.h:2:
+ * SPDX-License-Identifier: MIT

total: 1 errors, 5 warnings, 1 checks, 180 lines checked
a60113661a13 drm/i915/selftests: Verify mmap_gtt revocation on unbinding
-:67: WARNING:LINE_SPACING: Missing a blank line after declarations
#67: FILE: drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c:837:
+		int err = __get_user(c, addr);
+		if (err)

total: 0 errors, 1 warnings, 0 checks, 119 lines checked

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 34+ messages in thread

* ✗ Fi.CI.BAT: failure for series starting with [v3,1/5] drm: Move EXPORT_SYMBOL_FOR_TESTS_ONLY under a separate Kconfig
@ 2019-11-06 18:57   ` Patchwork
  0 siblings, 0 replies; 34+ messages in thread
From: Patchwork @ 2019-11-06 18:57 UTC (permalink / raw)
  To: Chris Wilson; +Cc: intel-gfx

== Series Details ==

Series: series starting with [v3,1/5] drm: Move EXPORT_SYMBOL_FOR_TESTS_ONLY under a separate Kconfig
URL   : https://patchwork.freedesktop.org/series/69068/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_7273 -> Patchwork_15155
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with Patchwork_15155 absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in Patchwork_15155, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15155/index.html

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in Patchwork_15155:

### IGT changes ###

#### Possible regressions ####

  * igt@i915_selftest@live_mman:
    - fi-skl-lmem:        [PASS][1] -> [INCOMPLETE][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7273/fi-skl-lmem/igt@i915_selftest@live_mman.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15155/fi-skl-lmem/igt@i915_selftest@live_mman.html

  
Known issues
------------

  Here are the changes found in Patchwork_15155 that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@i915_selftest@live_gem_contexts:
    - fi-bsw-nick:        [PASS][3] -> [INCOMPLETE][4] ([fdo# 111542])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7273/fi-bsw-nick/igt@i915_selftest@live_gem_contexts.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15155/fi-bsw-nick/igt@i915_selftest@live_gem_contexts.html

  
#### Possible fixes ####

  * igt@gem_exec_suspend@basic:
    - fi-icl-u3:          [FAIL][5] ([fdo#111699]) -> [PASS][6]
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7273/fi-icl-u3/igt@gem_exec_suspend@basic.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15155/fi-icl-u3/igt@gem_exec_suspend@basic.html

  * igt@i915_pm_rpm@module-reload:
    - fi-kbl-guc:         [FAIL][7] -> [PASS][8]
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7273/fi-kbl-guc/igt@i915_pm_rpm@module-reload.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15155/fi-kbl-guc/igt@i915_pm_rpm@module-reload.html

  * igt@i915_selftest@live_hugepages:
    - fi-icl-u3:          [DMESG-WARN][9] -> [PASS][10]
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7273/fi-icl-u3/igt@i915_selftest@live_hugepages.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15155/fi-icl-u3/igt@i915_selftest@live_hugepages.html

  * igt@kms_frontbuffer_tracking@basic:
    - {fi-icl-u4}:        [FAIL][11] ([fdo#103167]) -> [PASS][12]
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7273/fi-icl-u4/igt@kms_frontbuffer_tracking@basic.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15155/fi-icl-u4/igt@kms_frontbuffer_tracking@basic.html

  
#### Warnings ####

  * igt@kms_chamelium@hdmi-hpd-fast:
    - fi-kbl-7500u:       [FAIL][13] ([fdo#111407]) -> [FAIL][14] ([fdo#111045] / [fdo#111096])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7273/fi-kbl-7500u/igt@kms_chamelium@hdmi-hpd-fast.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15155/fi-kbl-7500u/igt@kms_chamelium@hdmi-hpd-fast.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [fdo# 111542]: https://bugs.freedesktop.org/show_bug.cgi?id= 111542
  [fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167
  [fdo#111045]: https://bugs.freedesktop.org/show_bug.cgi?id=111045
  [fdo#111096]: https://bugs.freedesktop.org/show_bug.cgi?id=111096
  [fdo#111407]: https://bugs.freedesktop.org/show_bug.cgi?id=111407
  [fdo#111699]: https://bugs.freedesktop.org/show_bug.cgi?id=111699


Participating hosts (51 -> 43)
------------------------------

  Missing    (8): fi-ilk-m540 fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-ctg-p8600 fi-hsw-4770 fi-byt-clapper fi-bdw-samus 


Build changes
-------------

  * CI: CI-20190529 -> None
  * Linux: CI_DRM_7273 -> Patchwork_15155

  CI-20190529: 20190529
  CI_DRM_7273: 41b4771cadb55632f129b94751bf5dee7dcfdcc4 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_5264: f21213012393bd8041ad93084ce29da088ef8426 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_15155: a60113661a132104d54c5a4e446b784b8c5e50c7 @ git://anongit.freedesktop.org/gfx-ci/linux


== Linux commits ==

a60113661a13 drm/i915/selftests: Verify mmap_gtt revocation on unbinding
3616b97058ec drm/i915/selftests: Wrap vm_mmap() around GEM objects
41e223fd88e7 drm/i915/selftests: Replace mock_file hackery with drm's true fake
5f9905382080 drm: Expose a method for creating anonymous struct file around drm_minor
7737267b3477 drm: Move EXPORT_SYMBOL_FOR_TESTS_ONLY under a separate Kconfig

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15155/index.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [Intel-gfx] ✗ Fi.CI.BAT: failure for series starting with [v3,1/5] drm: Move EXPORT_SYMBOL_FOR_TESTS_ONLY under a separate Kconfig
@ 2019-11-06 18:57   ` Patchwork
  0 siblings, 0 replies; 34+ messages in thread
From: Patchwork @ 2019-11-06 18:57 UTC (permalink / raw)
  To: Chris Wilson; +Cc: intel-gfx

== Series Details ==

Series: series starting with [v3,1/5] drm: Move EXPORT_SYMBOL_FOR_TESTS_ONLY under a separate Kconfig
URL   : https://patchwork.freedesktop.org/series/69068/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_7273 -> Patchwork_15155
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with Patchwork_15155 absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in Patchwork_15155, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15155/index.html

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in Patchwork_15155:

### IGT changes ###

#### Possible regressions ####

  * igt@i915_selftest@live_mman:
    - fi-skl-lmem:        [PASS][1] -> [INCOMPLETE][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7273/fi-skl-lmem/igt@i915_selftest@live_mman.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15155/fi-skl-lmem/igt@i915_selftest@live_mman.html

  
Known issues
------------

  Here are the changes found in Patchwork_15155 that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@i915_selftest@live_gem_contexts:
    - fi-bsw-nick:        [PASS][3] -> [INCOMPLETE][4] ([fdo# 111542])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7273/fi-bsw-nick/igt@i915_selftest@live_gem_contexts.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15155/fi-bsw-nick/igt@i915_selftest@live_gem_contexts.html

  
#### Possible fixes ####

  * igt@gem_exec_suspend@basic:
    - fi-icl-u3:          [FAIL][5] ([fdo#111699]) -> [PASS][6]
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7273/fi-icl-u3/igt@gem_exec_suspend@basic.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15155/fi-icl-u3/igt@gem_exec_suspend@basic.html

  * igt@i915_pm_rpm@module-reload:
    - fi-kbl-guc:         [FAIL][7] -> [PASS][8]
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7273/fi-kbl-guc/igt@i915_pm_rpm@module-reload.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15155/fi-kbl-guc/igt@i915_pm_rpm@module-reload.html

  * igt@i915_selftest@live_hugepages:
    - fi-icl-u3:          [DMESG-WARN][9] -> [PASS][10]
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7273/fi-icl-u3/igt@i915_selftest@live_hugepages.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15155/fi-icl-u3/igt@i915_selftest@live_hugepages.html

  * igt@kms_frontbuffer_tracking@basic:
    - {fi-icl-u4}:        [FAIL][11] ([fdo#103167]) -> [PASS][12]
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7273/fi-icl-u4/igt@kms_frontbuffer_tracking@basic.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15155/fi-icl-u4/igt@kms_frontbuffer_tracking@basic.html

  
#### Warnings ####

  * igt@kms_chamelium@hdmi-hpd-fast:
    - fi-kbl-7500u:       [FAIL][13] ([fdo#111407]) -> [FAIL][14] ([fdo#111045] / [fdo#111096])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7273/fi-kbl-7500u/igt@kms_chamelium@hdmi-hpd-fast.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15155/fi-kbl-7500u/igt@kms_chamelium@hdmi-hpd-fast.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [fdo# 111542]: https://bugs.freedesktop.org/show_bug.cgi?id= 111542
  [fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167
  [fdo#111045]: https://bugs.freedesktop.org/show_bug.cgi?id=111045
  [fdo#111096]: https://bugs.freedesktop.org/show_bug.cgi?id=111096
  [fdo#111407]: https://bugs.freedesktop.org/show_bug.cgi?id=111407
  [fdo#111699]: https://bugs.freedesktop.org/show_bug.cgi?id=111699


Participating hosts (51 -> 43)
------------------------------

  Missing    (8): fi-ilk-m540 fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-ctg-p8600 fi-hsw-4770 fi-byt-clapper fi-bdw-samus 


Build changes
-------------

  * CI: CI-20190529 -> None
  * Linux: CI_DRM_7273 -> Patchwork_15155

  CI-20190529: 20190529
  CI_DRM_7273: 41b4771cadb55632f129b94751bf5dee7dcfdcc4 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_5264: f21213012393bd8041ad93084ce29da088ef8426 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_15155: a60113661a132104d54c5a4e446b784b8c5e50c7 @ git://anongit.freedesktop.org/gfx-ci/linux


== Linux commits ==

a60113661a13 drm/i915/selftests: Verify mmap_gtt revocation on unbinding
3616b97058ec drm/i915/selftests: Wrap vm_mmap() around GEM objects
41e223fd88e7 drm/i915/selftests: Replace mock_file hackery with drm's true fake
5f9905382080 drm: Expose a method for creating anonymous struct file around drm_minor
7737267b3477 drm: Move EXPORT_SYMBOL_FOR_TESTS_ONLY under a separate Kconfig

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15155/index.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH v3 1/5] drm: Move EXPORT_SYMBOL_FOR_TESTS_ONLY under a separate Kconfig
@ 2019-11-07  8:35     ` Daniel Vetter
  0 siblings, 0 replies; 34+ messages in thread
From: Daniel Vetter @ 2019-11-07  8:35 UTC (permalink / raw)
  To: Chris Wilson; +Cc: Daniel Vetter, intel-gfx, dri-devel

On Wed, Nov 06, 2019 at 02:24:28PM +0000, Chris Wilson wrote:
> Currently, we only export symbols for drm-selftests which are either
> compiled as modules or into the main drm builtin. However, if we want to
> export symbols from drm.ko for the drivers' selftests, we require a
> means of controlling that export separately. So we add a new Kconfig to
> determine whether or not the EXPORT_SYMBOL_FOR_TESTS_ONLY() takes
> effect.
> 
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>

Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>

> ---
>  drivers/gpu/drm/Kconfig | 4 ++++
>  include/drm/drm_util.h  | 2 +-
>  2 files changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
> index 617d9c3a86c3..d3560afe34d3 100644
> --- a/drivers/gpu/drm/Kconfig
> +++ b/drivers/gpu/drm/Kconfig
> @@ -54,6 +54,9 @@ config DRM_DEBUG_MM
>  
>  	  If in doubt, say "N".
>  
> +config DRM_EXPORT_FOR_TESTS
> +	bool
> +
>  config DRM_DEBUG_SELFTEST
>  	tristate "kselftests for DRM"
>  	depends on DRM
> @@ -61,6 +64,7 @@ config DRM_DEBUG_SELFTEST
>  	select PRIME_NUMBERS
>  	select DRM_LIB_RANDOM
>  	select DRM_KMS_HELPER
> +	select DRM_EXPORT_FOR_TESTS if m
>  	default n
>  	help
>  	  This option provides kernel modules that can be used to run
> diff --git a/include/drm/drm_util.h b/include/drm/drm_util.h
> index 07b8e9f04599..79952d8c4bba 100644
> --- a/include/drm/drm_util.h
> +++ b/include/drm/drm_util.h
> @@ -41,7 +41,7 @@
>   * Use EXPORT_SYMBOL_FOR_TESTS_ONLY() for functions that shall
>   * only be visible for drmselftests.
>   */
> -#if defined(CONFIG_DRM_DEBUG_SELFTEST_MODULE)
> +#if defined(CONFIG_DRM_EXPORT_FOR_TESTS)
>  #define EXPORT_SYMBOL_FOR_TESTS_ONLY(x) EXPORT_SYMBOL(x)
>  #else
>  #define EXPORT_SYMBOL_FOR_TESTS_ONLY(x)
> -- 
> 2.24.0
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [Intel-gfx] [PATCH v3 1/5] drm: Move EXPORT_SYMBOL_FOR_TESTS_ONLY under a separate Kconfig
@ 2019-11-07  8:35     ` Daniel Vetter
  0 siblings, 0 replies; 34+ messages in thread
From: Daniel Vetter @ 2019-11-07  8:35 UTC (permalink / raw)
  To: Chris Wilson; +Cc: Daniel Vetter, intel-gfx, dri-devel

On Wed, Nov 06, 2019 at 02:24:28PM +0000, Chris Wilson wrote:
> Currently, we only export symbols for drm-selftests which are either
> compiled as modules or into the main drm builtin. However, if we want to
> export symbols from drm.ko for the drivers' selftests, we require a
> means of controlling that export separately. So we add a new Kconfig to
> determine whether or not the EXPORT_SYMBOL_FOR_TESTS_ONLY() takes
> effect.
> 
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>

Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>

> ---
>  drivers/gpu/drm/Kconfig | 4 ++++
>  include/drm/drm_util.h  | 2 +-
>  2 files changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
> index 617d9c3a86c3..d3560afe34d3 100644
> --- a/drivers/gpu/drm/Kconfig
> +++ b/drivers/gpu/drm/Kconfig
> @@ -54,6 +54,9 @@ config DRM_DEBUG_MM
>  
>  	  If in doubt, say "N".
>  
> +config DRM_EXPORT_FOR_TESTS
> +	bool
> +
>  config DRM_DEBUG_SELFTEST
>  	tristate "kselftests for DRM"
>  	depends on DRM
> @@ -61,6 +64,7 @@ config DRM_DEBUG_SELFTEST
>  	select PRIME_NUMBERS
>  	select DRM_LIB_RANDOM
>  	select DRM_KMS_HELPER
> +	select DRM_EXPORT_FOR_TESTS if m
>  	default n
>  	help
>  	  This option provides kernel modules that can be used to run
> diff --git a/include/drm/drm_util.h b/include/drm/drm_util.h
> index 07b8e9f04599..79952d8c4bba 100644
> --- a/include/drm/drm_util.h
> +++ b/include/drm/drm_util.h
> @@ -41,7 +41,7 @@
>   * Use EXPORT_SYMBOL_FOR_TESTS_ONLY() for functions that shall
>   * only be visible for drmselftests.
>   */
> -#if defined(CONFIG_DRM_DEBUG_SELFTEST_MODULE)
> +#if defined(CONFIG_DRM_EXPORT_FOR_TESTS)
>  #define EXPORT_SYMBOL_FOR_TESTS_ONLY(x) EXPORT_SYMBOL(x)
>  #else
>  #define EXPORT_SYMBOL_FOR_TESTS_ONLY(x)
> -- 
> 2.24.0
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH v3 2/5] drm: Expose a method for creating anonymous struct file around drm_minor
@ 2019-11-07  8:36     ` Daniel Vetter
  0 siblings, 0 replies; 34+ messages in thread
From: Daniel Vetter @ 2019-11-07  8:36 UTC (permalink / raw)
  To: Chris Wilson; +Cc: Daniel Vetter, intel-gfx, dri-devel

On Wed, Nov 06, 2019 at 02:24:29PM +0000, Chris Wilson wrote:
> Sometimes we need to create a struct file to wrap a drm_device, as it
> the user were to have opened /dev/dri/card0 but to do so anonymously
> (i.e. for internal use). Provide a utility method to create a struct
> file with the drm_device->driver.fops, that wrap the drm_device.
> 
> v2: Restrict usage to selftests
> 
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>

Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>

> ---
>  drivers/gpu/drm/drm_file.c | 42 ++++++++++++++++++++++++++++++++++++++
>  include/drm/drm_file.h     |  3 +++
>  2 files changed, 45 insertions(+)
> 
> diff --git a/drivers/gpu/drm/drm_file.c b/drivers/gpu/drm/drm_file.c
> index ea34bc991858..4d9385d1bf2d 100644
> --- a/drivers/gpu/drm/drm_file.c
> +++ b/drivers/gpu/drm/drm_file.c
> @@ -31,7 +31,9 @@
>   * OTHER DEALINGS IN THE SOFTWARE.
>   */
>  
> +#include <linux/anon_inodes.h>
>  #include <linux/dma-fence.h>
> +#include <linux/file.h>
>  #include <linux/module.h>
>  #include <linux/pci.h>
>  #include <linux/poll.h>
> @@ -754,3 +756,43 @@ void drm_send_event(struct drm_device *dev, struct drm_pending_event *e)
>  	spin_unlock_irqrestore(&dev->event_lock, irqflags);
>  }
>  EXPORT_SYMBOL(drm_send_event);
> +
> +/**
> + * mock_drm_getfile - Create a new struct file for the drm device
> + * @minor: drm minor to wrap (e.g. #drm_device.primary)
> + * @flags: file creation mode (O_RDWR etc)
> + *
> + * This create a new struct file that wraps a DRM file context around a
> + * DRM minor. This mimicks userspace opening e.g. /dev/dri/card0, but without
> + * invoking userspace. The struct file may be operated on using its f_op
> + * (the drm_device.driver.fops) to mimick userspace operations, or be supplied
> + * to userspace facing functions as an internal/anonymous client.
> + *
> + * RETURNS:
> + * Pointer to newly created struct file, ERR_PTR on failure.
> + */
> +struct file *mock_drm_getfile(struct drm_minor *minor, unsigned int flags)
> +{
> +	struct drm_device *dev = minor->dev;
> +	struct drm_file *priv;
> +	struct file *file;
> +
> +	priv = drm_file_alloc(minor);
> +	if (IS_ERR(priv))
> +		return ERR_CAST(priv);
> +
> +	file = anon_inode_getfile("drm", dev->driver->fops, priv, flags);
> +	if (IS_ERR(file)) {
> +		drm_file_free(priv);
> +		return file;
> +	}
> +
> +	/* Everyone shares a single global address space */
> +	file->f_mapping = dev->anon_inode->i_mapping;
> +
> +	drm_dev_get(dev);
> +	priv->filp = file;
> +
> +	return file;
> +}
> +EXPORT_SYMBOL_FOR_TESTS_ONLY(mock_drm_getfile);
> diff --git a/include/drm/drm_file.h b/include/drm/drm_file.h
> index 67af60bb527a..8b099b347817 100644
> --- a/include/drm/drm_file.h
> +++ b/include/drm/drm_file.h
> @@ -42,6 +42,7 @@ struct dma_fence;
>  struct drm_file;
>  struct drm_device;
>  struct device;
> +struct file;
>  
>  /*
>   * FIXME: Not sure we want to have drm_minor here in the end, but to avoid
> @@ -387,4 +388,6 @@ void drm_event_cancel_free(struct drm_device *dev,
>  void drm_send_event_locked(struct drm_device *dev, struct drm_pending_event *e);
>  void drm_send_event(struct drm_device *dev, struct drm_pending_event *e);
>  
> +struct file *mock_drm_getfile(struct drm_minor *minor, unsigned int flags);
> +
>  #endif /* _DRM_FILE_H_ */
> -- 
> 2.24.0
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [Intel-gfx] [PATCH v3 2/5] drm: Expose a method for creating anonymous struct file around drm_minor
@ 2019-11-07  8:36     ` Daniel Vetter
  0 siblings, 0 replies; 34+ messages in thread
From: Daniel Vetter @ 2019-11-07  8:36 UTC (permalink / raw)
  To: Chris Wilson; +Cc: Daniel Vetter, intel-gfx, dri-devel

On Wed, Nov 06, 2019 at 02:24:29PM +0000, Chris Wilson wrote:
> Sometimes we need to create a struct file to wrap a drm_device, as it
> the user were to have opened /dev/dri/card0 but to do so anonymously
> (i.e. for internal use). Provide a utility method to create a struct
> file with the drm_device->driver.fops, that wrap the drm_device.
> 
> v2: Restrict usage to selftests
> 
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>

Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>

> ---
>  drivers/gpu/drm/drm_file.c | 42 ++++++++++++++++++++++++++++++++++++++
>  include/drm/drm_file.h     |  3 +++
>  2 files changed, 45 insertions(+)
> 
> diff --git a/drivers/gpu/drm/drm_file.c b/drivers/gpu/drm/drm_file.c
> index ea34bc991858..4d9385d1bf2d 100644
> --- a/drivers/gpu/drm/drm_file.c
> +++ b/drivers/gpu/drm/drm_file.c
> @@ -31,7 +31,9 @@
>   * OTHER DEALINGS IN THE SOFTWARE.
>   */
>  
> +#include <linux/anon_inodes.h>
>  #include <linux/dma-fence.h>
> +#include <linux/file.h>
>  #include <linux/module.h>
>  #include <linux/pci.h>
>  #include <linux/poll.h>
> @@ -754,3 +756,43 @@ void drm_send_event(struct drm_device *dev, struct drm_pending_event *e)
>  	spin_unlock_irqrestore(&dev->event_lock, irqflags);
>  }
>  EXPORT_SYMBOL(drm_send_event);
> +
> +/**
> + * mock_drm_getfile - Create a new struct file for the drm device
> + * @minor: drm minor to wrap (e.g. #drm_device.primary)
> + * @flags: file creation mode (O_RDWR etc)
> + *
> + * This create a new struct file that wraps a DRM file context around a
> + * DRM minor. This mimicks userspace opening e.g. /dev/dri/card0, but without
> + * invoking userspace. The struct file may be operated on using its f_op
> + * (the drm_device.driver.fops) to mimick userspace operations, or be supplied
> + * to userspace facing functions as an internal/anonymous client.
> + *
> + * RETURNS:
> + * Pointer to newly created struct file, ERR_PTR on failure.
> + */
> +struct file *mock_drm_getfile(struct drm_minor *minor, unsigned int flags)
> +{
> +	struct drm_device *dev = minor->dev;
> +	struct drm_file *priv;
> +	struct file *file;
> +
> +	priv = drm_file_alloc(minor);
> +	if (IS_ERR(priv))
> +		return ERR_CAST(priv);
> +
> +	file = anon_inode_getfile("drm", dev->driver->fops, priv, flags);
> +	if (IS_ERR(file)) {
> +		drm_file_free(priv);
> +		return file;
> +	}
> +
> +	/* Everyone shares a single global address space */
> +	file->f_mapping = dev->anon_inode->i_mapping;
> +
> +	drm_dev_get(dev);
> +	priv->filp = file;
> +
> +	return file;
> +}
> +EXPORT_SYMBOL_FOR_TESTS_ONLY(mock_drm_getfile);
> diff --git a/include/drm/drm_file.h b/include/drm/drm_file.h
> index 67af60bb527a..8b099b347817 100644
> --- a/include/drm/drm_file.h
> +++ b/include/drm/drm_file.h
> @@ -42,6 +42,7 @@ struct dma_fence;
>  struct drm_file;
>  struct drm_device;
>  struct device;
> +struct file;
>  
>  /*
>   * FIXME: Not sure we want to have drm_minor here in the end, but to avoid
> @@ -387,4 +388,6 @@ void drm_event_cancel_free(struct drm_device *dev,
>  void drm_send_event_locked(struct drm_device *dev, struct drm_pending_event *e);
>  void drm_send_event(struct drm_device *dev, struct drm_pending_event *e);
>  
> +struct file *mock_drm_getfile(struct drm_minor *minor, unsigned int flags);
> +
>  #endif /* _DRM_FILE_H_ */
> -- 
> 2.24.0
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [Intel-gfx] [PATCH v3 3/5] drm/i915/selftests: Replace mock_file hackery with drm's true fake
@ 2019-11-07  8:39     ` Daniel Vetter
  0 siblings, 0 replies; 34+ messages in thread
From: Daniel Vetter @ 2019-11-07  8:39 UTC (permalink / raw)
  To: Chris Wilson; +Cc: intel-gfx, dri-devel

On Wed, Nov 06, 2019 at 02:24:30PM +0000, Chris Wilson wrote:
> 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(-)
> 
> diff --git a/drivers/gpu/drm/i915/Kconfig.debug b/drivers/gpu/drm/i915/Kconfig.debug
> index ef123eb29168..1140525da75a 100644
> --- a/drivers/gpu/drm/i915/Kconfig.debug
> +++ b/drivers/gpu/drm/i915/Kconfig.debug
> @@ -37,6 +37,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*)
> @@ -160,6 +161,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
> diff --git a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
> index 688c49a24f32..06dad7b0db82 100644
> --- a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
> +++ b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
> @@ -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;
>  }
> diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
> index 62fabc023a83..47890c92534c 100644
> --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
> +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
> @@ -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;
>  }
>  
> diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c
> index e8132aca0bb6..d9fdfddb7091 100644
> --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c
> +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c
> @@ -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;
>  }
>  
> diff --git a/drivers/gpu/drm/i915/gt/selftest_context.c b/drivers/gpu/drm/i915/gt/selftest_context.c
> index bc720defc6b8..a5688f7d9073 100644
> --- a/drivers/gpu/drm/i915/gt/selftest_context.c
> +++ b/drivers/gpu/drm/i915/gt/selftest_context.c
> @@ -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;
>  }
>  
> diff --git a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
> index 85e9ccf5c304..cdaaee4432b2 100644
> --- a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
> +++ b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
> @@ -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;
>  }
>  
> diff --git a/drivers/gpu/drm/i915/gt/selftest_workarounds.c b/drivers/gpu/drm/i915/gt/selftest_workarounds.c
> index abce6e4ec9c0..5c69ec5c5ef9 100644
> --- a/drivers/gpu/drm/i915/gt/selftest_workarounds.c
> +++ b/drivers/gpu/drm/i915/gt/selftest_workarounds.c
> @@ -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;
>  }
>  
> diff --git a/drivers/gpu/drm/i915/selftests/i915_gem.c b/drivers/gpu/drm/i915/selftests/i915_gem.c
> index d83f6bf6d9d4..aa6282adfd09 100644
> --- a/drivers/gpu/drm/i915/selftests/i915_gem.c
> +++ b/drivers/gpu/drm/i915/selftests/i915_gem.c
> @@ -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;
>  }
>  
> diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
> index 42e948144f1b..41092dcea5b1 100644
> --- a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
> +++ b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
> @@ -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;
>  	}
> diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
> index 3f7e80fb3bbd..c3e0d63c4d0c 100644
> --- a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
> +++ b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
> @@ -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;
>  }
>  
> diff --git a/drivers/gpu/drm/i915/selftests/i915_request.c b/drivers/gpu/drm/i915/selftests/i915_request.c
> index 9e6d3159cd80..7c56ee38cc5b 100644
> --- a/drivers/gpu/drm/i915/selftests/i915_request.c
> +++ b/drivers/gpu/drm/i915/selftests/i915_request.c
> @@ -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);
>  
> diff --git a/drivers/gpu/drm/i915/selftests/intel_memory_region.c b/drivers/gpu/drm/i915/selftests/intel_memory_region.c
> index 19e1cca8f143..fa283ce4532a 100644
> --- a/drivers/gpu/drm/i915/selftests/intel_memory_region.c
> +++ b/drivers/gpu/drm/i915/selftests/intel_memory_region.c
> @@ -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;
>  }
>  
> diff --git a/drivers/gpu/drm/i915/selftests/mock_drm.c b/drivers/gpu/drm/i915/selftests/mock_drm.c
> index 09c704153456..c100c3efe239 100644
> --- a/drivers/gpu/drm/i915/selftests/mock_drm.c
> +++ b/drivers/gpu/drm/i915/selftests/mock_drm.c
> @@ -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;

Hm looking at this patch seems like the function interface for the core
mock helper is wrong, and we want a drm_file there. Then you could also
simplify this wrapper a notch more.

>  }
> diff --git a/drivers/gpu/drm/i915/selftests/mock_drm.h b/drivers/gpu/drm/i915/selftests/mock_drm.h
> index b39beee9f8f6..dc4190bd3f5a 100644
> --- a/drivers/gpu/drm/i915/selftests/mock_drm.h
> +++ b/drivers/gpu/drm/i915/selftests/mock_drm.h
> @@ -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)

I still think this would be nice next to the core mock_drm_open helper, as
maybe mock_drm_close. Suitable bikeshedding on the names included :-)
-Daniel

> +{
> +	fput(file->filp);
> +}
>  
>  #endif /* !__MOCK_DRM_H */
> -- 
> 2.24.0
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [Intel-gfx] [PATCH v3 3/5] drm/i915/selftests: Replace mock_file hackery with drm's true fake
@ 2019-11-07  8:39     ` Daniel Vetter
  0 siblings, 0 replies; 34+ messages in thread
From: Daniel Vetter @ 2019-11-07  8:39 UTC (permalink / raw)
  To: Chris Wilson; +Cc: intel-gfx, dri-devel

On Wed, Nov 06, 2019 at 02:24:30PM +0000, Chris Wilson wrote:
> 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(-)
> 
> diff --git a/drivers/gpu/drm/i915/Kconfig.debug b/drivers/gpu/drm/i915/Kconfig.debug
> index ef123eb29168..1140525da75a 100644
> --- a/drivers/gpu/drm/i915/Kconfig.debug
> +++ b/drivers/gpu/drm/i915/Kconfig.debug
> @@ -37,6 +37,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*)
> @@ -160,6 +161,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
> diff --git a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
> index 688c49a24f32..06dad7b0db82 100644
> --- a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
> +++ b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
> @@ -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;
>  }
> diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
> index 62fabc023a83..47890c92534c 100644
> --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
> +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
> @@ -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;
>  }
>  
> diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c
> index e8132aca0bb6..d9fdfddb7091 100644
> --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c
> +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c
> @@ -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;
>  }
>  
> diff --git a/drivers/gpu/drm/i915/gt/selftest_context.c b/drivers/gpu/drm/i915/gt/selftest_context.c
> index bc720defc6b8..a5688f7d9073 100644
> --- a/drivers/gpu/drm/i915/gt/selftest_context.c
> +++ b/drivers/gpu/drm/i915/gt/selftest_context.c
> @@ -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;
>  }
>  
> diff --git a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
> index 85e9ccf5c304..cdaaee4432b2 100644
> --- a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
> +++ b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
> @@ -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;
>  }
>  
> diff --git a/drivers/gpu/drm/i915/gt/selftest_workarounds.c b/drivers/gpu/drm/i915/gt/selftest_workarounds.c
> index abce6e4ec9c0..5c69ec5c5ef9 100644
> --- a/drivers/gpu/drm/i915/gt/selftest_workarounds.c
> +++ b/drivers/gpu/drm/i915/gt/selftest_workarounds.c
> @@ -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;
>  }
>  
> diff --git a/drivers/gpu/drm/i915/selftests/i915_gem.c b/drivers/gpu/drm/i915/selftests/i915_gem.c
> index d83f6bf6d9d4..aa6282adfd09 100644
> --- a/drivers/gpu/drm/i915/selftests/i915_gem.c
> +++ b/drivers/gpu/drm/i915/selftests/i915_gem.c
> @@ -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;
>  }
>  
> diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
> index 42e948144f1b..41092dcea5b1 100644
> --- a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
> +++ b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
> @@ -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;
>  	}
> diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
> index 3f7e80fb3bbd..c3e0d63c4d0c 100644
> --- a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
> +++ b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
> @@ -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;
>  }
>  
> diff --git a/drivers/gpu/drm/i915/selftests/i915_request.c b/drivers/gpu/drm/i915/selftests/i915_request.c
> index 9e6d3159cd80..7c56ee38cc5b 100644
> --- a/drivers/gpu/drm/i915/selftests/i915_request.c
> +++ b/drivers/gpu/drm/i915/selftests/i915_request.c
> @@ -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);
>  
> diff --git a/drivers/gpu/drm/i915/selftests/intel_memory_region.c b/drivers/gpu/drm/i915/selftests/intel_memory_region.c
> index 19e1cca8f143..fa283ce4532a 100644
> --- a/drivers/gpu/drm/i915/selftests/intel_memory_region.c
> +++ b/drivers/gpu/drm/i915/selftests/intel_memory_region.c
> @@ -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;
>  }
>  
> diff --git a/drivers/gpu/drm/i915/selftests/mock_drm.c b/drivers/gpu/drm/i915/selftests/mock_drm.c
> index 09c704153456..c100c3efe239 100644
> --- a/drivers/gpu/drm/i915/selftests/mock_drm.c
> +++ b/drivers/gpu/drm/i915/selftests/mock_drm.c
> @@ -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;

Hm looking at this patch seems like the function interface for the core
mock helper is wrong, and we want a drm_file there. Then you could also
simplify this wrapper a notch more.

>  }
> diff --git a/drivers/gpu/drm/i915/selftests/mock_drm.h b/drivers/gpu/drm/i915/selftests/mock_drm.h
> index b39beee9f8f6..dc4190bd3f5a 100644
> --- a/drivers/gpu/drm/i915/selftests/mock_drm.h
> +++ b/drivers/gpu/drm/i915/selftests/mock_drm.h
> @@ -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)

I still think this would be nice next to the core mock_drm_open helper, as
maybe mock_drm_close. Suitable bikeshedding on the names included :-)
-Daniel

> +{
> +	fput(file->filp);
> +}
>  
>  #endif /* !__MOCK_DRM_H */
> -- 
> 2.24.0
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [Intel-gfx] [PATCH v3 3/5] drm/i915/selftests: Replace mock_file hackery with drm's true fake
@ 2019-11-07 17:17       ` Chris Wilson
  0 siblings, 0 replies; 34+ messages in thread
From: Chris Wilson @ 2019-11-07 17:17 UTC (permalink / raw)
  To: Daniel Vetter; +Cc: intel-gfx, dri-devel

Quoting Daniel Vetter (2019-11-07 08:39:24)
> On Wed, Nov 06, 2019 at 02:24:30PM +0000, Chris Wilson wrote:
> > 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(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/Kconfig.debug b/drivers/gpu/drm/i915/Kconfig.debug
> > index ef123eb29168..1140525da75a 100644
> > --- a/drivers/gpu/drm/i915/Kconfig.debug
> > +++ b/drivers/gpu/drm/i915/Kconfig.debug
> > @@ -37,6 +37,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*)
> > @@ -160,6 +161,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
> > diff --git a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
> > index 688c49a24f32..06dad7b0db82 100644
> > --- a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
> > +++ b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
> > @@ -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;
> >  }
> > diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
> > index 62fabc023a83..47890c92534c 100644
> > --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
> > +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
> > @@ -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;
> >  }
> >  
> > diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c
> > index e8132aca0bb6..d9fdfddb7091 100644
> > --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c
> > +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c
> > @@ -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;
> >  }
> >  
> > diff --git a/drivers/gpu/drm/i915/gt/selftest_context.c b/drivers/gpu/drm/i915/gt/selftest_context.c
> > index bc720defc6b8..a5688f7d9073 100644
> > --- a/drivers/gpu/drm/i915/gt/selftest_context.c
> > +++ b/drivers/gpu/drm/i915/gt/selftest_context.c
> > @@ -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;
> >  }
> >  
> > diff --git a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
> > index 85e9ccf5c304..cdaaee4432b2 100644
> > --- a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
> > +++ b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
> > @@ -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;
> >  }
> >  
> > diff --git a/drivers/gpu/drm/i915/gt/selftest_workarounds.c b/drivers/gpu/drm/i915/gt/selftest_workarounds.c
> > index abce6e4ec9c0..5c69ec5c5ef9 100644
> > --- a/drivers/gpu/drm/i915/gt/selftest_workarounds.c
> > +++ b/drivers/gpu/drm/i915/gt/selftest_workarounds.c
> > @@ -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;
> >  }
> >  
> > diff --git a/drivers/gpu/drm/i915/selftests/i915_gem.c b/drivers/gpu/drm/i915/selftests/i915_gem.c
> > index d83f6bf6d9d4..aa6282adfd09 100644
> > --- a/drivers/gpu/drm/i915/selftests/i915_gem.c
> > +++ b/drivers/gpu/drm/i915/selftests/i915_gem.c
> > @@ -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;
> >  }
> >  
> > diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
> > index 42e948144f1b..41092dcea5b1 100644
> > --- a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
> > +++ b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
> > @@ -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;
> >       }
> > diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
> > index 3f7e80fb3bbd..c3e0d63c4d0c 100644
> > --- a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
> > +++ b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
> > @@ -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;
> >  }
> >  
> > diff --git a/drivers/gpu/drm/i915/selftests/i915_request.c b/drivers/gpu/drm/i915/selftests/i915_request.c
> > index 9e6d3159cd80..7c56ee38cc5b 100644
> > --- a/drivers/gpu/drm/i915/selftests/i915_request.c
> > +++ b/drivers/gpu/drm/i915/selftests/i915_request.c
> > @@ -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);
> >  
> > diff --git a/drivers/gpu/drm/i915/selftests/intel_memory_region.c b/drivers/gpu/drm/i915/selftests/intel_memory_region.c
> > index 19e1cca8f143..fa283ce4532a 100644
> > --- a/drivers/gpu/drm/i915/selftests/intel_memory_region.c
> > +++ b/drivers/gpu/drm/i915/selftests/intel_memory_region.c
> > @@ -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;
> >  }
> >  
> > diff --git a/drivers/gpu/drm/i915/selftests/mock_drm.c b/drivers/gpu/drm/i915/selftests/mock_drm.c
> > index 09c704153456..c100c3efe239 100644
> > --- a/drivers/gpu/drm/i915/selftests/mock_drm.c
> > +++ b/drivers/gpu/drm/i915/selftests/mock_drm.c
> > @@ -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;
> 
> Hm looking at this patch seems like the function interface for the core
> mock helper is wrong, and we want a drm_file there. Then you could also
> simplify this wrapper a notch more.
> 
> >  }
> > diff --git a/drivers/gpu/drm/i915/selftests/mock_drm.h b/drivers/gpu/drm/i915/selftests/mock_drm.h
> > index b39beee9f8f6..dc4190bd3f5a 100644
> > --- a/drivers/gpu/drm/i915/selftests/mock_drm.h
> > +++ b/drivers/gpu/drm/i915/selftests/mock_drm.h
> > @@ -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)
> 
> I still think this would be nice next to the core mock_drm_open helper, as
> maybe mock_drm_close. Suitable bikeshedding on the names included :-)

My intention is to transition the tests to tracking struct file on
allocation and so use fput() directly, with a local struct drm_file as
appropriate. Nobody else is in the habit of creating anonymous struct
drm_file, just yet so moving this helper to core seems wasteful.
-Chris
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [Intel-gfx] [PATCH v3 3/5] drm/i915/selftests: Replace mock_file hackery with drm's true fake
@ 2019-11-07 17:17       ` Chris Wilson
  0 siblings, 0 replies; 34+ messages in thread
From: Chris Wilson @ 2019-11-07 17:17 UTC (permalink / raw)
  To: Daniel Vetter; +Cc: intel-gfx, dri-devel

Quoting Daniel Vetter (2019-11-07 08:39:24)
> On Wed, Nov 06, 2019 at 02:24:30PM +0000, Chris Wilson wrote:
> > 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(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/Kconfig.debug b/drivers/gpu/drm/i915/Kconfig.debug
> > index ef123eb29168..1140525da75a 100644
> > --- a/drivers/gpu/drm/i915/Kconfig.debug
> > +++ b/drivers/gpu/drm/i915/Kconfig.debug
> > @@ -37,6 +37,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*)
> > @@ -160,6 +161,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
> > diff --git a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
> > index 688c49a24f32..06dad7b0db82 100644
> > --- a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
> > +++ b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
> > @@ -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;
> >  }
> > diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
> > index 62fabc023a83..47890c92534c 100644
> > --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
> > +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
> > @@ -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;
> >  }
> >  
> > diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c
> > index e8132aca0bb6..d9fdfddb7091 100644
> > --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c
> > +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c
> > @@ -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;
> >  }
> >  
> > diff --git a/drivers/gpu/drm/i915/gt/selftest_context.c b/drivers/gpu/drm/i915/gt/selftest_context.c
> > index bc720defc6b8..a5688f7d9073 100644
> > --- a/drivers/gpu/drm/i915/gt/selftest_context.c
> > +++ b/drivers/gpu/drm/i915/gt/selftest_context.c
> > @@ -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;
> >  }
> >  
> > diff --git a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
> > index 85e9ccf5c304..cdaaee4432b2 100644
> > --- a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
> > +++ b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
> > @@ -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;
> >  }
> >  
> > diff --git a/drivers/gpu/drm/i915/gt/selftest_workarounds.c b/drivers/gpu/drm/i915/gt/selftest_workarounds.c
> > index abce6e4ec9c0..5c69ec5c5ef9 100644
> > --- a/drivers/gpu/drm/i915/gt/selftest_workarounds.c
> > +++ b/drivers/gpu/drm/i915/gt/selftest_workarounds.c
> > @@ -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;
> >  }
> >  
> > diff --git a/drivers/gpu/drm/i915/selftests/i915_gem.c b/drivers/gpu/drm/i915/selftests/i915_gem.c
> > index d83f6bf6d9d4..aa6282adfd09 100644
> > --- a/drivers/gpu/drm/i915/selftests/i915_gem.c
> > +++ b/drivers/gpu/drm/i915/selftests/i915_gem.c
> > @@ -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;
> >  }
> >  
> > diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
> > index 42e948144f1b..41092dcea5b1 100644
> > --- a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
> > +++ b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
> > @@ -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;
> >       }
> > diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
> > index 3f7e80fb3bbd..c3e0d63c4d0c 100644
> > --- a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
> > +++ b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
> > @@ -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;
> >  }
> >  
> > diff --git a/drivers/gpu/drm/i915/selftests/i915_request.c b/drivers/gpu/drm/i915/selftests/i915_request.c
> > index 9e6d3159cd80..7c56ee38cc5b 100644
> > --- a/drivers/gpu/drm/i915/selftests/i915_request.c
> > +++ b/drivers/gpu/drm/i915/selftests/i915_request.c
> > @@ -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);
> >  
> > diff --git a/drivers/gpu/drm/i915/selftests/intel_memory_region.c b/drivers/gpu/drm/i915/selftests/intel_memory_region.c
> > index 19e1cca8f143..fa283ce4532a 100644
> > --- a/drivers/gpu/drm/i915/selftests/intel_memory_region.c
> > +++ b/drivers/gpu/drm/i915/selftests/intel_memory_region.c
> > @@ -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;
> >  }
> >  
> > diff --git a/drivers/gpu/drm/i915/selftests/mock_drm.c b/drivers/gpu/drm/i915/selftests/mock_drm.c
> > index 09c704153456..c100c3efe239 100644
> > --- a/drivers/gpu/drm/i915/selftests/mock_drm.c
> > +++ b/drivers/gpu/drm/i915/selftests/mock_drm.c
> > @@ -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;
> 
> Hm looking at this patch seems like the function interface for the core
> mock helper is wrong, and we want a drm_file there. Then you could also
> simplify this wrapper a notch more.
> 
> >  }
> > diff --git a/drivers/gpu/drm/i915/selftests/mock_drm.h b/drivers/gpu/drm/i915/selftests/mock_drm.h
> > index b39beee9f8f6..dc4190bd3f5a 100644
> > --- a/drivers/gpu/drm/i915/selftests/mock_drm.h
> > +++ b/drivers/gpu/drm/i915/selftests/mock_drm.h
> > @@ -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)
> 
> I still think this would be nice next to the core mock_drm_open helper, as
> maybe mock_drm_close. Suitable bikeshedding on the names included :-)

My intention is to transition the tests to tracking struct file on
allocation and so use fput() directly, with a local struct drm_file as
appropriate. Nobody else is in the habit of creating anonymous struct
drm_file, just yet so moving this helper to core seems wasteful.
-Chris
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH v3 3/5] drm/i915/selftests: Replace mock_file hackery with drm's true fake
@ 2019-11-07 17:28     ` Matthew Auld
  0 siblings, 0 replies; 34+ messages in thread
From: Matthew Auld @ 2019-11-07 17:28 UTC (permalink / raw)
  To: Chris Wilson; +Cc: Intel Graphics Development, ML dri-devel

On Wed, 6 Nov 2019 at 14:24, Chris Wilson <chris@chris-wilson.co.uk> wrote:
>
> 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>

As per your eventual plan, fwiw,
Reviewed-by: Matthew Auld <matthew.auld@intel.com>
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [Intel-gfx] [PATCH v3 3/5] drm/i915/selftests: Replace mock_file hackery with drm's true fake
@ 2019-11-07 17:28     ` Matthew Auld
  0 siblings, 0 replies; 34+ messages in thread
From: Matthew Auld @ 2019-11-07 17:28 UTC (permalink / raw)
  To: Chris Wilson; +Cc: Intel Graphics Development, ML dri-devel

On Wed, 6 Nov 2019 at 14:24, Chris Wilson <chris@chris-wilson.co.uk> wrote:
>
> 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>

As per your eventual plan, fwiw,
Reviewed-by: Matthew Auld <matthew.auld@intel.com>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [Intel-gfx] [PATCH v3 3/5] drm/i915/selftests: Replace mock_file hackery with drm's true fake
@ 2019-11-07 17:28     ` Matthew Auld
  0 siblings, 0 replies; 34+ messages in thread
From: Matthew Auld @ 2019-11-07 17:28 UTC (permalink / raw)
  To: Chris Wilson; +Cc: Intel Graphics Development, ML dri-devel

On Wed, 6 Nov 2019 at 14:24, Chris Wilson <chris@chris-wilson.co.uk> wrote:
>
> 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>

As per your eventual plan, fwiw,
Reviewed-by: Matthew Auld <matthew.auld@intel.com>
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH v3 3/5] drm/i915/selftests: Replace mock_file hackery with drm's true fake
@ 2019-11-07 17:33         ` Daniel Vetter
  0 siblings, 0 replies; 34+ messages in thread
From: Daniel Vetter @ 2019-11-07 17:33 UTC (permalink / raw)
  To: Chris Wilson; +Cc: intel-gfx, dri-devel

On Thu, Nov 07, 2019 at 05:17:00PM +0000, Chris Wilson wrote:
> Quoting Daniel Vetter (2019-11-07 08:39:24)
> > On Wed, Nov 06, 2019 at 02:24:30PM +0000, Chris Wilson wrote:
> > > 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(-)
> > > 
> > > diff --git a/drivers/gpu/drm/i915/Kconfig.debug b/drivers/gpu/drm/i915/Kconfig.debug
> > > index ef123eb29168..1140525da75a 100644
> > > --- a/drivers/gpu/drm/i915/Kconfig.debug
> > > +++ b/drivers/gpu/drm/i915/Kconfig.debug
> > > @@ -37,6 +37,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*)
> > > @@ -160,6 +161,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
> > > diff --git a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
> > > index 688c49a24f32..06dad7b0db82 100644
> > > --- a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
> > > +++ b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
> > > @@ -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;
> > >  }
> > > diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
> > > index 62fabc023a83..47890c92534c 100644
> > > --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
> > > +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
> > > @@ -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;
> > >  }
> > >  
> > > diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c
> > > index e8132aca0bb6..d9fdfddb7091 100644
> > > --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c
> > > +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c
> > > @@ -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;
> > >  }
> > >  
> > > diff --git a/drivers/gpu/drm/i915/gt/selftest_context.c b/drivers/gpu/drm/i915/gt/selftest_context.c
> > > index bc720defc6b8..a5688f7d9073 100644
> > > --- a/drivers/gpu/drm/i915/gt/selftest_context.c
> > > +++ b/drivers/gpu/drm/i915/gt/selftest_context.c
> > > @@ -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;
> > >  }
> > >  
> > > diff --git a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
> > > index 85e9ccf5c304..cdaaee4432b2 100644
> > > --- a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
> > > +++ b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
> > > @@ -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;
> > >  }
> > >  
> > > diff --git a/drivers/gpu/drm/i915/gt/selftest_workarounds.c b/drivers/gpu/drm/i915/gt/selftest_workarounds.c
> > > index abce6e4ec9c0..5c69ec5c5ef9 100644
> > > --- a/drivers/gpu/drm/i915/gt/selftest_workarounds.c
> > > +++ b/drivers/gpu/drm/i915/gt/selftest_workarounds.c
> > > @@ -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;
> > >  }
> > >  
> > > diff --git a/drivers/gpu/drm/i915/selftests/i915_gem.c b/drivers/gpu/drm/i915/selftests/i915_gem.c
> > > index d83f6bf6d9d4..aa6282adfd09 100644
> > > --- a/drivers/gpu/drm/i915/selftests/i915_gem.c
> > > +++ b/drivers/gpu/drm/i915/selftests/i915_gem.c
> > > @@ -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;
> > >  }
> > >  
> > > diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
> > > index 42e948144f1b..41092dcea5b1 100644
> > > --- a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
> > > +++ b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
> > > @@ -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;
> > >       }
> > > diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
> > > index 3f7e80fb3bbd..c3e0d63c4d0c 100644
> > > --- a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
> > > +++ b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
> > > @@ -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;
> > >  }
> > >  
> > > diff --git a/drivers/gpu/drm/i915/selftests/i915_request.c b/drivers/gpu/drm/i915/selftests/i915_request.c
> > > index 9e6d3159cd80..7c56ee38cc5b 100644
> > > --- a/drivers/gpu/drm/i915/selftests/i915_request.c
> > > +++ b/drivers/gpu/drm/i915/selftests/i915_request.c
> > > @@ -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);
> > >  
> > > diff --git a/drivers/gpu/drm/i915/selftests/intel_memory_region.c b/drivers/gpu/drm/i915/selftests/intel_memory_region.c
> > > index 19e1cca8f143..fa283ce4532a 100644
> > > --- a/drivers/gpu/drm/i915/selftests/intel_memory_region.c
> > > +++ b/drivers/gpu/drm/i915/selftests/intel_memory_region.c
> > > @@ -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;
> > >  }
> > >  
> > > diff --git a/drivers/gpu/drm/i915/selftests/mock_drm.c b/drivers/gpu/drm/i915/selftests/mock_drm.c
> > > index 09c704153456..c100c3efe239 100644
> > > --- a/drivers/gpu/drm/i915/selftests/mock_drm.c
> > > +++ b/drivers/gpu/drm/i915/selftests/mock_drm.c
> > > @@ -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;
> > 
> > Hm looking at this patch seems like the function interface for the core
> > mock helper is wrong, and we want a drm_file there. Then you could also
> > simplify this wrapper a notch more.
> > 
> > >  }
> > > diff --git a/drivers/gpu/drm/i915/selftests/mock_drm.h b/drivers/gpu/drm/i915/selftests/mock_drm.h
> > > index b39beee9f8f6..dc4190bd3f5a 100644
> > > --- a/drivers/gpu/drm/i915/selftests/mock_drm.h
> > > +++ b/drivers/gpu/drm/i915/selftests/mock_drm.h
> > > @@ -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)
> > 
> > I still think this would be nice next to the core mock_drm_open helper, as
> > maybe mock_drm_close. Suitable bikeshedding on the names included :-)
> 
> My intention is to transition the tests to tracking struct file on
> allocation and so use fput() directly, with a local struct drm_file as
> appropriate. Nobody else is in the habit of creating anonymous struct
> drm_file, just yet so moving this helper to core seems wasteful.

Ah if that's the plan, then please quote the above Q&A in the commit
message and the patch is

Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>

Cheers, Daniel
-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [Intel-gfx] [PATCH v3 3/5] drm/i915/selftests: Replace mock_file hackery with drm's true fake
@ 2019-11-07 17:33         ` Daniel Vetter
  0 siblings, 0 replies; 34+ messages in thread
From: Daniel Vetter @ 2019-11-07 17:33 UTC (permalink / raw)
  To: Chris Wilson; +Cc: intel-gfx, dri-devel

On Thu, Nov 07, 2019 at 05:17:00PM +0000, Chris Wilson wrote:
> Quoting Daniel Vetter (2019-11-07 08:39:24)
> > On Wed, Nov 06, 2019 at 02:24:30PM +0000, Chris Wilson wrote:
> > > 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(-)
> > > 
> > > diff --git a/drivers/gpu/drm/i915/Kconfig.debug b/drivers/gpu/drm/i915/Kconfig.debug
> > > index ef123eb29168..1140525da75a 100644
> > > --- a/drivers/gpu/drm/i915/Kconfig.debug
> > > +++ b/drivers/gpu/drm/i915/Kconfig.debug
> > > @@ -37,6 +37,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*)
> > > @@ -160,6 +161,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
> > > diff --git a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
> > > index 688c49a24f32..06dad7b0db82 100644
> > > --- a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
> > > +++ b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
> > > @@ -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;
> > >  }
> > > diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
> > > index 62fabc023a83..47890c92534c 100644
> > > --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
> > > +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
> > > @@ -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;
> > >  }
> > >  
> > > diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c
> > > index e8132aca0bb6..d9fdfddb7091 100644
> > > --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c
> > > +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c
> > > @@ -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;
> > >  }
> > >  
> > > diff --git a/drivers/gpu/drm/i915/gt/selftest_context.c b/drivers/gpu/drm/i915/gt/selftest_context.c
> > > index bc720defc6b8..a5688f7d9073 100644
> > > --- a/drivers/gpu/drm/i915/gt/selftest_context.c
> > > +++ b/drivers/gpu/drm/i915/gt/selftest_context.c
> > > @@ -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;
> > >  }
> > >  
> > > diff --git a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
> > > index 85e9ccf5c304..cdaaee4432b2 100644
> > > --- a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
> > > +++ b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
> > > @@ -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;
> > >  }
> > >  
> > > diff --git a/drivers/gpu/drm/i915/gt/selftest_workarounds.c b/drivers/gpu/drm/i915/gt/selftest_workarounds.c
> > > index abce6e4ec9c0..5c69ec5c5ef9 100644
> > > --- a/drivers/gpu/drm/i915/gt/selftest_workarounds.c
> > > +++ b/drivers/gpu/drm/i915/gt/selftest_workarounds.c
> > > @@ -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;
> > >  }
> > >  
> > > diff --git a/drivers/gpu/drm/i915/selftests/i915_gem.c b/drivers/gpu/drm/i915/selftests/i915_gem.c
> > > index d83f6bf6d9d4..aa6282adfd09 100644
> > > --- a/drivers/gpu/drm/i915/selftests/i915_gem.c
> > > +++ b/drivers/gpu/drm/i915/selftests/i915_gem.c
> > > @@ -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;
> > >  }
> > >  
> > > diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
> > > index 42e948144f1b..41092dcea5b1 100644
> > > --- a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
> > > +++ b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
> > > @@ -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;
> > >       }
> > > diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
> > > index 3f7e80fb3bbd..c3e0d63c4d0c 100644
> > > --- a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
> > > +++ b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
> > > @@ -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;
> > >  }
> > >  
> > > diff --git a/drivers/gpu/drm/i915/selftests/i915_request.c b/drivers/gpu/drm/i915/selftests/i915_request.c
> > > index 9e6d3159cd80..7c56ee38cc5b 100644
> > > --- a/drivers/gpu/drm/i915/selftests/i915_request.c
> > > +++ b/drivers/gpu/drm/i915/selftests/i915_request.c
> > > @@ -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);
> > >  
> > > diff --git a/drivers/gpu/drm/i915/selftests/intel_memory_region.c b/drivers/gpu/drm/i915/selftests/intel_memory_region.c
> > > index 19e1cca8f143..fa283ce4532a 100644
> > > --- a/drivers/gpu/drm/i915/selftests/intel_memory_region.c
> > > +++ b/drivers/gpu/drm/i915/selftests/intel_memory_region.c
> > > @@ -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;
> > >  }
> > >  
> > > diff --git a/drivers/gpu/drm/i915/selftests/mock_drm.c b/drivers/gpu/drm/i915/selftests/mock_drm.c
> > > index 09c704153456..c100c3efe239 100644
> > > --- a/drivers/gpu/drm/i915/selftests/mock_drm.c
> > > +++ b/drivers/gpu/drm/i915/selftests/mock_drm.c
> > > @@ -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;
> > 
> > Hm looking at this patch seems like the function interface for the core
> > mock helper is wrong, and we want a drm_file there. Then you could also
> > simplify this wrapper a notch more.
> > 
> > >  }
> > > diff --git a/drivers/gpu/drm/i915/selftests/mock_drm.h b/drivers/gpu/drm/i915/selftests/mock_drm.h
> > > index b39beee9f8f6..dc4190bd3f5a 100644
> > > --- a/drivers/gpu/drm/i915/selftests/mock_drm.h
> > > +++ b/drivers/gpu/drm/i915/selftests/mock_drm.h
> > > @@ -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)
> > 
> > I still think this would be nice next to the core mock_drm_open helper, as
> > maybe mock_drm_close. Suitable bikeshedding on the names included :-)
> 
> My intention is to transition the tests to tracking struct file on
> allocation and so use fput() directly, with a local struct drm_file as
> appropriate. Nobody else is in the habit of creating anonymous struct
> drm_file, just yet so moving this helper to core seems wasteful.

Ah if that's the plan, then please quote the above Q&A in the commit
message and the patch is

Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>

Cheers, Daniel
-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [Intel-gfx] [PATCH v3 3/5] drm/i915/selftests: Replace mock_file hackery with drm's true fake
@ 2019-11-07 17:33         ` Daniel Vetter
  0 siblings, 0 replies; 34+ messages in thread
From: Daniel Vetter @ 2019-11-07 17:33 UTC (permalink / raw)
  To: Chris Wilson; +Cc: intel-gfx, dri-devel

On Thu, Nov 07, 2019 at 05:17:00PM +0000, Chris Wilson wrote:
> Quoting Daniel Vetter (2019-11-07 08:39:24)
> > On Wed, Nov 06, 2019 at 02:24:30PM +0000, Chris Wilson wrote:
> > > 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(-)
> > > 
> > > diff --git a/drivers/gpu/drm/i915/Kconfig.debug b/drivers/gpu/drm/i915/Kconfig.debug
> > > index ef123eb29168..1140525da75a 100644
> > > --- a/drivers/gpu/drm/i915/Kconfig.debug
> > > +++ b/drivers/gpu/drm/i915/Kconfig.debug
> > > @@ -37,6 +37,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*)
> > > @@ -160,6 +161,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
> > > diff --git a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
> > > index 688c49a24f32..06dad7b0db82 100644
> > > --- a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
> > > +++ b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
> > > @@ -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;
> > >  }
> > > diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
> > > index 62fabc023a83..47890c92534c 100644
> > > --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
> > > +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
> > > @@ -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;
> > >  }
> > >  
> > > diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c
> > > index e8132aca0bb6..d9fdfddb7091 100644
> > > --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c
> > > +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_object_blt.c
> > > @@ -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;
> > >  }
> > >  
> > > diff --git a/drivers/gpu/drm/i915/gt/selftest_context.c b/drivers/gpu/drm/i915/gt/selftest_context.c
> > > index bc720defc6b8..a5688f7d9073 100644
> > > --- a/drivers/gpu/drm/i915/gt/selftest_context.c
> > > +++ b/drivers/gpu/drm/i915/gt/selftest_context.c
> > > @@ -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;
> > >  }
> > >  
> > > diff --git a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
> > > index 85e9ccf5c304..cdaaee4432b2 100644
> > > --- a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
> > > +++ b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
> > > @@ -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;
> > >  }
> > >  
> > > diff --git a/drivers/gpu/drm/i915/gt/selftest_workarounds.c b/drivers/gpu/drm/i915/gt/selftest_workarounds.c
> > > index abce6e4ec9c0..5c69ec5c5ef9 100644
> > > --- a/drivers/gpu/drm/i915/gt/selftest_workarounds.c
> > > +++ b/drivers/gpu/drm/i915/gt/selftest_workarounds.c
> > > @@ -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;
> > >  }
> > >  
> > > diff --git a/drivers/gpu/drm/i915/selftests/i915_gem.c b/drivers/gpu/drm/i915/selftests/i915_gem.c
> > > index d83f6bf6d9d4..aa6282adfd09 100644
> > > --- a/drivers/gpu/drm/i915/selftests/i915_gem.c
> > > +++ b/drivers/gpu/drm/i915/selftests/i915_gem.c
> > > @@ -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;
> > >  }
> > >  
> > > diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
> > > index 42e948144f1b..41092dcea5b1 100644
> > > --- a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
> > > +++ b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
> > > @@ -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;
> > >       }
> > > diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
> > > index 3f7e80fb3bbd..c3e0d63c4d0c 100644
> > > --- a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
> > > +++ b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
> > > @@ -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;
> > >  }
> > >  
> > > diff --git a/drivers/gpu/drm/i915/selftests/i915_request.c b/drivers/gpu/drm/i915/selftests/i915_request.c
> > > index 9e6d3159cd80..7c56ee38cc5b 100644
> > > --- a/drivers/gpu/drm/i915/selftests/i915_request.c
> > > +++ b/drivers/gpu/drm/i915/selftests/i915_request.c
> > > @@ -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);
> > >  
> > > diff --git a/drivers/gpu/drm/i915/selftests/intel_memory_region.c b/drivers/gpu/drm/i915/selftests/intel_memory_region.c
> > > index 19e1cca8f143..fa283ce4532a 100644
> > > --- a/drivers/gpu/drm/i915/selftests/intel_memory_region.c
> > > +++ b/drivers/gpu/drm/i915/selftests/intel_memory_region.c
> > > @@ -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;
> > >  }
> > >  
> > > diff --git a/drivers/gpu/drm/i915/selftests/mock_drm.c b/drivers/gpu/drm/i915/selftests/mock_drm.c
> > > index 09c704153456..c100c3efe239 100644
> > > --- a/drivers/gpu/drm/i915/selftests/mock_drm.c
> > > +++ b/drivers/gpu/drm/i915/selftests/mock_drm.c
> > > @@ -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;
> > 
> > Hm looking at this patch seems like the function interface for the core
> > mock helper is wrong, and we want a drm_file there. Then you could also
> > simplify this wrapper a notch more.
> > 
> > >  }
> > > diff --git a/drivers/gpu/drm/i915/selftests/mock_drm.h b/drivers/gpu/drm/i915/selftests/mock_drm.h
> > > index b39beee9f8f6..dc4190bd3f5a 100644
> > > --- a/drivers/gpu/drm/i915/selftests/mock_drm.h
> > > +++ b/drivers/gpu/drm/i915/selftests/mock_drm.h
> > > @@ -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)
> > 
> > I still think this would be nice next to the core mock_drm_open helper, as
> > maybe mock_drm_close. Suitable bikeshedding on the names included :-)
> 
> My intention is to transition the tests to tracking struct file on
> allocation and so use fput() directly, with a local struct drm_file as
> appropriate. Nobody else is in the habit of creating anonymous struct
> drm_file, just yet so moving this helper to core seems wasteful.

Ah if that's the plan, then please quote the above Q&A in the commit
message and the patch is

Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>

Cheers, Daniel
-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 34+ messages in thread

end of thread, other threads:[~2019-11-07 17:33 UTC | newest]

Thread overview: 34+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-06 14:24 mock_drm_getfile(), take three Chris Wilson
2019-11-06 14:24 ` [Intel-gfx] " Chris Wilson
2019-11-06 14:24 ` [PATCH v3 1/5] drm: Move EXPORT_SYMBOL_FOR_TESTS_ONLY under a separate Kconfig Chris Wilson
2019-11-06 14:24   ` [Intel-gfx] " Chris Wilson
2019-11-06 14:24   ` Chris Wilson
2019-11-07  8:35   ` Daniel Vetter
2019-11-07  8:35     ` [Intel-gfx] " Daniel Vetter
2019-11-06 14:24 ` [PATCH v3 2/5] drm: Expose a method for creating anonymous struct file around drm_minor Chris Wilson
2019-11-06 14:24   ` [Intel-gfx] " Chris Wilson
2019-11-06 14:24   ` Chris Wilson
2019-11-07  8:36   ` Daniel Vetter
2019-11-07  8:36     ` [Intel-gfx] " Daniel Vetter
2019-11-06 14:24 ` [PATCH v3 3/5] drm/i915/selftests: Replace mock_file hackery with drm's true fake Chris Wilson
2019-11-06 14:24   ` [Intel-gfx] " Chris Wilson
2019-11-06 14:24   ` Chris Wilson
2019-11-07  8:39   ` [Intel-gfx] " Daniel Vetter
2019-11-07  8:39     ` Daniel Vetter
2019-11-07 17:17     ` Chris Wilson
2019-11-07 17:17       ` Chris Wilson
2019-11-07 17:33       ` Daniel Vetter
2019-11-07 17:33         ` [Intel-gfx] " Daniel Vetter
2019-11-07 17:33         ` Daniel Vetter
2019-11-07 17:28   ` Matthew Auld
2019-11-07 17:28     ` [Intel-gfx] " Matthew Auld
2019-11-07 17:28     ` Matthew Auld
2019-11-06 14:24 ` [PATCH v3 4/5] drm/i915/selftests: Wrap vm_mmap() around GEM objects Chris Wilson
2019-11-06 14:24   ` [Intel-gfx] " Chris Wilson
2019-11-06 14:24   ` Chris Wilson
2019-11-06 14:24 ` [PATCH v3 5/5] drm/i915/selftests: Verify mmap_gtt revocation on unbinding Chris Wilson
2019-11-06 14:24   ` [Intel-gfx] " Chris Wilson
2019-11-06 18:35 ` ✗ Fi.CI.CHECKPATCH: warning for series starting with [v3,1/5] drm: Move EXPORT_SYMBOL_FOR_TESTS_ONLY under a separate Kconfig Patchwork
2019-11-06 18:35   ` [Intel-gfx] " Patchwork
2019-11-06 18:57 ` ✗ Fi.CI.BAT: failure " Patchwork
2019-11-06 18:57   ` [Intel-gfx] " Patchwork

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.