Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/5] drm: Introduce DRM client library
@ 2024-09-27 14:37 Thomas Zimmermann
  2024-09-27 14:37 ` [PATCH 1/5] drm/i915: Select DRM_CLIENT_SELECTION Thomas Zimmermann
                   ` (10 more replies)
  0 siblings, 11 replies; 18+ messages in thread
From: Thomas Zimmermann @ 2024-09-27 14:37 UTC (permalink / raw)
  To: simona, airlied, javierm, jfalempe
  Cc: dri-devel, amd-gfx, intel-gfx, intel-xe, Thomas Zimmermann

With the next DRM client coming soon (drm_log) and most of DRM's
fbdev emulation consolidated in a few places, it's time to provide
a single place for the clients.

The new module drm_client_lib.ko stores most of the common client
code. It's designed such that drivers can opt into client support,
but the presence of the client module depends on the user's kernel
configuration. Without selected clients, no client module will be
build.

Thomas Zimmermann (5):
  drm/i915: Select DRM_CLIENT_SELECTION
  drm/xe: Select DRM_CLIENT_SELECTION
  drm: Move client-device functions in to drm_client_dev.c
  drm: Select fbdev helpers for modules that require them
  drm: Add client-lib module

 Documentation/gpu/drm-client.rst   |   3 +
 drivers/gpu/drm/Kconfig            |  34 +++++--
 drivers/gpu/drm/Makefile           |  20 +++--
 drivers/gpu/drm/amd/amdgpu/Kconfig |   1 +
 drivers/gpu/drm/drm_client.c       | 122 +------------------------
 drivers/gpu/drm/drm_client_dev.c   | 138 +++++++++++++++++++++++++++++
 drivers/gpu/drm/drm_dumb_buffers.c |   2 +
 drivers/gpu/drm/drm_file.c         |   2 +
 drivers/gpu/drm/drm_framebuffer.c  |   2 +
 drivers/gpu/drm/drm_gem.c          |   2 +
 drivers/gpu/drm/i915/Kconfig       |   1 +
 drivers/gpu/drm/xe/Kconfig         |   1 +
 12 files changed, 196 insertions(+), 132 deletions(-)
 create mode 100644 drivers/gpu/drm/drm_client_dev.c

-- 
2.46.0


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

* [PATCH 1/5] drm/i915: Select DRM_CLIENT_SELECTION
  2024-09-27 14:37 [PATCH 0/5] drm: Introduce DRM client library Thomas Zimmermann
@ 2024-09-27 14:37 ` Thomas Zimmermann
  2024-09-27 14:37 ` [PATCH 2/5] drm/xe: " Thomas Zimmermann
                   ` (9 subsequent siblings)
  10 siblings, 0 replies; 18+ messages in thread
From: Thomas Zimmermann @ 2024-09-27 14:37 UTC (permalink / raw)
  To: simona, airlied, javierm, jfalempe
  Cc: dri-devel, amd-gfx, intel-gfx, intel-xe, Thomas Zimmermann

The Kconfig token DRM_CLIENT_SELECTION will make DRM clients
available to drivers. Select it from i915.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/drm/i915/Kconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/gpu/drm/i915/Kconfig b/drivers/gpu/drm/i915/Kconfig
index db400aad88fa..1158a6b97f9a 100644
--- a/drivers/gpu/drm/i915/Kconfig
+++ b/drivers/gpu/drm/i915/Kconfig
@@ -10,6 +10,7 @@ config DRM_I915
 	# the shmem_readpage() which depends upon tmpfs
 	select SHMEM
 	select TMPFS
+	select DRM_CLIENT_SELECTION
 	select DRM_DISPLAY_DP_HELPER
 	select DRM_DISPLAY_DSC_HELPER
 	select DRM_DISPLAY_HDCP_HELPER
-- 
2.46.0


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

* [PATCH 2/5] drm/xe: Select DRM_CLIENT_SELECTION
  2024-09-27 14:37 [PATCH 0/5] drm: Introduce DRM client library Thomas Zimmermann
  2024-09-27 14:37 ` [PATCH 1/5] drm/i915: Select DRM_CLIENT_SELECTION Thomas Zimmermann
@ 2024-09-27 14:37 ` Thomas Zimmermann
  2024-09-27 14:37 ` [PATCH 3/5] drm: Move client-device functions in to drm_client_dev.c Thomas Zimmermann
                   ` (8 subsequent siblings)
  10 siblings, 0 replies; 18+ messages in thread
From: Thomas Zimmermann @ 2024-09-27 14:37 UTC (permalink / raw)
  To: simona, airlied, javierm, jfalempe
  Cc: dri-devel, amd-gfx, intel-gfx, intel-xe, Thomas Zimmermann

The Kconfig token DRM_CLIENT_SELECTION will make DRM clients
available to drivers. Select it from xe.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/drm/xe/Kconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/gpu/drm/xe/Kconfig b/drivers/gpu/drm/xe/Kconfig
index ebd0879e04d4..bac96c0dd66e 100644
--- a/drivers/gpu/drm/xe/Kconfig
+++ b/drivers/gpu/drm/xe/Kconfig
@@ -8,6 +8,7 @@ config DRM_XE
 	select SHMEM
 	select TMPFS
 	select DRM_BUDDY
+	select DRM_CLIENT_SELECTION
 	select DRM_EXEC
 	select DRM_KMS_HELPER
 	select DRM_KUNIT_TEST_HELPERS if DRM_XE_KUNIT_TEST != n
-- 
2.46.0


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

* [PATCH 3/5] drm: Move client-device functions in to drm_client_dev.c
  2024-09-27 14:37 [PATCH 0/5] drm: Introduce DRM client library Thomas Zimmermann
  2024-09-27 14:37 ` [PATCH 1/5] drm/i915: Select DRM_CLIENT_SELECTION Thomas Zimmermann
  2024-09-27 14:37 ` [PATCH 2/5] drm/xe: " Thomas Zimmermann
@ 2024-09-27 14:37 ` Thomas Zimmermann
  2024-09-30 11:49   ` Jocelyn Falempe
  2024-09-27 14:37 ` [PATCH 4/5] drm: Select fbdev helpers for modules that require them Thomas Zimmermann
                   ` (7 subsequent siblings)
  10 siblings, 1 reply; 18+ messages in thread
From: Thomas Zimmermann @ 2024-09-27 14:37 UTC (permalink / raw)
  To: simona, airlied, javierm, jfalempe
  Cc: dri-devel, amd-gfx, intel-gfx, intel-xe, Thomas Zimmermann

A number of DRM-client functions serve as entry points from device
operations to client code. Move them info a separate file, so that
the other client functions can be moved into a different module.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 Documentation/gpu/drm-client.rst |   3 +
 drivers/gpu/drm/Makefile         |   1 +
 drivers/gpu/drm/drm_client.c     | 121 ---------------------------
 drivers/gpu/drm/drm_client_dev.c | 138 +++++++++++++++++++++++++++++++
 4 files changed, 142 insertions(+), 121 deletions(-)
 create mode 100644 drivers/gpu/drm/drm_client_dev.c

diff --git a/Documentation/gpu/drm-client.rst b/Documentation/gpu/drm-client.rst
index 58b5a1d1219d..6d8142f159a1 100644
--- a/Documentation/gpu/drm-client.rst
+++ b/Documentation/gpu/drm-client.rst
@@ -13,3 +13,6 @@ Kernel clients
 
 .. kernel-doc:: drivers/gpu/drm/drm_client_modeset.c
    :export:
+
+.. kernel-doc:: drivers/gpu/drm/drm_client_dev.c
+   :export:
diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
index 3894f43f6d47..c50443756457 100644
--- a/drivers/gpu/drm/Makefile
+++ b/drivers/gpu/drm/Makefile
@@ -42,6 +42,7 @@ drm-y := \
 	drm_bridge.o \
 	drm_cache.o \
 	drm_client.o \
+	drm_client_dev.o \
 	drm_client_modeset.o \
 	drm_color_mgmt.o \
 	drm_connector.o \
diff --git a/drivers/gpu/drm/drm_client.c b/drivers/gpu/drm/drm_client.c
index bfedcbf516db..549b28a5918c 100644
--- a/drivers/gpu/drm/drm_client.c
+++ b/drivers/gpu/drm/drm_client.c
@@ -10,7 +10,6 @@
 #include <linux/slab.h>
 
 #include <drm/drm_client.h>
-#include <drm/drm_debugfs.h>
 #include <drm/drm_device.h>
 #include <drm/drm_drv.h>
 #include <drm/drm_file.h>
@@ -172,99 +171,6 @@ void drm_client_release(struct drm_client_dev *client)
 }
 EXPORT_SYMBOL(drm_client_release);
 
-/**
- * drm_client_dev_unregister - Unregister clients
- * @dev: DRM device
- *
- * This function releases all clients by calling each client's
- * &drm_client_funcs.unregister callback. The callback function
- * is responsibe for releaseing all resources including the client
- * itself.
- *
- * The helper drm_dev_unregister() calls this function. Drivers
- * that use it don't need to call this function themselves.
- */
-void drm_client_dev_unregister(struct drm_device *dev)
-{
-	struct drm_client_dev *client, *tmp;
-
-	if (!drm_core_check_feature(dev, DRIVER_MODESET))
-		return;
-
-	mutex_lock(&dev->clientlist_mutex);
-	list_for_each_entry_safe(client, tmp, &dev->clientlist, list) {
-		list_del(&client->list);
-		if (client->funcs && client->funcs->unregister) {
-			client->funcs->unregister(client);
-		} else {
-			drm_client_release(client);
-			kfree(client);
-		}
-	}
-	mutex_unlock(&dev->clientlist_mutex);
-}
-EXPORT_SYMBOL(drm_client_dev_unregister);
-
-/**
- * drm_client_dev_hotplug - Send hotplug event to clients
- * @dev: DRM device
- *
- * This function calls the &drm_client_funcs.hotplug callback on the attached clients.
- *
- * drm_kms_helper_hotplug_event() calls this function, so drivers that use it
- * don't need to call this function themselves.
- */
-void drm_client_dev_hotplug(struct drm_device *dev)
-{
-	struct drm_client_dev *client;
-	int ret;
-
-	if (!drm_core_check_feature(dev, DRIVER_MODESET))
-		return;
-
-	if (!dev->mode_config.num_connector) {
-		drm_dbg_kms(dev, "No connectors found, will not send hotplug events!\n");
-		return;
-	}
-
-	mutex_lock(&dev->clientlist_mutex);
-	list_for_each_entry(client, &dev->clientlist, list) {
-		if (!client->funcs || !client->funcs->hotplug)
-			continue;
-
-		if (client->hotplug_failed)
-			continue;
-
-		ret = client->funcs->hotplug(client);
-		drm_dbg_kms(dev, "%s: ret=%d\n", client->name, ret);
-		if (ret)
-			client->hotplug_failed = true;
-	}
-	mutex_unlock(&dev->clientlist_mutex);
-}
-EXPORT_SYMBOL(drm_client_dev_hotplug);
-
-void drm_client_dev_restore(struct drm_device *dev)
-{
-	struct drm_client_dev *client;
-	int ret;
-
-	if (!drm_core_check_feature(dev, DRIVER_MODESET))
-		return;
-
-	mutex_lock(&dev->clientlist_mutex);
-	list_for_each_entry(client, &dev->clientlist, list) {
-		if (!client->funcs || !client->funcs->restore)
-			continue;
-
-		ret = client->funcs->restore(client);
-		drm_dbg_kms(dev, "%s: ret=%d\n", client->name, ret);
-		if (!ret) /* The first one to return zero gets the privilege to restore */
-			break;
-	}
-	mutex_unlock(&dev->clientlist_mutex);
-}
-
 static void drm_client_buffer_delete(struct drm_client_buffer *buffer)
 {
 	if (buffer->gem) {
@@ -584,30 +490,3 @@ int drm_client_framebuffer_flush(struct drm_client_buffer *buffer, struct drm_re
 					0, 0, NULL, 0);
 }
 EXPORT_SYMBOL(drm_client_framebuffer_flush);
-
-#ifdef CONFIG_DEBUG_FS
-static int drm_client_debugfs_internal_clients(struct seq_file *m, void *data)
-{
-	struct drm_debugfs_entry *entry = m->private;
-	struct drm_device *dev = entry->dev;
-	struct drm_printer p = drm_seq_file_printer(m);
-	struct drm_client_dev *client;
-
-	mutex_lock(&dev->clientlist_mutex);
-	list_for_each_entry(client, &dev->clientlist, list)
-		drm_printf(&p, "%s\n", client->name);
-	mutex_unlock(&dev->clientlist_mutex);
-
-	return 0;
-}
-
-static const struct drm_debugfs_info drm_client_debugfs_list[] = {
-	{ "internal_clients", drm_client_debugfs_internal_clients, 0 },
-};
-
-void drm_client_debugfs_init(struct drm_device *dev)
-{
-	drm_debugfs_add_files(dev, drm_client_debugfs_list,
-			      ARRAY_SIZE(drm_client_debugfs_list));
-}
-#endif
diff --git a/drivers/gpu/drm/drm_client_dev.c b/drivers/gpu/drm/drm_client_dev.c
new file mode 100644
index 000000000000..3e41fd1f0771
--- /dev/null
+++ b/drivers/gpu/drm/drm_client_dev.c
@@ -0,0 +1,138 @@
+// SPDX-License-Identifier: GPL-2.0 or MIT
+/*
+ * Copyright 2018 Noralf Trønnes
+ */
+
+#include <linux/list.h>
+#include <linux/mutex.h>
+#include <linux/seq_file.h>
+
+#include <drm/drm_client.h>
+#include <drm/drm_debugfs.h>
+#include <drm/drm_device.h>
+#include <drm/drm_drv.h>
+#include <drm/drm_print.h>
+
+/**
+ * DOC: overview
+ *
+ * This library provides support for clients running in the kernel like fbdev and bootsplash.
+ *
+ * GEM drivers which provide a GEM based dumb buffer with a virtual address are supported.
+ */
+
+/**
+ * drm_client_dev_unregister - Unregister clients
+ * @dev: DRM device
+ *
+ * This function releases all clients by calling each client's
+ * &drm_client_funcs.unregister callback. The callback function
+ * is responsibe for releaseing all resources including the client
+ * itself.
+ *
+ * The helper drm_dev_unregister() calls this function. Drivers
+ * that use it don't need to call this function themselves.
+ */
+void drm_client_dev_unregister(struct drm_device *dev)
+{
+	struct drm_client_dev *client, *tmp;
+
+	if (!drm_core_check_feature(dev, DRIVER_MODESET))
+		return;
+
+	mutex_lock(&dev->clientlist_mutex);
+	list_for_each_entry_safe(client, tmp, &dev->clientlist, list) {
+		list_del(&client->list);
+		if (client->funcs && !drm_WARN_ON(dev, !client->funcs->unregister))
+			client->funcs->unregister(client);
+	}
+	mutex_unlock(&dev->clientlist_mutex);
+}
+EXPORT_SYMBOL(drm_client_dev_unregister);
+
+/**
+ * drm_client_dev_hotplug - Send hotplug event to clients
+ * @dev: DRM device
+ *
+ * This function calls the &drm_client_funcs.hotplug callback on the attached clients.
+ *
+ * drm_kms_helper_hotplug_event() calls this function, so drivers that use it
+ * don't need to call this function themselves.
+ */
+void drm_client_dev_hotplug(struct drm_device *dev)
+{
+	struct drm_client_dev *client;
+	int ret;
+
+	if (!drm_core_check_feature(dev, DRIVER_MODESET))
+		return;
+
+	if (!dev->mode_config.num_connector) {
+		drm_dbg_kms(dev, "No connectors found, will not send hotplug events!\n");
+		return;
+	}
+
+	mutex_lock(&dev->clientlist_mutex);
+	list_for_each_entry(client, &dev->clientlist, list) {
+		if (!client->funcs || !client->funcs->hotplug)
+			continue;
+
+		if (client->hotplug_failed)
+			continue;
+
+		ret = client->funcs->hotplug(client);
+		drm_dbg_kms(dev, "%s: ret=%d\n", client->name, ret);
+		if (ret)
+			client->hotplug_failed = true;
+	}
+	mutex_unlock(&dev->clientlist_mutex);
+}
+EXPORT_SYMBOL(drm_client_dev_hotplug);
+
+void drm_client_dev_restore(struct drm_device *dev)
+{
+	struct drm_client_dev *client;
+	int ret;
+
+	if (!drm_core_check_feature(dev, DRIVER_MODESET))
+		return;
+
+	mutex_lock(&dev->clientlist_mutex);
+	list_for_each_entry(client, &dev->clientlist, list) {
+		if (!client->funcs || !client->funcs->restore)
+			continue;
+
+		ret = client->funcs->restore(client);
+		drm_dbg_kms(dev, "%s: ret=%d\n", client->name, ret);
+		if (!ret) /* The first one to return zero gets the privilege to restore */
+			break;
+	}
+	mutex_unlock(&dev->clientlist_mutex);
+}
+
+#ifdef CONFIG_DEBUG_FS
+static int drm_client_debugfs_internal_clients(struct seq_file *m, void *data)
+{
+	struct drm_debugfs_entry *entry = m->private;
+	struct drm_device *dev = entry->dev;
+	struct drm_printer p = drm_seq_file_printer(m);
+	struct drm_client_dev *client;
+
+	mutex_lock(&dev->clientlist_mutex);
+	list_for_each_entry(client, &dev->clientlist, list)
+		drm_printf(&p, "%s\n", client->name);
+	mutex_unlock(&dev->clientlist_mutex);
+
+	return 0;
+}
+
+static const struct drm_debugfs_info drm_client_debugfs_list[] = {
+	{ "internal_clients", drm_client_debugfs_internal_clients, 0 },
+};
+
+void drm_client_debugfs_init(struct drm_device *dev)
+{
+	drm_debugfs_add_files(dev, drm_client_debugfs_list,
+			      ARRAY_SIZE(drm_client_debugfs_list));
+}
+#endif
-- 
2.46.0


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

* [PATCH 4/5] drm: Select fbdev helpers for modules that require them
  2024-09-27 14:37 [PATCH 0/5] drm: Introduce DRM client library Thomas Zimmermann
                   ` (2 preceding siblings ...)
  2024-09-27 14:37 ` [PATCH 3/5] drm: Move client-device functions in to drm_client_dev.c Thomas Zimmermann
@ 2024-09-27 14:37 ` Thomas Zimmermann
  2024-09-30 11:49   ` Jocelyn Falempe
  2024-09-27 14:37 ` [PATCH 5/5] drm: Add client-lib module Thomas Zimmermann
                   ` (6 subsequent siblings)
  10 siblings, 1 reply; 18+ messages in thread
From: Thomas Zimmermann @ 2024-09-27 14:37 UTC (permalink / raw)
  To: simona, airlied, javierm, jfalempe
  Cc: dri-devel, amd-gfx, intel-gfx, intel-xe, Thomas Zimmermann

Fbdev emulation for SHMEM and TTM requires helpers from the fbdev
subsystem. Select them from the modules that use them instead of the
core DRM module.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/drm/Kconfig | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index 1df4e627e3d3..88b2ba55fe16 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -11,7 +11,6 @@ menuconfig DRM
 	select DRM_PANEL_ORIENTATION_QUIRKS
 	select DRM_KMS_HELPER if DRM_FBDEV_EMULATION
 	select FB_CORE if DRM_FBDEV_EMULATION
-	select FB_SYSMEM_HELPERS_DEFERRED if DRM_FBDEV_EMULATION
 	select HDMI
 	select I2C
 	select DMA_SHARED_BUFFER
@@ -332,6 +331,7 @@ config DRM_TTM_HELPER
 	tristate
 	depends on DRM
 	select DRM_TTM
+	select FB_SYSMEM_HELPERS_DEFERRED if DRM_FBDEV_EMULATION
 	help
 	  Helpers for ttm-based gem objects
 
@@ -345,6 +345,7 @@ config DRM_GEM_DMA_HELPER
 config DRM_GEM_SHMEM_HELPER
 	tristate
 	depends on DRM && MMU
+	select FB_SYSMEM_HELPERS_DEFERRED if DRM_FBDEV_EMULATION
 	help
 	  Choose this if you need the GEM shmem helper functions
 
-- 
2.46.0


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

* [PATCH 5/5] drm: Add client-lib module
  2024-09-27 14:37 [PATCH 0/5] drm: Introduce DRM client library Thomas Zimmermann
                   ` (3 preceding siblings ...)
  2024-09-27 14:37 ` [PATCH 4/5] drm: Select fbdev helpers for modules that require them Thomas Zimmermann
@ 2024-09-27 14:37 ` Thomas Zimmermann
  2024-09-30 11:55   ` Jocelyn Falempe
  2024-09-27 16:19 ` ✓ CI.Patch_applied: success for drm: Introduce DRM client library Patchwork
                   ` (5 subsequent siblings)
  10 siblings, 1 reply; 18+ messages in thread
From: Thomas Zimmermann @ 2024-09-27 14:37 UTC (permalink / raw)
  To: simona, airlied, javierm, jfalempe
  Cc: dri-devel, amd-gfx, intel-gfx, intel-xe, Thomas Zimmermann

Add drm_client_lib.ko to contain most of the client code. Move the
existing client for fbdev emulation into the new module. Protect the
new module behind CONFIG_DRM_CLIENT.

The Kconfig rules separate the DRM drivers from the DRM clients. A
driver can opt into the default clients, but the user configures
each client individually. To do so, DRM drivers still select
DRM_CLIENT_SELECTION. The option is now a tristate that further
selects all dependencies of the enabled DRM clients. There's
a menu option for each client. Enabling at least one client also
selects DRM_CLIENT_SETUP, so that drivers call drm_client_setup().
New DRM clients should depend on DRM_CLIENT_SELECTION.

The KMS-helper module now exports handful of symbols needed by the
DRM client library.

There are existing kernel options in drm_fb_helper.o, so leave this
file in the KMS-helper module for now.

Amdgpu has an internal DRM client, so it has to select DRM_CLIENT by
itself unconditionally.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/drm/Kconfig            | 31 ++++++++++++++++++++++++------
 drivers/gpu/drm/Makefile           | 19 +++++++++++++-----
 drivers/gpu/drm/amd/amdgpu/Kconfig |  1 +
 drivers/gpu/drm/drm_client.c       |  3 +++
 drivers/gpu/drm/drm_dumb_buffers.c |  2 ++
 drivers/gpu/drm/drm_file.c         |  2 ++
 drivers/gpu/drm/drm_framebuffer.c  |  2 ++
 drivers/gpu/drm/drm_gem.c          |  2 ++
 8 files changed, 51 insertions(+), 11 deletions(-)

diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index 88b2ba55fe16..379fccf3a6ea 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -9,8 +9,6 @@ menuconfig DRM
 	tristate "Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)"
 	depends on (AGP || AGP=n) && !EMULATED_CMPXCHG && HAS_DMA
 	select DRM_PANEL_ORIENTATION_QUIRKS
-	select DRM_KMS_HELPER if DRM_FBDEV_EMULATION
-	select FB_CORE if DRM_FBDEV_EMULATION
 	select HDMI
 	select I2C
 	select DMA_SHARED_BUFFER
@@ -209,21 +207,40 @@ config DRM_DEBUG_MODESET_LOCK
 
 	  If in doubt, say "N".
 
+config DRM_CLIENT
+	tristate
+	depends on DRM
+	help
+	  Enables the DRM client-lib module. DRM drivers that need
+	  struct drm_client_dev and its interfaces should select this
+	  option. Drivers that support the default clients should
+	  select DRM_CLIENT_SELECTION instead.
+
 config DRM_CLIENT_SELECTION
-	bool
+	tristate
 	depends on DRM
-	select DRM_CLIENT_SETUP if DRM_FBDEV_EMULATION
+	select DRM_CLIENT if DRM_FBDEV_EMULATION
+	select DRM_KMS_HELPER if DRM_FBDEV_EMULATION
+	select FB_CORE if DRM_FBDEV_EMULATION
 	help
 	  Drivers that support in-kernel DRM clients have to select this
-	  option.
+	  option. It selects all modules and components according to the
+	  enabled clients.
 
 config DRM_CLIENT_SETUP
 	bool
 	depends on DRM_CLIENT_SELECTION
+	help
+	  Enables the DRM client selection. DRM drivers that support the
+	  default clients should select DRM_CLIENT_SELECTION instead.
+
+menu "Supported DRM clients"
+	depends on DRM_CLIENT_SELECTION
 
 config DRM_FBDEV_EMULATION
 	bool "Enable legacy fbdev support for your modesetting driver"
-	depends on DRM
+	depends on DRM_CLIENT_SELECTION
+	select DRM_CLIENT_SETUP
 	select FRAMEBUFFER_CONSOLE_DETECT_PRIMARY if FRAMEBUFFER_CONSOLE
 	default FB
 	help
@@ -262,6 +279,8 @@ config DRM_FBDEV_LEAK_PHYS_SMEM
 	  If in doubt, say "N" or spread the word to your closed source
 	  library vendor.
 
+endmenu
+
 config DRM_LOAD_EDID_FIRMWARE
 	bool "Allow to specify an EDID data set instead of probing for it"
 	depends on DRM
diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
index c50443756457..419208b97f57 100644
--- a/drivers/gpu/drm/Makefile
+++ b/drivers/gpu/drm/Makefile
@@ -41,9 +41,7 @@ drm-y := \
 	drm_blend.o \
 	drm_bridge.o \
 	drm_cache.o \
-	drm_client.o \
 	drm_client_dev.o \
-	drm_client_modeset.o \
 	drm_color_mgmt.o \
 	drm_connector.o \
 	drm_crtc.o \
@@ -144,14 +142,25 @@ drm_kms_helper-y := \
 	drm_probe_helper.o \
 	drm_self_refresh_helper.o \
 	drm_simple_kms_helper.o
-drm_kms_helper-$(CONFIG_DRM_CLIENT_SETUP) += \
-	drm_client_setup.o
 drm_kms_helper-$(CONFIG_DRM_PANEL_BRIDGE) += bridge/panel.o
 drm_kms_helper-$(CONFIG_DRM_FBDEV_EMULATION) += \
-	drm_fbdev_client.o \
 	drm_fb_helper.o
+drm_kms_helper-$(CONFIG_DRM_PANEL_BRIDGE) += bridge/panel.o
 obj-$(CONFIG_DRM_KMS_HELPER) += drm_kms_helper.o
 
+#
+# DRM clients
+#
+
+drm_client_lib-y := \
+	drm_client.o \
+	drm_client_modeset.o
+drm_client_lib-$(CONFIG_DRM_CLIENT_SETUP) += \
+	drm_client_setup.o
+drm_client_lib-$(CONFIG_DRM_FBDEV_EMULATION) += \
+	drm_fbdev_client.o
+obj-$(CONFIG_DRM_CLIENT) += drm_client_lib.o
+
 #
 # Drivers and the rest
 #
diff --git a/drivers/gpu/drm/amd/amdgpu/Kconfig b/drivers/gpu/drm/amd/amdgpu/Kconfig
index 680a94c361ba..41fa3377d9cf 100644
--- a/drivers/gpu/drm/amd/amdgpu/Kconfig
+++ b/drivers/gpu/drm/amd/amdgpu/Kconfig
@@ -5,6 +5,7 @@ config DRM_AMDGPU
 	depends on DRM && PCI && MMU
 	depends on !UML
 	select FW_LOADER
+	select DRM_CLIENT
 	select DRM_CLIENT_SELECTION
 	select DRM_DISPLAY_DP_HELPER
 	select DRM_DISPLAY_DSC_HELPER
diff --git a/drivers/gpu/drm/drm_client.c b/drivers/gpu/drm/drm_client.c
index 549b28a5918c..864ee96e48cf 100644
--- a/drivers/gpu/drm/drm_client.c
+++ b/drivers/gpu/drm/drm_client.c
@@ -490,3 +490,6 @@ int drm_client_framebuffer_flush(struct drm_client_buffer *buffer, struct drm_re
 					0, 0, NULL, 0);
 }
 EXPORT_SYMBOL(drm_client_framebuffer_flush);
+
+MODULE_DESCRIPTION("In-kernel DRM clients");
+MODULE_LICENSE("GPL and additional rights");
diff --git a/drivers/gpu/drm/drm_dumb_buffers.c b/drivers/gpu/drm/drm_dumb_buffers.c
index 70032bba1c97..7ed8f05a8d5c 100644
--- a/drivers/gpu/drm/drm_dumb_buffers.c
+++ b/drivers/gpu/drm/drm_dumb_buffers.c
@@ -95,6 +95,7 @@ int drm_mode_create_dumb(struct drm_device *dev,
 
 	return dev->driver->dumb_create(file_priv, dev, args);
 }
+EXPORT_SYMBOL(drm_mode_create_dumb);
 
 int drm_mode_create_dumb_ioctl(struct drm_device *dev,
 			       void *data, struct drm_file *file_priv)
@@ -141,6 +142,7 @@ int drm_mode_destroy_dumb(struct drm_device *dev, u32 handle,
 
 	return drm_gem_handle_delete(file_priv, handle);
 }
+EXPORT_SYMBOL(drm_mode_destroy_dumb);
 
 int drm_mode_destroy_dumb_ioctl(struct drm_device *dev,
 				void *data, struct drm_file *file_priv)
diff --git a/drivers/gpu/drm/drm_file.c b/drivers/gpu/drm/drm_file.c
index 01fde94fe2a9..dd847b574457 100644
--- a/drivers/gpu/drm/drm_file.c
+++ b/drivers/gpu/drm/drm_file.c
@@ -186,6 +186,7 @@ struct drm_file *drm_file_alloc(struct drm_minor *minor)
 
 	return ERR_PTR(ret);
 }
+EXPORT_SYMBOL(drm_file_alloc);
 
 static void drm_events_release(struct drm_file *file_priv)
 {
@@ -261,6 +262,7 @@ void drm_file_free(struct drm_file *file)
 	put_pid(rcu_access_pointer(file->pid));
 	kfree(file);
 }
+EXPORT_SYMBOL(drm_file_free);
 
 static void drm_close_helper(struct file *filp)
 {
diff --git a/drivers/gpu/drm/drm_framebuffer.c b/drivers/gpu/drm/drm_framebuffer.c
index 47e6e8577b62..761262529416 100644
--- a/drivers/gpu/drm/drm_framebuffer.c
+++ b/drivers/gpu/drm/drm_framebuffer.c
@@ -349,6 +349,7 @@ int drm_mode_addfb2(struct drm_device *dev,
 
 	return 0;
 }
+EXPORT_SYMBOL(drm_mode_addfb2);
 
 int drm_mode_addfb2_ioctl(struct drm_device *dev,
 			  void *data, struct drm_file *file_priv)
@@ -473,6 +474,7 @@ int drm_mode_rmfb(struct drm_device *dev, u32 fb_id,
 
 	return 0;
 }
+EXPORT_SYMBOL(drm_mode_rmfb);
 
 int drm_mode_rmfb_ioctl(struct drm_device *dev,
 			void *data, struct drm_file *file_priv)
diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
index ee811764c3df..07ae82e35517 100644
--- a/drivers/gpu/drm/drm_gem.c
+++ b/drivers/gpu/drm/drm_gem.c
@@ -1191,12 +1191,14 @@ int drm_gem_pin_locked(struct drm_gem_object *obj)
 
 	return 0;
 }
+EXPORT_SYMBOL(drm_gem_pin_locked);
 
 void drm_gem_unpin_locked(struct drm_gem_object *obj)
 {
 	if (obj->funcs->unpin)
 		obj->funcs->unpin(obj);
 }
+EXPORT_SYMBOL(drm_gem_unpin_locked);
 
 int drm_gem_pin(struct drm_gem_object *obj)
 {
-- 
2.46.0


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

* ✓ CI.Patch_applied: success for drm: Introduce DRM client library
  2024-09-27 14:37 [PATCH 0/5] drm: Introduce DRM client library Thomas Zimmermann
                   ` (4 preceding siblings ...)
  2024-09-27 14:37 ` [PATCH 5/5] drm: Add client-lib module Thomas Zimmermann
@ 2024-09-27 16:19 ` Patchwork
  2024-09-27 16:19 ` ✗ CI.checkpatch: warning " Patchwork
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 18+ messages in thread
From: Patchwork @ 2024-09-27 16:19 UTC (permalink / raw)
  To: Thomas Zimmermann; +Cc: intel-xe

== Series Details ==

Series: drm: Introduce DRM client library
URL   : https://patchwork.freedesktop.org/series/139220/
State : success

== Summary ==

=== Applying kernel patches on branch 'drm-tip' with base: ===
Base commit: 4d4fdd11d1cc drm-tip: 2024y-09m-27d-08h-48m-12s UTC integration manifest
=== git am output follows ===
Applying: drm/i915: Select DRM_CLIENT_SELECTION
Applying: drm/xe: Select DRM_CLIENT_SELECTION
Applying: drm: Move client-device functions in to drm_client_dev.c
Applying: drm: Select fbdev helpers for modules that require them
Applying: drm: Add client-lib module



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

* ✗ CI.checkpatch: warning for drm: Introduce DRM client library
  2024-09-27 14:37 [PATCH 0/5] drm: Introduce DRM client library Thomas Zimmermann
                   ` (5 preceding siblings ...)
  2024-09-27 16:19 ` ✓ CI.Patch_applied: success for drm: Introduce DRM client library Patchwork
@ 2024-09-27 16:19 ` Patchwork
  2024-09-27 16:20 ` ✓ CI.KUnit: success " Patchwork
                   ` (3 subsequent siblings)
  10 siblings, 0 replies; 18+ messages in thread
From: Patchwork @ 2024-09-27 16:19 UTC (permalink / raw)
  To: Thomas Zimmermann; +Cc: intel-xe

== Series Details ==

Series: drm: Introduce DRM client library
URL   : https://patchwork.freedesktop.org/series/139220/
State : warning

== Summary ==

+ KERNEL=/kernel
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools mt
Cloning into 'mt'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ git -C mt rev-list -n1 origin/master
30ab6715fc09baee6cc14cb3c89ad8858688d474
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit cc61093390dc2d8658ba2dfd3dcbfb4a738262bf
Author: Thomas Zimmermann <tzimmermann@suse.de>
Date:   Fri Sep 27 16:37:30 2024 +0200

    drm: Add client-lib module
    
    Add drm_client_lib.ko to contain most of the client code. Move the
    existing client for fbdev emulation into the new module. Protect the
    new module behind CONFIG_DRM_CLIENT.
    
    The Kconfig rules separate the DRM drivers from the DRM clients. A
    driver can opt into the default clients, but the user configures
    each client individually. To do so, DRM drivers still select
    DRM_CLIENT_SELECTION. The option is now a tristate that further
    selects all dependencies of the enabled DRM clients. There's
    a menu option for each client. Enabling at least one client also
    selects DRM_CLIENT_SETUP, so that drivers call drm_client_setup().
    New DRM clients should depend on DRM_CLIENT_SELECTION.
    
    The KMS-helper module now exports handful of symbols needed by the
    DRM client library.
    
    There are existing kernel options in drm_fb_helper.o, so leave this
    file in the KMS-helper module for now.
    
    Amdgpu has an internal DRM client, so it has to select DRM_CLIENT by
    itself unconditionally.
    
    Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
+ /mt/dim checkpatch 4d4fdd11d1cc941f2f7c1653fc07519851d9052b drm-intel
2807d594b161 drm/i915: Select DRM_CLIENT_SELECTION
e2641dde7c72 drm/xe: Select DRM_CLIENT_SELECTION
be45e9f3e494 drm: Move client-device functions in to drm_client_dev.c
-:179: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#179: 
new file mode 100644

total: 0 errors, 1 warnings, 0 checks, 260 lines checked
1f420f772df7 drm: Select fbdev helpers for modules that require them
cc61093390dc drm: Add client-lib module



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

* ✓ CI.KUnit: success for drm: Introduce DRM client library
  2024-09-27 14:37 [PATCH 0/5] drm: Introduce DRM client library Thomas Zimmermann
                   ` (6 preceding siblings ...)
  2024-09-27 16:19 ` ✗ CI.checkpatch: warning " Patchwork
@ 2024-09-27 16:20 ` Patchwork
  2024-09-27 16:26 ` ✗ CI.Build: failure " Patchwork
                   ` (2 subsequent siblings)
  10 siblings, 0 replies; 18+ messages in thread
From: Patchwork @ 2024-09-27 16:20 UTC (permalink / raw)
  To: Thomas Zimmermann; +Cc: intel-xe

== Series Details ==

Series: drm: Introduce DRM client library
URL   : https://patchwork.freedesktop.org/series/139220/
State : success

== Summary ==

+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[16:19:49] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[16:19:53] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make ARCH=um O=.kunit --jobs=48
../lib/iomap.c:156:5: warning: no previous prototype for ‘ioread64_lo_hi’ [-Wmissing-prototypes]
  156 | u64 ioread64_lo_hi(const void __iomem *addr)
      |     ^~~~~~~~~~~~~~
../lib/iomap.c:163:5: warning: no previous prototype for ‘ioread64_hi_lo’ [-Wmissing-prototypes]
  163 | u64 ioread64_hi_lo(const void __iomem *addr)
      |     ^~~~~~~~~~~~~~
../lib/iomap.c:170:5: warning: no previous prototype for ‘ioread64be_lo_hi’ [-Wmissing-prototypes]
  170 | u64 ioread64be_lo_hi(const void __iomem *addr)
      |     ^~~~~~~~~~~~~~~~
../lib/iomap.c:178:5: warning: no previous prototype for ‘ioread64be_hi_lo’ [-Wmissing-prototypes]
  178 | u64 ioread64be_hi_lo(const void __iomem *addr)
      |     ^~~~~~~~~~~~~~~~
../lib/iomap.c:264:6: warning: no previous prototype for ‘iowrite64_lo_hi’ [-Wmissing-prototypes]
  264 | void iowrite64_lo_hi(u64 val, void __iomem *addr)
      |      ^~~~~~~~~~~~~~~
../lib/iomap.c:272:6: warning: no previous prototype for ‘iowrite64_hi_lo’ [-Wmissing-prototypes]
  272 | void iowrite64_hi_lo(u64 val, void __iomem *addr)
      |      ^~~~~~~~~~~~~~~
../lib/iomap.c:280:6: warning: no previous prototype for ‘iowrite64be_lo_hi’ [-Wmissing-prototypes]
  280 | void iowrite64be_lo_hi(u64 val, void __iomem *addr)
      |      ^~~~~~~~~~~~~~~~~
../lib/iomap.c:288:6: warning: no previous prototype for ‘iowrite64be_hi_lo’ [-Wmissing-prototypes]
  288 | void iowrite64be_hi_lo(u64 val, void __iomem *addr)
      |      ^~~~~~~~~~~~~~~~~

[16:20:21] Starting KUnit Kernel (1/1)...
[16:20:21] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[16:20:21] =================== guc_dbm (7 subtests) ===================
[16:20:21] [PASSED] test_empty
[16:20:21] [PASSED] test_default
[16:20:21] ======================== test_size  ========================
[16:20:21] [PASSED] 4
[16:20:21] [PASSED] 8
[16:20:21] [PASSED] 32
[16:20:21] [PASSED] 256
[16:20:21] ==================== [PASSED] test_size ====================
[16:20:21] ======================= test_reuse  ========================
[16:20:21] [PASSED] 4
[16:20:21] [PASSED] 8
[16:20:21] [PASSED] 32
[16:20:21] [PASSED] 256
[16:20:21] =================== [PASSED] test_reuse ====================
[16:20:21] =================== test_range_overlap  ====================
[16:20:21] [PASSED] 4
[16:20:21] [PASSED] 8
[16:20:21] [PASSED] 32
[16:20:21] [PASSED] 256
[16:20:21] =============== [PASSED] test_range_overlap ================
[16:20:21] =================== test_range_compact  ====================
[16:20:21] [PASSED] 4
[16:20:21] [PASSED] 8
[16:20:21] [PASSED] 32
[16:20:21] [PASSED] 256
[16:20:21] =============== [PASSED] test_range_compact ================
[16:20:21] ==================== test_range_spare  =====================
[16:20:21] [PASSED] 4
[16:20:21] [PASSED] 8
[16:20:21] [PASSED] 32
[16:20:21] [PASSED] 256
[16:20:21] ================ [PASSED] test_range_spare =================
[16:20:21] ===================== [PASSED] guc_dbm =====================
[16:20:21] =================== guc_idm (6 subtests) ===================
[16:20:21] [PASSED] bad_init
[16:20:21] [PASSED] no_init
[16:20:21] [PASSED] init_fini
[16:20:21] [PASSED] check_used
[16:20:21] [PASSED] check_quota
[16:20:21] [PASSED] check_all
[16:20:21] ===================== [PASSED] guc_idm =====================
[16:20:21] ================== no_relay (3 subtests) ===================
[16:20:21] [PASSED] xe_drops_guc2pf_if_not_ready
[16:20:21] [PASSED] xe_drops_guc2vf_if_not_ready
[16:20:21] [PASSED] xe_rejects_send_if_not_ready
[16:20:21] ==================== [PASSED] no_relay =====================
[16:20:21] ================== pf_relay (14 subtests) ==================
[16:20:21] [PASSED] pf_rejects_guc2pf_too_short
[16:20:21] [PASSED] pf_rejects_guc2pf_too_long
[16:20:21] [PASSED] pf_rejects_guc2pf_no_payload
[16:20:21] [PASSED] pf_fails_no_payload
[16:20:21] [PASSED] pf_fails_bad_origin
[16:20:21] [PASSED] pf_fails_bad_type
[16:20:21] [PASSED] pf_txn_reports_error
[16:20:21] [PASSED] pf_txn_sends_pf2guc
[16:20:21] [PASSED] pf_sends_pf2guc
[16:20:21] [SKIPPED] pf_loopback_nop
[16:20:21] [SKIPPED] pf_loopback_echo
[16:20:21] [SKIPPED] pf_loopback_fail
[16:20:21] [SKIPPED] pf_loopback_busy
[16:20:21] [SKIPPED] pf_loopback_retry
[16:20:21] ==================== [PASSED] pf_relay =====================
[16:20:21] ================== vf_relay (3 subtests) ===================
[16:20:21] [PASSED] vf_rejects_guc2vf_too_short
[16:20:21] [PASSED] vf_rejects_guc2vf_too_long
[16:20:21] [PASSED] vf_rejects_guc2vf_no_payload
[16:20:21] ==================== [PASSED] vf_relay =====================
[16:20:21] ================= pf_service (11 subtests) =================
[16:20:21] [PASSED] pf_negotiate_any
[16:20:21] [PASSED] pf_negotiate_base_match
[16:20:21] [PASSED] pf_negotiate_base_newer
[16:20:21] [PASSED] pf_negotiate_base_next
[16:20:21] [SKIPPED] pf_negotiate_base_older
[16:20:21] [PASSED] pf_negotiate_base_prev
[16:20:21] [PASSED] pf_negotiate_latest_match
[16:20:21] [PASSED] pf_negotiate_latest_newer
[16:20:21] [PASSED] pf_negotiate_latest_next
[16:20:21] [SKIPPED] pf_negotiate_latest_older
[16:20:21] [SKIPPED] pf_negotiate_latest_prev
[16:20:21] =================== [PASSED] pf_service ====================
[16:20:21] ===================== lmtt (1 subtest) =====================
[16:20:21] ======================== test_ops  =========================
[16:20:21] [PASSED] 2-level
[16:20:21] [PASSED] multi-level
[16:20:21] ==================== [PASSED] test_ops =====================
[16:20:21] ====================== [PASSED] lmtt =======================
[16:20:21] =================== xe_mocs (2 subtests) ===================
[16:20:21] ================ xe_live_mocs_kernel_kunit  ================
[16:20:21] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[16:20:21] ================ xe_live_mocs_reset_kunit  =================
[16:20:21] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[16:20:21] ==================== [SKIPPED] xe_mocs =====================
[16:20:21] ================= xe_migrate (2 subtests) ==================
[16:20:21] ================= xe_migrate_sanity_kunit  =================
[16:20:21] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[16:20:21] ================== xe_validate_ccs_kunit  ==================
[16:20:21] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[16:20:21] =================== [SKIPPED] xe_migrate ===================
[16:20:21] ================== xe_dma_buf (1 subtest) ==================
[16:20:21] ==================== xe_dma_buf_kunit  =====================
[16:20:21] ================ [SKIPPED] xe_dma_buf_kunit ================
[16:20:21] =================== [SKIPPED] xe_dma_buf ===================
[16:20:21] ==================== xe_bo (3 subtests) ====================
[16:20:21] ================== xe_ccs_migrate_kunit  ===================
[16:20:21] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[16:20:21] ==================== xe_bo_evict_kunit  ====================
[16:20:21] =============== [SKIPPED] xe_bo_evict_kunit ================
[16:20:21] =================== xe_bo_shrink_kunit  ====================
[16:20:21] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[16:20:21] ===================== [SKIPPED] xe_bo ======================
[16:20:21] ==================== args (11 subtests) ====================
[16:20:21] [PASSED] count_args_test
[16:20:21] [PASSED] call_args_example
[16:20:21] [PASSED] call_args_test
[16:20:21] [PASSED] drop_first_arg_example
[16:20:21] [PASSED] drop_first_arg_test
[16:20:21] [PASSED] first_arg_example
[16:20:21] [PASSED] first_arg_test
[16:20:21] [PASSED] last_arg_example
[16:20:21] [PASSED] last_arg_test
[16:20:21] [PASSED] pick_arg_example
[16:20:21] [PASSED] sep_comma_example
stty: 'standard input': Inappropriate ioctl for device
[16:20:21] ====================== [PASSED] args =======================
[16:20:21] =================== xe_pci (2 subtests) ====================
[16:20:21] [PASSED] xe_gmdid_graphics_ip
[16:20:21] [PASSED] xe_gmdid_media_ip
[16:20:21] ===================== [PASSED] xe_pci ======================
[16:20:21] =================== xe_rtp (2 subtests) ====================
[16:20:21] =============== xe_rtp_process_to_sr_tests  ================
[16:20:21] [PASSED] coalesce-same-reg
[16:20:21] [PASSED] no-match-no-add
[16:20:21] [PASSED] match-or
[16:20:21] [PASSED] match-or-xfail
[16:20:21] [PASSED] no-match-no-add-multiple-rules
[16:20:21] [PASSED] two-regs-two-entries
[16:20:21] [PASSED] clr-one-set-other
[16:20:21] [PASSED] set-field
[16:20:21] [PASSED] conflict-duplicate
[16:20:21] [PASSED] conflict-not-disjoint
[16:20:21] [PASSED] conflict-reg-type
[16:20:21] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[16:20:21] ================== xe_rtp_process_tests  ===================
[16:20:21] [PASSED] active1
[16:20:21] [PASSED] active2
[16:20:21] [PASSED] active-inactive
[16:20:21] [PASSED] inactive-active
[16:20:21] [PASSED] inactive-1st_or_active-inactive
[16:20:21] [PASSED] inactive-2nd_or_active-inactive
[16:20:21] [PASSED] inactive-last_or_active-inactive
[16:20:21] [PASSED] inactive-no_or_active-inactive
[16:20:21] ============== [PASSED] xe_rtp_process_tests ===============
[16:20:21] ===================== [PASSED] xe_rtp ======================
[16:20:21] ==================== xe_wa (1 subtest) =====================
[16:20:21] ======================== xe_wa_gt  =========================
[16:20:21] [PASSED] TIGERLAKE (B0)
[16:20:21] [PASSED] DG1 (A0)
[16:20:21] [PASSED] DG1 (B0)
[16:20:21] [PASSED] ALDERLAKE_S (A0)
[16:20:21] [PASSED] ALDERLAKE_S (B0)
[16:20:21] [PASSED] ALDERLAKE_S (C0)
[16:20:21] [PASSED] ALDERLAKE_S (D0)
[16:20:21] [PASSED] ALDERLAKE_P (A0)
[16:20:21] [PASSED] ALDERLAKE_P (B0)
[16:20:21] [PASSED] ALDERLAKE_P (C0)
[16:20:21] [PASSED] ALDERLAKE_S_RPLS (D0)
[16:20:21] [PASSED] ALDERLAKE_P_RPLU (E0)
[16:20:21] [PASSED] DG2_G10 (C0)
[16:20:21] [PASSED] DG2_G11 (B1)
[16:20:21] [PASSED] DG2_G12 (A1)
[16:20:21] [PASSED] METEORLAKE (g:A0, m:A0)
[16:20:21] [PASSED] METEORLAKE (g:A0, m:A0)
[16:20:21] [PASSED] METEORLAKE (g:A0, m:A0)
[16:20:21] [PASSED] LUNARLAKE (g:A0, m:A0)
[16:20:21] [PASSED] LUNARLAKE (g:B0, m:A0)
[16:20:21] [PASSED] BATTLEMAGE (g:A0, m:A1)
[16:20:21] ==================== [PASSED] xe_wa_gt =====================
[16:20:21] ====================== [PASSED] xe_wa ======================
[16:20:21] ============================================================
[16:20:21] Testing complete. Ran 122 tests: passed: 106, skipped: 16
[16:20:21] Elapsed time: 32.126s total, 4.138s configuring, 27.722s building, 0.212s running

+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[16:20:21] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[16:20:23] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make ARCH=um O=.kunit --jobs=48
../lib/iomap.c:156:5: warning: no previous prototype for ‘ioread64_lo_hi’ [-Wmissing-prototypes]
  156 | u64 ioread64_lo_hi(const void __iomem *addr)
      |     ^~~~~~~~~~~~~~
../lib/iomap.c:163:5: warning: no previous prototype for ‘ioread64_hi_lo’ [-Wmissing-prototypes]
  163 | u64 ioread64_hi_lo(const void __iomem *addr)
      |     ^~~~~~~~~~~~~~
../lib/iomap.c:170:5: warning: no previous prototype for ‘ioread64be_lo_hi’ [-Wmissing-prototypes]
  170 | u64 ioread64be_lo_hi(const void __iomem *addr)
      |     ^~~~~~~~~~~~~~~~
../lib/iomap.c:178:5: warning: no previous prototype for ‘ioread64be_hi_lo’ [-Wmissing-prototypes]
  178 | u64 ioread64be_hi_lo(const void __iomem *addr)
      |     ^~~~~~~~~~~~~~~~
../lib/iomap.c:264:6: warning: no previous prototype for ‘iowrite64_lo_hi’ [-Wmissing-prototypes]
  264 | void iowrite64_lo_hi(u64 val, void __iomem *addr)
      |      ^~~~~~~~~~~~~~~
../lib/iomap.c:272:6: warning: no previous prototype for ‘iowrite64_hi_lo’ [-Wmissing-prototypes]
  272 | void iowrite64_hi_lo(u64 val, void __iomem *addr)
      |      ^~~~~~~~~~~~~~~
../lib/iomap.c:280:6: warning: no previous prototype for ‘iowrite64be_lo_hi’ [-Wmissing-prototypes]
  280 | void iowrite64be_lo_hi(u64 val, void __iomem *addr)
      |      ^~~~~~~~~~~~~~~~~
../lib/iomap.c:288:6: warning: no previous prototype for ‘iowrite64be_hi_lo’ [-Wmissing-prototypes]
  288 | void iowrite64be_hi_lo(u64 val, void __iomem *addr)
      |      ^~~~~~~~~~~~~~~~~

[16:20:45] Starting KUnit Kernel (1/1)...
[16:20:45] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[16:20:45] ================== drm_buddy (7 subtests) ==================
[16:20:45] [PASSED] drm_test_buddy_alloc_limit
[16:20:45] [PASSED] drm_test_buddy_alloc_optimistic
[16:20:45] [PASSED] drm_test_buddy_alloc_pessimistic
[16:20:45] [PASSED] drm_test_buddy_alloc_pathological
[16:20:45] [PASSED] drm_test_buddy_alloc_contiguous
[16:20:45] [PASSED] drm_test_buddy_alloc_clear
[16:20:45] [PASSED] drm_test_buddy_alloc_range_bias
[16:20:45] ==================== [PASSED] drm_buddy ====================
[16:20:45] ============= drm_cmdline_parser (40 subtests) =============
[16:20:45] [PASSED] drm_test_cmdline_force_d_only
[16:20:45] [PASSED] drm_test_cmdline_force_D_only_dvi
[16:20:45] [PASSED] drm_test_cmdline_force_D_only_hdmi
[16:20:45] [PASSED] drm_test_cmdline_force_D_only_not_digital
[16:20:45] [PASSED] drm_test_cmdline_force_e_only
[16:20:45] [PASSED] drm_test_cmdline_res
[16:20:45] [PASSED] drm_test_cmdline_res_vesa
[16:20:45] [PASSED] drm_test_cmdline_res_vesa_rblank
[16:20:45] [PASSED] drm_test_cmdline_res_rblank
[16:20:45] [PASSED] drm_test_cmdline_res_bpp
[16:20:45] [PASSED] drm_test_cmdline_res_refresh
[16:20:45] [PASSED] drm_test_cmdline_res_bpp_refresh
[16:20:45] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[16:20:45] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[16:20:45] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[16:20:45] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[16:20:45] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[16:20:45] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[16:20:45] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[16:20:45] [PASSED] drm_test_cmdline_res_margins_force_on
[16:20:45] [PASSED] drm_test_cmdline_res_vesa_margins
[16:20:45] [PASSED] drm_test_cmdline_name
[16:20:45] [PASSED] drm_test_cmdline_name_bpp
[16:20:45] [PASSED] drm_test_cmdline_name_option
[16:20:45] [PASSED] drm_test_cmdline_name_bpp_option
[16:20:45] [PASSED] drm_test_cmdline_rotate_0
[16:20:45] [PASSED] drm_test_cmdline_rotate_90
[16:20:45] [PASSED] drm_test_cmdline_rotate_180
[16:20:45] [PASSED] drm_test_cmdline_rotate_270
[16:20:45] [PASSED] drm_test_cmdline_hmirror
[16:20:45] [PASSED] drm_test_cmdline_vmirror
[16:20:45] [PASSED] drm_test_cmdline_margin_options
[16:20:45] [PASSED] drm_test_cmdline_multiple_options
[16:20:45] [PASSED] drm_test_cmdline_bpp_extra_and_option
[16:20:45] [PASSED] drm_test_cmdline_extra_and_option
[16:20:45] [PASSED] drm_test_cmdline_freestanding_options
[16:20:45] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[16:20:45] [PASSED] drm_test_cmdline_panel_orientation
[16:20:45] ================ drm_test_cmdline_invalid  =================
[16:20:45] [PASSED] margin_only
[16:20:45] [PASSED] interlace_only
[16:20:45] [PASSED] res_missing_x
[16:20:45] [PASSED] res_missing_y
[16:20:45] [PASSED] res_bad_y
[16:20:45] [PASSED] res_missing_y_bpp
[16:20:45] [PASSED] res_bad_bpp
[16:20:45] [PASSED] res_bad_refresh
[16:20:45] [PASSED] res_bpp_refresh_force_on_off
[16:20:45] [PASSED] res_invalid_mode
[16:20:45] [PASSED] res_bpp_wrong_place_mode
[16:20:45] [PASSED] name_bpp_refresh
[16:20:45] [PASSED] name_refresh
[16:20:45] [PASSED] name_refresh_wrong_mode
[16:20:45] [PASSED] name_refresh_invalid_mode
[16:20:45] [PASSED] rotate_multiple
[16:20:45] [PASSED] rotate_invalid_val
[16:20:45] [PASSED] rotate_truncated
[16:20:45] [PASSED] invalid_option
[16:20:45] [PASSED] invalid_tv_option
[16:20:45] [PASSED] truncated_tv_option
[16:20:45] ============ [PASSED] drm_test_cmdline_invalid =============
[16:20:45] =============== drm_test_cmdline_tv_options  ===============
[16:20:45] [PASSED] NTSC
[16:20:45] [PASSED] NTSC_443
[16:20:45] [PASSED] NTSC_J
[16:20:45] [PASSED] PAL
[16:20:45] [PASSED] PAL_M
[16:20:45] [PASSED] PAL_N
[16:20:45] [PASSED] SECAM
[16:20:45] [PASSED] MONO_525
[16:20:45] [PASSED] MONO_625
[16:20:45] =========== [PASSED] drm_test_cmdline_tv_options ===========
[16:20:45] =============== [PASSED] drm_cmdline_parser ================
[16:20:45] ========== drmm_connector_hdmi_init (19 subtests) ==========
[16:20:45] [PASSED] drm_test_connector_hdmi_init_valid
[16:20:45] [PASSED] drm_test_connector_hdmi_init_bpc_8
[16:20:45] [PASSED] drm_test_connector_hdmi_init_bpc_10
[16:20:45] [PASSED] drm_test_connector_hdmi_init_bpc_12
[16:20:45] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[16:20:45] [PASSED] drm_test_connector_hdmi_init_bpc_null
[16:20:45] [PASSED] drm_test_connector_hdmi_init_formats_empty
[16:20:45] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[16:20:45] [PASSED] drm_test_connector_hdmi_init_null_ddc
[16:20:45] [PASSED] drm_test_connector_hdmi_init_null_product
[16:20:45] [PASSED] drm_test_connector_hdmi_init_null_vendor
[16:20:45] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[16:20:45] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[16:20:45] [PASSED] drm_test_connector_hdmi_init_product_valid
[16:20:45] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[16:20:45] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[16:20:45] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[16:20:45] ========= drm_test_connector_hdmi_init_type_valid  =========
[16:20:45] [PASSED] HDMI-A
[16:20:45] [PASSED] HDMI-B
[16:20:45] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[16:20:45] ======== drm_test_connector_hdmi_init_type_invalid  ========
[16:20:45] [PASSED] Unknown
[16:20:45] [PASSED] VGA
[16:20:45] [PASSED] DVI-I
[16:20:45] [PASSED] DVI-D
[16:20:45] [PASSED] DVI-A
[16:20:45] [PASSED] Composite
[16:20:45] [PASSED] SVIDEO
[16:20:45] [PASSED] LVDS
[16:20:45] [PASSED] Component
[16:20:45] [PASSED] DIN
[16:20:45] [PASSED] DP
[16:20:45] [PASSED] TV
[16:20:45] [PASSED] eDP
[16:20:45] [PASSED] Virtual
[16:20:45] [PASSED] DSI
[16:20:45] [PASSED] DPI
[16:20:45] [PASSED] Writeback
[16:20:45] [PASSED] SPI
[16:20:45] [PASSED] USB
[16:20:45] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[16:20:45] ============ [PASSED] drmm_connector_hdmi_init =============
[16:20:45] ============= drmm_connector_init (3 subtests) =============
[16:20:45] [PASSED] drm_test_drmm_connector_init
[16:20:45] [PASSED] drm_test_drmm_connector_init_null_ddc
[16:20:45] ========= drm_test_drmm_connector_init_type_valid  =========
[16:20:45] [PASSED] Unknown
[16:20:45] [PASSED] VGA
[16:20:45] [PASSED] DVI-I
[16:20:45] [PASSED] DVI-D
[16:20:45] [PASSED] DVI-A
[16:20:45] [PASSED] Composite
[16:20:45] [PASSED] SVIDEO
[16:20:45] [PASSED] LVDS
[16:20:45] [PASSED] Component
[16:20:45] [PASSED] DIN
[16:20:45] [PASSED] DP
[16:20:45] [PASSED] HDMI-A
[16:20:45] [PASSED] HDMI-B
[16:20:45] [PASSED] TV
[16:20:45] [PASSED] eDP
[16:20:45] [PASSED] Virtual
[16:20:45] [PASSED] DSI
[16:20:45] [PASSED] DPI
[16:20:45] [PASSED] Writeback
[16:20:45] [PASSED] SPI
[16:20:45] [PASSED] USB
[16:20:45] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[16:20:45] =============== [PASSED] drmm_connector_init ===============
[16:20:45] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[16:20:45] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[16:20:45] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[16:20:45] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[16:20:45] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[16:20:45] ========== drm_test_get_tv_mode_from_name_valid  ===========
[16:20:45] [PASSED] NTSC
[16:20:45] [PASSED] NTSC-443
[16:20:45] [PASSED] NTSC-J
[16:20:45] [PASSED] PAL
[16:20:45] [PASSED] PAL-M
[16:20:45] [PASSED] PAL-N
[16:20:45] [PASSED] SECAM
[16:20:45] [PASSED] Mono
[16:20:45] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[16:20:45] [PASSED] drm_test_get_tv_mode_from_name_truncated
[16:20:45] ============ [PASSED] drm_get_tv_mode_from_name ============
[16:20:45] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[16:20:45] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[16:20:45] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[16:20:45] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[16:20:45] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[16:20:45] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[16:20:45] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[16:20:45] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid  =
[16:20:45] [PASSED] VIC 96
[16:20:45] [PASSED] VIC 97
[16:20:45] [PASSED] VIC 101
[16:20:45] [PASSED] VIC 102
[16:20:45] [PASSED] VIC 106
[16:20:45] [PASSED] VIC 107
[16:20:45] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[16:20:45] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[16:20:45] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[16:20:45] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[16:20:45] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[16:20:45] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[16:20:45] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[16:20:45] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[16:20:45] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name  ====
[16:20:45] [PASSED] Automatic
[16:20:45] [PASSED] Full
[16:20:45] [PASSED] Limited 16:235
[16:20:45] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[16:20:45] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[16:20:45] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[16:20:45] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[16:20:45] === drm_test_drm_hdmi_connector_get_output_format_name  ====
[16:20:45] [PASSED] RGB
[16:20:45] [PASSED] YUV 4:2:0
[16:20:45] [PASSED] YUV 4:2:2
[16:20:45] [PASSED] YUV 4:4:4
[16:20:45] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[16:20:45] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[16:20:45] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[16:20:45] ============= drm_damage_helper (21 subtests) ==============
[16:20:45] [PASSED] drm_test_damage_iter_no_damage
[16:20:45] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[16:20:45] [PASSED] drm_test_damage_iter_no_damage_src_moved
[16:20:45] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[16:20:45] [PASSED] drm_test_damage_iter_no_damage_not_visible
[16:20:45] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[16:20:45] [PASSED] drm_test_damage_iter_no_damage_no_fb
[16:20:45] [PASSED] drm_test_damage_iter_simple_damage
[16:20:45] [PASSED] drm_test_damage_iter_single_damage
[16:20:45] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[16:20:45] [PASSED] drm_test_damage_iter_single_damage_outside_src
[16:20:45] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[16:20:45] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[16:20:45] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[16:20:45] [PASSED] drm_test_damage_iter_single_damage_src_moved
[16:20:45] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[16:20:45] [PASSED] drm_test_damage_iter_damage
[16:20:45] [PASSED] drm_test_damage_iter_damage_one_intersect
[16:20:45] [PASSED] drm_test_damage_iter_damage_one_outside
[16:20:45] [PASSED] drm_test_damage_iter_damage_src_moved
[16:20:45] [PASSED] drm_test_damage_iter_damage_not_visible
[16:20:45] ================ [PASSED] drm_damage_helper ================
[16:20:45] ============== drm_dp_mst_helper (3 subtests) ==============
[16:20:45] ============== drm_test_dp_mst_calc_pbn_mode  ==============
[16:20:45] [PASSED] Clock 154000 BPP 30 DSC disabled
[16:20:45] [PASSED] Clock 234000 BPP 30 DSC disabled
[16:20:45] [PASSED] Clock 297000 BPP 24 DSC disabled
[16:20:45] [PASSED] Clock 332880 BPP 24 DSC enabled
[16:20:45] [PASSED] Clock 324540 BPP 24 DSC enabled
[16:20:45] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[16:20:45] ============== drm_test_dp_mst_calc_pbn_div  ===============
[16:20:45] [PASSED] Link rate 2000000 lane count 4
[16:20:45] [PASSED] Link rate 2000000 lane count 2
[16:20:45] [PASSED] Link rate 2000000 lane count 1
[16:20:45] [PASSED] Link rate 1350000 lane count 4
[16:20:45] [PASSED] Link rate 1350000 lane count 2
[16:20:45] [PASSED] Link rate 1350000 lane count 1
[16:20:45] [PASSED] Link rate 1000000 lane count 4
[16:20:45] [PASSED] Link rate 1000000 lane count 2
[16:20:45] [PASSED] Link rate 1000000 lane count 1
[16:20:45] [PASSED] Link rate 810000 lane count 4
[16:20:45] [PASSED] Link rate 810000 lane count 2
[16:20:45] [PASSED] Link rate 810000 lane count 1
[16:20:45] [PASSED] Link rate 540000 lane count 4
[16:20:45] [PASSED] Link rate 540000 lane count 2
[16:20:45] [PASSED] Link rate 540000 lane count 1
[16:20:45] [PASSED] Link rate 270000 lane count 4
[16:20:45] [PASSED] Link rate 270000 lane count 2
[16:20:45] [PASSED] Link rate 270000 lane count 1
[16:20:45] [PASSED] Link rate 162000 lane count 4
[16:20:45] [PASSED] Link rate 162000 lane count 2
[16:20:45] [PASSED] Link rate 162000 lane count 1
[16:20:45] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[16:20:45] ========= drm_test_dp_mst_sideband_msg_req_decode  =========
[16:20:45] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[16:20:45] [PASSED] DP_POWER_UP_PHY with port number
[16:20:45] [PASSED] DP_POWER_DOWN_PHY with port number
[16:20:45] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[16:20:45] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[16:20:45] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[16:20:45] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[16:20:45] [PASSED] DP_QUERY_PAYLOAD with port number
[16:20:45] [PASSED] DP_QUERY_PAYLOAD with VCPI
[16:20:45] [PASSED] DP_REMOTE_DPCD_READ with port number
[16:20:45] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[16:20:45] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[16:20:45] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[16:20:45] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[16:20:45] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[16:20:45] [PASSED] DP_REMOTE_I2C_READ with port number
[16:20:45] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[16:20:45] [PASSED] DP_REMOTE_I2C_READ with transactions array
[16:20:45] [PASSED] DP_REMOTE_I2C_WRITE with port number
[16:20:45] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[16:20:45] [PASSED] DP_REMOTE_I2C_WRITE with data array
[16:20:45] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[16:20:45] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[16:20:45] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[16:20:45] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[16:20:45] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[16:20:45] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[16:20:45] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[16:20:45] ================ [PASSED] drm_dp_mst_helper ================
[16:20:45] ================== drm_exec (7 subtests) ===================
[16:20:45] [PASSED] sanitycheck
[16:20:45] [PASSED] test_lock
[16:20:45] [PASSED] test_lock_unlock
[16:20:45] [PASSED] test_duplicates
[16:20:45] [PASSED] test_prepare
[16:20:45] [PASSED] test_prepare_array
[16:20:45] [PASSED] test_multiple_loops
[16:20:45] ==================== [PASSED] drm_exec =====================
[16:20:45] =========== drm_format_helper_test (17 subtests) ===========
[16:20:45] ============== drm_test_fb_xrgb8888_to_gray8  ==============
[16:20:45] [PASSED] single_pixel_source_buffer
[16:20:45] [PASSED] single_pixel_clip_rectangle
[16:20:45] [PASSED] well_known_colors
[16:20:45] [PASSED] destination_pitch
[16:20:45] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[16:20:45] ============= drm_test_fb_xrgb8888_to_rgb332  ==============
[16:20:45] [PASSED] single_pixel_source_buffer
[16:20:45] [PASSED] single_pixel_clip_rectangle
[16:20:45] [PASSED] well_known_colors
[16:20:45] [PASSED] destination_pitch
[16:20:45] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[16:20:45] ============= drm_test_fb_xrgb8888_to_rgb565  ==============
[16:20:45] [PASSED] single_pixel_source_buffer
[16:20:45] [PASSED] single_pixel_clip_rectangle
[16:20:45] [PASSED] well_known_colors
[16:20:45] [PASSED] destination_pitch
[16:20:45] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[16:20:45] ============ drm_test_fb_xrgb8888_to_xrgb1555  =============
[16:20:45] [PASSED] single_pixel_source_buffer
[16:20:45] [PASSED] single_pixel_clip_rectangle
[16:20:45] [PASSED] well_known_colors
[16:20:45] [PASSED] destination_pitch
[16:20:45] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[16:20:45] ============ drm_test_fb_xrgb8888_to_argb1555  =============
[16:20:45] [PASSED] single_pixel_source_buffer
[16:20:45] [PASSED] single_pixel_clip_rectangle
[16:20:45] [PASSED] well_known_colors
[16:20:45] [PASSED] destination_pitch
[16:20:45] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[16:20:45] ============ drm_test_fb_xrgb8888_to_rgba5551  =============
[16:20:45] [PASSED] single_pixel_source_buffer
[16:20:45] [PASSED] single_pixel_clip_rectangle
[16:20:45] [PASSED] well_known_colors
[16:20:45] [PASSED] destination_pitch
[16:20:45] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[16:20:45] ============= drm_test_fb_xrgb8888_to_rgb888  ==============
[16:20:45] [PASSED] single_pixel_source_buffer
[16:20:45] [PASSED] single_pixel_clip_rectangle
[16:20:45] [PASSED] well_known_colors
[16:20:45] [PASSED] destination_pitch
[16:20:45] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[16:20:45] ============ drm_test_fb_xrgb8888_to_argb8888  =============
[16:20:45] [PASSED] single_pixel_source_buffer
[16:20:45] [PASSED] single_pixel_clip_rectangle
[16:20:45] [PASSED] well_known_colors
[16:20:45] [PASSED] destination_pitch
[16:20:45] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[16:20:45] =========== drm_test_fb_xrgb8888_to_xrgb2101010  ===========
[16:20:45] [PASSED] single_pixel_source_buffer
[16:20:45] [PASSED] single_pixel_clip_rectangle
[16:20:45] [PASSED] well_known_colors
[16:20:45] [PASSED] destination_pitch
[16:20:45] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[16:20:45] =========== drm_test_fb_xrgb8888_to_argb2101010  ===========
[16:20:45] [PASSED] single_pixel_source_buffer
[16:20:45] [PASSED] single_pixel_clip_rectangle
[16:20:45] [PASSED] well_known_colors
[16:20:45] [PASSED] destination_pitch
[16:20:45] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[16:20:45] ============== drm_test_fb_xrgb8888_to_mono  ===============
[16:20:45] [PASSED] single_pixel_source_buffer
[16:20:45] [PASSED] single_pixel_clip_rectangle
[16:20:45] [PASSED] well_known_colors
[16:20:45] [PASSED] destination_pitch
[16:20:45] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[16:20:45] ==================== drm_test_fb_swab  =====================
[16:20:45] [PASSED] single_pixel_source_buffer
[16:20:45] [PASSED] single_pixel_clip_rectangle
[16:20:45] [PASSED] well_known_colors
[16:20:45] [PASSED] destination_pitch
[16:20:45] ================ [PASSED] drm_test_fb_swab =================
[16:20:45] ============ drm_test_fb_xrgb8888_to_xbgr8888  =============
[16:20:45] [PASSED] single_pixel_source_buffer
[16:20:45] [PASSED] single_pixel_clip_rectangle
[16:20:45] [PASSED] well_known_colors
[16:20:45] [PASSED] destination_pitch
[16:20:45] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[16:20:45] ============ drm_test_fb_xrgb8888_to_abgr8888  =============
[16:20:45] [PASSED] single_pixel_source_buffer
[16:20:45] [PASSED] single_pixel_clip_rectangle
[16:20:45] [PASSED] well_known_colors
[16:20:45] [PASSED] destination_pitch
[16:20:45] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[16:20:45] ================= drm_test_fb_clip_offset  =================
[16:20:45] [PASSED] pass through
[16:20:45] [PASSED] horizontal offset
[16:20:45] [PASSED] vertical offset
[16:20:45] [PASSED] horizontal and vertical offset
[16:20:45] [PASSED] horizontal offset (custom pitch)
[16:20:45] [PASSED] vertical offset (custom pitch)
[16:20:45] [PASSED] horizontal and vertical offset (custom pitch)
[16:20:45] ============= [PASSED] drm_test_fb_clip_offset =============
[16:20:45] ============== drm_test_fb_build_fourcc_list  ==============
[16:20:45] [PASSED] no native formats
[16:20:45] [PASSED] XRGB8888 as native format
[16:20:45] [PASSED] remove duplicates
[16:20:45] [PASSED] convert alpha formats
[16:20:45] [PASSED] random formats
[16:20:45] ========== [PASSED] drm_test_fb_build_fourcc_list ==========
[16:20:45] =================== drm_test_fb_memcpy  ====================
[16:20:45] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[16:20:45] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[16:20:45] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[16:20:45] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[16:20:45] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[16:20:45] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[16:20:45] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[16:20:45] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[16:20:45] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[16:20:45] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[16:20:45] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[16:20:45] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[16:20:45] =============== [PASSED] drm_test_fb_memcpy ================
[16:20:45] ============= [PASSED] drm_format_helper_test ==============
[16:20:45] ================= drm_format (18 subtests) =================
[16:20:45] [PASSED] drm_test_format_block_width_invalid
[16:20:45] [PASSED] drm_test_format_block_width_one_plane
[16:20:45] [PASSED] drm_test_format_block_width_two_plane
[16:20:45] [PASSED] drm_test_format_block_width_three_plane
[16:20:45] [PASSED] drm_test_format_block_width_tiled
[16:20:45] [PASSED] drm_test_format_block_height_invalid
[16:20:45] [PASSED] drm_test_format_block_height_one_plane
[16:20:45] [PASSED] drm_test_format_block_height_two_plane
[16:20:45] [PASSED] drm_test_format_block_height_three_plane
[16:20:45] [PASSED] drm_test_format_block_height_tiled
[16:20:45] [PASSED] drm_test_format_min_pitch_invalid
[16:20:45] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[16:20:45] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[16:20:45] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[16:20:45] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[16:20:45] [PASSED] drm_test_format_min_pitch_two_plane
[16:20:45] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[16:20:45] [PASSED] drm_test_format_min_pitch_tiled
[16:20:45] =================== [PASSED] drm_format ====================
[16:20:45] ============== drm_framebuffer (10 subtests) ===============
[16:20:45] ========== drm_test_framebuffer_check_src_coords  ==========
[16:20:45] [PASSED] Success: source fits into fb
[16:20:45] [PASSED] Fail: overflowing fb with x-axis coordinate
[16:20:45] [PASSED] Fail: overflowing fb with y-axis coordinate
[16:20:45] [PASSED] Fail: overflowing fb with source width
[16:20:45] [PASSED] Fail: overflowing fb with source height
[16:20:45] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[16:20:45] [PASSED] drm_test_framebuffer_cleanup
[16:20:45] =============== drm_test_framebuffer_create  ===============
[16:20:45] [PASSED] ABGR8888 normal sizes
[16:20:45] [PASSED] ABGR8888 max sizes
[16:20:45] [PASSED] ABGR8888 pitch greater than min required
[16:20:45] [PASSED] ABGR8888 pitch less than min required
[16:20:45] [PASSED] ABGR8888 Invalid width
[16:20:45] [PASSED] ABGR8888 Invalid buffer handle
[16:20:45] [PASSED] No pixel format
[16:20:45] [PASSED] ABGR8888 Width 0
[16:20:45] [PASSED] ABGR8888 Height 0
[16:20:45] [PASSED] ABGR8888 Out of bound height * pitch combination
[16:20:45] [PASSED] ABGR8888 Large buffer offset
[16:20:45] [PASSED] ABGR8888 Buffer offset for inexistent plane
[16:20:45] [PASSED] ABGR8888 Invalid flag
[16:20:45] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[16:20:45] [PASSED] ABGR8888 Valid buffer modifier
[16:20:45] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[16:20:45] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[16:20:45] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[16:20:45] [PASSED] NV12 Normal sizes
[16:20:45] [PASSED] NV12 Max sizes
[16:20:45] [PASSED] NV12 Invalid pitch
[16:20:45] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[16:20:45] [PASSED] NV12 different  modifier per-plane
[16:20:45] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[16:20:45] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[16:20:45] [PASSED] NV12 Modifier for inexistent plane
[16:20:45] [PASSED] NV12 Handle for inexistent plane
[16:20:45] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[16:20:45] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[16:20:45] [PASSED] YVU420 Normal sizes
[16:20:45] [PASSED] YVU420 Max sizes
[16:20:45] [PASSED] YVU420 Invalid pitch
[16:20:45] [PASSED] YVU420 Different pitches
[16:20:45] [PASSED] YVU420 Different buffer offsets/pitches
[16:20:45] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[16:20:45] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[16:20:45] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[16:20:45] [PASSED] YVU420 Valid modifier
[16:20:45] [PASSED] YVU420 Different modifiers per plane
[16:20:45] [PASSED] YVU420 Modifier for inexistent plane
[16:20:45] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[16:20:45] [PASSED] X0L2 Normal sizes
[16:20:45] [PASSED] X0L2 Max sizes
[16:20:45] [PASSED] X0L2 Invalid pitch
[16:20:45] [PASSED] X0L2 Pitch greater than minimum required
[16:20:45] [PASSED] X0L2 Handle for inexistent plane
[16:20:45] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[16:20:45] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[16:20:45] [PASSED] X0L2 Valid modifier
[16:20:45] [PASSED] X0L2 Modifier for inexistent plane
[16:20:45] =========== [PASSED] drm_test_framebuffer_create ===========
[16:20:45] [PASSED] drm_test_framebuffer_free
[16:20:45] [PASSED] drm_test_framebuffer_init
[16:20:45] [PASSED] drm_test_framebuffer_init_bad_format
[16:20:45] [PASSED] drm_test_framebuffer_init_dev_mismatch
[16:20:45] [PASSED] drm_test_framebuffer_lookup
[16:20:45] [PASSED] drm_test_framebuffer_lookup_inexistent
[16:20:45] [PASSED] drm_test_framebuffer_modifiers_not_supported
[16:20:45] ================= [PASSED] drm_framebuffer =================
[16:20:45] ================ drm_gem_shmem (8 subtests) ================
[16:20:45] [PASSED] drm_gem_shmem_test_obj_create
[16:20:45] [PASSED] drm_gem_shmem_test_obj_create_private
[16:20:45] [PASSED] drm_gem_shmem_test_pin_pages
[16:20:45] [PASSED] drm_gem_shmem_test_vmap
[16:20:45] [PASSED] drm_gem_shmem_test_get_pages_sgt
[16:20:45] [PASSED] drm_gem_shmem_test_get_sg_table
[16:20:45] [PASSED] drm_gem_shmem_test_madvise
[16:20:45] [PASSED] drm_gem_shmem_test_purge
[16:20:45] ================== [PASSED] drm_gem_shmem ==================
[16:20:45] === drm_atomic_helper_connector_hdmi_check (22 subtests) ===
[16:20:45] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[16:20:45] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[16:20:45] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[16:20:45] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[16:20:45] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[16:20:45] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[16:20:45] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[16:20:45] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[16:20:45] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[16:20:45] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback
[16:20:45] [PASSED] drm_test_check_max_tmds_rate_format_fallback
[16:20:45] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[16:20:45] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[16:20:45] [PASSED] drm_test_check_output_bpc_dvi
[16:20:45] [PASSED] drm_test_check_output_bpc_format_vic_1
[16:20:45] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[16:20:45] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[16:20:45] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[16:20:45] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[16:20:45] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[16:20:45] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[16:20:45] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[16:20:45] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[16:20:45] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[16:20:45] [PASSED] drm_test_check_broadcast_rgb_value
[16:20:45] [PASSED] drm_test_check_bpc_8_value
[16:20:45] [PASSED] drm_test_check_bpc_10_value
[16:20:45] [PASSED] drm_test_check_bpc_12_value
[16:20:45] [PASSED] drm_test_check_format_value
[16:20:45] [PASSED] drm_test_check_tmds_char_value
[16:20:45] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[16:20:45] ================= drm_managed (2 subtests) =================
[16:20:45] [PASSED] drm_test_managed_release_action
[16:20:45] [PASSED] drm_test_managed_run_action
[16:20:45] =================== [PASSED] drm_managed ===================
[16:20:45] =================== drm_mm (6 subtests) ====================
[16:20:45] [PASSED] drm_test_mm_init
[16:20:45] [PASSED] drm_test_mm_debug
[16:20:45] [PASSED] drm_test_mm_align32
[16:20:45] [PASSED] drm_test_mm_align64
[16:20:45] [PASSED] drm_test_mm_lowest
[16:20:45] [PASSED] drm_test_mm_highest
[16:20:45] ===================== [PASSED] drm_mm ======================
[16:20:45] ============= drm_modes_analog_tv (5 subtests) =============
[16:20:45] [PASSED] drm_test_modes_analog_tv_mono_576i
[16:20:45] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[16:20:45] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[16:20:45] [PASSED] drm_test_modes_analog_tv_pal_576i
[16:20:45] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[16:20:45] =============== [PASSED] drm_modes_analog_tv ===============
stty: 'standard input': Inappropriate ioctl for device
[16:20:45] ============== drm_plane_helper (2 subtests) ===============
[16:20:45] =============== drm_test_check_plane_state  ================
[16:20:45] [PASSED] clipping_simple
[16:20:45] [PASSED] clipping_rotate_reflect
[16:20:45] [PASSED] positioning_simple
[16:20:45] [PASSED] upscaling
[16:20:45] [PASSED] downscaling
[16:20:45] [PASSED] rounding1
[16:20:45] [PASSED] rounding2
[16:20:45] [PASSED] rounding3
[16:20:45] [PASSED] rounding4
[16:20:45] =========== [PASSED] drm_test_check_plane_state ============
[16:20:45] =========== drm_test_check_invalid_plane_state  ============
[16:20:45] [PASSED] positioning_invalid
[16:20:45] [PASSED] upscaling_invalid
[16:20:45] [PASSED] downscaling_invalid
[16:20:45] ======= [PASSED] drm_test_check_invalid_plane_state ========
[16:20:45] ================ [PASSED] drm_plane_helper =================
[16:20:45] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[16:20:45] ====== drm_test_connector_helper_tv_get_modes_check  =======
[16:20:45] [PASSED] None
[16:20:45] [PASSED] PAL
[16:20:45] [PASSED] NTSC
[16:20:45] [PASSED] Both, NTSC Default
[16:20:45] [PASSED] Both, PAL Default
[16:20:45] [PASSED] Both, NTSC Default, with PAL on command-line
[16:20:45] [PASSED] Both, PAL Default, with NTSC on command-line
[16:20:45] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[16:20:45] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[16:20:45] ================== drm_rect (9 subtests) ===================
[16:20:45] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[16:20:45] [PASSED] drm_test_rect_clip_scaled_not_clipped
[16:20:45] [PASSED] drm_test_rect_clip_scaled_clipped
[16:20:45] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[16:20:45] ================= drm_test_rect_intersect  =================
[16:20:45] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[16:20:45] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[16:20:45] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[16:20:45] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[16:20:45] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[16:20:45] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[16:20:45] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[16:20:45] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[16:20:45] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[16:20:45] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[16:20:45] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[16:20:45] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[16:20:45] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[16:20:45] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[16:20:45] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[16:20:45] ============= [PASSED] drm_test_rect_intersect =============
[16:20:45] ================ drm_test_rect_calc_hscale  ================
[16:20:45] [PASSED] normal use
[16:20:45] [PASSED] out of max range
[16:20:45] [PASSED] out of min range
[16:20:45] [PASSED] zero dst
[16:20:45] [PASSED] negative src
[16:20:45] [PASSED] negative dst
[16:20:45] ============ [PASSED] drm_test_rect_calc_hscale ============
[16:20:45] ================ drm_test_rect_calc_vscale  ================
[16:20:45] [PASSED] normal use
[16:20:45] [PASSED] out of max range
[16:20:45] [PASSED] out of min range
[16:20:45] [PASSED] zero dst
[16:20:45] [PASSED] negative src
[16:20:45] [PASSED] negative dst
[16:20:45] ============ [PASSED] drm_test_rect_calc_vscale ============
[16:20:45] ================== drm_test_rect_rotate  ===================
[16:20:45] [PASSED] reflect-x
[16:20:45] [PASSED] reflect-y
[16:20:45] [PASSED] rotate-0
[16:20:45] [PASSED] rotate-90
[16:20:45] [PASSED] rotate-180
[16:20:45] [PASSED] rotate-270
[16:20:45] ============== [PASSED] drm_test_rect_rotate ===============
[16:20:45] ================ drm_test_rect_rotate_inv  =================
[16:20:45] [PASSED] reflect-x
[16:20:45] [PASSED] reflect-y
[16:20:45] [PASSED] rotate-0
[16:20:45] [PASSED] rotate-90
[16:20:45] [PASSED] rotate-180
[16:20:45] [PASSED] rotate-270
[16:20:45] ============ [PASSED] drm_test_rect_rotate_inv =============
[16:20:45] ==================== [PASSED] drm_rect =====================
[16:20:45] ============================================================
[16:20:45] Testing complete. Ran 526 tests: passed: 526
[16:20:45] Elapsed time: 23.569s total, 1.374s configuring, 22.024s building, 0.170s running

+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[16:20:45] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[16:20:46] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make ARCH=um O=.kunit --jobs=48
[16:20:54] Starting KUnit Kernel (1/1)...
[16:20:54] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[16:20:54] ================= ttm_device (5 subtests) ==================
[16:20:54] [PASSED] ttm_device_init_basic
[16:20:54] [PASSED] ttm_device_init_multiple
[16:20:54] [PASSED] ttm_device_fini_basic
[16:20:54] [PASSED] ttm_device_init_no_vma_man
[16:20:54] ================== ttm_device_init_pools  ==================
[16:20:54] [PASSED] No DMA allocations, no DMA32 required
[16:20:54] [PASSED] DMA allocations, DMA32 required
[16:20:54] [PASSED] No DMA allocations, DMA32 required
[16:20:54] [PASSED] DMA allocations, no DMA32 required
[16:20:54] ============== [PASSED] ttm_device_init_pools ==============
[16:20:54] =================== [PASSED] ttm_device ====================
[16:20:54] ================== ttm_pool (8 subtests) ===================
[16:20:54] ================== ttm_pool_alloc_basic  ===================
[16:20:54] [PASSED] One page
[16:20:54] [PASSED] More than one page
[16:20:54] [PASSED] Above the allocation limit
[16:20:54] [PASSED] One page, with coherent DMA mappings enabled
[16:20:54] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[16:20:54] ============== [PASSED] ttm_pool_alloc_basic ===============
[16:20:54] ============== ttm_pool_alloc_basic_dma_addr  ==============
[16:20:54] [PASSED] One page
[16:20:54] [PASSED] More than one page
[16:20:54] [PASSED] Above the allocation limit
[16:20:54] [PASSED] One page, with coherent DMA mappings enabled
[16:20:54] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[16:20:54] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[16:20:54] [PASSED] ttm_pool_alloc_order_caching_match
[16:20:54] [PASSED] ttm_pool_alloc_caching_mismatch
[16:20:54] [PASSED] ttm_pool_alloc_order_mismatch
[16:20:54] [PASSED] ttm_pool_free_dma_alloc
[16:20:54] [PASSED] ttm_pool_free_no_dma_alloc
[16:20:54] [PASSED] ttm_pool_fini_basic
[16:20:54] ==================== [PASSED] ttm_pool =====================
[16:20:54] ================ ttm_resource (8 subtests) =================
[16:20:54] ================= ttm_resource_init_basic  =================
[16:20:54] [PASSED] Init resource in TTM_PL_SYSTEM
[16:20:54] [PASSED] Init resource in TTM_PL_VRAM
[16:20:54] [PASSED] Init resource in a private placement
[16:20:54] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[16:20:54] ============= [PASSED] ttm_resource_init_basic =============
[16:20:54] [PASSED] ttm_resource_init_pinned
[16:20:54] [PASSED] ttm_resource_fini_basic
[16:20:54] [PASSED] ttm_resource_manager_init_basic
[16:20:54] [PASSED] ttm_resource_manager_usage_basic
[16:20:54] [PASSED] ttm_resource_manager_set_used_basic
[16:20:54] [PASSED] ttm_sys_man_alloc_basic
[16:20:54] [PASSED] ttm_sys_man_free_basic
[16:20:54] ================== [PASSED] ttm_resource ===================
[16:20:54] =================== ttm_tt (15 subtests) ===================
[16:20:54] ==================== ttm_tt_init_basic  ====================
[16:20:54] [PASSED] Page-aligned size
[16:20:54] [PASSED] Extra pages requested
[16:20:54] ================ [PASSED] ttm_tt_init_basic ================
[16:20:54] [PASSED] ttm_tt_init_misaligned
[16:20:54] [PASSED] ttm_tt_fini_basic
[16:20:54] [PASSED] ttm_tt_fini_sg
[16:20:54] [PASSED] ttm_tt_fini_shmem
[16:20:54] [PASSED] ttm_tt_create_basic
[16:20:54] [PASSED] ttm_tt_create_invalid_bo_type
[16:20:54] [PASSED] ttm_tt_create_ttm_exists
[16:20:54] [PASSED] ttm_tt_create_failed
[16:20:54] [PASSED] ttm_tt_destroy_basic
[16:20:54] [PASSED] ttm_tt_populate_null_ttm
[16:20:54] [PASSED] ttm_tt_populate_populated_ttm
[16:20:54] [PASSED] ttm_tt_unpopulate_basic
[16:20:54] [PASSED] ttm_tt_unpopulate_empty_ttm
[16:20:54] [PASSED] ttm_tt_swapin_basic
[16:20:54] ===================== [PASSED] ttm_tt ======================
[16:20:54] =================== ttm_bo (14 subtests) ===================
[16:20:54] =========== ttm_bo_reserve_optimistic_no_ticket  ===========
[16:20:54] [PASSED] Cannot be interrupted and sleeps
[16:20:54] [PASSED] Cannot be interrupted, locks straight away
[16:20:54] [PASSED] Can be interrupted, sleeps
[16:20:54] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[16:20:54] [PASSED] ttm_bo_reserve_locked_no_sleep
[16:20:54] [PASSED] ttm_bo_reserve_no_wait_ticket
[16:20:54] [PASSED] ttm_bo_reserve_double_resv
[16:20:54] [PASSED] ttm_bo_reserve_interrupted
[16:20:54] [PASSED] ttm_bo_reserve_deadlock
[16:20:54] [PASSED] ttm_bo_unreserve_basic
[16:20:54] [PASSED] ttm_bo_unreserve_pinned
[16:20:54] [PASSED] ttm_bo_unreserve_bulk
[16:20:54] [PASSED] ttm_bo_put_basic
[16:20:54] [PASSED] ttm_bo_put_shared_resv
[16:20:54] [PASSED] ttm_bo_pin_basic
[16:20:54] [PASSED] ttm_bo_pin_unpin_resource
[16:20:54] [PASSED] ttm_bo_multiple_pin_one_unpin
[16:20:54] ===================== [PASSED] ttm_bo ======================
[16:20:54] ============== ttm_bo_validate (22 subtests) ===============
[16:20:54] ============== ttm_bo_init_reserved_sys_man  ===============
[16:20:54] [PASSED] Buffer object for userspace
[16:20:54] [PASSED] Kernel buffer object
[16:20:54] [PASSED] Shared buffer object
[16:20:54] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[16:20:54] ============== ttm_bo_init_reserved_mock_man  ==============
[16:20:54] [PASSED] Buffer object for userspace
[16:20:54] [PASSED] Kernel buffer object
[16:20:54] [PASSED] Shared buffer object
[16:20:54] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[16:20:54] [PASSED] ttm_bo_init_reserved_resv
[16:20:54] ================== ttm_bo_validate_basic  ==================
[16:20:54] [PASSED] Buffer object for userspace
[16:20:54] [PASSED] Kernel buffer object
[16:20:54] [PASSED] Shared buffer object
[16:20:54] ============== [PASSED] ttm_bo_validate_basic ==============
[16:20:54] [PASSED] ttm_bo_validate_invalid_placement
[16:20:54] ============= ttm_bo_validate_same_placement  ==============
[16:20:54] [PASSED] System manager
[16:20:54] [PASSED] VRAM manager
[16:20:54] ========= [PASSED] ttm_bo_validate_same_placement ==========
[16:20:54] [PASSED] ttm_bo_validate_failed_alloc
[16:20:54] [PASSED] ttm_bo_validate_pinned
[16:20:54] [PASSED] ttm_bo_validate_busy_placement
[16:20:54] ================ ttm_bo_validate_multihop  =================
[16:20:54] [PASSED] Buffer object for userspace
[16:20:54] [PASSED] Kernel buffer object
[16:20:54] [PASSED] Shared buffer object
[16:20:54] ============ [PASSED] ttm_bo_validate_multihop =============
[16:20:54] ========== ttm_bo_validate_no_placement_signaled  ==========
[16:20:54] [PASSED] Buffer object in system domain, no page vector
[16:20:54] [PASSED] Buffer object in system domain with an existing page vector
[16:20:54] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[16:20:54] ======== ttm_bo_validate_no_placement_not_signaled  ========
[16:20:54] [PASSED] Buffer object for userspace
[16:20:54] [PASSED] Kernel buffer object
[16:20:54] [PASSED] Shared buffer object
[16:20:54] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[16:20:54] [PASSED] ttm_bo_validate_move_fence_signaled
[16:20:54] ========= ttm_bo_validate_move_fence_not_signaled  =========
[16:20:54] [PASSED] Waits for GPU
[16:20:54] [PASSED] Tries to lock straight away
[16:20:54] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[16:20:54] [PASSED] ttm_bo_validate_swapout
[16:20:54] [PASSED] ttm_bo_validate_happy_evict
[16:20:54] [PASSED] ttm_bo_validate_all_pinned_evict
[16:20:54] [PASSED] ttm_bo_validate_allowed_only_evict
[16:20:54] [PASSED] ttm_bo_validate_deleted_evict
[16:20:54] [PASSED] ttm_bo_validate_busy_domain_evict
[16:20:54] [PASSED] ttm_bo_validate_evict_gutting
[16:20:54] [PASSED] ttm_bo_validate_recrusive_evict
stty: 'standard input': Inappropriate ioctl for device
[16:20:54] ================= [PASSED] ttm_bo_validate =================
[16:20:54] ============================================================
[16:20:54] Testing complete. Ran 102 tests: passed: 102
[16:20:54] Elapsed time: 9.209s total, 1.378s configuring, 7.113s building, 0.617s running

+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel



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

* ✗ CI.Build: failure for drm: Introduce DRM client library
  2024-09-27 14:37 [PATCH 0/5] drm: Introduce DRM client library Thomas Zimmermann
                   ` (7 preceding siblings ...)
  2024-09-27 16:20 ` ✓ CI.KUnit: success " Patchwork
@ 2024-09-27 16:26 ` Patchwork
  2024-09-27 19:27 ` [PATCH 0/5] " Felix Kuehling
  2024-09-30 11:46 ` Jocelyn Falempe
  10 siblings, 0 replies; 18+ messages in thread
From: Patchwork @ 2024-09-27 16:26 UTC (permalink / raw)
  To: Thomas Zimmermann; +Cc: intel-xe

== Series Details ==

Series: drm: Introduce DRM client library
URL   : https://patchwork.freedesktop.org/series/139220/
State : failure

== Summary ==

INSTALL ../archive/lib/modules/6.11.0-xe/kernel/drivers/soundwire/soundwire-amd.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/drivers/soundwire/soundwire-cadence.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/drivers/soundwire/soundwire-intel.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/drivers/iio/accel/hid-sensor-accel-3d.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/drivers/iio/buffer/industrialio-triggered-buffer.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/drivers/iio/buffer/kfifo_buf.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/drivers/iio/common/hid-sensors/hid-sensor-iio-common.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/drivers/iio/common/hid-sensors/hid-sensor-trigger.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/drivers/iio/gyro/hid-sensor-gyro-3d.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/drivers/iio/light/hid-sensor-als.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/drivers/iio/light/hid-sensor-prox.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/drivers/iio/magnetometer/hid-sensor-magn-3d.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/drivers/iio/orientation/hid-sensor-incl-3d.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/drivers/iio/orientation/hid-sensor-rotation.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/drivers/iio/position/hid-sensor-custom-intel-hinge.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/drivers/iio/industrialio.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/drivers/thunderbolt/thunderbolt.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/soundcore.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/core/snd.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/core/snd-hwdep.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/core/snd-timer.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/core/snd-pcm.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/core/snd-seq-device.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/core/seq/snd-seq.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/core/snd-compress.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/pci/hda/snd-hda-codec.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/pci/hda/snd-hda-codec-hdmi.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/pci/hda/snd-hda-intel.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/soc/snd-soc-acpi.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/soc/snd-soc-core.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/soc/codecs/snd-soc-hdac-hda.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/soc/amd/snd-acp-config.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/soc/intel/common/snd-soc-acpi-intel-match.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/soc/intel/atom/snd-soc-sst-atom-hifi2-platform.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/soc/intel/atom/sst/snd-intel-sst-core.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/soc/intel/atom/sst/snd-intel-sst-acpi.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/soc/sof/intel/snd-sof-intel-hda-common.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/soc/sof/intel/snd-sof-intel-hda-generic.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/soc/sof/intel/snd-sof-intel-hda-mlink.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/soc/sof/intel/snd-sof-intel-hda.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/soc/sof/intel/snd-sof-pci-intel-cnl.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/soc/sof/intel/snd-sof-pci-intel-tgl.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/soc/sof/intel/snd-sof-pci-intel-mtl.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/soc/sof/intel/snd-sof-pci-intel-lnl.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/soc/sof/snd-sof.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/soc/sof/snd-sof-utils.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/soc/sof/snd-sof-pci.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/soc/sof/snd-sof-probes.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/soc/sof/amd/snd-sof-amd-acp.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/soc/sof/amd/snd-sof-amd-renoir.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/soc/sof/xtensa/snd-sof-xtensa-dsp.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/hda/snd-hda-core.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/hda/ext/snd-hda-ext-core.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/hda/snd-intel-dspcfg.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/sound/hda/snd-intel-sdw-acpi.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/802/p8022.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/802/psnap.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/802/stp.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/sched/sch_fq_codel.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/netfilter/nfnetlink.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/netfilter/nf_conntrack.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/netfilter/nf_conntrack_netlink.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/netfilter/nf_nat.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/netfilter/nf_tables.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/netfilter/nft_compat.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/netfilter/nft_nat.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/netfilter/nft_chain_nat.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/netfilter/x_tables.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/netfilter/xt_tcpudp.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/netfilter/xt_nat.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/netfilter/xt_MASQUERADE.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/netfilter/xt_addrtype.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/netfilter/xt_conntrack.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/ipv4/netfilter/nf_defrag_ipv4.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/ipv4/netfilter/ip_tables.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/ipv4/netfilter/iptable_filter.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/ipv4/netfilter/iptable_nat.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/xfrm/xfrm_algo.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/xfrm/xfrm_user.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/ipv6/netfilter/nf_defrag_ipv6.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/llc/llc.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/bridge/bridge.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/bridge/br_netfilter.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/sunrpc/sunrpc.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/sunrpc/auth_gss/auth_rpcgss.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/sunrpc/auth_gss/rpcsec_gss_krb5.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/9p/9pnet.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/9p/9pnet_fd.ko
  INSTALL ../archive/lib/modules/6.11.0-xe/kernel/net/9p/9pnet_virtio.ko
  DEPMOD  ../archive/lib/modules/6.11.0-xe
depmod: ERROR: Cycle detected: drm_kms_helper -> drm_client_lib -> drm_kms_helper
depmod: ERROR: Found 2 modules in dependency cycles!
make[3]: *** [../scripts/Makefile.modinst:128: depmod] Error 1
make[2]: *** [/kernel/Makefile:1834: modules_install] Error 2
make[1]: *** [/kernel/Makefile:224: __sub-make] Error 2
make[1]: Leaving directory '/kernel/build64-default'
make: *** [Makefile:224: __sub-make] Error 2
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel



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

* Re: [PATCH 0/5] drm: Introduce DRM client library
  2024-09-27 14:37 [PATCH 0/5] drm: Introduce DRM client library Thomas Zimmermann
                   ` (8 preceding siblings ...)
  2024-09-27 16:26 ` ✗ CI.Build: failure " Patchwork
@ 2024-09-27 19:27 ` Felix Kuehling
  2024-09-30  6:19   ` Thomas Zimmermann
  2024-09-30 11:46 ` Jocelyn Falempe
  10 siblings, 1 reply; 18+ messages in thread
From: Felix Kuehling @ 2024-09-27 19:27 UTC (permalink / raw)
  To: Thomas Zimmermann, simona, airlied, javierm, jfalempe
  Cc: dri-devel, amd-gfx, intel-gfx, intel-xe


On 2024-09-27 10:37, Thomas Zimmermann wrote:
> With the next DRM client coming soon (drm_log) and most of DRM's
> fbdev emulation consolidated in a few places, it's time to provide
> a single place for the clients.
>
> The new module drm_client_lib.ko stores most of the common client
> code. It's designed such that drivers can opt into client support,
> but the presence of the client module depends on the user's kernel
> configuration. Without selected clients, no client module will be
> build.
>
> Thomas Zimmermann (5):
>    drm/i915: Select DRM_CLIENT_SELECTION
>    drm/xe: Select DRM_CLIENT_SELECTION

BTW, we are using drm_client in amdgpu, as well: 
https://elixir.bootlin.com/linux/v6.11/source/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c#L155

Regards,
   Felix


>    drm: Move client-device functions in to drm_client_dev.c
>    drm: Select fbdev helpers for modules that require them
>    drm: Add client-lib module
>
>   Documentation/gpu/drm-client.rst   |   3 +
>   drivers/gpu/drm/Kconfig            |  34 +++++--
>   drivers/gpu/drm/Makefile           |  20 +++--
>   drivers/gpu/drm/amd/amdgpu/Kconfig |   1 +
>   drivers/gpu/drm/drm_client.c       | 122 +------------------------
>   drivers/gpu/drm/drm_client_dev.c   | 138 +++++++++++++++++++++++++++++
>   drivers/gpu/drm/drm_dumb_buffers.c |   2 +
>   drivers/gpu/drm/drm_file.c         |   2 +
>   drivers/gpu/drm/drm_framebuffer.c  |   2 +
>   drivers/gpu/drm/drm_gem.c          |   2 +
>   drivers/gpu/drm/i915/Kconfig       |   1 +
>   drivers/gpu/drm/xe/Kconfig         |   1 +
>   12 files changed, 196 insertions(+), 132 deletions(-)
>   create mode 100644 drivers/gpu/drm/drm_client_dev.c
>

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

* Re: [PATCH 0/5] drm: Introduce DRM client library
  2024-09-27 19:27 ` [PATCH 0/5] " Felix Kuehling
@ 2024-09-30  6:19   ` Thomas Zimmermann
  0 siblings, 0 replies; 18+ messages in thread
From: Thomas Zimmermann @ 2024-09-30  6:19 UTC (permalink / raw)
  To: Felix Kuehling, simona, airlied, javierm, jfalempe
  Cc: dri-devel, amd-gfx, intel-gfx, intel-xe

Hi

Am 27.09.24 um 21:27 schrieb Felix Kuehling:
>
> On 2024-09-27 10:37, Thomas Zimmermann wrote:
>> With the next DRM client coming soon (drm_log) and most of DRM's
>> fbdev emulation consolidated in a few places, it's time to provide
>> a single place for the clients.
>>
>> The new module drm_client_lib.ko stores most of the common client
>> code. It's designed such that drivers can opt into client support,
>> but the presence of the client module depends on the user's kernel
>> configuration. Without selected clients, no client module will be
>> build.
>>
>> Thomas Zimmermann (5):
>>    drm/i915: Select DRM_CLIENT_SELECTION
>>    drm/xe: Select DRM_CLIENT_SELECTION
>
> BTW, we are using drm_client in amdgpu, as well: 
> https://elixir.bootlin.com/linux/v6.11/source/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c#L155

Right. Patch 5 selects DRM_CLIENT in the driver's Kconfig item. This 
will prove the plain drm_client code without any of the shared 
implementations (fbdev, log, etc). Unless the user enabled such an 
implementation, of course.

I've tried several combinations of =y and =m settings of these options 
and found this to be working well.

Best regards
Thomas

>
> Regards,
>   Felix
>
>
>>    drm: Move client-device functions in to drm_client_dev.c
>>    drm: Select fbdev helpers for modules that require them
>>    drm: Add client-lib module
>>
>>   Documentation/gpu/drm-client.rst   |   3 +
>>   drivers/gpu/drm/Kconfig            |  34 +++++--
>>   drivers/gpu/drm/Makefile           |  20 +++--
>>   drivers/gpu/drm/amd/amdgpu/Kconfig |   1 +
>>   drivers/gpu/drm/drm_client.c       | 122 +------------------------
>>   drivers/gpu/drm/drm_client_dev.c   | 138 +++++++++++++++++++++++++++++
>>   drivers/gpu/drm/drm_dumb_buffers.c |   2 +
>>   drivers/gpu/drm/drm_file.c         |   2 +
>>   drivers/gpu/drm/drm_framebuffer.c  |   2 +
>>   drivers/gpu/drm/drm_gem.c          |   2 +
>>   drivers/gpu/drm/i915/Kconfig       |   1 +
>>   drivers/gpu/drm/xe/Kconfig         |   1 +
>>   12 files changed, 196 insertions(+), 132 deletions(-)
>>   create mode 100644 drivers/gpu/drm/drm_client_dev.c
>>

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)


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

* Re: [PATCH 0/5] drm: Introduce DRM client library
  2024-09-27 14:37 [PATCH 0/5] drm: Introduce DRM client library Thomas Zimmermann
                   ` (9 preceding siblings ...)
  2024-09-27 19:27 ` [PATCH 0/5] " Felix Kuehling
@ 2024-09-30 11:46 ` Jocelyn Falempe
  2024-09-30 12:27   ` Thomas Zimmermann
  10 siblings, 1 reply; 18+ messages in thread
From: Jocelyn Falempe @ 2024-09-30 11:46 UTC (permalink / raw)
  To: Thomas Zimmermann, simona, airlied, javierm
  Cc: dri-devel, amd-gfx, intel-gfx, intel-xe

On 27/09/2024 16:37, Thomas Zimmermann wrote:
> With the next DRM client coming soon (drm_log) and most of DRM's
> fbdev emulation consolidated in a few places, it's time to provide
> a single place for the clients.
> 
> The new module drm_client_lib.ko stores most of the common client
> code. It's designed such that drivers can opt into client support,
> but the presence of the client module depends on the user's kernel
> configuration. Without selected clients, no client module will be
> build.

Thanks for this work, I've rebased drm_log on top of this, and it works 
great.

My only nitpick is I would prefer it to be called drm_client.ko, to be a 
little shorter. So that the kernel parameter to change the default 
client can be "drm_client.default=fbdev".

Best regards,

-- 

Jocelyn

> 
> Thomas Zimmermann (5):
>    drm/i915: Select DRM_CLIENT_SELECTION
>    drm/xe: Select DRM_CLIENT_SELECTION
>    drm: Move client-device functions in to drm_client_dev.c
>    drm: Select fbdev helpers for modules that require them
>    drm: Add client-lib module
> 
>   Documentation/gpu/drm-client.rst   |   3 +
>   drivers/gpu/drm/Kconfig            |  34 +++++--
>   drivers/gpu/drm/Makefile           |  20 +++--
>   drivers/gpu/drm/amd/amdgpu/Kconfig |   1 +
>   drivers/gpu/drm/drm_client.c       | 122 +------------------------
>   drivers/gpu/drm/drm_client_dev.c   | 138 +++++++++++++++++++++++++++++
>   drivers/gpu/drm/drm_dumb_buffers.c |   2 +
>   drivers/gpu/drm/drm_file.c         |   2 +
>   drivers/gpu/drm/drm_framebuffer.c  |   2 +
>   drivers/gpu/drm/drm_gem.c          |   2 +
>   drivers/gpu/drm/i915/Kconfig       |   1 +
>   drivers/gpu/drm/xe/Kconfig         |   1 +
>   12 files changed, 196 insertions(+), 132 deletions(-)
>   create mode 100644 drivers/gpu/drm/drm_client_dev.c
> 


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

* Re: [PATCH 3/5] drm: Move client-device functions in to drm_client_dev.c
  2024-09-27 14:37 ` [PATCH 3/5] drm: Move client-device functions in to drm_client_dev.c Thomas Zimmermann
@ 2024-09-30 11:49   ` Jocelyn Falempe
  0 siblings, 0 replies; 18+ messages in thread
From: Jocelyn Falempe @ 2024-09-30 11:49 UTC (permalink / raw)
  To: Thomas Zimmermann, simona, airlied, javierm
  Cc: dri-devel, amd-gfx, intel-gfx, intel-xe

On 27/09/2024 16:37, Thomas Zimmermann wrote:
> A number of DRM-client functions serve as entry points from device
> operations to client code. Move them info a separate file, so that
> the other client functions can be moved into a different module.


Thanks, I'm not sure I can review this, but it looks good to me.

Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>

-- 

Jocelyn
> 
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> ---
>   Documentation/gpu/drm-client.rst |   3 +
>   drivers/gpu/drm/Makefile         |   1 +
>   drivers/gpu/drm/drm_client.c     | 121 ---------------------------
>   drivers/gpu/drm/drm_client_dev.c | 138 +++++++++++++++++++++++++++++++
>   4 files changed, 142 insertions(+), 121 deletions(-)
>   create mode 100644 drivers/gpu/drm/drm_client_dev.c
> 
> diff --git a/Documentation/gpu/drm-client.rst b/Documentation/gpu/drm-client.rst
> index 58b5a1d1219d..6d8142f159a1 100644
> --- a/Documentation/gpu/drm-client.rst
> +++ b/Documentation/gpu/drm-client.rst
> @@ -13,3 +13,6 @@ Kernel clients
>   
>   .. kernel-doc:: drivers/gpu/drm/drm_client_modeset.c
>      :export:
> +
> +.. kernel-doc:: drivers/gpu/drm/drm_client_dev.c
> +   :export:
> diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
> index 3894f43f6d47..c50443756457 100644
> --- a/drivers/gpu/drm/Makefile
> +++ b/drivers/gpu/drm/Makefile
> @@ -42,6 +42,7 @@ drm-y := \
>   	drm_bridge.o \
>   	drm_cache.o \
>   	drm_client.o \
> +	drm_client_dev.o \
>   	drm_client_modeset.o \
>   	drm_color_mgmt.o \
>   	drm_connector.o \
> diff --git a/drivers/gpu/drm/drm_client.c b/drivers/gpu/drm/drm_client.c
> index bfedcbf516db..549b28a5918c 100644
> --- a/drivers/gpu/drm/drm_client.c
> +++ b/drivers/gpu/drm/drm_client.c
> @@ -10,7 +10,6 @@
>   #include <linux/slab.h>
>   
>   #include <drm/drm_client.h>
> -#include <drm/drm_debugfs.h>
>   #include <drm/drm_device.h>
>   #include <drm/drm_drv.h>
>   #include <drm/drm_file.h>
> @@ -172,99 +171,6 @@ void drm_client_release(struct drm_client_dev *client)
>   }
>   EXPORT_SYMBOL(drm_client_release);
>   
> -/**
> - * drm_client_dev_unregister - Unregister clients
> - * @dev: DRM device
> - *
> - * This function releases all clients by calling each client's
> - * &drm_client_funcs.unregister callback. The callback function
> - * is responsibe for releaseing all resources including the client
> - * itself.
> - *
> - * The helper drm_dev_unregister() calls this function. Drivers
> - * that use it don't need to call this function themselves.
> - */
> -void drm_client_dev_unregister(struct drm_device *dev)
> -{
> -	struct drm_client_dev *client, *tmp;
> -
> -	if (!drm_core_check_feature(dev, DRIVER_MODESET))
> -		return;
> -
> -	mutex_lock(&dev->clientlist_mutex);
> -	list_for_each_entry_safe(client, tmp, &dev->clientlist, list) {
> -		list_del(&client->list);
> -		if (client->funcs && client->funcs->unregister) {
> -			client->funcs->unregister(client);
> -		} else {
> -			drm_client_release(client);
> -			kfree(client);
> -		}
> -	}
> -	mutex_unlock(&dev->clientlist_mutex);
> -}
> -EXPORT_SYMBOL(drm_client_dev_unregister);
> -
> -/**
> - * drm_client_dev_hotplug - Send hotplug event to clients
> - * @dev: DRM device
> - *
> - * This function calls the &drm_client_funcs.hotplug callback on the attached clients.
> - *
> - * drm_kms_helper_hotplug_event() calls this function, so drivers that use it
> - * don't need to call this function themselves.
> - */
> -void drm_client_dev_hotplug(struct drm_device *dev)
> -{
> -	struct drm_client_dev *client;
> -	int ret;
> -
> -	if (!drm_core_check_feature(dev, DRIVER_MODESET))
> -		return;
> -
> -	if (!dev->mode_config.num_connector) {
> -		drm_dbg_kms(dev, "No connectors found, will not send hotplug events!\n");
> -		return;
> -	}
> -
> -	mutex_lock(&dev->clientlist_mutex);
> -	list_for_each_entry(client, &dev->clientlist, list) {
> -		if (!client->funcs || !client->funcs->hotplug)
> -			continue;
> -
> -		if (client->hotplug_failed)
> -			continue;
> -
> -		ret = client->funcs->hotplug(client);
> -		drm_dbg_kms(dev, "%s: ret=%d\n", client->name, ret);
> -		if (ret)
> -			client->hotplug_failed = true;
> -	}
> -	mutex_unlock(&dev->clientlist_mutex);
> -}
> -EXPORT_SYMBOL(drm_client_dev_hotplug);
> -
> -void drm_client_dev_restore(struct drm_device *dev)
> -{
> -	struct drm_client_dev *client;
> -	int ret;
> -
> -	if (!drm_core_check_feature(dev, DRIVER_MODESET))
> -		return;
> -
> -	mutex_lock(&dev->clientlist_mutex);
> -	list_for_each_entry(client, &dev->clientlist, list) {
> -		if (!client->funcs || !client->funcs->restore)
> -			continue;
> -
> -		ret = client->funcs->restore(client);
> -		drm_dbg_kms(dev, "%s: ret=%d\n", client->name, ret);
> -		if (!ret) /* The first one to return zero gets the privilege to restore */
> -			break;
> -	}
> -	mutex_unlock(&dev->clientlist_mutex);
> -}
> -
>   static void drm_client_buffer_delete(struct drm_client_buffer *buffer)
>   {
>   	if (buffer->gem) {
> @@ -584,30 +490,3 @@ int drm_client_framebuffer_flush(struct drm_client_buffer *buffer, struct drm_re
>   					0, 0, NULL, 0);
>   }
>   EXPORT_SYMBOL(drm_client_framebuffer_flush);
> -
> -#ifdef CONFIG_DEBUG_FS
> -static int drm_client_debugfs_internal_clients(struct seq_file *m, void *data)
> -{
> -	struct drm_debugfs_entry *entry = m->private;
> -	struct drm_device *dev = entry->dev;
> -	struct drm_printer p = drm_seq_file_printer(m);
> -	struct drm_client_dev *client;
> -
> -	mutex_lock(&dev->clientlist_mutex);
> -	list_for_each_entry(client, &dev->clientlist, list)
> -		drm_printf(&p, "%s\n", client->name);
> -	mutex_unlock(&dev->clientlist_mutex);
> -
> -	return 0;
> -}
> -
> -static const struct drm_debugfs_info drm_client_debugfs_list[] = {
> -	{ "internal_clients", drm_client_debugfs_internal_clients, 0 },
> -};
> -
> -void drm_client_debugfs_init(struct drm_device *dev)
> -{
> -	drm_debugfs_add_files(dev, drm_client_debugfs_list,
> -			      ARRAY_SIZE(drm_client_debugfs_list));
> -}
> -#endif
> diff --git a/drivers/gpu/drm/drm_client_dev.c b/drivers/gpu/drm/drm_client_dev.c
> new file mode 100644
> index 000000000000..3e41fd1f0771
> --- /dev/null
> +++ b/drivers/gpu/drm/drm_client_dev.c
> @@ -0,0 +1,138 @@
> +// SPDX-License-Identifier: GPL-2.0 or MIT
> +/*
> + * Copyright 2018 Noralf Trønnes
> + */
> +
> +#include <linux/list.h>
> +#include <linux/mutex.h>
> +#include <linux/seq_file.h>
> +
> +#include <drm/drm_client.h>
> +#include <drm/drm_debugfs.h>
> +#include <drm/drm_device.h>
> +#include <drm/drm_drv.h>
> +#include <drm/drm_print.h>
> +
> +/**
> + * DOC: overview
> + *
> + * This library provides support for clients running in the kernel like fbdev and bootsplash.
> + *
> + * GEM drivers which provide a GEM based dumb buffer with a virtual address are supported.
> + */
> +
> +/**
> + * drm_client_dev_unregister - Unregister clients
> + * @dev: DRM device
> + *
> + * This function releases all clients by calling each client's
> + * &drm_client_funcs.unregister callback. The callback function
> + * is responsibe for releaseing all resources including the client
> + * itself.
> + *
> + * The helper drm_dev_unregister() calls this function. Drivers
> + * that use it don't need to call this function themselves.
> + */
> +void drm_client_dev_unregister(struct drm_device *dev)
> +{
> +	struct drm_client_dev *client, *tmp;
> +
> +	if (!drm_core_check_feature(dev, DRIVER_MODESET))
> +		return;
> +
> +	mutex_lock(&dev->clientlist_mutex);
> +	list_for_each_entry_safe(client, tmp, &dev->clientlist, list) {
> +		list_del(&client->list);
> +		if (client->funcs && !drm_WARN_ON(dev, !client->funcs->unregister))
> +			client->funcs->unregister(client);
> +	}
> +	mutex_unlock(&dev->clientlist_mutex);
> +}
> +EXPORT_SYMBOL(drm_client_dev_unregister);
> +
> +/**
> + * drm_client_dev_hotplug - Send hotplug event to clients
> + * @dev: DRM device
> + *
> + * This function calls the &drm_client_funcs.hotplug callback on the attached clients.
> + *
> + * drm_kms_helper_hotplug_event() calls this function, so drivers that use it
> + * don't need to call this function themselves.
> + */
> +void drm_client_dev_hotplug(struct drm_device *dev)
> +{
> +	struct drm_client_dev *client;
> +	int ret;
> +
> +	if (!drm_core_check_feature(dev, DRIVER_MODESET))
> +		return;
> +
> +	if (!dev->mode_config.num_connector) {
> +		drm_dbg_kms(dev, "No connectors found, will not send hotplug events!\n");
> +		return;
> +	}
> +
> +	mutex_lock(&dev->clientlist_mutex);
> +	list_for_each_entry(client, &dev->clientlist, list) {
> +		if (!client->funcs || !client->funcs->hotplug)
> +			continue;
> +
> +		if (client->hotplug_failed)
> +			continue;
> +
> +		ret = client->funcs->hotplug(client);
> +		drm_dbg_kms(dev, "%s: ret=%d\n", client->name, ret);
> +		if (ret)
> +			client->hotplug_failed = true;
> +	}
> +	mutex_unlock(&dev->clientlist_mutex);
> +}
> +EXPORT_SYMBOL(drm_client_dev_hotplug);
> +
> +void drm_client_dev_restore(struct drm_device *dev)
> +{
> +	struct drm_client_dev *client;
> +	int ret;
> +
> +	if (!drm_core_check_feature(dev, DRIVER_MODESET))
> +		return;
> +
> +	mutex_lock(&dev->clientlist_mutex);
> +	list_for_each_entry(client, &dev->clientlist, list) {
> +		if (!client->funcs || !client->funcs->restore)
> +			continue;
> +
> +		ret = client->funcs->restore(client);
> +		drm_dbg_kms(dev, "%s: ret=%d\n", client->name, ret);
> +		if (!ret) /* The first one to return zero gets the privilege to restore */
> +			break;
> +	}
> +	mutex_unlock(&dev->clientlist_mutex);
> +}
> +
> +#ifdef CONFIG_DEBUG_FS
> +static int drm_client_debugfs_internal_clients(struct seq_file *m, void *data)
> +{
> +	struct drm_debugfs_entry *entry = m->private;
> +	struct drm_device *dev = entry->dev;
> +	struct drm_printer p = drm_seq_file_printer(m);
> +	struct drm_client_dev *client;
> +
> +	mutex_lock(&dev->clientlist_mutex);
> +	list_for_each_entry(client, &dev->clientlist, list)
> +		drm_printf(&p, "%s\n", client->name);
> +	mutex_unlock(&dev->clientlist_mutex);
> +
> +	return 0;
> +}
> +
> +static const struct drm_debugfs_info drm_client_debugfs_list[] = {
> +	{ "internal_clients", drm_client_debugfs_internal_clients, 0 },
> +};
> +
> +void drm_client_debugfs_init(struct drm_device *dev)
> +{
> +	drm_debugfs_add_files(dev, drm_client_debugfs_list,
> +			      ARRAY_SIZE(drm_client_debugfs_list));
> +}
> +#endif


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

* Re: [PATCH 4/5] drm: Select fbdev helpers for modules that require them
  2024-09-27 14:37 ` [PATCH 4/5] drm: Select fbdev helpers for modules that require them Thomas Zimmermann
@ 2024-09-30 11:49   ` Jocelyn Falempe
  0 siblings, 0 replies; 18+ messages in thread
From: Jocelyn Falempe @ 2024-09-30 11:49 UTC (permalink / raw)
  To: Thomas Zimmermann, simona, airlied, javierm
  Cc: dri-devel, amd-gfx, intel-gfx, intel-xe

On 27/09/2024 16:37, Thomas Zimmermann wrote:
> Fbdev emulation for SHMEM and TTM requires helpers from the fbdev
> subsystem. Select them from the modules that use them instead of the
> core DRM module.

Thanks, it looks good to me.

Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>

> 
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> ---
>   drivers/gpu/drm/Kconfig | 3 ++-
>   1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
> index 1df4e627e3d3..88b2ba55fe16 100644
> --- a/drivers/gpu/drm/Kconfig
> +++ b/drivers/gpu/drm/Kconfig
> @@ -11,7 +11,6 @@ menuconfig DRM
>   	select DRM_PANEL_ORIENTATION_QUIRKS
>   	select DRM_KMS_HELPER if DRM_FBDEV_EMULATION
>   	select FB_CORE if DRM_FBDEV_EMULATION
> -	select FB_SYSMEM_HELPERS_DEFERRED if DRM_FBDEV_EMULATION
>   	select HDMI
>   	select I2C
>   	select DMA_SHARED_BUFFER
> @@ -332,6 +331,7 @@ config DRM_TTM_HELPER
>   	tristate
>   	depends on DRM
>   	select DRM_TTM
> +	select FB_SYSMEM_HELPERS_DEFERRED if DRM_FBDEV_EMULATION
>   	help
>   	  Helpers for ttm-based gem objects
>   
> @@ -345,6 +345,7 @@ config DRM_GEM_DMA_HELPER
>   config DRM_GEM_SHMEM_HELPER
>   	tristate
>   	depends on DRM && MMU
> +	select FB_SYSMEM_HELPERS_DEFERRED if DRM_FBDEV_EMULATION
>   	help
>   	  Choose this if you need the GEM shmem helper functions
>   


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

* Re: [PATCH 5/5] drm: Add client-lib module
  2024-09-27 14:37 ` [PATCH 5/5] drm: Add client-lib module Thomas Zimmermann
@ 2024-09-30 11:55   ` Jocelyn Falempe
  2024-09-30 11:56     ` Jocelyn Falempe
  0 siblings, 1 reply; 18+ messages in thread
From: Jocelyn Falempe @ 2024-09-30 11:55 UTC (permalink / raw)
  To: Thomas Zimmermann, simona, airlied, javierm
  Cc: dri-devel, amd-gfx, intel-gfx, intel-xe

On 27/09/2024 16:37, Thomas Zimmermann wrote:
> Add drm_client_lib.ko to contain most of the client code. Move the
> existing client for fbdev emulation into the new module. Protect the
> new module behind CONFIG_DRM_CLIENT.
> 
> The Kconfig rules separate the DRM drivers from the DRM clients. A
> driver can opt into the default clients, but the user configures
> each client individually. To do so, DRM drivers still select
> DRM_CLIENT_SELECTION. The option is now a tristate that further
> selects all dependencies of the enabled DRM clients. There's
> a menu option for each client. Enabling at least one client also
> selects DRM_CLIENT_SETUP, so that drivers call drm_client_setup().
> New DRM clients should depend on DRM_CLIENT_SELECTION.
> 
> The KMS-helper module now exports handful of symbols needed by the
> DRM client library.
> 
> There are existing kernel options in drm_fb_helper.o, so leave this
> file in the KMS-helper module for now.
> 
> Amdgpu has an internal DRM client, so it has to select DRM_CLIENT by
> itself unconditionally.

Thanks, I found a typo in the Makefile (see below), other than that it 
looks good to me.

Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>

> 
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> ---
>   drivers/gpu/drm/Kconfig            | 31 ++++++++++++++++++++++++------
>   drivers/gpu/drm/Makefile           | 19 +++++++++++++-----
>   drivers/gpu/drm/amd/amdgpu/Kconfig |  1 +
>   drivers/gpu/drm/drm_client.c       |  3 +++
>   drivers/gpu/drm/drm_dumb_buffers.c |  2 ++
>   drivers/gpu/drm/drm_file.c         |  2 ++
>   drivers/gpu/drm/drm_framebuffer.c  |  2 ++
>   drivers/gpu/drm/drm_gem.c          |  2 ++
>   8 files changed, 51 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
> index 88b2ba55fe16..379fccf3a6ea 100644
> --- a/drivers/gpu/drm/Kconfig
> +++ b/drivers/gpu/drm/Kconfig
> @@ -9,8 +9,6 @@ menuconfig DRM
>   	tristate "Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)"
>   	depends on (AGP || AGP=n) && !EMULATED_CMPXCHG && HAS_DMA
>   	select DRM_PANEL_ORIENTATION_QUIRKS
> -	select DRM_KMS_HELPER if DRM_FBDEV_EMULATION
> -	select FB_CORE if DRM_FBDEV_EMULATION
>   	select HDMI
>   	select I2C
>   	select DMA_SHARED_BUFFER
> @@ -209,21 +207,40 @@ config DRM_DEBUG_MODESET_LOCK
>   
>   	  If in doubt, say "N".
>   
> +config DRM_CLIENT
> +	tristate
> +	depends on DRM
> +	help
> +	  Enables the DRM client-lib module. DRM drivers that need
> +	  struct drm_client_dev and its interfaces should select this
> +	  option. Drivers that support the default clients should
> +	  select DRM_CLIENT_SELECTION instead.
> +
>   config DRM_CLIENT_SELECTION
> -	bool
> +	tristate
>   	depends on DRM
> -	select DRM_CLIENT_SETUP if DRM_FBDEV_EMULATION
> +	select DRM_CLIENT if DRM_FBDEV_EMULATION
> +	select DRM_KMS_HELPER if DRM_FBDEV_EMULATION
> +	select FB_CORE if DRM_FBDEV_EMULATION
>   	help
>   	  Drivers that support in-kernel DRM clients have to select this
> -	  option.
> +	  option. It selects all modules and components according to the
> +	  enabled clients.
>   
>   config DRM_CLIENT_SETUP
>   	bool
>   	depends on DRM_CLIENT_SELECTION
> +	help
> +	  Enables the DRM client selection. DRM drivers that support the
> +	  default clients should select DRM_CLIENT_SELECTION instead.
> +
> +menu "Supported DRM clients"
> +	depends on DRM_CLIENT_SELECTION
>   
>   config DRM_FBDEV_EMULATION
>   	bool "Enable legacy fbdev support for your modesetting driver"
> -	depends on DRM
> +	depends on DRM_CLIENT_SELECTION
> +	select DRM_CLIENT_SETUP
>   	select FRAMEBUFFER_CONSOLE_DETECT_PRIMARY if FRAMEBUFFER_CONSOLE
>   	default FB
>   	help
> @@ -262,6 +279,8 @@ config DRM_FBDEV_LEAK_PHYS_SMEM
>   	  If in doubt, say "N" or spread the word to your closed source
>   	  library vendor.
>   
> +endmenu
> +
>   config DRM_LOAD_EDID_FIRMWARE
>   	bool "Allow to specify an EDID data set instead of probing for it"
>   	depends on DRM
> diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
> index c50443756457..419208b97f57 100644
> --- a/drivers/gpu/drm/Makefile
> +++ b/drivers/gpu/drm/Makefile
> @@ -41,9 +41,7 @@ drm-y := \
>   	drm_blend.o \
>   	drm_bridge.o \
>   	drm_cache.o \
> -	drm_client.o \
>   	drm_client_dev.o \
> -	drm_client_modeset.o \
>   	drm_color_mgmt.o \
>   	drm_connector.o \
>   	drm_crtc.o \
> @@ -144,14 +142,25 @@ drm_kms_helper-y := \
>   	drm_probe_helper.o \
>   	drm_self_refresh_helper.o \
>   	drm_simple_kms_helper.o
> -drm_kms_helper-$(CONFIG_DRM_CLIENT_SETUP) += \
> -	drm_client_setup.o
>   drm_kms_helper-$(CONFIG_DRM_PANEL_BRIDGE) += bridge/panel.o
>   drm_kms_helper-$(CONFIG_DRM_FBDEV_EMULATION) += \
> -	drm_fbdev_client.o \
>   	drm_fb_helper.o
> +drm_kms_helper-$(CONFIG_DRM_PANEL_BRIDGE) += bridge/panel.o
>   obj-$(CONFIG_DRM_KMS_HELPER) += drm_kms_helper.o
>   
> +#
> +# DRM clients
> +#
> +
> +drm_client_lib-y := \
> +	drm_client.o \
> +	drm_client_modeset.o
> +drm_client_lib-$(CONFIG_DRM_CLIENT_SETUP) += \
> +	drm_client_setup.o
> +drm_client_lib-$(CONFIG_DRM_FBDEV_EMULATION) += \
> +	drm_fbdev_client.o
> +obj-$(CONFIG_DRM_CLIENT) += drm_client_lib.o
> +
>   #
>   # Drivers and the rest
>   #
> diff --git a/drivers/gpu/drm/amd/amdgpu/Kconfig b/drivers/gpu/drm/amd/amdgpu/Kconfig
> index 680a94c361ba..41fa3377d9cf 100644
> --- a/drivers/gpu/drm/amd/amdgpu/Kconfig
> +++ b/drivers/gpu/drm/amd/amdgpu/Kconfig
> @@ -5,6 +5,7 @@ config DRM_AMDGPU
>   	depends on DRM && PCI && MMU
>   	depends on !UML
>   	select FW_LOADER
> +	select DRM_CLIENT
>   	select DRM_CLIENT_SELECTION
>   	select DRM_DISPLAY_DP_HELPER
>   	select DRM_DISPLAY_DSC_HELPER
> diff --git a/drivers/gpu/drm/drm_client.c b/drivers/gpu/drm/drm_client.c
> index 549b28a5918c..864ee96e48cf 100644
> --- a/drivers/gpu/drm/drm_client.c
> +++ b/drivers/gpu/drm/drm_client.c
> @@ -490,3 +490,6 @@ int drm_client_framebuffer_flush(struct drm_client_buffer *buffer, struct drm_re
>   					0, 0, NULL, 0);
>   }
>   EXPORT_SYMBOL(drm_client_framebuffer_flush);
> +
> +MODULE_DESCRIPTION("In-kernel DRM clients");
> +MODULE_LICENSE("GPL and additional rights");
> diff --git a/drivers/gpu/drm/drm_dumb_buffers.c b/drivers/gpu/drm/drm_dumb_buffers.c
> index 70032bba1c97..7ed8f05a8d5c 100644
> --- a/drivers/gpu/drm/drm_dumb_buffers.c
> +++ b/drivers/gpu/drm/drm_dumb_buffers.c
> @@ -95,6 +95,7 @@ int drm_mode_create_dumb(struct drm_device *dev,
>   
>   	return dev->driver->dumb_create(file_priv, dev, args);
>   }
> +EXPORT_SYMBOL(drm_mode_create_dumb);
>   
>   int drm_mode_create_dumb_ioctl(struct drm_device *dev,
>   			       void *data, struct drm_file *file_priv)
> @@ -141,6 +142,7 @@ int drm_mode_destroy_dumb(struct drm_device *dev, u32 handle,
>   
>   	return drm_gem_handle_delete(file_priv, handle);
>   }
> +EXPORT_SYMBOL(drm_mode_destroy_dumb);
>   
>   int drm_mode_destroy_dumb_ioctl(struct drm_device *dev,
>   				void *data, struct drm_file *file_priv)
> diff --git a/drivers/gpu/drm/drm_file.c b/drivers/gpu/drm/drm_file.c
> index 01fde94fe2a9..dd847b574457 100644
> --- a/drivers/gpu/drm/drm_file.c
> +++ b/drivers/gpu/drm/drm_file.c
> @@ -186,6 +186,7 @@ struct drm_file *drm_file_alloc(struct drm_minor *minor)
>   
>   	return ERR_PTR(ret);
>   }
> +EXPORT_SYMBOL(drm_file_alloc);
>   
>   static void drm_events_release(struct drm_file *file_priv)
>   {
> @@ -261,6 +262,7 @@ void drm_file_free(struct drm_file *file)
>   	put_pid(rcu_access_pointer(file->pid));
>   	kfree(file);
>   }
> +EXPORT_SYMBOL(drm_file_free);
>   
>   static void drm_close_helper(struct file *filp)
>   {
> diff --git a/drivers/gpu/drm/drm_framebuffer.c b/drivers/gpu/drm/drm_framebuffer.c
> index 47e6e8577b62..761262529416 100644
> --- a/drivers/gpu/drm/drm_framebuffer.c
> +++ b/drivers/gpu/drm/drm_framebuffer.c
> @@ -349,6 +349,7 @@ int drm_mode_addfb2(struct drm_device *dev,
>   
>   	return 0;
>   }
> +EXPORT_SYMBOL(drm_mode_addfb2);
>   
>   int drm_mode_addfb2_ioctl(struct drm_device *dev,
>   			  void *data, struct drm_file *file_priv)
> @@ -473,6 +474,7 @@ int drm_mode_rmfb(struct drm_device *dev, u32 fb_id,
>   
>   	return 0;
>   }
> +EXPORT_SYMBOL(drm_mode_rmfb);
>   
>   int drm_mode_rmfb_ioctl(struct drm_device *dev,
>   			void *data, struct drm_file *file_priv)
> diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
> index ee811764c3df..07ae82e35517 100644
> --- a/drivers/gpu/drm/drm_gem.c
> +++ b/drivers/gpu/drm/drm_gem.c
> @@ -1191,12 +1191,14 @@ int drm_gem_pin_locked(struct drm_gem_object *obj)
>   
>   	return 0;
>   }
> +EXPORT_SYMBOL(drm_gem_pin_locked);
>   
>   void drm_gem_unpin_locked(struct drm_gem_object *obj)
>   {
>   	if (obj->funcs->unpin)
>   		obj->funcs->unpin(obj);
>   }
> +EXPORT_SYMBOL(drm_gem_unpin_locked);
>   
>   int drm_gem_pin(struct drm_gem_object *obj)
>   {


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

* Re: [PATCH 5/5] drm: Add client-lib module
  2024-09-30 11:55   ` Jocelyn Falempe
@ 2024-09-30 11:56     ` Jocelyn Falempe
  0 siblings, 0 replies; 18+ messages in thread
From: Jocelyn Falempe @ 2024-09-30 11:56 UTC (permalink / raw)
  To: Thomas Zimmermann, simona, airlied, javierm
  Cc: dri-devel, amd-gfx, intel-gfx, intel-xe

On 30/09/2024 13:55, Jocelyn Falempe wrote:
> On 27/09/2024 16:37, Thomas Zimmermann wrote:
>> Add drm_client_lib.ko to contain most of the client code. Move the
>> existing client for fbdev emulation into the new module. Protect the
>> new module behind CONFIG_DRM_CLIENT.
>>
>> The Kconfig rules separate the DRM drivers from the DRM clients. A
>> driver can opt into the default clients, but the user configures
>> each client individually. To do so, DRM drivers still select
>> DRM_CLIENT_SELECTION. The option is now a tristate that further
>> selects all dependencies of the enabled DRM clients. There's
>> a menu option for each client. Enabling at least one client also
>> selects DRM_CLIENT_SETUP, so that drivers call drm_client_setup().
>> New DRM clients should depend on DRM_CLIENT_SELECTION.
>>
>> The KMS-helper module now exports handful of symbols needed by the
>> DRM client library.
>>
>> There are existing kernel options in drm_fb_helper.o, so leave this
>> file in the KMS-helper module for now.
>>
>> Amdgpu has an internal DRM client, so it has to select DRM_CLIENT by
>> itself unconditionally.
> 
> Thanks, I found a typo in the Makefile (see below), other than that it 
> looks good to me.

Sorry, this time with the typo below.
> 
> Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>
> 
>>
>> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
>> ---
>>   drivers/gpu/drm/Kconfig            | 31 ++++++++++++++++++++++++------
>>   drivers/gpu/drm/Makefile           | 19 +++++++++++++-----
>>   drivers/gpu/drm/amd/amdgpu/Kconfig |  1 +
>>   drivers/gpu/drm/drm_client.c       |  3 +++
>>   drivers/gpu/drm/drm_dumb_buffers.c |  2 ++
>>   drivers/gpu/drm/drm_file.c         |  2 ++
>>   drivers/gpu/drm/drm_framebuffer.c  |  2 ++
>>   drivers/gpu/drm/drm_gem.c          |  2 ++
>>   8 files changed, 51 insertions(+), 11 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
>> index 88b2ba55fe16..379fccf3a6ea 100644
>> --- a/drivers/gpu/drm/Kconfig
>> +++ b/drivers/gpu/drm/Kconfig
>> @@ -9,8 +9,6 @@ menuconfig DRM
>>       tristate "Direct Rendering Manager (XFree86 4.1.0 and higher DRI 
>> support)"
>>       depends on (AGP || AGP=n) && !EMULATED_CMPXCHG && HAS_DMA
>>       select DRM_PANEL_ORIENTATION_QUIRKS
>> -    select DRM_KMS_HELPER if DRM_FBDEV_EMULATION
>> -    select FB_CORE if DRM_FBDEV_EMULATION
>>       select HDMI
>>       select I2C
>>       select DMA_SHARED_BUFFER
>> @@ -209,21 +207,40 @@ config DRM_DEBUG_MODESET_LOCK
>>         If in doubt, say "N".
>> +config DRM_CLIENT
>> +    tristate
>> +    depends on DRM
>> +    help
>> +      Enables the DRM client-lib module. DRM drivers that need
>> +      struct drm_client_dev and its interfaces should select this
>> +      option. Drivers that support the default clients should
>> +      select DRM_CLIENT_SELECTION instead.
>> +
>>   config DRM_CLIENT_SELECTION
>> -    bool
>> +    tristate
>>       depends on DRM
>> -    select DRM_CLIENT_SETUP if DRM_FBDEV_EMULATION
>> +    select DRM_CLIENT if DRM_FBDEV_EMULATION
>> +    select DRM_KMS_HELPER if DRM_FBDEV_EMULATION
>> +    select FB_CORE if DRM_FBDEV_EMULATION
>>       help
>>         Drivers that support in-kernel DRM clients have to select this
>> -      option.
>> +      option. It selects all modules and components according to the
>> +      enabled clients.
>>   config DRM_CLIENT_SETUP
>>       bool
>>       depends on DRM_CLIENT_SELECTION
>> +    help
>> +      Enables the DRM client selection. DRM drivers that support the
>> +      default clients should select DRM_CLIENT_SELECTION instead.
>> +
>> +menu "Supported DRM clients"
>> +    depends on DRM_CLIENT_SELECTION
>>   config DRM_FBDEV_EMULATION
>>       bool "Enable legacy fbdev support for your modesetting driver"
>> -    depends on DRM
>> +    depends on DRM_CLIENT_SELECTION
>> +    select DRM_CLIENT_SETUP
>>       select FRAMEBUFFER_CONSOLE_DETECT_PRIMARY if FRAMEBUFFER_CONSOLE
>>       default FB
>>       help
>> @@ -262,6 +279,8 @@ config DRM_FBDEV_LEAK_PHYS_SMEM
>>         If in doubt, say "N" or spread the word to your closed source
>>         library vendor.
>> +endmenu
>> +
>>   config DRM_LOAD_EDID_FIRMWARE
>>       bool "Allow to specify an EDID data set instead of probing for it"
>>       depends on DRM
>> diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
>> index c50443756457..419208b97f57 100644
>> --- a/drivers/gpu/drm/Makefile
>> +++ b/drivers/gpu/drm/Makefile
>> @@ -41,9 +41,7 @@ drm-y := \
>>       drm_blend.o \
>>       drm_bridge.o \
>>       drm_cache.o \
>> -    drm_client.o \
>>       drm_client_dev.o \
>> -    drm_client_modeset.o \
>>       drm_color_mgmt.o \
>>       drm_connector.o \
>>       drm_crtc.o \
>> @@ -144,14 +142,25 @@ drm_kms_helper-y := \
>>       drm_probe_helper.o \
>>       drm_self_refresh_helper.o \
>>       drm_simple_kms_helper.o
>> -drm_kms_helper-$(CONFIG_DRM_CLIENT_SETUP) += \
>> -    drm_client_setup.o
>>   drm_kms_helper-$(CONFIG_DRM_PANEL_BRIDGE) += bridge/panel.o
>>   drm_kms_helper-$(CONFIG_DRM_FBDEV_EMULATION) += \
>> -    drm_fbdev_client.o \
>>       drm_fb_helper.o
>> +drm_kms_helper-$(CONFIG_DRM_PANEL_BRIDGE) += bridge/panel.o

Typo: the above line is duplicated.

>>   obj-$(CONFIG_DRM_KMS_HELPER) += drm_kms_helper.o
>> +#
>> +# DRM clients
>> +#
>> +
>> +drm_client_lib-y := \
>> +    drm_client.o \
>> +    drm_client_modeset.o
>> +drm_client_lib-$(CONFIG_DRM_CLIENT_SETUP) += \
>> +    drm_client_setup.o
>> +drm_client_lib-$(CONFIG_DRM_FBDEV_EMULATION) += \
>> +    drm_fbdev_client.o
>> +obj-$(CONFIG_DRM_CLIENT) += drm_client_lib.o
>> +
>>   #
>>   # Drivers and the rest
>>   #
>> diff --git a/drivers/gpu/drm/amd/amdgpu/Kconfig b/drivers/gpu/drm/amd/ 
>> amdgpu/Kconfig
>> index 680a94c361ba..41fa3377d9cf 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/Kconfig
>> +++ b/drivers/gpu/drm/amd/amdgpu/Kconfig
>> @@ -5,6 +5,7 @@ config DRM_AMDGPU
>>       depends on DRM && PCI && MMU
>>       depends on !UML
>>       select FW_LOADER
>> +    select DRM_CLIENT
>>       select DRM_CLIENT_SELECTION
>>       select DRM_DISPLAY_DP_HELPER
>>       select DRM_DISPLAY_DSC_HELPER
>> diff --git a/drivers/gpu/drm/drm_client.c b/drivers/gpu/drm/drm_client.c
>> index 549b28a5918c..864ee96e48cf 100644
>> --- a/drivers/gpu/drm/drm_client.c
>> +++ b/drivers/gpu/drm/drm_client.c
>> @@ -490,3 +490,6 @@ int drm_client_framebuffer_flush(struct 
>> drm_client_buffer *buffer, struct drm_re
>>                       0, 0, NULL, 0);
>>   }
>>   EXPORT_SYMBOL(drm_client_framebuffer_flush);
>> +
>> +MODULE_DESCRIPTION("In-kernel DRM clients");
>> +MODULE_LICENSE("GPL and additional rights");
>> diff --git a/drivers/gpu/drm/drm_dumb_buffers.c b/drivers/gpu/drm/ 
>> drm_dumb_buffers.c
>> index 70032bba1c97..7ed8f05a8d5c 100644
>> --- a/drivers/gpu/drm/drm_dumb_buffers.c
>> +++ b/drivers/gpu/drm/drm_dumb_buffers.c
>> @@ -95,6 +95,7 @@ int drm_mode_create_dumb(struct drm_device *dev,
>>       return dev->driver->dumb_create(file_priv, dev, args);
>>   }
>> +EXPORT_SYMBOL(drm_mode_create_dumb);
>>   int drm_mode_create_dumb_ioctl(struct drm_device *dev,
>>                      void *data, struct drm_file *file_priv)
>> @@ -141,6 +142,7 @@ int drm_mode_destroy_dumb(struct drm_device *dev, 
>> u32 handle,
>>       return drm_gem_handle_delete(file_priv, handle);
>>   }
>> +EXPORT_SYMBOL(drm_mode_destroy_dumb);
>>   int drm_mode_destroy_dumb_ioctl(struct drm_device *dev,
>>                   void *data, struct drm_file *file_priv)
>> diff --git a/drivers/gpu/drm/drm_file.c b/drivers/gpu/drm/drm_file.c
>> index 01fde94fe2a9..dd847b574457 100644
>> --- a/drivers/gpu/drm/drm_file.c
>> +++ b/drivers/gpu/drm/drm_file.c
>> @@ -186,6 +186,7 @@ struct drm_file *drm_file_alloc(struct drm_minor 
>> *minor)
>>       return ERR_PTR(ret);
>>   }
>> +EXPORT_SYMBOL(drm_file_alloc);
>>   static void drm_events_release(struct drm_file *file_priv)
>>   {
>> @@ -261,6 +262,7 @@ void drm_file_free(struct drm_file *file)
>>       put_pid(rcu_access_pointer(file->pid));
>>       kfree(file);
>>   }
>> +EXPORT_SYMBOL(drm_file_free);
>>   static void drm_close_helper(struct file *filp)
>>   {
>> diff --git a/drivers/gpu/drm/drm_framebuffer.c b/drivers/gpu/drm/ 
>> drm_framebuffer.c
>> index 47e6e8577b62..761262529416 100644
>> --- a/drivers/gpu/drm/drm_framebuffer.c
>> +++ b/drivers/gpu/drm/drm_framebuffer.c
>> @@ -349,6 +349,7 @@ int drm_mode_addfb2(struct drm_device *dev,
>>       return 0;
>>   }
>> +EXPORT_SYMBOL(drm_mode_addfb2);
>>   int drm_mode_addfb2_ioctl(struct drm_device *dev,
>>                 void *data, struct drm_file *file_priv)
>> @@ -473,6 +474,7 @@ int drm_mode_rmfb(struct drm_device *dev, u32 fb_id,
>>       return 0;
>>   }
>> +EXPORT_SYMBOL(drm_mode_rmfb);
>>   int drm_mode_rmfb_ioctl(struct drm_device *dev,
>>               void *data, struct drm_file *file_priv)
>> diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
>> index ee811764c3df..07ae82e35517 100644
>> --- a/drivers/gpu/drm/drm_gem.c
>> +++ b/drivers/gpu/drm/drm_gem.c
>> @@ -1191,12 +1191,14 @@ int drm_gem_pin_locked(struct drm_gem_object 
>> *obj)
>>       return 0;
>>   }
>> +EXPORT_SYMBOL(drm_gem_pin_locked);
>>   void drm_gem_unpin_locked(struct drm_gem_object *obj)
>>   {
>>       if (obj->funcs->unpin)
>>           obj->funcs->unpin(obj);
>>   }
>> +EXPORT_SYMBOL(drm_gem_unpin_locked);
>>   int drm_gem_pin(struct drm_gem_object *obj)
>>   {
> 


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

* Re: [PATCH 0/5] drm: Introduce DRM client library
  2024-09-30 11:46 ` Jocelyn Falempe
@ 2024-09-30 12:27   ` Thomas Zimmermann
  0 siblings, 0 replies; 18+ messages in thread
From: Thomas Zimmermann @ 2024-09-30 12:27 UTC (permalink / raw)
  To: Jocelyn Falempe, simona, airlied, javierm
  Cc: dri-devel, amd-gfx, intel-gfx, intel-xe

Hi

Am 30.09.24 um 13:46 schrieb Jocelyn Falempe:
> On 27/09/2024 16:37, Thomas Zimmermann wrote:
>> With the next DRM client coming soon (drm_log) and most of DRM's
>> fbdev emulation consolidated in a few places, it's time to provide
>> a single place for the clients.
>>
>> The new module drm_client_lib.ko stores most of the common client
>> code. It's designed such that drivers can opt into client support,
>> but the presence of the client module depends on the user's kernel
>> configuration. Without selected clients, no client module will be
>> build.
>
> Thanks for this work, I've rebased drm_log on top of this, and it 
> works great.

I got a warning from some CI script about a circular module dependency. 
I need to investigate this before I can merge it, but I'll do soon-ish.

>
> My only nitpick is I would prefer it to be called drm_client.ko, to be 
> a little shorter. So that the kernel parameter to change the default 
> client can be "drm_client.default=fbdev".

Yeah, naming is a bit unfortunate. There's drm_client.o (from 
drm_client.c) already, which would conflict with drm_client.ko. And 
there's no better name for drm_client.c either. Hence drm_client_lib.ko. 
I also thought about drm_client_helper and drm_client_mod. Neither 
seemed better.

Thanks for looking over it.

Best regards
Thomas


>
> Best regards,
>

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)


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

end of thread, other threads:[~2024-09-30 12:27 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-09-27 14:37 [PATCH 0/5] drm: Introduce DRM client library Thomas Zimmermann
2024-09-27 14:37 ` [PATCH 1/5] drm/i915: Select DRM_CLIENT_SELECTION Thomas Zimmermann
2024-09-27 14:37 ` [PATCH 2/5] drm/xe: " Thomas Zimmermann
2024-09-27 14:37 ` [PATCH 3/5] drm: Move client-device functions in to drm_client_dev.c Thomas Zimmermann
2024-09-30 11:49   ` Jocelyn Falempe
2024-09-27 14:37 ` [PATCH 4/5] drm: Select fbdev helpers for modules that require them Thomas Zimmermann
2024-09-30 11:49   ` Jocelyn Falempe
2024-09-27 14:37 ` [PATCH 5/5] drm: Add client-lib module Thomas Zimmermann
2024-09-30 11:55   ` Jocelyn Falempe
2024-09-30 11:56     ` Jocelyn Falempe
2024-09-27 16:19 ` ✓ CI.Patch_applied: success for drm: Introduce DRM client library Patchwork
2024-09-27 16:19 ` ✗ CI.checkpatch: warning " Patchwork
2024-09-27 16:20 ` ✓ CI.KUnit: success " Patchwork
2024-09-27 16:26 ` ✗ CI.Build: failure " Patchwork
2024-09-27 19:27 ` [PATCH 0/5] " Felix Kuehling
2024-09-30  6:19   ` Thomas Zimmermann
2024-09-30 11:46 ` Jocelyn Falempe
2024-09-30 12:27   ` Thomas Zimmermann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox