* [RFC PATCH v2 0/2] dma-buf private interconnect POC
@ 2025-09-26 8:46 Thomas Hellström
2025-09-26 8:46 ` [RFC PATCH v2 1/2] dma-buf: Add support for private interconnects Thomas Hellström
` (6 more replies)
0 siblings, 7 replies; 21+ messages in thread
From: Thomas Hellström @ 2025-09-26 8:46 UTC (permalink / raw)
To: intel-xe
Cc: Thomas Hellström, Matthew Brost, Maarten Lankhorst,
Christian König, Kasireddy Vivek, Simona Vetter,
Jason Gunthorpe, dri-devel, linaro-mm-sig
Two patches to implement a generic framework for dma-buf to support
local private interconnects, in particular interconnects that are not
driver-private.
The interconnect support is negotiated as part of an attachment and is
not a property of the dma-buf itself. Just like pcie p2p support.
The first patch adds members to the dma_buf_attach_ops and to the
dma_buf_attachment structure. These are needed for generic check of
interconnect support, typically when an interconnect is shared between
drivers. For truly driver-private interconnects they are not
strictly needed, but still could be convenient.
The second patch implements an interconnect negotiation for xe,
without actually changing the protocol itself from pcie_p2p.
Just as an example. This patch is not intended to be merged.
Note: This RFC only deals with interconnect negotiation. The
attachment state and what data-structure to use to convey the mapping
information is not dealt with in this RFC.
v2:
- Get rid of void pointers and instead provide generic structures
that are intended to be embedded / subclassed for each interconnect
implementation.
Thomas Hellström (2):
dma-buf: Add support for private interconnects
drm/xe/dma-buf: Add generic interconnect support framework
drivers/gpu/drm/xe/tests/xe_dma_buf.c | 12 ++---
drivers/gpu/drm/xe/xe_dma_buf.c | 73 ++++++++++++++++++++++++---
drivers/gpu/drm/xe/xe_dma_buf.h | 1 -
drivers/gpu/drm/xe/xe_interconnect.h | 31 ++++++++++++
include/linux/dma-buf.h | 51 +++++++++++++++++++
5 files changed, 155 insertions(+), 13 deletions(-)
create mode 100644 drivers/gpu/drm/xe/xe_interconnect.h
--
2.51.0
^ permalink raw reply [flat|nested] 21+ messages in thread
* [RFC PATCH v2 1/2] dma-buf: Add support for private interconnects
2025-09-26 8:46 [RFC PATCH v2 0/2] dma-buf private interconnect POC Thomas Hellström
@ 2025-09-26 8:46 ` Thomas Hellström
2025-09-26 12:56 ` Christian König
2025-09-26 8:46 ` [RFC PATCH v2 2/2] drm/xe/dma-buf: Add generic interconnect support framework Thomas Hellström
` (5 subsequent siblings)
6 siblings, 1 reply; 21+ messages in thread
From: Thomas Hellström @ 2025-09-26 8:46 UTC (permalink / raw)
To: intel-xe
Cc: Thomas Hellström, Matthew Brost, Maarten Lankhorst,
Christian König, Kasireddy Vivek, Simona Vetter,
Jason Gunthorpe, dri-devel, linaro-mm-sig
Add a function to the dma_buf_attach_ops to indicate whether the
connection is a private interconnect. If so the function returns
the address to an interconnect-defined structure that can be
used for further negotiating.
Also add a field to the dma_buf_attachment that indicates whether
a private interconnect is used by the attachment.
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
---
include/linux/dma-buf.h | 51 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 51 insertions(+)
diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
index d58e329ac0e7..25dbf1fea09a 100644
--- a/include/linux/dma-buf.h
+++ b/include/linux/dma-buf.h
@@ -442,6 +442,39 @@ struct dma_buf {
#endif
};
+/* RFC: Separate header for the interconnect defines? */
+
+/**
+ * struct dma_buf_interconnect - Private interconnect
+ * @name: The name of the interconnect
+ */
+struct dma_buf_interconnect {
+ const char *name;
+};
+
+/**
+ * struct dma_buf_interconnect_attach_ops - Interconnect attach ops base-class
+ *
+ * Declared for type-safety. Interconnect implementations should subclass to
+ * implement negotiation-specific ops.
+ */
+struct dma_buf_interconnect_attach_ops {
+};
+
+/**
+ * struct dma_buf_interconnect_attach - Interconnect state
+ * @interconnect: The struct dma_buf_interconnect identifying the interconnect
+ *
+ * Interconnect implementations subclass as needed for attachment state
+ * that can't be stored elsewhere. It could, for example, hold a pointer
+ * to a replacement of the sg-list after the attachment has been mapped.
+ * If no additional state is needed, an exporter could define a single
+ * static instance of this struct.
+ */
+struct dma_buf_interconnect_attach {
+ const struct dma_buf_interconnect *interconnect;
+};
+
/**
* struct dma_buf_attach_ops - importer operations for an attachment
*
@@ -475,6 +508,21 @@ struct dma_buf_attach_ops {
* point to the new location of the DMA-buf.
*/
void (*move_notify)(struct dma_buf_attachment *attach);
+
+ /**
+ * @supports_interconnect: [optional] - Does the driver support a local interconnect?
+ *
+ * Does the importer support a private interconnect? The interconnect is
+ * identified using a unique address defined instantiated either by the driver
+ * if the interconnect is driver-private or globally
+ * (RFC added to the dma-buf-interconnect.c file) if cross-driver.
+ *
+ * Return: A pointer to the interconnect-private attach_ops structure if supported,
+ * %NULL otherwise.
+ */
+ const struct dma_buf_interconnect_attach_ops *
+ (*supports_interconnect)(struct dma_buf_attachment *attach,
+ const struct dma_buf_interconnect *interconnect);
};
/**
@@ -484,6 +532,8 @@ struct dma_buf_attach_ops {
* @node: list of dma_buf_attachment, protected by dma_resv lock of the dmabuf.
* @peer2peer: true if the importer can handle peer resources without pages.
* @priv: exporter specific attachment data.
+ * @interconnect_attach: Private interconnect state for the connection if used,
+ * NULL otherwise.
* @importer_ops: importer operations for this attachment, if provided
* dma_buf_map/unmap_attachment() must be called with the dma_resv lock held.
* @importer_priv: importer specific attachment data.
@@ -503,6 +553,7 @@ struct dma_buf_attachment {
struct list_head node;
bool peer2peer;
const struct dma_buf_attach_ops *importer_ops;
+ struct dma_buf_interconnect_attach *interconnect_attach;
void *importer_priv;
void *priv;
};
--
2.51.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [RFC PATCH v2 2/2] drm/xe/dma-buf: Add generic interconnect support framework
2025-09-26 8:46 [RFC PATCH v2 0/2] dma-buf private interconnect POC Thomas Hellström
2025-09-26 8:46 ` [RFC PATCH v2 1/2] dma-buf: Add support for private interconnects Thomas Hellström
@ 2025-09-26 8:46 ` Thomas Hellström
2025-09-26 9:34 ` ✗ CI.checkpatch: warning for dma-buf private interconnect POC (rev2) Patchwork
` (4 subsequent siblings)
6 siblings, 0 replies; 21+ messages in thread
From: Thomas Hellström @ 2025-09-26 8:46 UTC (permalink / raw)
To: intel-xe
Cc: Thomas Hellström, Matthew Brost, Maarten Lankhorst,
Christian König, Kasireddy Vivek, Simona Vetter,
Jason Gunthorpe, dri-devel, linaro-mm-sig
Negotiate to use an xe-specific interconnect.
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
---
drivers/gpu/drm/xe/tests/xe_dma_buf.c | 12 ++---
drivers/gpu/drm/xe/xe_dma_buf.c | 73 ++++++++++++++++++++++++---
drivers/gpu/drm/xe/xe_dma_buf.h | 1 -
drivers/gpu/drm/xe/xe_interconnect.h | 31 ++++++++++++
4 files changed, 104 insertions(+), 13 deletions(-)
create mode 100644 drivers/gpu/drm/xe/xe_interconnect.h
diff --git a/drivers/gpu/drm/xe/tests/xe_dma_buf.c b/drivers/gpu/drm/xe/tests/xe_dma_buf.c
index 5df98de5ba3c..8eaea6c2a3b7 100644
--- a/drivers/gpu/drm/xe/tests/xe_dma_buf.c
+++ b/drivers/gpu/drm/xe/tests/xe_dma_buf.c
@@ -210,9 +210,9 @@ static const struct dma_buf_attach_ops nop2p_attach_ops = {
*/
static const struct dma_buf_test_params test_params[] = {
{.mem_mask = XE_BO_FLAG_VRAM0,
- .attach_ops = &xe_dma_buf_attach_ops},
+ .attach_ops = &xe_dma_buf_attach_ops.dma_ops},
{.mem_mask = XE_BO_FLAG_VRAM0 | XE_BO_FLAG_NEEDS_CPU_ACCESS,
- .attach_ops = &xe_dma_buf_attach_ops,
+ .attach_ops = &xe_dma_buf_attach_ops.dma_ops,
.force_different_devices = true},
{.mem_mask = XE_BO_FLAG_VRAM0,
@@ -226,9 +226,9 @@ static const struct dma_buf_test_params test_params[] = {
.force_different_devices = true},
{.mem_mask = XE_BO_FLAG_SYSTEM,
- .attach_ops = &xe_dma_buf_attach_ops},
+ .attach_ops = &xe_dma_buf_attach_ops.dma_ops},
{.mem_mask = XE_BO_FLAG_SYSTEM,
- .attach_ops = &xe_dma_buf_attach_ops,
+ .attach_ops = &xe_dma_buf_attach_ops.dma_ops,
.force_different_devices = true},
{.mem_mask = XE_BO_FLAG_SYSTEM,
@@ -242,10 +242,10 @@ static const struct dma_buf_test_params test_params[] = {
.force_different_devices = true},
{.mem_mask = XE_BO_FLAG_SYSTEM | XE_BO_FLAG_VRAM0,
- .attach_ops = &xe_dma_buf_attach_ops},
+ .attach_ops = &xe_dma_buf_attach_ops.dma_ops},
{.mem_mask = XE_BO_FLAG_SYSTEM | XE_BO_FLAG_VRAM0 |
XE_BO_FLAG_NEEDS_CPU_ACCESS,
- .attach_ops = &xe_dma_buf_attach_ops,
+ .attach_ops = &xe_dma_buf_attach_ops.dma_ops,
.force_different_devices = true},
{.mem_mask = XE_BO_FLAG_SYSTEM | XE_BO_FLAG_VRAM0,
diff --git a/drivers/gpu/drm/xe/xe_dma_buf.c b/drivers/gpu/drm/xe/xe_dma_buf.c
index 54e42960daad..ffb00d54bb9e 100644
--- a/drivers/gpu/drm/xe/xe_dma_buf.c
+++ b/drivers/gpu/drm/xe/xe_dma_buf.c
@@ -16,18 +16,49 @@
#include "tests/xe_test.h"
#include "xe_bo.h"
#include "xe_device.h"
+#include "xe_interconnect.h"
#include "xe_pm.h"
#include "xe_ttm_vram_mgr.h"
#include "xe_vm.h"
MODULE_IMPORT_NS("DMA_BUF");
+struct xe_dma_buf_attach_ops {
+ struct dma_buf_attach_ops dma_ops;
+ struct xe_interconnect_attach_ops ic_ops;
+};
+
+static const struct xe_dma_buf_attach_ops *
+to_xe_dma_buf_attach_ops(struct dma_buf_attachment *attach)
+{
+ const struct dma_buf_attach_ops *aops = attach->importer_ops;
+ const struct dma_buf_interconnect_attach_ops *iaops;
+
+ if (!aops || !aops->supports_interconnect)
+ return NULL;
+
+ iaops = aops->supports_interconnect(attach, xe_interconnect);
+ return iaops ? container_of(iaops, struct xe_dma_buf_attach_ops, ic_ops.base) : NULL;
+}
+
static int xe_dma_buf_attach(struct dma_buf *dmabuf,
struct dma_buf_attachment *attach)
{
struct drm_gem_object *obj = attach->dmabuf->priv;
+ const struct xe_dma_buf_attach_ops *xe_attach_ops =
+ to_xe_dma_buf_attach_ops(attach);
+
+ if (xe_attach_ops && xe_attach_ops->ic_ops.allow_ic) {
+ struct xe_interconnect_attach *xe_attach = kzalloc(sizeof(*attach), GFP_KERNEL);
+
+ if (xe_attach) {
+ xe_attach->base.interconnect = xe_interconnect;
+ xe_attach->sg_list_replacement = NULL;
+ attach->interconnect_attach = &xe_attach->base;
+ }
+ }
- if (attach->peer2peer &&
+ if (!attach->interconnect_attach && attach->peer2peer &&
pci_p2pdma_distance(to_pci_dev(obj->dev->dev), attach->dev, false) < 0)
attach->peer2peer = false;
@@ -43,6 +74,7 @@ static void xe_dma_buf_detach(struct dma_buf *dmabuf,
{
struct drm_gem_object *obj = attach->dmabuf->priv;
+ kfree(attach->interconnect_attach);
xe_pm_runtime_put(to_xe_device(obj->dev));
}
@@ -135,6 +167,11 @@ static struct sg_table *xe_dma_buf_map(struct dma_buf_attachment *attach,
case XE_PL_VRAM0:
case XE_PL_VRAM1:
+ if (attach->interconnect_attach &&
+ attach->interconnect_attach->interconnect == xe_interconnect) {
+ /* Map using something else than sglist */
+ ;
+ }
r = xe_ttm_vram_mgr_alloc_sgt(xe_bo_device(bo),
bo->ttm.resource, 0,
bo->ttm.base.size, attach->dev,
@@ -285,9 +322,28 @@ static void xe_dma_buf_move_notify(struct dma_buf_attachment *attach)
XE_WARN_ON(xe_bo_evict(bo, exec));
}
-static const struct dma_buf_attach_ops xe_dma_buf_attach_ops = {
- .allow_peer2peer = true,
- .move_notify = xe_dma_buf_move_notify
+static const struct dma_buf_interconnect_attach_ops *
+xe_dma_buf_supports_interconnect(struct dma_buf_attachment *attach,
+ const struct dma_buf_interconnect *interconnect)
+{
+ if (interconnect == xe_interconnect) {
+ return &container_of(attach->importer_ops,
+ const struct xe_dma_buf_attach_ops,
+ dma_ops)->ic_ops.base;
+ }
+
+ return NULL;
+}
+
+static const struct xe_dma_buf_attach_ops xe_dma_buf_attach_ops = {
+ .dma_ops = {
+ .allow_peer2peer = true,
+ .move_notify = xe_dma_buf_move_notify,
+ .supports_interconnect = xe_dma_buf_supports_interconnect,
+ },
+ .ic_ops = {
+ .allow_ic = true,
+ }
};
#if IS_ENABLED(CONFIG_DRM_XE_KUNIT_TEST)
@@ -336,12 +392,11 @@ struct drm_gem_object *xe_gem_prime_import(struct drm_device *dev,
if (IS_ERR(bo))
return ERR_CAST(bo);
- attach_ops = &xe_dma_buf_attach_ops;
+ attach_ops = &xe_dma_buf_attach_ops.dma_ops;
#if IS_ENABLED(CONFIG_DRM_XE_KUNIT_TEST)
if (test)
attach_ops = test->attach_ops;
#endif
-
attach = dma_buf_dynamic_attach(dma_buf, dev->dev, attach_ops, &bo->ttm.base);
if (IS_ERR(attach)) {
obj = ERR_CAST(attach);
@@ -364,6 +419,12 @@ struct drm_gem_object *xe_gem_prime_import(struct drm_device *dev,
return obj;
}
+static const struct dma_buf_interconnect _xe_interconnect = {
+ .name = "xe_interconnect",
+};
+
+const struct dma_buf_interconnect *xe_interconnect = &_xe_interconnect;
+
#if IS_ENABLED(CONFIG_DRM_XE_KUNIT_TEST)
#include "tests/xe_dma_buf.c"
#endif
diff --git a/drivers/gpu/drm/xe/xe_dma_buf.h b/drivers/gpu/drm/xe/xe_dma_buf.h
index 861dd28a862c..6b381ce4b7c1 100644
--- a/drivers/gpu/drm/xe/xe_dma_buf.h
+++ b/drivers/gpu/drm/xe/xe_dma_buf.h
@@ -11,5 +11,4 @@
struct dma_buf *xe_gem_prime_export(struct drm_gem_object *obj, int flags);
struct drm_gem_object *xe_gem_prime_import(struct drm_device *dev,
struct dma_buf *dma_buf);
-
#endif
diff --git a/drivers/gpu/drm/xe/xe_interconnect.h b/drivers/gpu/drm/xe/xe_interconnect.h
new file mode 100644
index 000000000000..2b8bc9bf1c8d
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_interconnect.h
@@ -0,0 +1,31 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2025 Intel Corporation
+ */
+#ifndef _XE_INTERCONNECT_H_
+#define _XE_INTERCONNECT_H_
+
+#include <linux/types.h>
+#include <linux/dma-buf.h>
+
+struct device_private_address;
+
+/* This file needs to be shared between the importer and exporter of the interconnect */
+
+extern const struct dma_buf_interconnect *xe_interconnect;
+
+struct xe_interconnect_attach_ops {
+ struct dma_buf_interconnect_attach_ops base;
+ /*
+ * Here interconnect-private stuff can be added.
+ * Like a function to check interconnect possibility.
+ */
+ bool allow_ic;
+};
+
+struct xe_interconnect_attach {
+ struct dma_buf_interconnect_attach base;
+ struct device_private_address *sg_list_replacement;
+};
+
+#endif
--
2.51.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* ✗ CI.checkpatch: warning for dma-buf private interconnect POC (rev2)
2025-09-26 8:46 [RFC PATCH v2 0/2] dma-buf private interconnect POC Thomas Hellström
2025-09-26 8:46 ` [RFC PATCH v2 1/2] dma-buf: Add support for private interconnects Thomas Hellström
2025-09-26 8:46 ` [RFC PATCH v2 2/2] drm/xe/dma-buf: Add generic interconnect support framework Thomas Hellström
@ 2025-09-26 9:34 ` Patchwork
2025-09-26 9:35 ` ✓ CI.KUnit: success " Patchwork
` (3 subsequent siblings)
6 siblings, 0 replies; 21+ messages in thread
From: Patchwork @ 2025-09-26 9:34 UTC (permalink / raw)
To: Thomas Hellström; +Cc: intel-xe
== Series Details ==
Series: dma-buf private interconnect POC (rev2)
URL : https://patchwork.freedesktop.org/series/155043/
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
fbd08a78c3a3bb17964db2a326514c69c1dca660
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit f5c4107f2032ad634d863dca525fbefcfa2c6d92
Author: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Date: Fri Sep 26 10:46:24 2025 +0200
drm/xe/dma-buf: Add generic interconnect support framework
Negotiate to use an xe-specific interconnect.
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
+ /mt/dim checkpatch d557b14c00c4ab027e66c1c7bf512cf479ff8c24 drm-intel
d3126cb636d5 dma-buf: Add support for private interconnects
f5c4107f2032 drm/xe/dma-buf: Add generic interconnect support framework
-:199: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#199:
new file mode 100644
total: 0 errors, 1 warnings, 0 checks, 194 lines checked
^ permalink raw reply [flat|nested] 21+ messages in thread
* ✓ CI.KUnit: success for dma-buf private interconnect POC (rev2)
2025-09-26 8:46 [RFC PATCH v2 0/2] dma-buf private interconnect POC Thomas Hellström
` (2 preceding siblings ...)
2025-09-26 9:34 ` ✗ CI.checkpatch: warning for dma-buf private interconnect POC (rev2) Patchwork
@ 2025-09-26 9:35 ` Patchwork
2025-09-26 9:50 ` ✗ CI.checksparse: warning " Patchwork
` (2 subsequent siblings)
6 siblings, 0 replies; 21+ messages in thread
From: Patchwork @ 2025-09-26 9:35 UTC (permalink / raw)
To: Thomas Hellström; +Cc: intel-xe
== Series Details ==
Series: dma-buf private interconnect POC (rev2)
URL : https://patchwork.freedesktop.org/series/155043/
State : success
== Summary ==
+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[09:34:08] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[09:34:13] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[09:34:42] Starting KUnit Kernel (1/1)...
[09:34:42] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[09:34:42] ================== guc_buf (11 subtests) ===================
[09:34:42] [PASSED] test_smallest
[09:34:42] [PASSED] test_largest
[09:34:42] [PASSED] test_granular
[09:34:42] [PASSED] test_unique
[09:34:42] [PASSED] test_overlap
[09:34:42] [PASSED] test_reusable
[09:34:42] [PASSED] test_too_big
[09:34:42] [PASSED] test_flush
[09:34:42] [PASSED] test_lookup
[09:34:42] [PASSED] test_data
[09:34:42] [PASSED] test_class
[09:34:42] ===================== [PASSED] guc_buf =====================
[09:34:42] =================== guc_dbm (7 subtests) ===================
[09:34:42] [PASSED] test_empty
[09:34:42] [PASSED] test_default
[09:34:42] ======================== test_size ========================
[09:34:42] [PASSED] 4
[09:34:42] [PASSED] 8
[09:34:42] [PASSED] 32
[09:34:42] [PASSED] 256
[09:34:42] ==================== [PASSED] test_size ====================
[09:34:42] ======================= test_reuse ========================
[09:34:42] [PASSED] 4
[09:34:42] [PASSED] 8
[09:34:42] [PASSED] 32
[09:34:42] [PASSED] 256
[09:34:42] =================== [PASSED] test_reuse ====================
[09:34:42] =================== test_range_overlap ====================
[09:34:42] [PASSED] 4
[09:34:42] [PASSED] 8
[09:34:42] [PASSED] 32
[09:34:42] [PASSED] 256
[09:34:42] =============== [PASSED] test_range_overlap ================
[09:34:42] =================== test_range_compact ====================
[09:34:42] [PASSED] 4
[09:34:42] [PASSED] 8
[09:34:42] [PASSED] 32
[09:34:42] [PASSED] 256
[09:34:42] =============== [PASSED] test_range_compact ================
[09:34:42] ==================== test_range_spare =====================
[09:34:42] [PASSED] 4
[09:34:42] [PASSED] 8
[09:34:42] [PASSED] 32
[09:34:42] [PASSED] 256
[09:34:42] ================ [PASSED] test_range_spare =================
[09:34:42] ===================== [PASSED] guc_dbm =====================
[09:34:42] =================== guc_idm (6 subtests) ===================
[09:34:42] [PASSED] bad_init
[09:34:42] [PASSED] no_init
[09:34:42] [PASSED] init_fini
[09:34:42] [PASSED] check_used
[09:34:42] [PASSED] check_quota
[09:34:42] [PASSED] check_all
[09:34:42] ===================== [PASSED] guc_idm =====================
[09:34:42] ================== no_relay (3 subtests) ===================
[09:34:42] [PASSED] xe_drops_guc2pf_if_not_ready
[09:34:42] [PASSED] xe_drops_guc2vf_if_not_ready
[09:34:42] [PASSED] xe_rejects_send_if_not_ready
[09:34:42] ==================== [PASSED] no_relay =====================
[09:34:42] ================== pf_relay (14 subtests) ==================
[09:34:42] [PASSED] pf_rejects_guc2pf_too_short
[09:34:42] [PASSED] pf_rejects_guc2pf_too_long
[09:34:42] [PASSED] pf_rejects_guc2pf_no_payload
[09:34:42] [PASSED] pf_fails_no_payload
[09:34:42] [PASSED] pf_fails_bad_origin
[09:34:42] [PASSED] pf_fails_bad_type
[09:34:42] [PASSED] pf_txn_reports_error
[09:34:42] [PASSED] pf_txn_sends_pf2guc
[09:34:42] [PASSED] pf_sends_pf2guc
[09:34:42] [SKIPPED] pf_loopback_nop
[09:34:42] [SKIPPED] pf_loopback_echo
[09:34:42] [SKIPPED] pf_loopback_fail
[09:34:42] [SKIPPED] pf_loopback_busy
[09:34:42] [SKIPPED] pf_loopback_retry
[09:34:42] ==================== [PASSED] pf_relay =====================
[09:34:42] ================== vf_relay (3 subtests) ===================
[09:34:42] [PASSED] vf_rejects_guc2vf_too_short
[09:34:42] [PASSED] vf_rejects_guc2vf_too_long
[09:34:42] [PASSED] vf_rejects_guc2vf_no_payload
[09:34:42] ==================== [PASSED] vf_relay =====================
[09:34:42] ===================== lmtt (1 subtest) =====================
[09:34:42] ======================== test_ops =========================
[09:34:42] [PASSED] 2-level
[09:34:42] [PASSED] multi-level
[09:34:42] ==================== [PASSED] test_ops =====================
[09:34:42] ====================== [PASSED] lmtt =======================
[09:34:42] ================= pf_service (11 subtests) =================
[09:34:42] [PASSED] pf_negotiate_any
[09:34:42] [PASSED] pf_negotiate_base_match
[09:34:42] [PASSED] pf_negotiate_base_newer
[09:34:42] [PASSED] pf_negotiate_base_next
[09:34:42] [SKIPPED] pf_negotiate_base_older
[09:34:42] [PASSED] pf_negotiate_base_prev
[09:34:42] [PASSED] pf_negotiate_latest_match
[09:34:42] [PASSED] pf_negotiate_latest_newer
[09:34:42] [PASSED] pf_negotiate_latest_next
[09:34:42] [SKIPPED] pf_negotiate_latest_older
[09:34:42] [SKIPPED] pf_negotiate_latest_prev
[09:34:42] =================== [PASSED] pf_service ====================
[09:34:42] ================= xe_guc_g2g (2 subtests) ==================
[09:34:42] ============== xe_live_guc_g2g_kunit_default ==============
[09:34:42] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[09:34:42] ============== xe_live_guc_g2g_kunit_allmem ===============
[09:34:42] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[09:34:42] =================== [SKIPPED] xe_guc_g2g ===================
[09:34:42] =================== xe_mocs (2 subtests) ===================
[09:34:42] ================ xe_live_mocs_kernel_kunit ================
[09:34:42] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[09:34:42] ================ xe_live_mocs_reset_kunit =================
[09:34:42] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[09:34:42] ==================== [SKIPPED] xe_mocs =====================
[09:34:42] ================= xe_migrate (2 subtests) ==================
[09:34:42] ================= xe_migrate_sanity_kunit =================
[09:34:42] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[09:34:42] ================== xe_validate_ccs_kunit ==================
[09:34:42] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[09:34:42] =================== [SKIPPED] xe_migrate ===================
[09:34:42] ================== xe_dma_buf (1 subtest) ==================
[09:34:42] ==================== xe_dma_buf_kunit =====================
[09:34:42] ================ [SKIPPED] xe_dma_buf_kunit ================
[09:34:42] =================== [SKIPPED] xe_dma_buf ===================
[09:34:42] ================= xe_bo_shrink (1 subtest) =================
[09:34:42] =================== xe_bo_shrink_kunit ====================
[09:34:42] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[09:34:42] ================== [SKIPPED] xe_bo_shrink ==================
[09:34:42] ==================== xe_bo (2 subtests) ====================
[09:34:42] ================== xe_ccs_migrate_kunit ===================
[09:34:42] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[09:34:42] ==================== xe_bo_evict_kunit ====================
[09:34:42] =============== [SKIPPED] xe_bo_evict_kunit ================
[09:34:42] ===================== [SKIPPED] xe_bo ======================
[09:34:42] ==================== args (11 subtests) ====================
[09:34:42] [PASSED] count_args_test
[09:34:42] [PASSED] call_args_example
[09:34:42] [PASSED] call_args_test
[09:34:42] [PASSED] drop_first_arg_example
[09:34:42] [PASSED] drop_first_arg_test
[09:34:42] [PASSED] first_arg_example
[09:34:42] [PASSED] first_arg_test
[09:34:42] [PASSED] last_arg_example
[09:34:42] [PASSED] last_arg_test
[09:34:42] [PASSED] pick_arg_example
[09:34:42] [PASSED] sep_comma_example
[09:34:42] ====================== [PASSED] args =======================
[09:34:42] =================== xe_pci (3 subtests) ====================
[09:34:42] ==================== check_graphics_ip ====================
[09:34:42] [PASSED] 12.00 Xe_LP
[09:34:42] [PASSED] 12.10 Xe_LP+
[09:34:42] [PASSED] 12.55 Xe_HPG
[09:34:42] [PASSED] 12.60 Xe_HPC
[09:34:42] [PASSED] 12.70 Xe_LPG
[09:34:42] [PASSED] 12.71 Xe_LPG
[09:34:42] [PASSED] 12.74 Xe_LPG+
[09:34:42] [PASSED] 20.01 Xe2_HPG
[09:34:42] [PASSED] 20.02 Xe2_HPG
[09:34:42] [PASSED] 20.04 Xe2_LPG
[09:34:42] [PASSED] 30.00 Xe3_LPG
[09:34:42] [PASSED] 30.01 Xe3_LPG
[09:34:42] [PASSED] 30.03 Xe3_LPG
[09:34:42] ================ [PASSED] check_graphics_ip ================
[09:34:42] ===================== check_media_ip ======================
[09:34:42] [PASSED] 12.00 Xe_M
[09:34:42] [PASSED] 12.55 Xe_HPM
[09:34:42] [PASSED] 13.00 Xe_LPM+
[09:34:42] [PASSED] 13.01 Xe2_HPM
[09:34:42] [PASSED] 20.00 Xe2_LPM
[09:34:42] [PASSED] 30.00 Xe3_LPM
[09:34:42] [PASSED] 30.02 Xe3_LPM
[09:34:42] ================= [PASSED] check_media_ip ==================
[09:34:42] ================= check_platform_gt_count =================
[09:34:42] [PASSED] 0x9A60 (TIGERLAKE)
[09:34:42] [PASSED] 0x9A68 (TIGERLAKE)
[09:34:42] [PASSED] 0x9A70 (TIGERLAKE)
[09:34:42] [PASSED] 0x9A40 (TIGERLAKE)
[09:34:42] [PASSED] 0x9A49 (TIGERLAKE)
[09:34:42] [PASSED] 0x9A59 (TIGERLAKE)
[09:34:42] [PASSED] 0x9A78 (TIGERLAKE)
[09:34:42] [PASSED] 0x9AC0 (TIGERLAKE)
[09:34:42] [PASSED] 0x9AC9 (TIGERLAKE)
[09:34:42] [PASSED] 0x9AD9 (TIGERLAKE)
[09:34:42] [PASSED] 0x9AF8 (TIGERLAKE)
[09:34:42] [PASSED] 0x4C80 (ROCKETLAKE)
[09:34:42] [PASSED] 0x4C8A (ROCKETLAKE)
[09:34:42] [PASSED] 0x4C8B (ROCKETLAKE)
[09:34:42] [PASSED] 0x4C8C (ROCKETLAKE)
[09:34:42] [PASSED] 0x4C90 (ROCKETLAKE)
[09:34:42] [PASSED] 0x4C9A (ROCKETLAKE)
[09:34:42] [PASSED] 0x4680 (ALDERLAKE_S)
[09:34:42] [PASSED] 0x4682 (ALDERLAKE_S)
[09:34:42] [PASSED] 0x4688 (ALDERLAKE_S)
[09:34:42] [PASSED] 0x468A (ALDERLAKE_S)
[09:34:42] [PASSED] 0x468B (ALDERLAKE_S)
[09:34:42] [PASSED] 0x4690 (ALDERLAKE_S)
[09:34:42] [PASSED] 0x4692 (ALDERLAKE_S)
[09:34:42] [PASSED] 0x4693 (ALDERLAKE_S)
[09:34:42] [PASSED] 0x46A0 (ALDERLAKE_P)
[09:34:42] [PASSED] 0x46A1 (ALDERLAKE_P)
[09:34:42] [PASSED] 0x46A2 (ALDERLAKE_P)
[09:34:42] [PASSED] 0x46A3 (ALDERLAKE_P)
[09:34:42] [PASSED] 0x46A6 (ALDERLAKE_P)
[09:34:42] [PASSED] 0x46A8 (ALDERLAKE_P)
[09:34:42] [PASSED] 0x46AA (ALDERLAKE_P)
[09:34:42] [PASSED] 0x462A (ALDERLAKE_P)
[09:34:42] [PASSED] 0x4626 (ALDERLAKE_P)
[09:34:42] [PASSED] 0x4628 (ALDERLAKE_P)
[09:34:42] [PASSED] 0x46B0 (ALDERLAKE_P)
[09:34:42] [PASSED] 0x46B1 (ALDERLAKE_P)
[09:34:42] [PASSED] 0x46B2 (ALDERLAKE_P)
[09:34:42] [PASSED] 0x46B3 (ALDERLAKE_P)
[09:34:42] [PASSED] 0x46C0 (ALDERLAKE_P)
[09:34:42] [PASSED] 0x46C1 (ALDERLAKE_P)
[09:34:42] [PASSED] 0x46C2 (ALDERLAKE_P)
[09:34:42] [PASSED] 0x46C3 (ALDERLAKE_P)
[09:34:42] [PASSED] 0x46D0 (ALDERLAKE_N)
[09:34:42] [PASSED] 0x46D1 (ALDERLAKE_N)
[09:34:42] [PASSED] 0x46D2 (ALDERLAKE_N)
[09:34:42] [PASSED] 0x46D3 (ALDERLAKE_N)
[09:34:42] [PASSED] 0x46D4 (ALDERLAKE_N)
[09:34:42] [PASSED] 0xA721 (ALDERLAKE_P)
[09:34:42] [PASSED] 0xA7A1 (ALDERLAKE_P)
[09:34:42] [PASSED] 0xA7A9 (ALDERLAKE_P)
[09:34:42] [PASSED] 0xA7AC (ALDERLAKE_P)
[09:34:42] [PASSED] 0xA7AD (ALDERLAKE_P)
[09:34:42] [PASSED] 0xA720 (ALDERLAKE_P)
[09:34:42] [PASSED] 0xA7A0 (ALDERLAKE_P)
[09:34:42] [PASSED] 0xA7A8 (ALDERLAKE_P)
[09:34:42] [PASSED] 0xA7AA (ALDERLAKE_P)
[09:34:42] [PASSED] 0xA7AB (ALDERLAKE_P)
[09:34:42] [PASSED] 0xA780 (ALDERLAKE_S)
[09:34:42] [PASSED] 0xA781 (ALDERLAKE_S)
[09:34:42] [PASSED] 0xA782 (ALDERLAKE_S)
[09:34:42] [PASSED] 0xA783 (ALDERLAKE_S)
[09:34:42] [PASSED] 0xA788 (ALDERLAKE_S)
[09:34:42] [PASSED] 0xA789 (ALDERLAKE_S)
[09:34:42] [PASSED] 0xA78A (ALDERLAKE_S)
[09:34:42] [PASSED] 0xA78B (ALDERLAKE_S)
[09:34:42] [PASSED] 0x4905 (DG1)
[09:34:42] [PASSED] 0x4906 (DG1)
[09:34:42] [PASSED] 0x4907 (DG1)
[09:34:42] [PASSED] 0x4908 (DG1)
[09:34:42] [PASSED] 0x4909 (DG1)
[09:34:42] [PASSED] 0x56C0 (DG2)
[09:34:42] [PASSED] 0x56C2 (DG2)
[09:34:42] [PASSED] 0x56C1 (DG2)
[09:34:42] [PASSED] 0x7D51 (METEORLAKE)
[09:34:42] [PASSED] 0x7DD1 (METEORLAKE)
[09:34:42] [PASSED] 0x7D41 (METEORLAKE)
[09:34:42] [PASSED] 0x7D67 (METEORLAKE)
[09:34:42] [PASSED] 0xB640 (METEORLAKE)
[09:34:42] [PASSED] 0x56A0 (DG2)
[09:34:42] [PASSED] 0x56A1 (DG2)
[09:34:42] [PASSED] 0x56A2 (DG2)
[09:34:42] [PASSED] 0x56BE (DG2)
[09:34:42] [PASSED] 0x56BF (DG2)
[09:34:42] [PASSED] 0x5690 (DG2)
[09:34:42] [PASSED] 0x5691 (DG2)
[09:34:42] [PASSED] 0x5692 (DG2)
[09:34:42] [PASSED] 0x56A5 (DG2)
[09:34:42] [PASSED] 0x56A6 (DG2)
[09:34:42] [PASSED] 0x56B0 (DG2)
[09:34:42] [PASSED] 0x56B1 (DG2)
[09:34:42] [PASSED] 0x56BA (DG2)
[09:34:42] [PASSED] 0x56BB (DG2)
[09:34:42] [PASSED] 0x56BC (DG2)
[09:34:42] [PASSED] 0x56BD (DG2)
[09:34:42] [PASSED] 0x5693 (DG2)
[09:34:42] [PASSED] 0x5694 (DG2)
[09:34:42] [PASSED] 0x5695 (DG2)
[09:34:42] [PASSED] 0x56A3 (DG2)
[09:34:42] [PASSED] 0x56A4 (DG2)
[09:34:42] [PASSED] 0x56B2 (DG2)
[09:34:42] [PASSED] 0x56B3 (DG2)
[09:34:42] [PASSED] 0x5696 (DG2)
[09:34:42] [PASSED] 0x5697 (DG2)
[09:34:42] [PASSED] 0xB69 (PVC)
[09:34:42] [PASSED] 0xB6E (PVC)
[09:34:42] [PASSED] 0xBD4 (PVC)
[09:34:42] [PASSED] 0xBD5 (PVC)
[09:34:42] [PASSED] 0xBD6 (PVC)
[09:34:42] [PASSED] 0xBD7 (PVC)
[09:34:42] [PASSED] 0xBD8 (PVC)
[09:34:42] [PASSED] 0xBD9 (PVC)
[09:34:42] [PASSED] 0xBDA (PVC)
[09:34:42] [PASSED] 0xBDB (PVC)
[09:34:42] [PASSED] 0xBE0 (PVC)
[09:34:42] [PASSED] 0xBE1 (PVC)
[09:34:42] [PASSED] 0xBE5 (PVC)
[09:34:42] [PASSED] 0x7D40 (METEORLAKE)
[09:34:42] [PASSED] 0x7D45 (METEORLAKE)
[09:34:42] [PASSED] 0x7D55 (METEORLAKE)
[09:34:42] [PASSED] 0x7D60 (METEORLAKE)
[09:34:42] [PASSED] 0x7DD5 (METEORLAKE)
[09:34:42] [PASSED] 0x6420 (LUNARLAKE)
[09:34:42] [PASSED] 0x64A0 (LUNARLAKE)
[09:34:42] [PASSED] 0x64B0 (LUNARLAKE)
[09:34:42] [PASSED] 0xE202 (BATTLEMAGE)
[09:34:42] [PASSED] 0xE209 (BATTLEMAGE)
[09:34:42] [PASSED] 0xE20B (BATTLEMAGE)
[09:34:42] [PASSED] 0xE20C (BATTLEMAGE)
[09:34:42] [PASSED] 0xE20D (BATTLEMAGE)
[09:34:42] [PASSED] 0xE210 (BATTLEMAGE)
[09:34:42] [PASSED] 0xE211 (BATTLEMAGE)
[09:34:42] [PASSED] 0xE212 (BATTLEMAGE)
[09:34:42] [PASSED] 0xE216 (BATTLEMAGE)
[09:34:42] [PASSED] 0xE220 (BATTLEMAGE)
[09:34:42] [PASSED] 0xE221 (BATTLEMAGE)
[09:34:42] [PASSED] 0xE222 (BATTLEMAGE)
[09:34:42] [PASSED] 0xE223 (BATTLEMAGE)
[09:34:42] [PASSED] 0xB080 (PANTHERLAKE)
[09:34:42] [PASSED] 0xB081 (PANTHERLAKE)
[09:34:42] [PASSED] 0xB082 (PANTHERLAKE)
[09:34:42] [PASSED] 0xB083 (PANTHERLAKE)
[09:34:42] [PASSED] 0xB084 (PANTHERLAKE)
[09:34:42] [PASSED] 0xB085 (PANTHERLAKE)
[09:34:42] [PASSED] 0xB086 (PANTHERLAKE)
[09:34:42] [PASSED] 0xB087 (PANTHERLAKE)
[09:34:42] [PASSED] 0xB08F (PANTHERLAKE)
[09:34:42] [PASSED] 0xB090 (PANTHERLAKE)
[09:34:42] [PASSED] 0xB0A0 (PANTHERLAKE)
[09:34:42] [PASSED] 0xB0B0 (PANTHERLAKE)
[09:34:42] [PASSED] 0xFD80 (PANTHERLAKE)
[09:34:42] [PASSED] 0xFD81 (PANTHERLAKE)
[09:34:42] ============= [PASSED] check_platform_gt_count =============
[09:34:42] ===================== [PASSED] xe_pci ======================
[09:34:42] =================== xe_rtp (2 subtests) ====================
[09:34:42] =============== xe_rtp_process_to_sr_tests ================
[09:34:42] [PASSED] coalesce-same-reg
[09:34:42] [PASSED] no-match-no-add
[09:34:42] [PASSED] match-or
[09:34:42] [PASSED] match-or-xfail
[09:34:42] [PASSED] no-match-no-add-multiple-rules
[09:34:42] [PASSED] two-regs-two-entries
[09:34:42] [PASSED] clr-one-set-other
[09:34:42] [PASSED] set-field
[09:34:42] [PASSED] conflict-duplicate
[09:34:42] [PASSED] conflict-not-disjoint
[09:34:42] [PASSED] conflict-reg-type
[09:34:42] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[09:34:42] ================== xe_rtp_process_tests ===================
[09:34:42] [PASSED] active1
[09:34:42] [PASSED] active2
[09:34:42] [PASSED] active-inactive
[09:34:42] [PASSED] inactive-active
[09:34:42] [PASSED] inactive-1st_or_active-inactive
[09:34:42] [PASSED] inactive-2nd_or_active-inactive
[09:34:42] [PASSED] inactive-last_or_active-inactive
[09:34:42] [PASSED] inactive-no_or_active-inactive
[09:34:42] ============== [PASSED] xe_rtp_process_tests ===============
[09:34:42] ===================== [PASSED] xe_rtp ======================
[09:34:42] ==================== xe_wa (1 subtest) =====================
[09:34:42] ======================== xe_wa_gt =========================
[09:34:42] [PASSED] TIGERLAKE B0
[09:34:42] [PASSED] DG1 A0
[09:34:42] [PASSED] DG1 B0
[09:34:42] [PASSED] ALDERLAKE_S A0
[09:34:42] [PASSED] ALDERLAKE_S B0
stty: 'standard input': Inappropriate ioctl for device
[09:34:42] [PASSED] ALDERLAKE_S C0
[09:34:42] [PASSED] ALDERLAKE_S D0
[09:34:42] [PASSED] ALDERLAKE_P A0
[09:34:42] [PASSED] ALDERLAKE_P B0
[09:34:42] [PASSED] ALDERLAKE_P C0
[09:34:42] [PASSED] ALDERLAKE_S RPLS D0
[09:34:42] [PASSED] ALDERLAKE_P RPLU E0
[09:34:42] [PASSED] DG2 G10 C0
[09:34:42] [PASSED] DG2 G11 B1
[09:34:42] [PASSED] DG2 G12 A1
[09:34:42] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[09:34:42] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[09:34:42] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[09:34:42] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[09:34:42] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[09:34:42] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[09:34:42] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[09:34:42] ==================== [PASSED] xe_wa_gt =====================
[09:34:42] ====================== [PASSED] xe_wa ======================
[09:34:42] ============================================================
[09:34:42] Testing complete. Ran 306 tests: passed: 288, skipped: 18
[09:34:42] Elapsed time: 33.685s total, 4.257s configuring, 29.061s building, 0.328s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[09:34:42] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[09:34:44] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[09:35:07] Starting KUnit Kernel (1/1)...
[09:35:07] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[09:35:08] ============ drm_test_pick_cmdline (2 subtests) ============
[09:35:08] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[09:35:08] =============== drm_test_pick_cmdline_named ===============
[09:35:08] [PASSED] NTSC
[09:35:08] [PASSED] NTSC-J
[09:35:08] [PASSED] PAL
[09:35:08] [PASSED] PAL-M
[09:35:08] =========== [PASSED] drm_test_pick_cmdline_named ===========
[09:35:08] ============== [PASSED] drm_test_pick_cmdline ==============
[09:35:08] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[09:35:08] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[09:35:08] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[09:35:08] =========== drm_validate_clone_mode (2 subtests) ===========
[09:35:08] ============== drm_test_check_in_clone_mode ===============
[09:35:08] [PASSED] in_clone_mode
[09:35:08] [PASSED] not_in_clone_mode
[09:35:08] ========== [PASSED] drm_test_check_in_clone_mode ===========
[09:35:08] =============== drm_test_check_valid_clones ===============
[09:35:08] [PASSED] not_in_clone_mode
[09:35:08] [PASSED] valid_clone
[09:35:08] [PASSED] invalid_clone
[09:35:08] =========== [PASSED] drm_test_check_valid_clones ===========
[09:35:08] ============= [PASSED] drm_validate_clone_mode =============
[09:35:08] ============= drm_validate_modeset (1 subtest) =============
[09:35:08] [PASSED] drm_test_check_connector_changed_modeset
[09:35:08] ============== [PASSED] drm_validate_modeset ===============
[09:35:08] ====== drm_test_bridge_get_current_state (2 subtests) ======
[09:35:08] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[09:35:08] [PASSED] drm_test_drm_bridge_get_current_state_legacy
[09:35:08] ======== [PASSED] drm_test_bridge_get_current_state ========
[09:35:08] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[09:35:08] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[09:35:08] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[09:35:08] [PASSED] drm_test_drm_bridge_helper_reset_crtc_legacy
[09:35:08] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[09:35:08] ============== drm_bridge_alloc (2 subtests) ===============
[09:35:08] [PASSED] drm_test_drm_bridge_alloc_basic
[09:35:08] [PASSED] drm_test_drm_bridge_alloc_get_put
[09:35:08] ================ [PASSED] drm_bridge_alloc =================
[09:35:08] ================== drm_buddy (7 subtests) ==================
[09:35:08] [PASSED] drm_test_buddy_alloc_limit
[09:35:08] [PASSED] drm_test_buddy_alloc_optimistic
[09:35:08] [PASSED] drm_test_buddy_alloc_pessimistic
[09:35:08] [PASSED] drm_test_buddy_alloc_pathological
[09:35:08] [PASSED] drm_test_buddy_alloc_contiguous
[09:35:08] [PASSED] drm_test_buddy_alloc_clear
[09:35:08] [PASSED] drm_test_buddy_alloc_range_bias
[09:35:08] ==================== [PASSED] drm_buddy ====================
[09:35:08] ============= drm_cmdline_parser (40 subtests) =============
[09:35:08] [PASSED] drm_test_cmdline_force_d_only
[09:35:08] [PASSED] drm_test_cmdline_force_D_only_dvi
[09:35:08] [PASSED] drm_test_cmdline_force_D_only_hdmi
[09:35:08] [PASSED] drm_test_cmdline_force_D_only_not_digital
[09:35:08] [PASSED] drm_test_cmdline_force_e_only
[09:35:08] [PASSED] drm_test_cmdline_res
[09:35:08] [PASSED] drm_test_cmdline_res_vesa
[09:35:08] [PASSED] drm_test_cmdline_res_vesa_rblank
[09:35:08] [PASSED] drm_test_cmdline_res_rblank
[09:35:08] [PASSED] drm_test_cmdline_res_bpp
[09:35:08] [PASSED] drm_test_cmdline_res_refresh
[09:35:08] [PASSED] drm_test_cmdline_res_bpp_refresh
[09:35:08] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[09:35:08] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[09:35:08] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[09:35:08] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[09:35:08] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[09:35:08] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[09:35:08] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[09:35:08] [PASSED] drm_test_cmdline_res_margins_force_on
[09:35:08] [PASSED] drm_test_cmdline_res_vesa_margins
[09:35:08] [PASSED] drm_test_cmdline_name
[09:35:08] [PASSED] drm_test_cmdline_name_bpp
[09:35:08] [PASSED] drm_test_cmdline_name_option
[09:35:08] [PASSED] drm_test_cmdline_name_bpp_option
[09:35:08] [PASSED] drm_test_cmdline_rotate_0
[09:35:08] [PASSED] drm_test_cmdline_rotate_90
[09:35:08] [PASSED] drm_test_cmdline_rotate_180
[09:35:08] [PASSED] drm_test_cmdline_rotate_270
[09:35:08] [PASSED] drm_test_cmdline_hmirror
[09:35:08] [PASSED] drm_test_cmdline_vmirror
[09:35:08] [PASSED] drm_test_cmdline_margin_options
[09:35:08] [PASSED] drm_test_cmdline_multiple_options
[09:35:08] [PASSED] drm_test_cmdline_bpp_extra_and_option
[09:35:08] [PASSED] drm_test_cmdline_extra_and_option
[09:35:08] [PASSED] drm_test_cmdline_freestanding_options
[09:35:08] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[09:35:08] [PASSED] drm_test_cmdline_panel_orientation
[09:35:08] ================ drm_test_cmdline_invalid =================
[09:35:08] [PASSED] margin_only
[09:35:08] [PASSED] interlace_only
[09:35:08] [PASSED] res_missing_x
[09:35:08] [PASSED] res_missing_y
[09:35:08] [PASSED] res_bad_y
[09:35:08] [PASSED] res_missing_y_bpp
[09:35:08] [PASSED] res_bad_bpp
[09:35:08] [PASSED] res_bad_refresh
[09:35:08] [PASSED] res_bpp_refresh_force_on_off
[09:35:08] [PASSED] res_invalid_mode
[09:35:08] [PASSED] res_bpp_wrong_place_mode
[09:35:08] [PASSED] name_bpp_refresh
[09:35:08] [PASSED] name_refresh
[09:35:08] [PASSED] name_refresh_wrong_mode
[09:35:08] [PASSED] name_refresh_invalid_mode
[09:35:08] [PASSED] rotate_multiple
[09:35:08] [PASSED] rotate_invalid_val
[09:35:08] [PASSED] rotate_truncated
[09:35:08] [PASSED] invalid_option
[09:35:08] [PASSED] invalid_tv_option
[09:35:08] [PASSED] truncated_tv_option
[09:35:08] ============ [PASSED] drm_test_cmdline_invalid =============
[09:35:08] =============== drm_test_cmdline_tv_options ===============
[09:35:08] [PASSED] NTSC
[09:35:08] [PASSED] NTSC_443
[09:35:08] [PASSED] NTSC_J
[09:35:08] [PASSED] PAL
[09:35:08] [PASSED] PAL_M
[09:35:08] [PASSED] PAL_N
[09:35:08] [PASSED] SECAM
[09:35:08] [PASSED] MONO_525
[09:35:08] [PASSED] MONO_625
[09:35:08] =========== [PASSED] drm_test_cmdline_tv_options ===========
[09:35:08] =============== [PASSED] drm_cmdline_parser ================
[09:35:08] ========== drmm_connector_hdmi_init (20 subtests) ==========
[09:35:08] [PASSED] drm_test_connector_hdmi_init_valid
[09:35:08] [PASSED] drm_test_connector_hdmi_init_bpc_8
[09:35:08] [PASSED] drm_test_connector_hdmi_init_bpc_10
[09:35:08] [PASSED] drm_test_connector_hdmi_init_bpc_12
[09:35:08] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[09:35:08] [PASSED] drm_test_connector_hdmi_init_bpc_null
[09:35:08] [PASSED] drm_test_connector_hdmi_init_formats_empty
[09:35:08] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[09:35:08] === drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[09:35:08] [PASSED] supported_formats=0x9 yuv420_allowed=1
[09:35:08] [PASSED] supported_formats=0x9 yuv420_allowed=0
[09:35:08] [PASSED] supported_formats=0x3 yuv420_allowed=1
[09:35:08] [PASSED] supported_formats=0x3 yuv420_allowed=0
[09:35:08] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[09:35:08] [PASSED] drm_test_connector_hdmi_init_null_ddc
[09:35:08] [PASSED] drm_test_connector_hdmi_init_null_product
[09:35:08] [PASSED] drm_test_connector_hdmi_init_null_vendor
[09:35:08] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[09:35:08] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[09:35:08] [PASSED] drm_test_connector_hdmi_init_product_valid
[09:35:08] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[09:35:08] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[09:35:08] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[09:35:08] ========= drm_test_connector_hdmi_init_type_valid =========
[09:35:08] [PASSED] HDMI-A
[09:35:08] [PASSED] HDMI-B
[09:35:08] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[09:35:08] ======== drm_test_connector_hdmi_init_type_invalid ========
[09:35:08] [PASSED] Unknown
[09:35:08] [PASSED] VGA
[09:35:08] [PASSED] DVI-I
[09:35:08] [PASSED] DVI-D
[09:35:08] [PASSED] DVI-A
[09:35:08] [PASSED] Composite
[09:35:08] [PASSED] SVIDEO
[09:35:08] [PASSED] LVDS
[09:35:08] [PASSED] Component
[09:35:08] [PASSED] DIN
[09:35:08] [PASSED] DP
[09:35:08] [PASSED] TV
[09:35:08] [PASSED] eDP
[09:35:08] [PASSED] Virtual
[09:35:08] [PASSED] DSI
[09:35:08] [PASSED] DPI
[09:35:08] [PASSED] Writeback
[09:35:08] [PASSED] SPI
[09:35:08] [PASSED] USB
[09:35:08] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[09:35:08] ============ [PASSED] drmm_connector_hdmi_init =============
[09:35:08] ============= drmm_connector_init (3 subtests) =============
[09:35:08] [PASSED] drm_test_drmm_connector_init
[09:35:08] [PASSED] drm_test_drmm_connector_init_null_ddc
[09:35:08] ========= drm_test_drmm_connector_init_type_valid =========
[09:35:08] [PASSED] Unknown
[09:35:08] [PASSED] VGA
[09:35:08] [PASSED] DVI-I
[09:35:08] [PASSED] DVI-D
[09:35:08] [PASSED] DVI-A
[09:35:08] [PASSED] Composite
[09:35:08] [PASSED] SVIDEO
[09:35:08] [PASSED] LVDS
[09:35:08] [PASSED] Component
[09:35:08] [PASSED] DIN
[09:35:08] [PASSED] DP
[09:35:08] [PASSED] HDMI-A
[09:35:08] [PASSED] HDMI-B
[09:35:08] [PASSED] TV
[09:35:08] [PASSED] eDP
[09:35:08] [PASSED] Virtual
[09:35:08] [PASSED] DSI
[09:35:08] [PASSED] DPI
[09:35:08] [PASSED] Writeback
[09:35:08] [PASSED] SPI
[09:35:08] [PASSED] USB
[09:35:08] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[09:35:08] =============== [PASSED] drmm_connector_init ===============
[09:35:08] ========= drm_connector_dynamic_init (6 subtests) ==========
[09:35:08] [PASSED] drm_test_drm_connector_dynamic_init
[09:35:08] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[09:35:08] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[09:35:08] [PASSED] drm_test_drm_connector_dynamic_init_properties
[09:35:08] ===== drm_test_drm_connector_dynamic_init_type_valid ======
[09:35:08] [PASSED] Unknown
[09:35:08] [PASSED] VGA
[09:35:08] [PASSED] DVI-I
[09:35:08] [PASSED] DVI-D
[09:35:08] [PASSED] DVI-A
[09:35:08] [PASSED] Composite
[09:35:08] [PASSED] SVIDEO
[09:35:08] [PASSED] LVDS
[09:35:08] [PASSED] Component
[09:35:08] [PASSED] DIN
[09:35:08] [PASSED] DP
[09:35:08] [PASSED] HDMI-A
[09:35:08] [PASSED] HDMI-B
[09:35:08] [PASSED] TV
[09:35:08] [PASSED] eDP
[09:35:08] [PASSED] Virtual
[09:35:08] [PASSED] DSI
[09:35:08] [PASSED] DPI
[09:35:08] [PASSED] Writeback
[09:35:08] [PASSED] SPI
[09:35:08] [PASSED] USB
[09:35:08] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[09:35:08] ======== drm_test_drm_connector_dynamic_init_name =========
[09:35:08] [PASSED] Unknown
[09:35:08] [PASSED] VGA
[09:35:08] [PASSED] DVI-I
[09:35:08] [PASSED] DVI-D
[09:35:08] [PASSED] DVI-A
[09:35:08] [PASSED] Composite
[09:35:08] [PASSED] SVIDEO
[09:35:08] [PASSED] LVDS
[09:35:08] [PASSED] Component
[09:35:08] [PASSED] DIN
[09:35:08] [PASSED] DP
[09:35:08] [PASSED] HDMI-A
[09:35:08] [PASSED] HDMI-B
[09:35:08] [PASSED] TV
[09:35:08] [PASSED] eDP
[09:35:08] [PASSED] Virtual
[09:35:08] [PASSED] DSI
[09:35:08] [PASSED] DPI
[09:35:08] [PASSED] Writeback
[09:35:08] [PASSED] SPI
[09:35:08] [PASSED] USB
[09:35:08] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[09:35:08] =========== [PASSED] drm_connector_dynamic_init ============
[09:35:08] ==== drm_connector_dynamic_register_early (4 subtests) =====
[09:35:08] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[09:35:08] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[09:35:08] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[09:35:08] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[09:35:08] ====== [PASSED] drm_connector_dynamic_register_early =======
[09:35:08] ======= drm_connector_dynamic_register (7 subtests) ========
[09:35:08] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[09:35:08] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[09:35:08] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[09:35:08] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[09:35:08] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[09:35:08] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[09:35:08] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[09:35:08] ========= [PASSED] drm_connector_dynamic_register ==========
[09:35:08] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[09:35:08] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[09:35:08] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[09:35:08] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[09:35:08] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[09:35:08] ========== drm_test_get_tv_mode_from_name_valid ===========
[09:35:08] [PASSED] NTSC
[09:35:08] [PASSED] NTSC-443
[09:35:08] [PASSED] NTSC-J
[09:35:08] [PASSED] PAL
[09:35:08] [PASSED] PAL-M
[09:35:08] [PASSED] PAL-N
[09:35:08] [PASSED] SECAM
[09:35:08] [PASSED] Mono
[09:35:08] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[09:35:08] [PASSED] drm_test_get_tv_mode_from_name_truncated
[09:35:08] ============ [PASSED] drm_get_tv_mode_from_name ============
[09:35:08] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[09:35:08] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[09:35:08] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[09:35:08] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[09:35:08] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[09:35:08] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[09:35:08] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[09:35:08] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[09:35:08] [PASSED] VIC 96
[09:35:08] [PASSED] VIC 97
[09:35:08] [PASSED] VIC 101
[09:35:08] [PASSED] VIC 102
[09:35:08] [PASSED] VIC 106
[09:35:08] [PASSED] VIC 107
[09:35:08] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[09:35:08] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[09:35:08] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[09:35:08] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[09:35:08] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[09:35:08] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[09:35:08] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[09:35:08] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[09:35:08] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[09:35:08] [PASSED] Automatic
[09:35:08] [PASSED] Full
[09:35:08] [PASSED] Limited 16:235
[09:35:08] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[09:35:08] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[09:35:08] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[09:35:08] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[09:35:08] === drm_test_drm_hdmi_connector_get_output_format_name ====
[09:35:08] [PASSED] RGB
[09:35:08] [PASSED] YUV 4:2:0
[09:35:08] [PASSED] YUV 4:2:2
[09:35:08] [PASSED] YUV 4:4:4
[09:35:08] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[09:35:08] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[09:35:08] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[09:35:08] ============= drm_damage_helper (21 subtests) ==============
[09:35:08] [PASSED] drm_test_damage_iter_no_damage
[09:35:08] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[09:35:08] [PASSED] drm_test_damage_iter_no_damage_src_moved
[09:35:08] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[09:35:08] [PASSED] drm_test_damage_iter_no_damage_not_visible
[09:35:08] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[09:35:08] [PASSED] drm_test_damage_iter_no_damage_no_fb
[09:35:08] [PASSED] drm_test_damage_iter_simple_damage
[09:35:08] [PASSED] drm_test_damage_iter_single_damage
[09:35:08] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[09:35:08] [PASSED] drm_test_damage_iter_single_damage_outside_src
[09:35:08] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[09:35:08] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[09:35:08] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[09:35:08] [PASSED] drm_test_damage_iter_single_damage_src_moved
[09:35:08] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[09:35:08] [PASSED] drm_test_damage_iter_damage
[09:35:08] [PASSED] drm_test_damage_iter_damage_one_intersect
[09:35:08] [PASSED] drm_test_damage_iter_damage_one_outside
[09:35:08] [PASSED] drm_test_damage_iter_damage_src_moved
[09:35:08] [PASSED] drm_test_damage_iter_damage_not_visible
[09:35:08] ================ [PASSED] drm_damage_helper ================
[09:35:08] ============== drm_dp_mst_helper (3 subtests) ==============
[09:35:08] ============== drm_test_dp_mst_calc_pbn_mode ==============
[09:35:08] [PASSED] Clock 154000 BPP 30 DSC disabled
[09:35:08] [PASSED] Clock 234000 BPP 30 DSC disabled
[09:35:08] [PASSED] Clock 297000 BPP 24 DSC disabled
[09:35:08] [PASSED] Clock 332880 BPP 24 DSC enabled
[09:35:08] [PASSED] Clock 324540 BPP 24 DSC enabled
[09:35:08] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[09:35:08] ============== drm_test_dp_mst_calc_pbn_div ===============
[09:35:08] [PASSED] Link rate 2000000 lane count 4
[09:35:08] [PASSED] Link rate 2000000 lane count 2
[09:35:08] [PASSED] Link rate 2000000 lane count 1
[09:35:08] [PASSED] Link rate 1350000 lane count 4
[09:35:08] [PASSED] Link rate 1350000 lane count 2
[09:35:08] [PASSED] Link rate 1350000 lane count 1
[09:35:08] [PASSED] Link rate 1000000 lane count 4
[09:35:08] [PASSED] Link rate 1000000 lane count 2
[09:35:08] [PASSED] Link rate 1000000 lane count 1
[09:35:08] [PASSED] Link rate 810000 lane count 4
[09:35:08] [PASSED] Link rate 810000 lane count 2
[09:35:08] [PASSED] Link rate 810000 lane count 1
[09:35:08] [PASSED] Link rate 540000 lane count 4
[09:35:08] [PASSED] Link rate 540000 lane count 2
[09:35:08] [PASSED] Link rate 540000 lane count 1
[09:35:08] [PASSED] Link rate 270000 lane count 4
[09:35:08] [PASSED] Link rate 270000 lane count 2
[09:35:08] [PASSED] Link rate 270000 lane count 1
[09:35:08] [PASSED] Link rate 162000 lane count 4
[09:35:08] [PASSED] Link rate 162000 lane count 2
[09:35:08] [PASSED] Link rate 162000 lane count 1
[09:35:08] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[09:35:08] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[09:35:08] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[09:35:08] [PASSED] DP_POWER_UP_PHY with port number
[09:35:08] [PASSED] DP_POWER_DOWN_PHY with port number
[09:35:08] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[09:35:08] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[09:35:08] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[09:35:08] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[09:35:08] [PASSED] DP_QUERY_PAYLOAD with port number
[09:35:08] [PASSED] DP_QUERY_PAYLOAD with VCPI
[09:35:08] [PASSED] DP_REMOTE_DPCD_READ with port number
[09:35:08] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[09:35:08] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[09:35:08] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[09:35:08] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[09:35:08] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[09:35:08] [PASSED] DP_REMOTE_I2C_READ with port number
[09:35:08] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[09:35:08] [PASSED] DP_REMOTE_I2C_READ with transactions array
[09:35:08] [PASSED] DP_REMOTE_I2C_WRITE with port number
[09:35:08] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[09:35:08] [PASSED] DP_REMOTE_I2C_WRITE with data array
[09:35:08] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[09:35:08] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[09:35:08] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[09:35:08] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[09:35:08] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[09:35:08] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[09:35:08] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[09:35:08] ================ [PASSED] drm_dp_mst_helper ================
[09:35:08] ================== drm_exec (7 subtests) ===================
[09:35:08] [PASSED] sanitycheck
[09:35:08] [PASSED] test_lock
[09:35:08] [PASSED] test_lock_unlock
[09:35:08] [PASSED] test_duplicates
[09:35:08] [PASSED] test_prepare
[09:35:08] [PASSED] test_prepare_array
[09:35:08] [PASSED] test_multiple_loops
[09:35:08] ==================== [PASSED] drm_exec =====================
[09:35:08] =========== drm_format_helper_test (17 subtests) ===========
[09:35:08] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[09:35:08] [PASSED] single_pixel_source_buffer
[09:35:08] [PASSED] single_pixel_clip_rectangle
[09:35:08] [PASSED] well_known_colors
[09:35:08] [PASSED] destination_pitch
[09:35:08] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[09:35:08] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[09:35:08] [PASSED] single_pixel_source_buffer
[09:35:08] [PASSED] single_pixel_clip_rectangle
[09:35:08] [PASSED] well_known_colors
[09:35:08] [PASSED] destination_pitch
[09:35:08] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[09:35:08] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[09:35:08] [PASSED] single_pixel_source_buffer
[09:35:08] [PASSED] single_pixel_clip_rectangle
[09:35:08] [PASSED] well_known_colors
[09:35:08] [PASSED] destination_pitch
[09:35:08] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[09:35:08] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[09:35:08] [PASSED] single_pixel_source_buffer
[09:35:08] [PASSED] single_pixel_clip_rectangle
[09:35:08] [PASSED] well_known_colors
[09:35:08] [PASSED] destination_pitch
[09:35:08] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[09:35:08] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[09:35:08] [PASSED] single_pixel_source_buffer
[09:35:08] [PASSED] single_pixel_clip_rectangle
[09:35:08] [PASSED] well_known_colors
[09:35:08] [PASSED] destination_pitch
[09:35:08] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[09:35:08] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[09:35:08] [PASSED] single_pixel_source_buffer
[09:35:08] [PASSED] single_pixel_clip_rectangle
[09:35:08] [PASSED] well_known_colors
[09:35:08] [PASSED] destination_pitch
[09:35:08] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[09:35:08] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[09:35:08] [PASSED] single_pixel_source_buffer
[09:35:08] [PASSED] single_pixel_clip_rectangle
[09:35:08] [PASSED] well_known_colors
[09:35:08] [PASSED] destination_pitch
[09:35:08] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[09:35:08] ============= drm_test_fb_xrgb8888_to_bgr888 ==============
[09:35:08] [PASSED] single_pixel_source_buffer
[09:35:08] [PASSED] single_pixel_clip_rectangle
[09:35:08] [PASSED] well_known_colors
[09:35:08] [PASSED] destination_pitch
[09:35:08] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[09:35:08] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[09:35:08] [PASSED] single_pixel_source_buffer
[09:35:08] [PASSED] single_pixel_clip_rectangle
[09:35:08] [PASSED] well_known_colors
[09:35:08] [PASSED] destination_pitch
[09:35:08] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[09:35:08] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[09:35:08] [PASSED] single_pixel_source_buffer
[09:35:08] [PASSED] single_pixel_clip_rectangle
[09:35:08] [PASSED] well_known_colors
[09:35:08] [PASSED] destination_pitch
[09:35:08] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[09:35:08] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[09:35:08] [PASSED] single_pixel_source_buffer
[09:35:08] [PASSED] single_pixel_clip_rectangle
[09:35:08] [PASSED] well_known_colors
[09:35:08] [PASSED] destination_pitch
[09:35:08] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[09:35:08] ============== drm_test_fb_xrgb8888_to_mono ===============
[09:35:08] [PASSED] single_pixel_source_buffer
[09:35:08] [PASSED] single_pixel_clip_rectangle
[09:35:08] [PASSED] well_known_colors
[09:35:08] [PASSED] destination_pitch
[09:35:08] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[09:35:08] ==================== drm_test_fb_swab =====================
[09:35:08] [PASSED] single_pixel_source_buffer
[09:35:08] [PASSED] single_pixel_clip_rectangle
[09:35:08] [PASSED] well_known_colors
[09:35:08] [PASSED] destination_pitch
[09:35:08] ================ [PASSED] drm_test_fb_swab =================
[09:35:08] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[09:35:08] [PASSED] single_pixel_source_buffer
[09:35:08] [PASSED] single_pixel_clip_rectangle
[09:35:08] [PASSED] well_known_colors
[09:35:08] [PASSED] destination_pitch
[09:35:08] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[09:35:08] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[09:35:08] [PASSED] single_pixel_source_buffer
[09:35:08] [PASSED] single_pixel_clip_rectangle
[09:35:08] [PASSED] well_known_colors
[09:35:08] [PASSED] destination_pitch
[09:35:08] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[09:35:08] ================= drm_test_fb_clip_offset =================
[09:35:08] [PASSED] pass through
[09:35:08] [PASSED] horizontal offset
[09:35:08] [PASSED] vertical offset
[09:35:08] [PASSED] horizontal and vertical offset
[09:35:08] [PASSED] horizontal offset (custom pitch)
[09:35:08] [PASSED] vertical offset (custom pitch)
[09:35:08] [PASSED] horizontal and vertical offset (custom pitch)
[09:35:08] ============= [PASSED] drm_test_fb_clip_offset =============
[09:35:08] =================== drm_test_fb_memcpy ====================
[09:35:08] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[09:35:08] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[09:35:08] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[09:35:08] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[09:35:08] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[09:35:08] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[09:35:08] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[09:35:08] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[09:35:08] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[09:35:08] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[09:35:08] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[09:35:08] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[09:35:08] =============== [PASSED] drm_test_fb_memcpy ================
[09:35:08] ============= [PASSED] drm_format_helper_test ==============
[09:35:08] ================= drm_format (18 subtests) =================
[09:35:08] [PASSED] drm_test_format_block_width_invalid
[09:35:08] [PASSED] drm_test_format_block_width_one_plane
[09:35:08] [PASSED] drm_test_format_block_width_two_plane
[09:35:08] [PASSED] drm_test_format_block_width_three_plane
[09:35:08] [PASSED] drm_test_format_block_width_tiled
[09:35:08] [PASSED] drm_test_format_block_height_invalid
[09:35:08] [PASSED] drm_test_format_block_height_one_plane
[09:35:08] [PASSED] drm_test_format_block_height_two_plane
[09:35:08] [PASSED] drm_test_format_block_height_three_plane
[09:35:08] [PASSED] drm_test_format_block_height_tiled
[09:35:08] [PASSED] drm_test_format_min_pitch_invalid
[09:35:08] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[09:35:08] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[09:35:08] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[09:35:08] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[09:35:08] [PASSED] drm_test_format_min_pitch_two_plane
[09:35:08] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[09:35:08] [PASSED] drm_test_format_min_pitch_tiled
[09:35:08] =================== [PASSED] drm_format ====================
[09:35:08] ============== drm_framebuffer (10 subtests) ===============
[09:35:08] ========== drm_test_framebuffer_check_src_coords ==========
[09:35:08] [PASSED] Success: source fits into fb
[09:35:08] [PASSED] Fail: overflowing fb with x-axis coordinate
[09:35:08] [PASSED] Fail: overflowing fb with y-axis coordinate
[09:35:08] [PASSED] Fail: overflowing fb with source width
[09:35:08] [PASSED] Fail: overflowing fb with source height
[09:35:08] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[09:35:08] [PASSED] drm_test_framebuffer_cleanup
[09:35:08] =============== drm_test_framebuffer_create ===============
[09:35:08] [PASSED] ABGR8888 normal sizes
[09:35:08] [PASSED] ABGR8888 max sizes
[09:35:08] [PASSED] ABGR8888 pitch greater than min required
[09:35:08] [PASSED] ABGR8888 pitch less than min required
[09:35:08] [PASSED] ABGR8888 Invalid width
[09:35:08] [PASSED] ABGR8888 Invalid buffer handle
[09:35:08] [PASSED] No pixel format
[09:35:08] [PASSED] ABGR8888 Width 0
[09:35:08] [PASSED] ABGR8888 Height 0
[09:35:08] [PASSED] ABGR8888 Out of bound height * pitch combination
[09:35:08] [PASSED] ABGR8888 Large buffer offset
[09:35:08] [PASSED] ABGR8888 Buffer offset for inexistent plane
[09:35:08] [PASSED] ABGR8888 Invalid flag
[09:35:08] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[09:35:08] [PASSED] ABGR8888 Valid buffer modifier
[09:35:08] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[09:35:08] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[09:35:08] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[09:35:08] [PASSED] NV12 Normal sizes
[09:35:08] [PASSED] NV12 Max sizes
[09:35:08] [PASSED] NV12 Invalid pitch
[09:35:08] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[09:35:08] [PASSED] NV12 different modifier per-plane
[09:35:08] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[09:35:08] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[09:35:08] [PASSED] NV12 Modifier for inexistent plane
[09:35:08] [PASSED] NV12 Handle for inexistent plane
[09:35:08] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[09:35:08] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[09:35:08] [PASSED] YVU420 Normal sizes
[09:35:08] [PASSED] YVU420 Max sizes
[09:35:08] [PASSED] YVU420 Invalid pitch
[09:35:08] [PASSED] YVU420 Different pitches
[09:35:08] [PASSED] YVU420 Different buffer offsets/pitches
[09:35:08] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[09:35:08] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[09:35:08] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[09:35:08] [PASSED] YVU420 Valid modifier
[09:35:08] [PASSED] YVU420 Different modifiers per plane
[09:35:08] [PASSED] YVU420 Modifier for inexistent plane
[09:35:08] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[09:35:08] [PASSED] X0L2 Normal sizes
[09:35:08] [PASSED] X0L2 Max sizes
[09:35:08] [PASSED] X0L2 Invalid pitch
[09:35:08] [PASSED] X0L2 Pitch greater than minimum required
[09:35:08] [PASSED] X0L2 Handle for inexistent plane
[09:35:08] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[09:35:08] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[09:35:08] [PASSED] X0L2 Valid modifier
[09:35:08] [PASSED] X0L2 Modifier for inexistent plane
[09:35:08] =========== [PASSED] drm_test_framebuffer_create ===========
[09:35:08] [PASSED] drm_test_framebuffer_free
[09:35:08] [PASSED] drm_test_framebuffer_init
[09:35:08] [PASSED] drm_test_framebuffer_init_bad_format
[09:35:08] [PASSED] drm_test_framebuffer_init_dev_mismatch
[09:35:08] [PASSED] drm_test_framebuffer_lookup
[09:35:08] [PASSED] drm_test_framebuffer_lookup_inexistent
[09:35:08] [PASSED] drm_test_framebuffer_modifiers_not_supported
[09:35:08] ================= [PASSED] drm_framebuffer =================
[09:35:08] ================ drm_gem_shmem (8 subtests) ================
[09:35:08] [PASSED] drm_gem_shmem_test_obj_create
[09:35:08] [PASSED] drm_gem_shmem_test_obj_create_private
[09:35:08] [PASSED] drm_gem_shmem_test_pin_pages
[09:35:08] [PASSED] drm_gem_shmem_test_vmap
[09:35:08] [PASSED] drm_gem_shmem_test_get_pages_sgt
[09:35:08] [PASSED] drm_gem_shmem_test_get_sg_table
[09:35:08] [PASSED] drm_gem_shmem_test_madvise
[09:35:08] [PASSED] drm_gem_shmem_test_purge
[09:35:08] ================== [PASSED] drm_gem_shmem ==================
[09:35:08] === drm_atomic_helper_connector_hdmi_check (27 subtests) ===
[09:35:08] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[09:35:08] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[09:35:08] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[09:35:08] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[09:35:08] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[09:35:08] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[09:35:08] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 =======
[09:35:08] [PASSED] Automatic
[09:35:08] [PASSED] Full
[09:35:08] [PASSED] Limited 16:235
[09:35:08] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[09:35:08] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[09:35:08] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[09:35:08] [PASSED] drm_test_check_disable_connector
[09:35:08] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[09:35:08] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[09:35:08] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[09:35:08] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[09:35:08] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[09:35:08] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[09:35:08] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[09:35:08] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[09:35:08] [PASSED] drm_test_check_output_bpc_dvi
[09:35:08] [PASSED] drm_test_check_output_bpc_format_vic_1
[09:35:08] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[09:35:08] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[09:35:08] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[09:35:08] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[09:35:08] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[09:35:08] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[09:35:08] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[09:35:08] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[09:35:08] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[09:35:08] [PASSED] drm_test_check_broadcast_rgb_value
[09:35:08] [PASSED] drm_test_check_bpc_8_value
[09:35:08] [PASSED] drm_test_check_bpc_10_value
[09:35:08] [PASSED] drm_test_check_bpc_12_value
[09:35:08] [PASSED] drm_test_check_format_value
[09:35:08] [PASSED] drm_test_check_tmds_char_value
[09:35:08] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[09:35:08] = drm_atomic_helper_connector_hdmi_mode_valid (4 subtests) =
[09:35:08] [PASSED] drm_test_check_mode_valid
[09:35:08] [PASSED] drm_test_check_mode_valid_reject
[09:35:08] [PASSED] drm_test_check_mode_valid_reject_rate
[09:35:08] [PASSED] drm_test_check_mode_valid_reject_max_clock
[09:35:08] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[09:35:08] ================= drm_managed (2 subtests) =================
[09:35:08] [PASSED] drm_test_managed_release_action
[09:35:08] [PASSED] drm_test_managed_run_action
[09:35:08] =================== [PASSED] drm_managed ===================
[09:35:08] =================== drm_mm (6 subtests) ====================
[09:35:08] [PASSED] drm_test_mm_init
[09:35:08] [PASSED] drm_test_mm_debug
[09:35:08] [PASSED] drm_test_mm_align32
[09:35:08] [PASSED] drm_test_mm_align64
[09:35:08] [PASSED] drm_test_mm_lowest
[09:35:08] [PASSED] drm_test_mm_highest
[09:35:08] ===================== [PASSED] drm_mm ======================
[09:35:08] ============= drm_modes_analog_tv (5 subtests) =============
[09:35:08] [PASSED] drm_test_modes_analog_tv_mono_576i
[09:35:08] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[09:35:08] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[09:35:08] [PASSED] drm_test_modes_analog_tv_pal_576i
[09:35:08] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[09:35:08] =============== [PASSED] drm_modes_analog_tv ===============
[09:35:08] ============== drm_plane_helper (2 subtests) ===============
[09:35:08] =============== drm_test_check_plane_state ================
[09:35:08] [PASSED] clipping_simple
[09:35:08] [PASSED] clipping_rotate_reflect
[09:35:08] [PASSED] positioning_simple
[09:35:08] [PASSED] upscaling
[09:35:08] [PASSED] downscaling
[09:35:08] [PASSED] rounding1
[09:35:08] [PASSED] rounding2
[09:35:08] [PASSED] rounding3
[09:35:08] [PASSED] rounding4
[09:35:08] =========== [PASSED] drm_test_check_plane_state ============
[09:35:08] =========== drm_test_check_invalid_plane_state ============
[09:35:08] [PASSED] positioning_invalid
[09:35:08] [PASSED] upscaling_invalid
[09:35:08] [PASSED] downscaling_invalid
[09:35:08] ======= [PASSED] drm_test_check_invalid_plane_state ========
[09:35:08] ================ [PASSED] drm_plane_helper =================
[09:35:08] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[09:35:08] ====== drm_test_connector_helper_tv_get_modes_check =======
[09:35:08] [PASSED] None
[09:35:08] [PASSED] PAL
[09:35:08] [PASSED] NTSC
[09:35:08] [PASSED] Both, NTSC Default
[09:35:08] [PASSED] Both, PAL Default
[09:35:08] [PASSED] Both, NTSC Default, with PAL on command-line
[09:35:08] [PASSED] Both, PAL Default, with NTSC on command-line
[09:35:08] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[09:35:08] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[09:35:08] ================== drm_rect (9 subtests) ===================
[09:35:08] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[09:35:08] [PASSED] drm_test_rect_clip_scaled_not_clipped
[09:35:08] [PASSED] drm_test_rect_clip_scaled_clipped
[09:35:08] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[09:35:08] ================= drm_test_rect_intersect =================
[09:35:08] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[09:35:08] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[09:35:08] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[09:35:08] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[09:35:08] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[09:35:08] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[09:35:08] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[09:35:08] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[09:35:08] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[09:35:08] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[09:35:08] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[09:35:08] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[09:35:08] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[09:35:08] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[09:35:08] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[09:35:08] ============= [PASSED] drm_test_rect_intersect =============
[09:35:08] ================ drm_test_rect_calc_hscale ================
[09:35:08] [PASSED] normal use
[09:35:08] [PASSED] out of max range
[09:35:08] [PASSED] out of min range
[09:35:08] [PASSED] zero dst
[09:35:08] [PASSED] negative src
[09:35:08] [PASSED] negative dst
[09:35:08] ============ [PASSED] drm_test_rect_calc_hscale ============
[09:35:08] ================ drm_test_rect_calc_vscale ================
[09:35:08] [PASSED] normal use
[09:35:08] [PASSED] out of max range
[09:35:08] [PASSED] out of min range
[09:35:08] [PASSED] zero dst
[09:35:08] [PASSED] negative src
stty: 'standard input': Inappropriate ioctl for device
[09:35:08] [PASSED] negative dst
[09:35:08] ============ [PASSED] drm_test_rect_calc_vscale ============
[09:35:08] ================== drm_test_rect_rotate ===================
[09:35:08] [PASSED] reflect-x
[09:35:08] [PASSED] reflect-y
[09:35:08] [PASSED] rotate-0
[09:35:08] [PASSED] rotate-90
[09:35:08] [PASSED] rotate-180
[09:35:08] [PASSED] rotate-270
[09:35:08] ============== [PASSED] drm_test_rect_rotate ===============
[09:35:08] ================ drm_test_rect_rotate_inv =================
[09:35:08] [PASSED] reflect-x
[09:35:08] [PASSED] reflect-y
[09:35:08] [PASSED] rotate-0
[09:35:08] [PASSED] rotate-90
[09:35:08] [PASSED] rotate-180
[09:35:08] [PASSED] rotate-270
[09:35:08] ============ [PASSED] drm_test_rect_rotate_inv =============
[09:35:08] ==================== [PASSED] drm_rect =====================
[09:35:08] ============ drm_sysfb_modeset_test (1 subtest) ============
[09:35:08] ============ drm_test_sysfb_build_fourcc_list =============
[09:35:08] [PASSED] no native formats
[09:35:08] [PASSED] XRGB8888 as native format
[09:35:08] [PASSED] remove duplicates
[09:35:08] [PASSED] convert alpha formats
[09:35:08] [PASSED] random formats
[09:35:08] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[09:35:08] ============= [PASSED] drm_sysfb_modeset_test ==============
[09:35:08] ============================================================
[09:35:08] Testing complete. Ran 621 tests: passed: 621
[09:35:08] Elapsed time: 25.545s total, 1.733s configuring, 23.593s building, 0.182s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[09:35:08] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[09:35:09] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[09:35:19] Starting KUnit Kernel (1/1)...
[09:35:19] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[09:35:19] ================= ttm_device (5 subtests) ==================
[09:35:19] [PASSED] ttm_device_init_basic
[09:35:19] [PASSED] ttm_device_init_multiple
[09:35:19] [PASSED] ttm_device_fini_basic
[09:35:19] [PASSED] ttm_device_init_no_vma_man
[09:35:19] ================== ttm_device_init_pools ==================
[09:35:19] [PASSED] No DMA allocations, no DMA32 required
[09:35:19] [PASSED] DMA allocations, DMA32 required
[09:35:19] [PASSED] No DMA allocations, DMA32 required
[09:35:19] [PASSED] DMA allocations, no DMA32 required
[09:35:19] ============== [PASSED] ttm_device_init_pools ==============
[09:35:19] =================== [PASSED] ttm_device ====================
[09:35:19] ================== ttm_pool (8 subtests) ===================
[09:35:19] ================== ttm_pool_alloc_basic ===================
[09:35:19] [PASSED] One page
[09:35:19] [PASSED] More than one page
[09:35:19] [PASSED] Above the allocation limit
[09:35:19] [PASSED] One page, with coherent DMA mappings enabled
[09:35:19] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[09:35:19] ============== [PASSED] ttm_pool_alloc_basic ===============
[09:35:19] ============== ttm_pool_alloc_basic_dma_addr ==============
[09:35:19] [PASSED] One page
[09:35:19] [PASSED] More than one page
[09:35:19] [PASSED] Above the allocation limit
[09:35:19] [PASSED] One page, with coherent DMA mappings enabled
[09:35:19] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[09:35:19] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[09:35:19] [PASSED] ttm_pool_alloc_order_caching_match
[09:35:19] [PASSED] ttm_pool_alloc_caching_mismatch
[09:35:19] [PASSED] ttm_pool_alloc_order_mismatch
[09:35:19] [PASSED] ttm_pool_free_dma_alloc
[09:35:19] [PASSED] ttm_pool_free_no_dma_alloc
[09:35:19] [PASSED] ttm_pool_fini_basic
[09:35:19] ==================== [PASSED] ttm_pool =====================
[09:35:19] ================ ttm_resource (8 subtests) =================
[09:35:19] ================= ttm_resource_init_basic =================
[09:35:19] [PASSED] Init resource in TTM_PL_SYSTEM
[09:35:19] [PASSED] Init resource in TTM_PL_VRAM
[09:35:19] [PASSED] Init resource in a private placement
[09:35:19] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[09:35:19] ============= [PASSED] ttm_resource_init_basic =============
[09:35:19] [PASSED] ttm_resource_init_pinned
[09:35:19] [PASSED] ttm_resource_fini_basic
[09:35:19] [PASSED] ttm_resource_manager_init_basic
[09:35:19] [PASSED] ttm_resource_manager_usage_basic
[09:35:19] [PASSED] ttm_resource_manager_set_used_basic
[09:35:19] [PASSED] ttm_sys_man_alloc_basic
[09:35:19] [PASSED] ttm_sys_man_free_basic
[09:35:19] ================== [PASSED] ttm_resource ===================
[09:35:19] =================== ttm_tt (15 subtests) ===================
[09:35:19] ==================== ttm_tt_init_basic ====================
[09:35:19] [PASSED] Page-aligned size
[09:35:19] [PASSED] Extra pages requested
[09:35:19] ================ [PASSED] ttm_tt_init_basic ================
[09:35:19] [PASSED] ttm_tt_init_misaligned
[09:35:19] [PASSED] ttm_tt_fini_basic
[09:35:19] [PASSED] ttm_tt_fini_sg
[09:35:19] [PASSED] ttm_tt_fini_shmem
[09:35:19] [PASSED] ttm_tt_create_basic
[09:35:19] [PASSED] ttm_tt_create_invalid_bo_type
[09:35:19] [PASSED] ttm_tt_create_ttm_exists
[09:35:19] [PASSED] ttm_tt_create_failed
[09:35:19] [PASSED] ttm_tt_destroy_basic
[09:35:19] [PASSED] ttm_tt_populate_null_ttm
[09:35:19] [PASSED] ttm_tt_populate_populated_ttm
[09:35:19] [PASSED] ttm_tt_unpopulate_basic
[09:35:19] [PASSED] ttm_tt_unpopulate_empty_ttm
[09:35:19] [PASSED] ttm_tt_swapin_basic
[09:35:19] ===================== [PASSED] ttm_tt ======================
[09:35:19] =================== ttm_bo (14 subtests) ===================
[09:35:19] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[09:35:19] [PASSED] Cannot be interrupted and sleeps
[09:35:19] [PASSED] Cannot be interrupted, locks straight away
[09:35:19] [PASSED] Can be interrupted, sleeps
[09:35:19] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[09:35:19] [PASSED] ttm_bo_reserve_locked_no_sleep
[09:35:19] [PASSED] ttm_bo_reserve_no_wait_ticket
[09:35:19] [PASSED] ttm_bo_reserve_double_resv
[09:35:19] [PASSED] ttm_bo_reserve_interrupted
[09:35:19] [PASSED] ttm_bo_reserve_deadlock
[09:35:19] [PASSED] ttm_bo_unreserve_basic
[09:35:19] [PASSED] ttm_bo_unreserve_pinned
[09:35:19] [PASSED] ttm_bo_unreserve_bulk
[09:35:19] [PASSED] ttm_bo_fini_basic
[09:35:19] [PASSED] ttm_bo_fini_shared_resv
[09:35:19] [PASSED] ttm_bo_pin_basic
[09:35:19] [PASSED] ttm_bo_pin_unpin_resource
[09:35:19] [PASSED] ttm_bo_multiple_pin_one_unpin
[09:35:19] ===================== [PASSED] ttm_bo ======================
[09:35:19] ============== ttm_bo_validate (21 subtests) ===============
[09:35:19] ============== ttm_bo_init_reserved_sys_man ===============
[09:35:19] [PASSED] Buffer object for userspace
[09:35:19] [PASSED] Kernel buffer object
[09:35:19] [PASSED] Shared buffer object
[09:35:19] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[09:35:19] ============== ttm_bo_init_reserved_mock_man ==============
[09:35:19] [PASSED] Buffer object for userspace
[09:35:19] [PASSED] Kernel buffer object
[09:35:19] [PASSED] Shared buffer object
[09:35:19] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[09:35:19] [PASSED] ttm_bo_init_reserved_resv
[09:35:19] ================== ttm_bo_validate_basic ==================
[09:35:19] [PASSED] Buffer object for userspace
[09:35:19] [PASSED] Kernel buffer object
[09:35:19] [PASSED] Shared buffer object
[09:35:19] ============== [PASSED] ttm_bo_validate_basic ==============
[09:35:19] [PASSED] ttm_bo_validate_invalid_placement
[09:35:19] ============= ttm_bo_validate_same_placement ==============
[09:35:19] [PASSED] System manager
[09:35:19] [PASSED] VRAM manager
[09:35:19] ========= [PASSED] ttm_bo_validate_same_placement ==========
[09:35:19] [PASSED] ttm_bo_validate_failed_alloc
[09:35:19] [PASSED] ttm_bo_validate_pinned
[09:35:19] [PASSED] ttm_bo_validate_busy_placement
[09:35:19] ================ ttm_bo_validate_multihop =================
[09:35:19] [PASSED] Buffer object for userspace
[09:35:19] [PASSED] Kernel buffer object
[09:35:19] [PASSED] Shared buffer object
[09:35:19] ============ [PASSED] ttm_bo_validate_multihop =============
[09:35:19] ========== ttm_bo_validate_no_placement_signaled ==========
[09:35:19] [PASSED] Buffer object in system domain, no page vector
[09:35:19] [PASSED] Buffer object in system domain with an existing page vector
[09:35:19] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[09:35:19] ======== ttm_bo_validate_no_placement_not_signaled ========
[09:35:19] [PASSED] Buffer object for userspace
[09:35:19] [PASSED] Kernel buffer object
[09:35:19] [PASSED] Shared buffer object
[09:35:19] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[09:35:19] [PASSED] ttm_bo_validate_move_fence_signaled
[09:35:19] ========= ttm_bo_validate_move_fence_not_signaled =========
[09:35:19] [PASSED] Waits for GPU
[09:35:19] [PASSED] Tries to lock straight away
[09:35:19] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[09:35:19] [PASSED] ttm_bo_validate_happy_evict
[09:35:19] [PASSED] ttm_bo_validate_all_pinned_evict
[09:35:19] [PASSED] ttm_bo_validate_allowed_only_evict
[09:35:19] [PASSED] ttm_bo_validate_deleted_evict
[09:35:19] [PASSED] ttm_bo_validate_busy_domain_evict
[09:35:19] [PASSED] ttm_bo_validate_evict_gutting
[09:35:19] [PASSED] ttm_bo_validate_recrusive_evict
stty: 'standard input': Inappropriate ioctl for device
[09:35:19] ================= [PASSED] ttm_bo_validate =================
[09:35:19] ============================================================
[09:35:19] Testing complete. Ran 101 tests: passed: 101
[09:35:19] Elapsed time: 11.259s total, 1.718s configuring, 9.224s building, 0.298s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 21+ messages in thread
* ✗ CI.checksparse: warning for dma-buf private interconnect POC (rev2)
2025-09-26 8:46 [RFC PATCH v2 0/2] dma-buf private interconnect POC Thomas Hellström
` (3 preceding siblings ...)
2025-09-26 9:35 ` ✓ CI.KUnit: success " Patchwork
@ 2025-09-26 9:50 ` Patchwork
2025-09-26 10:11 ` ✓ Xe.CI.BAT: success " Patchwork
2025-09-26 14:23 ` ✗ Xe.CI.Full: failure " Patchwork
6 siblings, 0 replies; 21+ messages in thread
From: Patchwork @ 2025-09-26 9:50 UTC (permalink / raw)
To: Thomas Hellström; +Cc: intel-xe
== Series Details ==
Series: dma-buf private interconnect POC (rev2)
URL : https://patchwork.freedesktop.org/series/155043/
State : warning
== Summary ==
+ trap cleanup EXIT
+ KERNEL=/kernel
+ MT=/root/linux/maintainer-tools
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools /root/linux/maintainer-tools
Cloning into '/root/linux/maintainer-tools'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ make -C /root/linux/maintainer-tools
make: Entering directory '/root/linux/maintainer-tools'
cc -O2 -g -Wextra -o remap-log remap-log.c
make: Leaving directory '/root/linux/maintainer-tools'
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ /root/linux/maintainer-tools/dim sparse --fast d557b14c00c4ab027e66c1c7bf512cf479ff8c24
Sparse version: 0.6.4 (Ubuntu: 0.6.4-4ubuntu3)
Fast mode used, each commit won't be checked separately.
-
+drivers/gpu/drm/i915/display/intel_cdclk.c: note: in included file:
+drivers/gpu/drm/i915/display/intel_display_types.h:2026:24: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/display/intel_display_types.h:2026:24: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/display/intel_display_types.h:2026:24: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/display/intel_display_types.h:2026:24: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/display/intel_display_types.h:2026:24: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/display/intel_hotplug.c: note: in included file:
+drivers/gpu/drm/i915/display/intel_psr.c: note: in included file:
+drivers/gpu/drm/i915/gt/intel_reset.c:1569:12: warning: context imbalance in '_intel_gt_reset_lock' - different lock contexts for basic block
+drivers/gpu/drm/i915/gt/intel_sseu.c:598:17: error: too long token expansion
+drivers/gpu/drm/i915/i915_active.c:1062:16: warning: context imbalance in '__i915_active_fence_set' - different lock contexts for basic block
+drivers/gpu/drm/i915/i915_drm_client.c:92:9: error: incompatible types in comparison expression (different address spaces):
+drivers/gpu/drm/i915/i915_drm_client.c:92:9: error: incompatible types in comparison expression (different address spaces):
+drivers/gpu/drm/i915/i915_drm_client.c:92:9: expected struct list_head const *list
+drivers/gpu/drm/i915/i915_drm_client.c:92:9: got struct list_head [noderef] __rcu *pos
+drivers/gpu/drm/i915/i915_drm_client.c:92:9: struct list_head *
+drivers/gpu/drm/i915/i915_drm_client.c:92:9: struct list_head *
+drivers/gpu/drm/i915/i915_drm_client.c:92:9: struct list_head [noderef] __rcu *
+drivers/gpu/drm/i915/i915_drm_client.c:92:9: struct list_head [noderef] __rcu *
+drivers/gpu/drm/i915/i915_drm_client.c:92:9: warning: incorrect type in argument 1 (different address spaces)
+drivers/gpu/drm/i915/i915_gpu_error.c:692:3: warning: symbol 'guc_hw_reg_state' was not declared. Should it be static?
+drivers/gpu/drm/i915/i915_irq.c:466:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:466:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:474:16: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:474:16: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:479:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:479:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:479:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:517:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:517:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:525:16: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:525:16: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:530:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:530:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:530:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:574:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:574:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:577:15: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:577:15: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:581:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:581:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:588:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:588:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:588:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:588:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/intel_uncore.c:1928:1: warning: context imbalance in 'fwtable_read8' - unexpected unlock
+drivers/gpu/drm/i915/intel_uncore.c:1929:1: warning: context imbalance in 'fwtable_read16' - unexpected unlock
+drivers/gpu/drm/i915/intel_uncore.c:1930:1: warning: context imbalance in 'fwtable_read32' - unexpected unlock
+drivers/gpu/drm/i915/intel_uncore.c:1931:1: warning: context imbalance in 'fwtable_read64' - unexpected unlock
+drivers/gpu/drm/i915/intel_uncore.c:1996:1: warning: context imbalance in 'gen6_write8' - unexpected unlock
+drivers/gpu/drm/i915/intel_uncore.c:1997:1: warning: context imbalance in 'gen6_write16' - unexpected unlock
+drivers/gpu/drm/i915/intel_uncore.c:1998:1: warning: context imbalance in 'gen6_write32' - unexpected unlock
+drivers/gpu/drm/i915/intel_uncore.c:2018:1: warning: context imbalance in 'fwtable_write8' - unexpected unlock
+drivers/gpu/drm/i915/intel_uncore.c:2019:1: warning: context imbalance in 'fwtable_write16' - unexpected unlock
+drivers/gpu/drm/i915/intel_uncore.c:2020:1: warning: context imbalance in 'fwtable_write32' - unexpected unlock
+drivers/gpu/drm/i915/intel_wakeref.c:146:19: warning: context imbalance in 'wakeref_auto_timeout' - unexpected unlock
+drivers/gpu/drm/ttm/ttm_bo.c:1198:31: warning: symbol 'ttm_swap_ops' was not declared. Should it be static?
+drivers/gpu/drm/ttm/ttm_bo_util.c:329:38: expected void *virtual
+drivers/gpu/drm/ttm/ttm_bo_util.c:329:38: got void [noderef] __iomem *
+drivers/gpu/drm/ttm/ttm_bo_util.c:329:38: warning: incorrect type in assignment (different address spaces)
+drivers/gpu/drm/ttm/ttm_bo_util.c:332:38: expected void *virtual
+drivers/gpu/drm/ttm/ttm_bo_util.c:332:38: got void [noderef] __iomem *
+drivers/gpu/drm/ttm/ttm_bo_util.c:332:38: warning: incorrect type in assignment (different address spaces)
+drivers/gpu/drm/ttm/ttm_bo_util.c:335:38: expected void *virtual
+drivers/gpu/drm/ttm/ttm_bo_util.c:335:38: got void [noderef] __iomem *
+drivers/gpu/drm/ttm/ttm_bo_util.c:335:38: warning: incorrect type in assignment (different address spaces)
+drivers/gpu/drm/ttm/ttm_bo_util.c:467:28: expected void volatile [noderef] __iomem *addr
+drivers/gpu/drm/ttm/ttm_bo_util.c:467:28: got void *virtual
+drivers/gpu/drm/ttm/ttm_bo_util.c:467:28: warning: incorrect type in argument 1 (different address spaces)
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 21+ messages in thread
* ✓ Xe.CI.BAT: success for dma-buf private interconnect POC (rev2)
2025-09-26 8:46 [RFC PATCH v2 0/2] dma-buf private interconnect POC Thomas Hellström
` (4 preceding siblings ...)
2025-09-26 9:50 ` ✗ CI.checksparse: warning " Patchwork
@ 2025-09-26 10:11 ` Patchwork
2025-09-26 14:23 ` ✗ Xe.CI.Full: failure " Patchwork
6 siblings, 0 replies; 21+ messages in thread
From: Patchwork @ 2025-09-26 10:11 UTC (permalink / raw)
To: Thomas Hellström; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 862 bytes --]
== Series Details ==
Series: dma-buf private interconnect POC (rev2)
URL : https://patchwork.freedesktop.org/series/155043/
State : success
== Summary ==
CI Bug Log - changes from xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24_BAT -> xe-pw-155043v2_BAT
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (11 -> 11)
------------------------------
No changes in participating hosts
Changes
-------
No changes found
Build changes
-------------
* Linux: xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24 -> xe-pw-155043v2
IGT_8554: 8554
xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24: d557b14c00c4ab027e66c1c7bf512cf479ff8c24
xe-pw-155043v2: 155043v2
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/index.html
[-- Attachment #2: Type: text/html, Size: 1410 bytes --]
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [RFC PATCH v2 1/2] dma-buf: Add support for private interconnects
2025-09-26 8:46 ` [RFC PATCH v2 1/2] dma-buf: Add support for private interconnects Thomas Hellström
@ 2025-09-26 12:56 ` Christian König
2025-09-26 13:51 ` Thomas Hellström
0 siblings, 1 reply; 21+ messages in thread
From: Christian König @ 2025-09-26 12:56 UTC (permalink / raw)
To: Thomas Hellström, intel-xe
Cc: Matthew Brost, Maarten Lankhorst, Kasireddy Vivek, Simona Vetter,
Jason Gunthorpe, dri-devel, linaro-mm-sig
On 26.09.25 10:46, Thomas Hellström wrote:
> Add a function to the dma_buf_attach_ops to indicate whether the
> connection is a private interconnect. If so the function returns
> the address to an interconnect-defined structure that can be
> used for further negotiating.
>
> Also add a field to the dma_buf_attachment that indicates whether
> a private interconnect is used by the attachment.
>
> Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> ---
> include/linux/dma-buf.h | 51 +++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 51 insertions(+)
>
> diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
> index d58e329ac0e7..25dbf1fea09a 100644
> --- a/include/linux/dma-buf.h
> +++ b/include/linux/dma-buf.h
> @@ -442,6 +442,39 @@ struct dma_buf {
> #endif
> };
>
> +/* RFC: Separate header for the interconnect defines? */
> +
> +/**
> + * struct dma_buf_interconnect - Private interconnect
> + * @name: The name of the interconnect
> + */
> +struct dma_buf_interconnect {
> + const char *name;
> +};
> +
> +/**
> + * struct dma_buf_interconnect_attach_ops - Interconnect attach ops base-class
> + *
> + * Declared for type-safety. Interconnect implementations should subclass to
> + * implement negotiation-specific ops.
> + */
> +struct dma_buf_interconnect_attach_ops {
> +};
> +
> +/**
> + * struct dma_buf_interconnect_attach - Interconnect state
> + * @interconnect: The struct dma_buf_interconnect identifying the interconnect
> + *
> + * Interconnect implementations subclass as needed for attachment state
> + * that can't be stored elsewhere. It could, for example, hold a pointer
> + * to a replacement of the sg-list after the attachment has been mapped.
> + * If no additional state is needed, an exporter could define a single
> + * static instance of this struct.
> + */
> +struct dma_buf_interconnect_attach {
> + const struct dma_buf_interconnect *interconnect;
> +};
> +
> /**
> * struct dma_buf_attach_ops - importer operations for an attachment
> *
> @@ -475,6 +508,21 @@ struct dma_buf_attach_ops {
> * point to the new location of the DMA-buf.
> */
> void (*move_notify)(struct dma_buf_attachment *attach);
> +
> + /**
> + * @supports_interconnect: [optional] - Does the driver support a local interconnect?
> + *
> + * Does the importer support a private interconnect? The interconnect is
> + * identified using a unique address defined instantiated either by the driver
> + * if the interconnect is driver-private or globally
> + * (RFC added to the dma-buf-interconnect.c file) if cross-driver.
> + *
> + * Return: A pointer to the interconnect-private attach_ops structure if supported,
> + * %NULL otherwise.
> + */
> + const struct dma_buf_interconnect_attach_ops *
> + (*supports_interconnect)(struct dma_buf_attachment *attach,
> + const struct dma_buf_interconnect *interconnect);
This looks like it sits in the wrong structure. The dma_buf_attach_ops are the operations provided by the importer, e.g. move notification.
When we want to check if using an interconnect is possible we need to do that on the exporter, e.g. dma_buf_ops().
I think we should have an map_interconnect(connector type descriptor) that the importer can use to establish a mapping for itself.
Additional to that we need an unmap_interconnect() to let the exporter know that an importer doesn't need a specific mapping any more.
> };
>
> /**
> @@ -484,6 +532,8 @@ struct dma_buf_attach_ops {
> * @node: list of dma_buf_attachment, protected by dma_resv lock of the dmabuf.
> * @peer2peer: true if the importer can handle peer resources without pages.
> * @priv: exporter specific attachment data.
> + * @interconnect_attach: Private interconnect state for the connection if used,
> + * NULL otherwise.
> * @importer_ops: importer operations for this attachment, if provided
> * dma_buf_map/unmap_attachment() must be called with the dma_resv lock held.
> * @importer_priv: importer specific attachment data.
> @@ -503,6 +553,7 @@ struct dma_buf_attachment {
> struct list_head node;
> bool peer2peer;
> const struct dma_buf_attach_ops *importer_ops;
> + struct dma_buf_interconnect_attach *interconnect_attach;
We already have an importer and an exporter private void *. Do we really need that?
Regards,
Christian.
> void *importer_priv;
> void *priv;
> };
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [RFC PATCH v2 1/2] dma-buf: Add support for private interconnects
2025-09-26 12:56 ` Christian König
@ 2025-09-26 13:51 ` Thomas Hellström
2025-09-26 14:41 ` Jason Gunthorpe
0 siblings, 1 reply; 21+ messages in thread
From: Thomas Hellström @ 2025-09-26 13:51 UTC (permalink / raw)
To: Christian König, intel-xe
Cc: Matthew Brost, Maarten Lankhorst, Kasireddy Vivek, Simona Vetter,
Jason Gunthorpe, dri-devel, linaro-mm-sig
On Fri, 2025-09-26 at 14:56 +0200, Christian König wrote:
>
>
> On 26.09.25 10:46, Thomas Hellström wrote:
> > Add a function to the dma_buf_attach_ops to indicate whether the
> > connection is a private interconnect. If so the function returns
> > the address to an interconnect-defined structure that can be
> > used for further negotiating.
> >
> > Also add a field to the dma_buf_attachment that indicates whether
> > a private interconnect is used by the attachment.
> >
> > Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> > ---
> > include/linux/dma-buf.h | 51
> > +++++++++++++++++++++++++++++++++++++++++
> > 1 file changed, 51 insertions(+)
> >
> > diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
> > index d58e329ac0e7..25dbf1fea09a 100644
> > --- a/include/linux/dma-buf.h
> > +++ b/include/linux/dma-buf.h
> > @@ -442,6 +442,39 @@ struct dma_buf {
> > #endif
> > };
> >
> > +/* RFC: Separate header for the interconnect defines? */
> > +
> > +/**
> > + * struct dma_buf_interconnect - Private interconnect
> > + * @name: The name of the interconnect
> > + */
> > +struct dma_buf_interconnect {
> > + const char *name;
> > +};
> > +
> > +/**
> > + * struct dma_buf_interconnect_attach_ops - Interconnect attach
> > ops base-class
> > + *
> > + * Declared for type-safety. Interconnect implementations should
> > subclass to
> > + * implement negotiation-specific ops.
> > + */
> > +struct dma_buf_interconnect_attach_ops {
> > +};
> > +
> > +/**
> > + * struct dma_buf_interconnect_attach - Interconnect state
> > + * @interconnect: The struct dma_buf_interconnect identifying the
> > interconnect
> > + *
> > + * Interconnect implementations subclass as needed for attachment
> > state
> > + * that can't be stored elsewhere. It could, for example, hold a
> > pointer
> > + * to a replacement of the sg-list after the attachment has been
> > mapped.
> > + * If no additional state is needed, an exporter could define a
> > single
> > + * static instance of this struct.
> > + */
> > +struct dma_buf_interconnect_attach {
> > + const struct dma_buf_interconnect *interconnect;
> > +};
> > +
> > /**
> > * struct dma_buf_attach_ops - importer operations for an
> > attachment
> > *
> > @@ -475,6 +508,21 @@ struct dma_buf_attach_ops {
> > * point to the new location of the DMA-buf.
> > */
> > void (*move_notify)(struct dma_buf_attachment *attach);
> > +
> > + /**
> > + * @supports_interconnect: [optional] - Does the driver
> > support a local interconnect?
> > + *
> > + * Does the importer support a private interconnect? The
> > interconnect is
> > + * identified using a unique address defined instantiated
> > either by the driver
> > + * if the interconnect is driver-private or globally
> > + * (RFC added to the dma-buf-interconnect.c file) if
> > cross-driver.
> > + *
> > + * Return: A pointer to the interconnect-private
> > attach_ops structure if supported,
> > + * %NULL otherwise.
> > + */
> > + const struct dma_buf_interconnect_attach_ops *
> > + (*supports_interconnect)(struct dma_buf_attachment
> > *attach,
> > + const struct dma_buf_interconnect
> > *interconnect);
>
> This looks like it sits in the wrong structure. The
> dma_buf_attach_ops are the operations provided by the importer, e.g.
> move notification.
>
> When we want to check if using an interconnect is possible we need to
> do that on the exporter, e.g. dma_buf_ops().
Well both exporter and exporter has specific information WRT this. The
ultimate decision is done in the exporter attach() callback, just like
pcie_p2p. And the exporter acknowledges that by setting the
dma_buf_attachment::interconnect_attach field. In analogy with the
dma_buf_attachment::peer2peer member.
So the above function mimics the dma_buf_attach_ops::allow_peer2peer
bool, except it's not a single interconnect so we'd either use a set of
bools, one for each potential interconnect, or a function like this.
A function has the benefit that it can also provide any additional
attach ops the interconnect might need.
So the flow becomes:
1) Importer calls exporter attach() with a non-NULL
supports_interconnect() to signal that it supports some additional
interconnects.
2) exporter calls supports_interconnect(my_interconnect) to figure out
whether the importer supports a specific interconnect it wants to try.
This is similar to the exporter checking "allow_peer2peer" (or rather
the core checking "allow_peer2peer" on the behalf of the exporter).
3) Importer finds it supports the interconnect and provides additional
dma_buf_interconnect_attach_ops.
4) Now the exporter checks that the interconnect is indeed possible.
This is similar to calling pci_p2p_distance(), but interconnect-
specific. This might involve querying the importer, for example if the
importer feels like the exporting device:bar pair does indeed have an
implicit VF_PF connection. This can be done if needed using the
dma_buf_interconnect_attach_ops.
5) Exporter is happy, and sets the
dma_buf_attachment::interconnect_attach field. This is similar to
setting the dma_buf_attachment::peer2peer field.
So basically this is the pcie peer2peer negotiation flow generalized.
It would be trivial to implement the pcie peer2peer negotiation as a
private protocol using the above.
>
> I think we should have an map_interconnect(connector type descriptor)
> that the importer can use to establish a mapping for itself.
>
> Additional to that we need an unmap_interconnect() to let the
> exporter know that an importer doesn't need a specific mapping any
> more.
Is this to not overload the map_attachment() and unmap_attachment()
functions that otherwise could be used? Is it because they return an
sg_table? Yeah, that could make sense but not for the interconnect
negotiation itself, right? That happens during attach time like
pcie_p2p?
>
> > };
> >
> > /**
> > @@ -484,6 +532,8 @@ struct dma_buf_attach_ops {
> > * @node: list of dma_buf_attachment, protected by dma_resv lock
> > of the dmabuf.
> > * @peer2peer: true if the importer can handle peer resources
> > without pages.
> > * @priv: exporter specific attachment data.
> > + * @interconnect_attach: Private interconnect state for the
> > connection if used,
> > + * NULL otherwise.
> > * @importer_ops: importer operations for this attachment, if
> > provided
> > * dma_buf_map/unmap_attachment() must be called with the dma_resv
> > lock held.
> > * @importer_priv: importer specific attachment data.
> > @@ -503,6 +553,7 @@ struct dma_buf_attachment {
> > struct list_head node;
> > bool peer2peer;
> > const struct dma_buf_attach_ops *importer_ops;
> > + struct dma_buf_interconnect_attach *interconnect_attach;
>
> We already have an importer and an exporter private void *. Do we
> really need that?
See above. It looks like the exporter private is largely unused in
xekmd at least but the importer would want to inspect that as well, to
find out whether the attachment indeed is an interconnect attachment.
And I'm not sure whether a driver that already uses the exporter priv
would ever want to use a private interconnect like this.
Thanks,
Thomas
>
> Regards,
> Christian.
>
> > void *importer_priv;
> > void *priv;
> > };
>
^ permalink raw reply [flat|nested] 21+ messages in thread
* ✗ Xe.CI.Full: failure for dma-buf private interconnect POC (rev2)
2025-09-26 8:46 [RFC PATCH v2 0/2] dma-buf private interconnect POC Thomas Hellström
` (5 preceding siblings ...)
2025-09-26 10:11 ` ✓ Xe.CI.BAT: success " Patchwork
@ 2025-09-26 14:23 ` Patchwork
6 siblings, 0 replies; 21+ messages in thread
From: Patchwork @ 2025-09-26 14:23 UTC (permalink / raw)
To: Thomas Hellström; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 48563 bytes --]
== Series Details ==
Series: dma-buf private interconnect POC (rev2)
URL : https://patchwork.freedesktop.org/series/155043/
State : failure
== Summary ==
CI Bug Log - changes from xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24_FULL -> xe-pw-155043v2_FULL
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with xe-pw-155043v2_FULL absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in xe-pw-155043v2_FULL, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
Participating hosts (4 -> 4)
------------------------------
No changes in participating hosts
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in xe-pw-155043v2_FULL:
### IGT changes ###
#### Possible regressions ####
* igt@xe_exec_balancer@once-cm-parallel-userptr-invalidate-race:
- shard-adlp: [PASS][1] -> [FAIL][2]
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-adlp-1/igt@xe_exec_balancer@once-cm-parallel-userptr-invalidate-race.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-adlp-6/igt@xe_exec_balancer@once-cm-parallel-userptr-invalidate-race.html
#### Warnings ####
* igt@xe_peer2peer@write@write-gpua-vram01-gpub-system-p2p:
- shard-dg2-set2: [FAIL][3] ([Intel XE#1173]) -> [FAIL][4] +1 other test fail
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-dg2-434/igt@xe_peer2peer@write@write-gpua-vram01-gpub-system-p2p.html
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-436/igt@xe_peer2peer@write@write-gpua-vram01-gpub-system-p2p.html
Known issues
------------
Here are the changes found in xe-pw-155043v2_FULL that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@kms_big_fb@x-tiled-16bpp-rotate-270:
- shard-dg2-set2: NOTRUN -> [SKIP][5] ([Intel XE#316])
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-463/igt@kms_big_fb@x-tiled-16bpp-rotate-270.html
* igt@kms_big_fb@yf-tiled-32bpp-rotate-90:
- shard-bmg: NOTRUN -> [SKIP][6] ([Intel XE#1124])
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-7/igt@kms_big_fb@yf-tiled-32bpp-rotate-90.html
- shard-lnl: NOTRUN -> [SKIP][7] ([Intel XE#1124])
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-lnl-3/igt@kms_big_fb@yf-tiled-32bpp-rotate-90.html
* igt@kms_big_fb@yf-tiled-64bpp-rotate-180:
- shard-dg2-set2: NOTRUN -> [SKIP][8] ([Intel XE#1124]) +4 other tests skip
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-463/igt@kms_big_fb@yf-tiled-64bpp-rotate-180.html
* igt@kms_bw@connected-linear-tiling-4-displays-2560x1440p:
- shard-dg2-set2: NOTRUN -> [SKIP][9] ([Intel XE#2191])
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-434/igt@kms_bw@connected-linear-tiling-4-displays-2560x1440p.html
* igt@kms_ccs@bad-rotation-90-4-tiled-lnl-ccs@pipe-c-dp-2:
- shard-bmg: NOTRUN -> [SKIP][10] ([Intel XE#2652] / [Intel XE#787]) +7 other tests skip
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-7/igt@kms_ccs@bad-rotation-90-4-tiled-lnl-ccs@pipe-c-dp-2.html
* igt@kms_ccs@ccs-on-another-bo-y-tiled-gen12-rc-ccs-cc@pipe-d-dp-4:
- shard-dg2-set2: NOTRUN -> [SKIP][11] ([Intel XE#455] / [Intel XE#787]) +23 other tests skip
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-436/igt@kms_ccs@ccs-on-another-bo-y-tiled-gen12-rc-ccs-cc@pipe-d-dp-4.html
* igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs:
- shard-bmg: NOTRUN -> [SKIP][12] ([Intel XE#3432])
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-7/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs.html
* igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs@pipe-c-hdmi-a-2:
- shard-dg2-set2: NOTRUN -> [SKIP][13] ([Intel XE#787]) +146 other tests skip
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-432/igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs@pipe-c-hdmi-a-2.html
* igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc@pipe-d-hdmi-a-2:
- shard-dg2-set2: NOTRUN -> [INCOMPLETE][14] ([Intel XE#1727] / [Intel XE#3113])
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-432/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc@pipe-d-hdmi-a-2.html
* igt@kms_chamelium_color@ctm-limited-range:
- shard-dg2-set2: NOTRUN -> [SKIP][15] ([Intel XE#306])
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-434/igt@kms_chamelium_color@ctm-limited-range.html
* igt@kms_chamelium_edid@vga-edid-read:
- shard-dg2-set2: NOTRUN -> [SKIP][16] ([Intel XE#373]) +3 other tests skip
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-434/igt@kms_chamelium_edid@vga-edid-read.html
* igt@kms_content_protection@legacy@pipe-a-dp-4:
- shard-dg2-set2: NOTRUN -> [FAIL][17] ([Intel XE#1178])
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-433/igt@kms_content_protection@legacy@pipe-a-dp-4.html
* igt@kms_cursor_crc@cursor-sliding-512x170:
- shard-dg2-set2: NOTRUN -> [SKIP][18] ([Intel XE#308]) +1 other test skip
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-463/igt@kms_cursor_crc@cursor-sliding-512x170.html
* igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size:
- shard-bmg: [PASS][19] -> [SKIP][20] ([Intel XE#2291]) +4 other tests skip
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-bmg-5/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size.html
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-6/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size.html
* igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions:
- shard-bmg: [PASS][21] -> [FAIL][22] ([Intel XE#1475])
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-bmg-6/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-1/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html
* igt@kms_fbcon_fbt@fbc:
- shard-bmg: NOTRUN -> [SKIP][23] ([Intel XE#5425])
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-7/igt@kms_fbcon_fbt@fbc.html
* igt@kms_feature_discovery@chamelium:
- shard-dg2-set2: NOTRUN -> [SKIP][24] ([Intel XE#701])
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-433/igt@kms_feature_discovery@chamelium.html
* igt@kms_flip@2x-flip-vs-dpms-on-nop:
- shard-bmg: [PASS][25] -> [SKIP][26] ([Intel XE#2316]) +7 other tests skip
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-bmg-3/igt@kms_flip@2x-flip-vs-dpms-on-nop.html
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-6/igt@kms_flip@2x-flip-vs-dpms-on-nop.html
* igt@kms_flip@dpms-off-confusion@c-hdmi-a1:
- shard-adlp: [PASS][27] -> [DMESG-WARN][28] ([Intel XE#4543]) +6 other tests dmesg-warn
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-adlp-9/igt@kms_flip@dpms-off-confusion@c-hdmi-a1.html
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-adlp-4/igt@kms_flip@dpms-off-confusion@c-hdmi-a1.html
* igt@kms_flip@flip-vs-expired-vblank:
- shard-dg2-set2: [PASS][29] -> [FAIL][30] ([Intel XE#301])
[29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-dg2-433/igt@kms_flip@flip-vs-expired-vblank.html
[30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-434/igt@kms_flip@flip-vs-expired-vblank.html
* igt@kms_flip@flip-vs-expired-vblank@a-edp1:
- shard-lnl: [PASS][31] -> [FAIL][32] ([Intel XE#301]) +1 other test fail
[31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-lnl-5/igt@kms_flip@flip-vs-expired-vblank@a-edp1.html
[32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-lnl-2/igt@kms_flip@flip-vs-expired-vblank@a-edp1.html
* igt@kms_flip@flip-vs-expired-vblank@c-dp4:
- shard-dg2-set2: [PASS][33] -> [FAIL][34] ([Intel XE#301] / [Intel XE#3321])
[33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-dg2-433/igt@kms_flip@flip-vs-expired-vblank@c-dp4.html
[34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-434/igt@kms_flip@flip-vs-expired-vblank@c-dp4.html
* igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-downscaling:
- shard-lnl: NOTRUN -> [SKIP][35] ([Intel XE#1401] / [Intel XE#1745])
[35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-lnl-3/igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-downscaling.html
- shard-bmg: NOTRUN -> [SKIP][36] ([Intel XE#2293] / [Intel XE#2380])
[36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-7/igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-downscaling.html
* igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-downscaling@pipe-a-default-mode:
- shard-lnl: NOTRUN -> [SKIP][37] ([Intel XE#1401])
[37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-lnl-3/igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-downscaling@pipe-a-default-mode.html
* igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-downscaling@pipe-a-valid-mode:
- shard-bmg: NOTRUN -> [SKIP][38] ([Intel XE#2293])
[38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-7/igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-downscaling@pipe-a-valid-mode.html
* igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilercccs-downscaling:
- shard-dg2-set2: NOTRUN -> [SKIP][39] ([Intel XE#455]) +6 other tests skip
[39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-434/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilercccs-downscaling.html
* igt@kms_flip_tiling@flip-change-tiling@pipe-b-hdmi-a-1-y-to-y:
- shard-adlp: [PASS][40] -> [DMESG-FAIL][41] ([Intel XE#4543])
[40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-adlp-3/igt@kms_flip_tiling@flip-change-tiling@pipe-b-hdmi-a-1-y-to-y.html
[41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-adlp-6/igt@kms_flip_tiling@flip-change-tiling@pipe-b-hdmi-a-1-y-to-y.html
* igt@kms_frontbuffer_tracking@fbc-2p-primscrn-indfb-msflip-blt:
- shard-bmg: NOTRUN -> [SKIP][42] ([Intel XE#5390]) +2 other tests skip
[42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-7/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-indfb-msflip-blt.html
* igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-draw-blt:
- shard-bmg: NOTRUN -> [SKIP][43] ([Intel XE#2311]) +2 other tests skip
[43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-7/igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@fbcdrrs-1p-rte:
- shard-dg2-set2: NOTRUN -> [SKIP][44] ([Intel XE#651]) +13 other tests skip
[44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-463/igt@kms_frontbuffer_tracking@fbcdrrs-1p-rte.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-draw-mmap-wc:
- shard-lnl: NOTRUN -> [SKIP][45] ([Intel XE#656]) +1 other test skip
[45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-lnl-3/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-blt:
- shard-bmg: NOTRUN -> [SKIP][46] ([Intel XE#2313]) +2 other tests skip
[46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-7/igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-blt.html
* igt@kms_frontbuffer_tracking@fbcpsr-tiling-4:
- shard-dg2-set2: NOTRUN -> [SKIP][47] ([Intel XE#653]) +12 other tests skip
[47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-463/igt@kms_frontbuffer_tracking@fbcpsr-tiling-4.html
* igt@kms_hdr@static-toggle-dpms:
- shard-bmg: [PASS][48] -> [SKIP][49] ([Intel XE#1503])
[48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-bmg-5/igt@kms_hdr@static-toggle-dpms.html
[49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-6/igt@kms_hdr@static-toggle-dpms.html
* igt@kms_joiner@invalid-modeset-force-big-joiner:
- shard-bmg: [PASS][50] -> [SKIP][51] ([Intel XE#3012])
[50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-bmg-3/igt@kms_joiner@invalid-modeset-force-big-joiner.html
[51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-6/igt@kms_joiner@invalid-modeset-force-big-joiner.html
* igt@kms_joiner@invalid-modeset-force-ultra-joiner:
- shard-dg2-set2: NOTRUN -> [SKIP][52] ([Intel XE#2925])
[52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-434/igt@kms_joiner@invalid-modeset-force-ultra-joiner.html
* igt@kms_multipipe_modeset@basic-max-pipe-crc-check:
- shard-dg2-set2: NOTRUN -> [SKIP][53] ([Intel XE#356])
[53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-434/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html
* igt@kms_plane_cursor@overlay@pipe-a-hdmi-a-6-size-64:
- shard-dg2-set2: NOTRUN -> [FAIL][54] ([Intel XE#616]) +1 other test fail
[54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-463/igt@kms_plane_cursor@overlay@pipe-a-hdmi-a-6-size-64.html
* igt@kms_plane_multiple@2x-tiling-y:
- shard-dg2-set2: NOTRUN -> [SKIP][55] ([Intel XE#5021])
[55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-434/igt@kms_plane_multiple@2x-tiling-y.html
* igt@kms_pm_backlight@fade-with-dpms:
- shard-dg2-set2: NOTRUN -> [SKIP][56] ([Intel XE#870])
[56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-434/igt@kms_pm_backlight@fade-with-dpms.html
* igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-sf:
- shard-dg2-set2: NOTRUN -> [SKIP][57] ([Intel XE#1406] / [Intel XE#1489]) +3 other tests skip
[57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-434/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-sf.html
* igt@kms_psr@fbc-psr2-cursor-plane-onoff:
- shard-dg2-set2: NOTRUN -> [SKIP][58] ([Intel XE#1406] / [Intel XE#2850] / [Intel XE#929]) +7 other tests skip
[58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-434/igt@kms_psr@fbc-psr2-cursor-plane-onoff.html
* igt@kms_psr@psr-sprite-plane-onoff:
- shard-bmg: NOTRUN -> [SKIP][59] ([Intel XE#1406] / [Intel XE#2234] / [Intel XE#2850])
[59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-7/igt@kms_psr@psr-sprite-plane-onoff.html
* igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90:
- shard-dg2-set2: NOTRUN -> [SKIP][60] ([Intel XE#3414])
[60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-463/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90.html
* igt@kms_setmode@clone-exclusive-crtc:
- shard-bmg: [PASS][61] -> [SKIP][62] ([Intel XE#1435])
[61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-bmg-3/igt@kms_setmode@clone-exclusive-crtc.html
[62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-6/igt@kms_setmode@clone-exclusive-crtc.html
* igt@kms_vblank@query-idle-hang:
- shard-adlp: [PASS][63] -> [DMESG-WARN][64] ([Intel XE#2953] / [Intel XE#4173]) +6 other tests dmesg-warn
[63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-adlp-8/igt@kms_vblank@query-idle-hang.html
[64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-adlp-4/igt@kms_vblank@query-idle-hang.html
* igt@xe_copy_basic@mem-copy-linear-0x3fff:
- shard-dg2-set2: NOTRUN -> [SKIP][65] ([Intel XE#1123])
[65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-463/igt@xe_copy_basic@mem-copy-linear-0x3fff.html
* igt@xe_drm_fdinfo@utilization-others-idle:
- shard-adlp: [PASS][66] -> [TIMEOUT][67] ([Intel XE#3876])
[66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-adlp-1/igt@xe_drm_fdinfo@utilization-others-idle.html
[67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-adlp-6/igt@xe_drm_fdinfo@utilization-others-idle.html
* igt@xe_eudebug@vma-ufence-faultable:
- shard-dg2-set2: NOTRUN -> [SKIP][68] ([Intel XE#4837]) +6 other tests skip
[68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-433/igt@xe_eudebug@vma-ufence-faultable.html
* igt@xe_eudebug_online@tdctl-parameters:
- shard-bmg: NOTRUN -> [SKIP][69] ([Intel XE#4837])
[69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-7/igt@xe_eudebug_online@tdctl-parameters.html
* igt@xe_evict_ccs@evict-overcommit-simple:
- shard-lnl: NOTRUN -> [SKIP][70] ([Intel XE#688])
[70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-lnl-3/igt@xe_evict_ccs@evict-overcommit-simple.html
* igt@xe_exec_basic@multigpu-no-exec-bindexecqueue-userptr-rebind:
- shard-dg2-set2: [PASS][71] -> [SKIP][72] ([Intel XE#1392]) +5 other tests skip
[71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-dg2-464/igt@xe_exec_basic@multigpu-no-exec-bindexecqueue-userptr-rebind.html
[72]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-432/igt@xe_exec_basic@multigpu-no-exec-bindexecqueue-userptr-rebind.html
* igt@xe_exec_basic@multigpu-once-basic-defer-mmap:
- shard-bmg: NOTRUN -> [SKIP][73] ([Intel XE#2322]) +1 other test skip
[73]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-7/igt@xe_exec_basic@multigpu-once-basic-defer-mmap.html
* igt@xe_exec_fault_mode@many-userptr-rebind-imm:
- shard-dg2-set2: NOTRUN -> [SKIP][74] ([Intel XE#288]) +9 other tests skip
[74]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-434/igt@xe_exec_fault_mode@many-userptr-rebind-imm.html
* igt@xe_exec_reset@parallel-gt-reset:
- shard-adlp: [PASS][75] -> [DMESG-WARN][76] ([Intel XE#3876])
[75]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-adlp-1/igt@xe_exec_reset@parallel-gt-reset.html
[76]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-adlp-6/igt@xe_exec_reset@parallel-gt-reset.html
* igt@xe_exec_system_allocator@many-stride-malloc-race:
- shard-dg2-set2: NOTRUN -> [SKIP][77] ([Intel XE#4915]) +110 other tests skip
[77]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-434/igt@xe_exec_system_allocator@many-stride-malloc-race.html
* igt@xe_exec_system_allocator@threads-many-execqueues-mmap-huge-nomemset:
- shard-bmg: NOTRUN -> [SKIP][78] ([Intel XE#4943]) +2 other tests skip
[78]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-7/igt@xe_exec_system_allocator@threads-many-execqueues-mmap-huge-nomemset.html
- shard-lnl: NOTRUN -> [SKIP][79] ([Intel XE#4943])
[79]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-lnl-3/igt@xe_exec_system_allocator@threads-many-execqueues-mmap-huge-nomemset.html
* igt@xe_exec_threads@threads-mixed-shared-vm-basic:
- shard-adlp: [PASS][80] -> [DMESG-FAIL][81] ([Intel XE#3876])
[80]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-adlp-1/igt@xe_exec_threads@threads-mixed-shared-vm-basic.html
[81]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-adlp-6/igt@xe_exec_threads@threads-mixed-shared-vm-basic.html
* igt@xe_oa@buffer-fill:
- shard-dg2-set2: NOTRUN -> [SKIP][82] ([Intel XE#3573]) +4 other tests skip
[82]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-433/igt@xe_oa@buffer-fill.html
* igt@xe_pm@d3cold-multiple-execs:
- shard-dg2-set2: NOTRUN -> [SKIP][83] ([Intel XE#2284] / [Intel XE#366])
[83]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-433/igt@xe_pm@d3cold-multiple-execs.html
* igt@xe_pmu@gt-frequency:
- shard-dg2-set2: [PASS][84] -> [FAIL][85] ([Intel XE#4819]) +1 other test fail
[84]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-dg2-464/igt@xe_pmu@gt-frequency.html
[85]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-434/igt@xe_pmu@gt-frequency.html
* igt@xe_pxp@pxp-stale-bo-exec-post-rpm:
- shard-bmg: NOTRUN -> [SKIP][86] ([Intel XE#4733])
[86]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-7/igt@xe_pxp@pxp-stale-bo-exec-post-rpm.html
* igt@xe_pxp@pxp-termination-key-update-post-rpm:
- shard-dg2-set2: NOTRUN -> [SKIP][87] ([Intel XE#4733])
[87]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-434/igt@xe_pxp@pxp-termination-key-update-post-rpm.html
* igt@xe_query@multigpu-query-uc-fw-version-guc:
- shard-dg2-set2: NOTRUN -> [SKIP][88] ([Intel XE#944])
[88]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-434/igt@xe_query@multigpu-query-uc-fw-version-guc.html
* igt@xe_sriov_flr@flr-vfs-parallel:
- shard-dg2-set2: NOTRUN -> [SKIP][89] ([Intel XE#4273])
[89]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-463/igt@xe_sriov_flr@flr-vfs-parallel.html
* igt@xe_sriov_scheduling@nonpreempt-engine-resets:
- shard-dg2-set2: NOTRUN -> [SKIP][90] ([Intel XE#4351])
[90]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-433/igt@xe_sriov_scheduling@nonpreempt-engine-resets.html
#### Possible fixes ####
* igt@kms_bw@connected-linear-tiling-2-displays-2160x1440p:
- shard-bmg: [SKIP][91] ([Intel XE#2314] / [Intel XE#2894]) -> [PASS][92] +1 other test pass
[91]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-bmg-6/igt@kms_bw@connected-linear-tiling-2-displays-2160x1440p.html
[92]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-4/igt@kms_bw@connected-linear-tiling-2-displays-2160x1440p.html
* igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs:
- shard-dg2-set2: [INCOMPLETE][93] ([Intel XE#1727] / [Intel XE#3113] / [Intel XE#4345]) -> [PASS][94]
[93]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-dg2-436/igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs.html
[94]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-463/igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs.html
* igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs@pipe-b-dp-4:
- shard-dg2-set2: [DMESG-WARN][95] ([Intel XE#1727] / [Intel XE#3113]) -> [PASS][96]
[95]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-dg2-436/igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs@pipe-b-dp-4.html
[96]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-463/igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs@pipe-b-dp-4.html
* igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs@pipe-c-hdmi-a-6:
- shard-dg2-set2: [INCOMPLETE][97] -> [PASS][98]
[97]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-dg2-436/igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs@pipe-c-hdmi-a-6.html
[98]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-463/igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs@pipe-c-hdmi-a-6.html
* igt@kms_cursor_legacy@cursora-vs-flipb-legacy:
- shard-bmg: [SKIP][99] ([Intel XE#2291]) -> [PASS][100] +2 other tests pass
[99]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-bmg-6/igt@kms_cursor_legacy@cursora-vs-flipb-legacy.html
[100]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-4/igt@kms_cursor_legacy@cursora-vs-flipb-legacy.html
* igt@kms_cursor_legacy@flip-vs-cursor-legacy:
- shard-bmg: [FAIL][101] ([Intel XE#4633]) -> [PASS][102]
[101]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-bmg-5/igt@kms_cursor_legacy@flip-vs-cursor-legacy.html
[102]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-6/igt@kms_cursor_legacy@flip-vs-cursor-legacy.html
* igt@kms_dither@fb-8bpc-vs-panel-6bpc:
- shard-bmg: [SKIP][103] ([Intel XE#1340]) -> [PASS][104]
[103]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-bmg-6/igt@kms_dither@fb-8bpc-vs-panel-6bpc.html
[104]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-4/igt@kms_dither@fb-8bpc-vs-panel-6bpc.html
* igt@kms_dp_linktrain_fallback@dp-fallback:
- shard-bmg: [SKIP][105] ([Intel XE#4294]) -> [PASS][106]
[105]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-bmg-6/igt@kms_dp_linktrain_fallback@dp-fallback.html
[106]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-1/igt@kms_dp_linktrain_fallback@dp-fallback.html
* igt@kms_flip@2x-plain-flip-fb-recreate-interruptible:
- shard-bmg: [SKIP][107] ([Intel XE#2316]) -> [PASS][108] +6 other tests pass
[107]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-bmg-6/igt@kms_flip@2x-plain-flip-fb-recreate-interruptible.html
[108]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-4/igt@kms_flip@2x-plain-flip-fb-recreate-interruptible.html
* igt@kms_flip@flip-vs-rmfb-interruptible:
- shard-adlp: [DMESG-WARN][109] ([Intel XE#5208]) -> [PASS][110]
[109]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-adlp-8/igt@kms_flip@flip-vs-rmfb-interruptible.html
[110]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-adlp-4/igt@kms_flip@flip-vs-rmfb-interruptible.html
* igt@kms_flip@flip-vs-suspend:
- shard-bmg: [INCOMPLETE][111] ([Intel XE#2049] / [Intel XE#2597]) -> [PASS][112] +1 other test pass
[111]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-bmg-6/igt@kms_flip@flip-vs-suspend.html
[112]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-7/igt@kms_flip@flip-vs-suspend.html
* igt@kms_flip@flip-vs-suspend@b-hdmi-a1:
- shard-adlp: [DMESG-WARN][113] ([Intel XE#4543]) -> [PASS][114] +15 other tests pass
[113]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-adlp-3/igt@kms_flip@flip-vs-suspend@b-hdmi-a1.html
[114]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-adlp-6/igt@kms_flip@flip-vs-suspend@b-hdmi-a1.html
* igt@kms_flip_tiling@flip-change-tiling@pipe-d-hdmi-a-1-y-to-x:
- shard-adlp: [DMESG-FAIL][115] ([Intel XE#4543]) -> [PASS][116]
[115]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-adlp-3/igt@kms_flip_tiling@flip-change-tiling@pipe-d-hdmi-a-1-y-to-x.html
[116]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-adlp-6/igt@kms_flip_tiling@flip-change-tiling@pipe-d-hdmi-a-1-y-to-x.html
* igt@kms_frontbuffer_tracking@fbc-suspend:
- shard-adlp: [DMESG-WARN][117] ([Intel XE#2953] / [Intel XE#4173]) -> [PASS][118] +2 other tests pass
[117]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-adlp-6/igt@kms_frontbuffer_tracking@fbc-suspend.html
[118]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-adlp-8/igt@kms_frontbuffer_tracking@fbc-suspend.html
* igt@kms_hdr@invalid-metadata-sizes:
- shard-bmg: [SKIP][119] ([Intel XE#1503]) -> [PASS][120]
[119]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-bmg-6/igt@kms_hdr@invalid-metadata-sizes.html
[120]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-1/igt@kms_hdr@invalid-metadata-sizes.html
* igt@kms_plane_multiple@2x-tiling-4:
- shard-bmg: [SKIP][121] ([Intel XE#4596]) -> [PASS][122]
[121]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-bmg-6/igt@kms_plane_multiple@2x-tiling-4.html
[122]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-7/igt@kms_plane_multiple@2x-tiling-4.html
* igt@kms_setmode@basic@pipe-b-edp-1:
- shard-lnl: [FAIL][123] ([Intel XE#2883]) -> [PASS][124]
[123]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-lnl-4/igt@kms_setmode@basic@pipe-b-edp-1.html
[124]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-lnl-7/igt@kms_setmode@basic@pipe-b-edp-1.html
* igt@kms_setmode@invalid-clone-single-crtc:
- shard-bmg: [SKIP][125] ([Intel XE#1435]) -> [PASS][126]
[125]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-bmg-6/igt@kms_setmode@invalid-clone-single-crtc.html
[126]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-1/igt@kms_setmode@invalid-clone-single-crtc.html
* igt@kms_vrr@negative-basic:
- shard-bmg: [SKIP][127] ([Intel XE#1499]) -> [PASS][128]
[127]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-bmg-6/igt@kms_vrr@negative-basic.html
[128]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-1/igt@kms_vrr@negative-basic.html
* igt@xe_exec_basic@multigpu-no-exec-userptr-invalidate-race:
- shard-dg2-set2: [SKIP][129] ([Intel XE#1392]) -> [PASS][130] +3 other tests pass
[129]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-dg2-432/igt@xe_exec_basic@multigpu-no-exec-userptr-invalidate-race.html
[130]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-433/igt@xe_exec_basic@multigpu-no-exec-userptr-invalidate-race.html
* {igt@xe_exec_system_allocator@many-large-execqueues-malloc-prefetch}:
- shard-lnl: [CRASH][131] ([Intel XE#6192]) -> [PASS][132] +10 other tests pass
[131]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-lnl-3/igt@xe_exec_system_allocator@many-large-execqueues-malloc-prefetch.html
[132]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-lnl-5/igt@xe_exec_system_allocator@many-large-execqueues-malloc-prefetch.html
* {igt@xe_exec_system_allocator@once-malloc-prefetch-race}:
- shard-bmg: [CRASH][133] ([Intel XE#6192]) -> [PASS][134] +9 other tests pass
[133]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-bmg-8/igt@xe_exec_system_allocator@once-malloc-prefetch-race.html
[134]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-5/igt@xe_exec_system_allocator@once-malloc-prefetch-race.html
* igt@xe_pm_residency@gt-c6-freeze@gt0:
- shard-adlp: [DMESG-WARN][135] ([Intel XE#2953] / [Intel XE#3088] / [Intel XE#4173]) -> [PASS][136] +1 other test pass
[135]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-adlp-1/igt@xe_pm_residency@gt-c6-freeze@gt0.html
[136]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-adlp-6/igt@xe_pm_residency@gt-c6-freeze@gt0.html
#### Warnings ####
* igt@kms_big_fb@y-tiled-64bpp-rotate-0:
- shard-adlp: [DMESG-FAIL][137] ([Intel XE#4543]) -> [DMESG-FAIL][138] ([Intel XE#2953] / [Intel XE#4173] / [Intel XE#4543])
[137]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-adlp-8/igt@kms_big_fb@y-tiled-64bpp-rotate-0.html
[138]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-adlp-4/igt@kms_big_fb@y-tiled-64bpp-rotate-0.html
* igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0-async-flip:
- shard-adlp: [DMESG-FAIL][139] ([Intel XE#2953] / [Intel XE#4173] / [Intel XE#4543]) -> [DMESG-FAIL][140] ([Intel XE#4543])
[139]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-adlp-3/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0-async-flip.html
[140]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-adlp-6/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0-async-flip.html
* igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc:
- shard-dg2-set2: [INCOMPLETE][141] ([Intel XE#2705] / [Intel XE#4212] / [Intel XE#4345]) -> [INCOMPLETE][142] ([Intel XE#1727] / [Intel XE#3113] / [Intel XE#4345])
[141]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-dg2-433/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc.html
[142]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-432/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc.html
* igt@kms_content_protection@lic-type-0:
- shard-bmg: [FAIL][143] ([Intel XE#1178]) -> [SKIP][144] ([Intel XE#2341])
[143]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-bmg-3/igt@kms_content_protection@lic-type-0.html
[144]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-6/igt@kms_content_protection@lic-type-0.html
* igt@kms_content_protection@uevent:
- shard-bmg: [FAIL][145] ([Intel XE#1188]) -> [SKIP][146] ([Intel XE#2341])
[145]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-bmg-5/igt@kms_content_protection@uevent.html
[146]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-6/igt@kms_content_protection@uevent.html
* igt@kms_flip@flip-vs-expired-vblank-interruptible:
- shard-adlp: [DMESG-FAIL][147] ([Intel XE#4543]) -> [DMESG-WARN][148] ([Intel XE#4543])
[147]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-adlp-3/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
[148]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-adlp-6/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
* igt@kms_flip@flip-vs-expired-vblank-interruptible@d-hdmi-a1:
- shard-adlp: [FAIL][149] ([Intel XE#301]) -> [DMESG-WARN][150] ([Intel XE#4543])
[149]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-adlp-3/igt@kms_flip@flip-vs-expired-vblank-interruptible@d-hdmi-a1.html
[150]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-adlp-6/igt@kms_flip@flip-vs-expired-vblank-interruptible@d-hdmi-a1.html
* igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-indfb-pgflip-blt:
- shard-bmg: [SKIP][151] ([Intel XE#2312]) -> [SKIP][152] ([Intel XE#2311]) +13 other tests skip
[151]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-bmg-6/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-indfb-pgflip-blt.html
[152]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-7/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-indfb-pgflip-blt.html
* igt@kms_frontbuffer_tracking@fbc-2p-primscrn-indfb-pgflip-blt:
- shard-bmg: [SKIP][153] ([Intel XE#2312]) -> [SKIP][154] ([Intel XE#5390]) +7 other tests skip
[153]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-indfb-pgflip-blt.html
[154]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-4/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-indfb-pgflip-blt.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-shrfb-pgflip-blt:
- shard-bmg: [SKIP][155] ([Intel XE#5390]) -> [SKIP][156] ([Intel XE#2312]) +7 other tests skip
[155]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-bmg-5/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-shrfb-pgflip-blt.html
[156]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-shrfb-pgflip-blt.html
* igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-wc:
- shard-bmg: [SKIP][157] ([Intel XE#2311]) -> [SKIP][158] ([Intel XE#2312]) +14 other tests skip
[157]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-bmg-5/igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-wc.html
[158]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-cur-indfb-draw-blt:
- shard-bmg: [SKIP][159] ([Intel XE#2312]) -> [SKIP][160] ([Intel XE#2313]) +14 other tests skip
[159]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-cur-indfb-draw-blt.html
[160]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-1/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-cur-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-plflip-blt:
- shard-bmg: [SKIP][161] ([Intel XE#2313]) -> [SKIP][162] ([Intel XE#2312]) +16 other tests skip
[161]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-bmg-5/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-plflip-blt.html
[162]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-plflip-blt.html
* igt@kms_hdr@brightness-with-hdr:
- shard-bmg: [SKIP][163] ([Intel XE#3374] / [Intel XE#3544]) -> [SKIP][164] ([Intel XE#3544])
[163]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-bmg-7/igt@kms_hdr@brightness-with-hdr.html
[164]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-1/igt@kms_hdr@brightness-with-hdr.html
* igt@kms_tiled_display@basic-test-pattern:
- shard-bmg: [SKIP][165] ([Intel XE#2426]) -> [FAIL][166] ([Intel XE#1729])
[165]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-bmg-7/igt@kms_tiled_display@basic-test-pattern.html
[166]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-1/igt@kms_tiled_display@basic-test-pattern.html
- shard-dg2-set2: [SKIP][167] ([Intel XE#362]) -> [FAIL][168] ([Intel XE#1729])
[167]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-dg2-463/igt@kms_tiled_display@basic-test-pattern.html
[168]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-dg2-466/igt@kms_tiled_display@basic-test-pattern.html
* igt@kms_tiled_display@basic-test-pattern-with-chamelium:
- shard-bmg: [SKIP][169] ([Intel XE#2509]) -> [SKIP][170] ([Intel XE#2426])
[169]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24/shard-bmg-5/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
[170]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/shard-bmg-6/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[Intel XE#1123]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1123
[Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
[Intel XE#1173]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1173
[Intel XE#1178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1178
[Intel XE#1188]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1188
[Intel XE#1340]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1340
[Intel XE#1392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1392
[Intel XE#1401]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1401
[Intel XE#1406]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1406
[Intel XE#1435]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1435
[Intel XE#1475]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1475
[Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
[Intel XE#1499]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1499
[Intel XE#1503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1503
[Intel XE#1727]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1727
[Intel XE#1729]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1729
[Intel XE#1745]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1745
[Intel XE#2049]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2049
[Intel XE#2191]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2191
[Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
[Intel XE#2284]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2284
[Intel XE#2291]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2291
[Intel XE#2293]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2293
[Intel XE#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311
[Intel XE#2312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2312
[Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313
[Intel XE#2314]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2314
[Intel XE#2316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2316
[Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
[Intel XE#2341]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2341
[Intel XE#2380]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2380
[Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
[Intel XE#2509]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2509
[Intel XE#2597]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2597
[Intel XE#2652]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2652
[Intel XE#2705]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2705
[Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
[Intel XE#288]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/288
[Intel XE#2883]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2883
[Intel XE#2894]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2894
[Intel XE#2925]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2925
[Intel XE#2953]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2953
[Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
[Intel XE#3012]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3012
[Intel XE#306]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/306
[Intel XE#308]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/308
[Intel XE#3088]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3088
[Intel XE#3113]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3113
[Intel XE#316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/316
[Intel XE#3321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3321
[Intel XE#3374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3374
[Intel XE#3414]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3414
[Intel XE#3432]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3432
[Intel XE#3544]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3544
[Intel XE#356]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/356
[Intel XE#3573]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3573
[Intel XE#362]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/362
[Intel XE#366]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/366
[Intel XE#373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/373
[Intel XE#3876]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3876
[Intel XE#4173]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4173
[Intel XE#4212]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4212
[Intel XE#4273]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4273
[Intel XE#4294]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4294
[Intel XE#4345]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4345
[Intel XE#4351]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4351
[Intel XE#4543]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4543
[Intel XE#455]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/455
[Intel XE#4596]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4596
[Intel XE#4633]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4633
[Intel XE#4733]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4733
[Intel XE#4819]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4819
[Intel XE#4837]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4837
[Intel XE#4915]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4915
[Intel XE#4943]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4943
[Intel XE#5021]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5021
[Intel XE#5191]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5191
[Intel XE#5208]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5208
[Intel XE#5300]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5300
[Intel XE#5390]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5390
[Intel XE#5425]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5425
[Intel XE#5786]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5786
[Intel XE#616]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/616
[Intel XE#6192]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6192
[Intel XE#651]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/651
[Intel XE#653]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/653
[Intel XE#656]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/656
[Intel XE#688]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/688
[Intel XE#701]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/701
[Intel XE#787]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/787
[Intel XE#870]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/870
[Intel XE#929]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/929
[Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944
Build changes
-------------
* Linux: xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24 -> xe-pw-155043v2
IGT_8554: 8554
xe-3833-d557b14c00c4ab027e66c1c7bf512cf479ff8c24: d557b14c00c4ab027e66c1c7bf512cf479ff8c24
xe-pw-155043v2: 155043v2
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-155043v2/index.html
[-- Attachment #2: Type: text/html, Size: 55790 bytes --]
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [RFC PATCH v2 1/2] dma-buf: Add support for private interconnects
2025-09-26 13:51 ` Thomas Hellström
@ 2025-09-26 14:41 ` Jason Gunthorpe
2025-09-26 14:51 ` Christian König
0 siblings, 1 reply; 21+ messages in thread
From: Jason Gunthorpe @ 2025-09-26 14:41 UTC (permalink / raw)
To: Thomas Hellström
Cc: Christian König, intel-xe, Matthew Brost, Maarten Lankhorst,
Kasireddy Vivek, Simona Vetter, dri-devel, linaro-mm-sig
On Fri, Sep 26, 2025 at 03:51:21PM +0200, Thomas Hellström wrote:
> Well both exporter and exporter has specific information WRT this. The
> ultimate decision is done in the exporter attach() callback, just like
> pcie_p2p. And the exporter acknowledges that by setting the
> dma_buf_attachment::interconnect_attach field. In analogy with the
> dma_buf_attachment::peer2peer member.
Having a single option seems too limited to me..
I think it would be nice if the importer could supply a list of
'interconnects' it can accept, eg:
- VRAM offset within this specific VRAM memory
- dma_addr_t for this struct device
- "IOVA" for this initiator on a private interconnect
- PCI bar slice
- phys_addr_t (used between vfio, kvm, iommufd)
The exporter has a function to run down the list and return the first
compatible. Maybe something like
struct dma_buf_interconnect_negotiation {
struct dma_buf_interconnect *interconnect,
void *interconnect_args,
};
struct dma_buf_interconnect_negotiation importer_offer[2] = { // On stack
[0] = {.interconnect = myself->xe_vram},
[1] = {.interconnect = &dmabuf_generic_dma_addr_t, .interconnects_args = dev},
};
idx = dma_buf_negotiate(dmabuf, importer_offer, ARRAY_SIZE(importer_offer));
if (idx < 0)
return -EOPNOTSUPP;
Then you'd 'interconnect attach' with that compatible item and get
back an attach. Using container_of to get the specific ops which then
has a function to get the address list.
attach = dma_buf_attach_interconnect(dmabuf, importer_offer[idx], &dma_buf_attach_ops);
if (idx == 0) {
xe_vram_ops = container_of(attach->ops, ..);
struct device_private_address *addrs = xe_vram_ops->map(attach);
[..]
xe_vram_ops->unmap(attach);
}
dma_buf_detach_interconnect(attach);
I can imagine some scheme where if the exporter does not support
interconnect then the core code will automatically look for
dmabuf_generic_dma_addr_t, select it, and supply some ops that call
existing dma_buf_dynamic_attach()/dma_buf_map_attachment()
transparently.
> So the above function mimics the dma_buf_attach_ops::allow_peer2peer
> bool, except it's not a single interconnect so we'd either use a set of
> bools, one for each potential interconnect, or a function like this.
> A function has the benefit that it can also provide any additional
> attach ops the interconnect might need.
allow_peer2peer seems to indicate if sg_page() can be used on the
sgt? It doesn't have any meaning for an importer only using
dma_addr_t?
In the above language it would be an interconnect exchanging 'struct
page *'.. I'm a little confused by this I thought touching the struct
page was forbidden?
> Is this to not overload the map_attachment() and unmap_attachment()
> functions that otherwise could be used? Is it because they return an
> sg_table?
It would be good to avoid going through APIs that use sg_table in the
design..
Jason
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [RFC PATCH v2 1/2] dma-buf: Add support for private interconnects
2025-09-26 14:41 ` Jason Gunthorpe
@ 2025-09-26 14:51 ` Christian König
2025-09-26 16:00 ` Jason Gunthorpe
0 siblings, 1 reply; 21+ messages in thread
From: Christian König @ 2025-09-26 14:51 UTC (permalink / raw)
To: Jason Gunthorpe, Thomas Hellström
Cc: intel-xe, Matthew Brost, Maarten Lankhorst, Kasireddy Vivek,
Simona Vetter, dri-devel, linaro-mm-sig
On 26.09.25 16:41, Jason Gunthorpe wrote:
> On Fri, Sep 26, 2025 at 03:51:21PM +0200, Thomas Hellström wrote:
>
>> Well both exporter and exporter has specific information WRT this. The
>> ultimate decision is done in the exporter attach() callback, just like
>> pcie_p2p. And the exporter acknowledges that by setting the
>> dma_buf_attachment::interconnect_attach field. In analogy with the
>> dma_buf_attachment::peer2peer member.
>
> Having a single option seems too limited to me..
Yeah, agree.
> I think it would be nice if the importer could supply a list of
> 'interconnects' it can accept, eg:
>
> - VRAM offset within this specific VRAM memory
> - dma_addr_t for this struct device
> - "IOVA" for this initiator on a private interconnect
> - PCI bar slice
> - phys_addr_t (used between vfio, kvm, iommufd)
I would rather say that the exporter should provide the list of what interconnects the buffer might be accessible through.
Having the p2p flag set by the importer was basically just the easiest approach to implement the flow, that is not necessarily a design pattern how to approach a general solution.
Regards,
Christian.
>
> The exporter has a function to run down the list and return the first
> compatible. Maybe something like
>
> struct dma_buf_interconnect_negotiation {
> struct dma_buf_interconnect *interconnect,
> void *interconnect_args,
> };
>
> struct dma_buf_interconnect_negotiation importer_offer[2] = { // On stack
> [0] = {.interconnect = myself->xe_vram},
> [1] = {.interconnect = &dmabuf_generic_dma_addr_t, .interconnects_args = dev},
> };
> idx = dma_buf_negotiate(dmabuf, importer_offer, ARRAY_SIZE(importer_offer));
> if (idx < 0)
> return -EOPNOTSUPP;
>
> Then you'd 'interconnect attach' with that compatible item and get
> back an attach. Using container_of to get the specific ops which then
> has a function to get the address list.
>
> attach = dma_buf_attach_interconnect(dmabuf, importer_offer[idx], &dma_buf_attach_ops);
>
> if (idx == 0) {
> xe_vram_ops = container_of(attach->ops, ..);
> struct device_private_address *addrs = xe_vram_ops->map(attach);
> [..]
> xe_vram_ops->unmap(attach);
> }
> dma_buf_detach_interconnect(attach);
>
> I can imagine some scheme where if the exporter does not support
> interconnect then the core code will automatically look for
> dmabuf_generic_dma_addr_t, select it, and supply some ops that call
> existing dma_buf_dynamic_attach()/dma_buf_map_attachment()
> transparently.
>
>> So the above function mimics the dma_buf_attach_ops::allow_peer2peer
>> bool, except it's not a single interconnect so we'd either use a set of
>> bools, one for each potential interconnect, or a function like this.
>> A function has the benefit that it can also provide any additional
>> attach ops the interconnect might need.
>
> allow_peer2peer seems to indicate if sg_page() can be used on the
> sgt? It doesn't have any meaning for an importer only using
> dma_addr_t?
>
> In the above language it would be an interconnect exchanging 'struct
> page *'.. I'm a little confused by this I thought touching the struct
> page was forbidden?
>
>> Is this to not overload the map_attachment() and unmap_attachment()
>> functions that otherwise could be used? Is it because they return an
>> sg_table?
>
> It would be good to avoid going through APIs that use sg_table in the
> design..
>
> Jason
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [RFC PATCH v2 1/2] dma-buf: Add support for private interconnects
2025-09-26 14:51 ` Christian König
@ 2025-09-26 16:00 ` Jason Gunthorpe
2025-09-29 8:16 ` Thomas Hellström
2025-09-29 8:16 ` Christian König
0 siblings, 2 replies; 21+ messages in thread
From: Jason Gunthorpe @ 2025-09-26 16:00 UTC (permalink / raw)
To: Christian König
Cc: Thomas Hellström, intel-xe, Matthew Brost, Maarten Lankhorst,
Kasireddy Vivek, Simona Vetter, dri-devel, linaro-mm-sig
On Fri, Sep 26, 2025 at 04:51:29PM +0200, Christian König wrote:
> On 26.09.25 16:41, Jason Gunthorpe wrote:
> > On Fri, Sep 26, 2025 at 03:51:21PM +0200, Thomas Hellström wrote:
> >
> >> Well both exporter and exporter has specific information WRT this. The
> >> ultimate decision is done in the exporter attach() callback, just like
> >> pcie_p2p. And the exporter acknowledges that by setting the
> >> dma_buf_attachment::interconnect_attach field. In analogy with the
> >> dma_buf_attachment::peer2peer member.
> >
> > Having a single option seems too limited to me..
>
> Yeah, agree.
>
> > I think it would be nice if the importer could supply a list of
> > 'interconnects' it can accept, eg:
> >
> > - VRAM offset within this specific VRAM memory
> > - dma_addr_t for this struct device
> > - "IOVA" for this initiator on a private interconnect
> > - PCI bar slice
> > - phys_addr_t (used between vfio, kvm, iommufd)
>
> I would rather say that the exporter should provide the list of what
> interconnects the buffer might be accessible through.
Either direction works, I sketched it like this because I thought
there were more importers than exporters, and in the flow it is easy
for the importer to provide a list on the stack
I didn't sketch further, but I think the exporter and importer should
both be providing a compatible list and then in almost all cases the
core code should do the matching.
If the importer works as I showed, then the exporter version would be
in an op:
int exporter_negotiate_op(struct dma_buf *dmabuf,
struct dma_buf_interconnect_negotiation *importer_support, size_t importer_len)
{
struct dma_buf_interconnect_negotiation exporter_support[2] = {
[0] = {.interconnect = myself->xe_vram},
[1] = {.interconnect = &dmabuf_generic_dma_addr_t, .interconnect_args = exporter_dev},
};
return dma_buf_helper_negotiate(dmabuf, exporter_support,
ARRAY_SIZE(exporter_support), importer_support, importer_len);
}
Which the dma_buf_negotiate() calls.
The core code does the matching generically, probably there is a
struct dma_buf_interconnect match() op it uses to help this process.
I don't think importer or exporter should be open coding any matching.
For example, we have some systems with multipath PCI. This could
actually support those properly. The RDMA NIC has two struct devices
it operates with different paths, so it would write out two
&dmabuf_generic_dma_addr_t's - one for each.
The GPU would do the same. The core code can have generic code to
evaluate if P2P is possible and estimate some QOR between the options.
Jason
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [RFC PATCH v2 1/2] dma-buf: Add support for private interconnects
2025-09-26 16:00 ` Jason Gunthorpe
@ 2025-09-29 8:16 ` Thomas Hellström
2025-09-29 8:20 ` Christian König
2025-09-29 8:16 ` Christian König
1 sibling, 1 reply; 21+ messages in thread
From: Thomas Hellström @ 2025-09-29 8:16 UTC (permalink / raw)
To: Jason Gunthorpe, Christian König
Cc: intel-xe, Matthew Brost, Maarten Lankhorst, Kasireddy Vivek,
Simona Vetter, dri-devel, linaro-mm-sig
On Fri, 2025-09-26 at 13:00 -0300, Jason Gunthorpe wrote:
> On Fri, Sep 26, 2025 at 04:51:29PM +0200, Christian König wrote:
> > On 26.09.25 16:41, Jason Gunthorpe wrote:
> > > On Fri, Sep 26, 2025 at 03:51:21PM +0200, Thomas Hellström wrote:
> > >
> > > > Well both exporter and exporter has specific information WRT
> > > > this. The
> > > > ultimate decision is done in the exporter attach() callback,
> > > > just like
> > > > pcie_p2p. And the exporter acknowledges that by setting the
> > > > dma_buf_attachment::interconnect_attach field. In analogy with
> > > > the
> > > > dma_buf_attachment::peer2peer member.
> > >
> > > Having a single option seems too limited to me..
> >
> > Yeah, agree.
> >
> > > I think it would be nice if the importer could supply a list of
> > > 'interconnects' it can accept, eg:
> > >
> > > - VRAM offset within this specific VRAM memory
> > > - dma_addr_t for this struct device
> > > - "IOVA" for this initiator on a private interconnect
> > > - PCI bar slice
> > > - phys_addr_t (used between vfio, kvm, iommufd)
> >
> > I would rather say that the exporter should provide the list of
> > what
> > interconnects the buffer might be accessible through.
>
> Either direction works, I sketched it like this because I thought
> there were more importers than exporters, and in the flow it is easy
> for the importer to provide a list on the stack
>
> I didn't sketch further, but I think the exporter and importer should
> both be providing a compatible list and then in almost all cases the
> core code should do the matching.
>
> If the importer works as I showed, then the exporter version would be
> in an op:
>
> int exporter_negotiate_op(struct dma_buf *dmabuf,
> struct dma_buf_interconnect_negotiation *importer_support, size_t
> importer_len)
> {
> struct dma_buf_interconnect_negotiation exporter_support[2] = {
> [0] = {.interconnect = myself->xe_vram},
> [1] = {.interconnect = &dmabuf_generic_dma_addr_t,
> .interconnect_args = exporter_dev},
> };
> return dma_buf_helper_negotiate(dmabuf, exporter_support,
> ARRAY_SIZE(exporter_support), importer_support,
> importer_len);
> }
>
> Which the dma_buf_negotiate() calls.
>
> The core code does the matching generically, probably there is a
> struct dma_buf_interconnect match() op it uses to help this process.
>
> I don't think importer or exporter should be open coding any
> matching.
>
> For example, we have some systems with multipath PCI. This could
> actually support those properly. The RDMA NIC has two struct devices
> it operates with different paths, so it would write out two
> &dmabuf_generic_dma_addr_t's - one for each.
>
> The GPU would do the same. The core code can have generic code to
> evaluate if P2P is possible and estimate some QOR between the
> options.
This sounds OK with me. I have some additional questions, though,
1) Everybody agrees that the interconnect used is a property of the
attachment? It should be negotiated during attach()?
2) dma-buf pcie-p2p allows transparent fallback to system memory dma-
buf. I think that is a good thing to keep even for other interconnects
(if possible). Like if someone wants to pull the network cable, we
could trigger a move_notify() and on next map() we'd fall back. Any
ideas around this?
Thanks,
Thomas
>
> Jason
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [RFC PATCH v2 1/2] dma-buf: Add support for private interconnects
2025-09-26 16:00 ` Jason Gunthorpe
2025-09-29 8:16 ` Thomas Hellström
@ 2025-09-29 8:16 ` Christian König
2025-09-29 12:45 ` Jason Gunthorpe
1 sibling, 1 reply; 21+ messages in thread
From: Christian König @ 2025-09-29 8:16 UTC (permalink / raw)
To: Jason Gunthorpe
Cc: Thomas Hellström, intel-xe, Matthew Brost, Maarten Lankhorst,
Kasireddy Vivek, Simona Vetter, dri-devel, linaro-mm-sig
On 26.09.25 18:00, Jason Gunthorpe wrote:
> On Fri, Sep 26, 2025 at 04:51:29PM +0200, Christian König wrote:
>> On 26.09.25 16:41, Jason Gunthorpe wrote:
>>> On Fri, Sep 26, 2025 at 03:51:21PM +0200, Thomas Hellström wrote:
>>>
>>>> Well both exporter and exporter has specific information WRT this. The
>>>> ultimate decision is done in the exporter attach() callback, just like
>>>> pcie_p2p. And the exporter acknowledges that by setting the
>>>> dma_buf_attachment::interconnect_attach field. In analogy with the
>>>> dma_buf_attachment::peer2peer member.
>>>
>>> Having a single option seems too limited to me..
>>
>> Yeah, agree.
>>
>>> I think it would be nice if the importer could supply a list of
>>> 'interconnects' it can accept, eg:
>>>
>>> - VRAM offset within this specific VRAM memory
>>> - dma_addr_t for this struct device
>>> - "IOVA" for this initiator on a private interconnect
>>> - PCI bar slice
>>> - phys_addr_t (used between vfio, kvm, iommufd)
>>
>> I would rather say that the exporter should provide the list of what
>> interconnects the buffer might be accessible through.
>
> Either direction works, I sketched it like this because I thought
> there were more importers than exporters, and in the flow it is easy
> for the importer to provide a list on the stack
The point is that the exporter manages all accesses to it's buffer and there can be more than one importer accessing it at the same time.
So when an exporter sees that it already has an importer which can only do DMA to system memory it will expose only DMA address to all other importers as well.
But in general if we start with the exporter or the importer list doesn't really matter I think.
> I didn't sketch further, but I think the exporter and importer should
> both be providing a compatible list and then in almost all cases the
> core code should do the matching.
More or less matches my idea. I would just start with the exporter providing a list of how it's buffer is accessible because it knows about other importers and can pre-reduce the list if necessary.
It can also be that this list changes when new importers come along (that was one of the big motivations for the move_notify callback).
In other words we have use cases where we need to do scanout, render and V4L to the same buffer at the same time and all three of that are different devices with different requirements.
>
> If the importer works as I showed, then the exporter version would be
> in an op:
>
> int exporter_negotiate_op(struct dma_buf *dmabuf,
> struct dma_buf_interconnect_negotiation *importer_support, size_t importer_len)
> {
> struct dma_buf_interconnect_negotiation exporter_support[2] = {
> [0] = {.interconnect = myself->xe_vram},
> [1] = {.interconnect = &dmabuf_generic_dma_addr_t, .interconnect_args = exporter_dev},
> };
> return dma_buf_helper_negotiate(dmabuf, exporter_support,
> ARRAY_SIZE(exporter_support), importer_support, importer_len);
> }
>
> Which the dma_buf_negotiate() calls.
>
> The core code does the matching generically, probably there is a
> struct dma_buf_interconnect match() op it uses to help this process.
>
> I don't think importer or exporter should be open coding any matching.
Agree, that should be somehow handled by the framework.
> For example, we have some systems with multipath PCI. This could
> actually support those properly. The RDMA NIC has two struct devices
> it operates with different paths, so it would write out two
> &dmabuf_generic_dma_addr_t's - one for each.
That is actually something we try rather hard to avoid. E.g. the exporter should offer only one path to each importer.
We can of course do load balancing on a round robin bases.
Regards,
Christian.
> The GPU would do the same. The core code can have generic code to
> evaluate if P2P is possible and estimate some QOR between the options.
>
> Jason
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [RFC PATCH v2 1/2] dma-buf: Add support for private interconnects
2025-09-29 8:16 ` Thomas Hellström
@ 2025-09-29 8:20 ` Christian König
2025-09-29 8:25 ` Thomas Hellström
0 siblings, 1 reply; 21+ messages in thread
From: Christian König @ 2025-09-29 8:20 UTC (permalink / raw)
To: Thomas Hellström, Jason Gunthorpe
Cc: intel-xe, Matthew Brost, Maarten Lankhorst, Kasireddy Vivek,
Simona Vetter, dri-devel, linaro-mm-sig
On 29.09.25 10:16, Thomas Hellström wrote:
> On Fri, 2025-09-26 at 13:00 -0300, Jason Gunthorpe wrote:
>> On Fri, Sep 26, 2025 at 04:51:29PM +0200, Christian König wrote:
>>> On 26.09.25 16:41, Jason Gunthorpe wrote:
>>>> On Fri, Sep 26, 2025 at 03:51:21PM +0200, Thomas Hellström wrote:
>>>>
>>>>> Well both exporter and exporter has specific information WRT
>>>>> this. The
>>>>> ultimate decision is done in the exporter attach() callback,
>>>>> just like
>>>>> pcie_p2p. And the exporter acknowledges that by setting the
>>>>> dma_buf_attachment::interconnect_attach field. In analogy with
>>>>> the
>>>>> dma_buf_attachment::peer2peer member.
>>>>
>>>> Having a single option seems too limited to me..
>>>
>>> Yeah, agree.
>>>
>>>> I think it would be nice if the importer could supply a list of
>>>> 'interconnects' it can accept, eg:
>>>>
>>>> - VRAM offset within this specific VRAM memory
>>>> - dma_addr_t for this struct device
>>>> - "IOVA" for this initiator on a private interconnect
>>>> - PCI bar slice
>>>> - phys_addr_t (used between vfio, kvm, iommufd)
>>>
>>> I would rather say that the exporter should provide the list of
>>> what
>>> interconnects the buffer might be accessible through.
>>
>> Either direction works, I sketched it like this because I thought
>> there were more importers than exporters, and in the flow it is easy
>> for the importer to provide a list on the stack
>>
>> I didn't sketch further, but I think the exporter and importer should
>> both be providing a compatible list and then in almost all cases the
>> core code should do the matching.
>>
>> If the importer works as I showed, then the exporter version would be
>> in an op:
>>
>> int exporter_negotiate_op(struct dma_buf *dmabuf,
>> struct dma_buf_interconnect_negotiation *importer_support, size_t
>> importer_len)
>> {
>> struct dma_buf_interconnect_negotiation exporter_support[2] = {
>> [0] = {.interconnect = myself->xe_vram},
>> [1] = {.interconnect = &dmabuf_generic_dma_addr_t,
>> .interconnect_args = exporter_dev},
>> };
>> return dma_buf_helper_negotiate(dmabuf, exporter_support,
>> ARRAY_SIZE(exporter_support), importer_support,
>> importer_len);
>> }
>>
>> Which the dma_buf_negotiate() calls.
>>
>> The core code does the matching generically, probably there is a
>> struct dma_buf_interconnect match() op it uses to help this process.
>>
>> I don't think importer or exporter should be open coding any
>> matching.
>>
>> For example, we have some systems with multipath PCI. This could
>> actually support those properly. The RDMA NIC has two struct devices
>> it operates with different paths, so it would write out two
>> &dmabuf_generic_dma_addr_t's - one for each.
>>
>> The GPU would do the same. The core code can have generic code to
>> evaluate if P2P is possible and estimate some QOR between the
>> options.
>
> This sounds OK with me. I have some additional questions, though,
>
> 1) Everybody agrees that the interconnect used is a property of the
> attachment? It should be negotiated during attach()?
Yes, attach allows the exporter to know who wants to access it's buffer.
Map/unmap then requests the actual location where the exporter has moved the buffer so that it is accessible by everybody.
> 2) dma-buf pcie-p2p allows transparent fallback to system memory dma-
> buf. I think that is a good thing to keep even for other interconnects
> (if possible). Like if someone wants to pull the network cable, we
> could trigger a move_notify() and on next map() we'd fall back. Any
> ideas around this?
We already do that if new importers come along.
E.g. you have a connection which can do PCIe P2P and then suddenly somebody attaches which can only do DMA to system memory. In that situation we use move_notify to move the buffer into system memory and imports re-map it to grasp the new location.
Regards,
Christian.
>
> Thanks,
> Thomas
>
>
>
>>
>> Jason
>
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [RFC PATCH v2 1/2] dma-buf: Add support for private interconnects
2025-09-29 8:20 ` Christian König
@ 2025-09-29 8:25 ` Thomas Hellström
2025-09-29 12:27 ` Jason Gunthorpe
0 siblings, 1 reply; 21+ messages in thread
From: Thomas Hellström @ 2025-09-29 8:25 UTC (permalink / raw)
To: Christian König, Jason Gunthorpe
Cc: intel-xe, Matthew Brost, Maarten Lankhorst, Kasireddy Vivek,
Simona Vetter, dri-devel, linaro-mm-sig
On Mon, 2025-09-29 at 10:20 +0200, Christian König wrote:
> On 29.09.25 10:16, Thomas Hellström wrote:
> > On Fri, 2025-09-26 at 13:00 -0300, Jason Gunthorpe wrote:
> > > On Fri, Sep 26, 2025 at 04:51:29PM +0200, Christian König wrote:
> > > > On 26.09.25 16:41, Jason Gunthorpe wrote:
> > > > > On Fri, Sep 26, 2025 at 03:51:21PM +0200, Thomas Hellström
> > > > > wrote:
> > > > >
> > > > > > Well both exporter and exporter has specific information
> > > > > > WRT
> > > > > > this. The
> > > > > > ultimate decision is done in the exporter attach()
> > > > > > callback,
> > > > > > just like
> > > > > > pcie_p2p. And the exporter acknowledges that by setting the
> > > > > > dma_buf_attachment::interconnect_attach field. In analogy
> > > > > > with
> > > > > > the
> > > > > > dma_buf_attachment::peer2peer member.
> > > > >
> > > > > Having a single option seems too limited to me..
> > > >
> > > > Yeah, agree.
> > > >
> > > > > I think it would be nice if the importer could supply a list
> > > > > of
> > > > > 'interconnects' it can accept, eg:
> > > > >
> > > > > - VRAM offset within this specific VRAM memory
> > > > > - dma_addr_t for this struct device
> > > > > - "IOVA" for this initiator on a private interconnect
> > > > > - PCI bar slice
> > > > > - phys_addr_t (used between vfio, kvm, iommufd)
> > > >
> > > > I would rather say that the exporter should provide the list of
> > > > what
> > > > interconnects the buffer might be accessible through.
> > >
> > > Either direction works, I sketched it like this because I thought
> > > there were more importers than exporters, and in the flow it is
> > > easy
> > > for the importer to provide a list on the stack
> > >
> > > I didn't sketch further, but I think the exporter and importer
> > > should
> > > both be providing a compatible list and then in almost all cases
> > > the
> > > core code should do the matching.
> > >
> > > If the importer works as I showed, then the exporter version
> > > would be
> > > in an op:
> > >
> > > int exporter_negotiate_op(struct dma_buf *dmabuf,
> > > struct dma_buf_interconnect_negotiation *importer_support,
> > > size_t
> > > importer_len)
> > > {
> > > struct dma_buf_interconnect_negotiation exporter_support[2]
> > > = {
> > > [0] = {.interconnect = myself->xe_vram},
> > > [1] = {.interconnect = &dmabuf_generic_dma_addr_t,
> > > .interconnect_args = exporter_dev},
> > > };
> > > return dma_buf_helper_negotiate(dmabuf, exporter_support,
> > > ARRAY_SIZE(exporter_support), importer_support,
> > > importer_len);
> > > }
> > >
> > > Which the dma_buf_negotiate() calls.
> > >
> > > The core code does the matching generically, probably there is a
> > > struct dma_buf_interconnect match() op it uses to help this
> > > process.
> > >
> > > I don't think importer or exporter should be open coding any
> > > matching.
> > >
> > > For example, we have some systems with multipath PCI. This could
> > > actually support those properly. The RDMA NIC has two struct
> > > devices
> > > it operates with different paths, so it would write out two
> > > &dmabuf_generic_dma_addr_t's - one for each.
> > >
> > > The GPU would do the same. The core code can have generic code to
> > > evaluate if P2P is possible and estimate some QOR between the
> > > options.
> >
> > This sounds OK with me. I have some additional questions, though,
> >
> > 1) Everybody agrees that the interconnect used is a property of the
> > attachment? It should be negotiated during attach()?
>
> Yes, attach allows the exporter to know who wants to access it's
> buffer.
>
> Map/unmap then requests the actual location where the exporter has
> moved the buffer so that it is accessible by everybody.
>
> > 2) dma-buf pcie-p2p allows transparent fallback to system memory
> > dma-
> > buf. I think that is a good thing to keep even for other
> > interconnects
> > (if possible). Like if someone wants to pull the network cable, we
> > could trigger a move_notify() and on next map() we'd fall back. Any
> > ideas around this?
>
> We already do that if new importers come along.
>
> E.g. you have a connection which can do PCIe P2P and then suddenly
> somebody attaches which can only do DMA to system memory. In that
> situation we use move_notify to move the buffer into system memory
> and imports re-map it to grasp the new location.
Sure, Just wandering whether we should document and require that also
for fast interconnects. So that if we use a new map_attachment()
function, like was suggested ealier, if that fails, the importer should
ideally retry with the old one to get an sg-list to system memory?
Thanks,
Thomas
>
> Regards,
> Christian.
>
> >
> > Thanks,
> > Thomas
> >
> >
> >
> > >
> > > Jason
> >
>
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [RFC PATCH v2 1/2] dma-buf: Add support for private interconnects
2025-09-29 8:25 ` Thomas Hellström
@ 2025-09-29 12:27 ` Jason Gunthorpe
0 siblings, 0 replies; 21+ messages in thread
From: Jason Gunthorpe @ 2025-09-29 12:27 UTC (permalink / raw)
To: Thomas Hellström
Cc: Christian König, intel-xe, Matthew Brost, Maarten Lankhorst,
Kasireddy Vivek, Simona Vetter, dri-devel, linaro-mm-sig
On Mon, Sep 29, 2025 at 10:25:06AM +0200, Thomas Hellström wrote:
> > > 2) dma-buf pcie-p2p allows transparent fallback to system memory
> > > dma-
> > > buf. I think that is a good thing to keep even for other
> > > interconnects
> > > (if possible). Like if someone wants to pull the network cable, we
> > > could trigger a move_notify() and on next map() we'd fall back. Any
> > > ideas around this?
> >
> > We already do that if new importers come along.
> >
> > E.g. you have a connection which can do PCIe P2P and then suddenly
> > somebody attaches which can only do DMA to system memory. In that
> > situation we use move_notify to move the buffer into system memory
> > and imports re-map it to grasp the new location.
>
> Sure, Just wandering whether we should document and require that also
> for fast interconnects.
I thin Thomas is pushing toward a question of what happens to the
interconnect during a move?
If the interconnect is established during attach, can/should move
re-negotiate it?
It seems like yes - if the attachment negotiated using some private
interconnect then move happens and the memory is on CPU and no longer
available to the private interconnect the attachment needs to
renegotiate and change to a new interconnect during the move sequence.
If the importer supports only 1 interconnect, then it shouldn't have
to implement renegotiate.
I think this needs to be called out explicitly in the flow and
documentation.
> So that if we use a new map_attachment()
> function, like was suggested ealier, if that fails, the importer should
> ideally retry with the old one to get an sg-list to system memory?
It would be amazing to avoid this hassle, if the core code could see
the exporter is old and automatically match the sg-list behavior to
generic interconnect options. And vice versa for old importers.
Jason
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [RFC PATCH v2 1/2] dma-buf: Add support for private interconnects
2025-09-29 8:16 ` Christian König
@ 2025-09-29 12:45 ` Jason Gunthorpe
2025-09-29 16:02 ` Thomas Hellström
0 siblings, 1 reply; 21+ messages in thread
From: Jason Gunthorpe @ 2025-09-29 12:45 UTC (permalink / raw)
To: Christian König
Cc: Thomas Hellström, intel-xe, Matthew Brost, Maarten Lankhorst,
Kasireddy Vivek, Simona Vetter, dri-devel, linaro-mm-sig
On Mon, Sep 29, 2025 at 10:16:30AM +0200, Christian König wrote:
> The point is that the exporter manages all accesses to it's buffer
> and there can be more than one importer accessing it at the same
> time.
>
> So when an exporter sees that it already has an importer which can
> only do DMA to system memory it will expose only DMA address to all
> other importers as well.
I would rephrase that, if the exporter supports multiple placement
options for the memory (VRAM/CPU for example) then it needs to track
which placement options all its importer support and never place the
memory someplace an active importer cannot reach.
I don't want to say that just because one importer wants to use
dma_addr_t then all private interconnect options are disabled. If the
memory is in VRAM then multiple importers using private interconnect
concurrently with dma_addr_t should be possible.
This seems like it is making the argument that the exporter does need
to know the importer capability so it can figure out what placement
options are valid.
> > I didn't sketch further, but I think the exporter and importer should
> > both be providing a compatible list and then in almost all cases the
> > core code should do the matching.
>
> More or less matches my idea. I would just start with the exporter
> providing a list of how it's buffer is accessible because it knows
> about other importers and can pre-reduce the list if necessary.
I think the importer also has to advertise what it is able to support.
A big point of the private interconnect is that it won't use
scatterlist so it needs to be a negotiated feature.
> > For example, we have some systems with multipath PCI. This could
> > actually support those properly. The RDMA NIC has two struct devices
> > it operates with different paths, so it would write out two
> > &dmabuf_generic_dma_addr_t's - one for each.
>
> That is actually something we try rather hard to avoid. E.g. the
> exporter should offer only one path to each importer.
Real systems have multipath. We need to do a NxM negotiation where
both sides offer all their paths and the best quality path is
selected.
Once the attachment is made it should be one interconnect and one
stable address within that interconnect.
In this example I'd expect the Xe GPU driver to always offer its
private interconnect and a dma_addr_t based interconnct as both
exporter and importer. The core code should select one for the
attachment.
> We can of course do load balancing on a round robin bases.
I'm not thinking about load balancing, more a 'quality of path'
metric.
Jason
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [RFC PATCH v2 1/2] dma-buf: Add support for private interconnects
2025-09-29 12:45 ` Jason Gunthorpe
@ 2025-09-29 16:02 ` Thomas Hellström
2025-09-29 16:13 ` Jason Gunthorpe
0 siblings, 1 reply; 21+ messages in thread
From: Thomas Hellström @ 2025-09-29 16:02 UTC (permalink / raw)
To: Jason Gunthorpe, Christian König
Cc: intel-xe, Matthew Brost, Maarten Lankhorst, Kasireddy Vivek,
Simona Vetter, dri-devel, linaro-mm-sig
Hi,
On Mon, 2025-09-29 at 09:45 -0300, Jason Gunthorpe wrote:
> On Mon, Sep 29, 2025 at 10:16:30AM +0200, Christian König wrote:
>
> > The point is that the exporter manages all accesses to it's buffer
> > and there can be more than one importer accessing it at the same
> > time.
> >
> > So when an exporter sees that it already has an importer which can
> > only do DMA to system memory it will expose only DMA address to all
> > other importers as well.
>
> I would rephrase that, if the exporter supports multiple placement
> options for the memory (VRAM/CPU for example) then it needs to track
> which placement options all its importer support and never place the
> memory someplace an active importer cannot reach.
>
> I don't want to say that just because one importer wants to use
> dma_addr_t then all private interconnect options are disabled. If the
> memory is in VRAM then multiple importers using private interconnect
> concurrently with dma_addr_t should be possible.
>
> This seems like it is making the argument that the exporter does need
> to know the importer capability so it can figure out what placement
> options are valid.
>
> > > I didn't sketch further, but I think the exporter and importer
> > > should
> > > both be providing a compatible list and then in almost all cases
> > > the
> > > core code should do the matching.
> >
> > More or less matches my idea. I would just start with the exporter
> > providing a list of how it's buffer is accessible because it knows
> > about other importers and can pre-reduce the list if necessary.
>
> I think the importer also has to advertise what it is able to
> support.
> A big point of the private interconnect is that it won't use
> scatterlist so it needs to be a negotiated feature.
>
> > > For example, we have some systems with multipath PCI. This could
> > > actually support those properly. The RDMA NIC has two struct
> > > devices
> > > it operates with different paths, so it would write out two
> > > &dmabuf_generic_dma_addr_t's - one for each.
> >
> > That is actually something we try rather hard to avoid. E.g. the
> > exporter should offer only one path to each importer.
>
> Real systems have multipath. We need to do a NxM negotiation where
> both sides offer all their paths and the best quality path is
> selected.
>
> Once the attachment is made it should be one interconnect and one
> stable address within that interconnect.
>
> In this example I'd expect the Xe GPU driver to always offer its
> private interconnect and a dma_addr_t based interconnct as both
> exporter and importer. The core code should select one for the
> attachment.
>
> > We can of course do load balancing on a round robin bases.
>
> I'm not thinking about load balancing, more a 'quality of path'
> metric.
This sounds like it's getting increasingly complex. TBH I think that at
least all fast interconnects we have in the planning for xe either are
fine with falling back to the current pcie-p2p / dma-buf or in worst
case system memory. The virtual interconnect we've been discussing
would probably not be able to fall back at all unless negotiation gets
somehow forwarded to the vm guest.
So I wonder whether for now it's simply sufficient to
sg_table_replacement = dma_buf_map_interconnect();
if (IS_ERROR(sg_list_replacement)) {
sg_table = dma_buf_map_attachment();
if (IS_ERROR(sg_table))
bail();
}
/Thomas
>
> Jason
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [RFC PATCH v2 1/2] dma-buf: Add support for private interconnects
2025-09-29 16:02 ` Thomas Hellström
@ 2025-09-29 16:13 ` Jason Gunthorpe
0 siblings, 0 replies; 21+ messages in thread
From: Jason Gunthorpe @ 2025-09-29 16:13 UTC (permalink / raw)
To: Thomas Hellström
Cc: Christian König, intel-xe, Matthew Brost, Maarten Lankhorst,
Kasireddy Vivek, Simona Vetter, dri-devel, linaro-mm-sig
On Mon, Sep 29, 2025 at 06:02:50PM +0200, Thomas Hellström wrote:
> > I'm not thinking about load balancing, more a 'quality of path'
> > metric.
>
> This sounds like it's getting increasingly complex. TBH I think that at
> least all fast interconnects we have in the planning for xe either are
> fine with falling back to the current pcie-p2p / dma-buf or in worst
> case system memory.
Yah, fallback is fine, but they will still want to prefer the better
paths if they are available. That's my point..
> The virtual interconnect we've been discussing
> would probably not be able to fall back at all unless negotiation gets
> somehow forwarded to the vm guest.
This is basically proposing to open code all the priority and QOR
matching in the drivers. I strongly think that will become
unmaintainable if things evolve in that direction..
What I'm suggesting is to have just enough infrastructure that we can
have the priority selection be in common code and implement the
simplest possible selection for right now. Run down the exports list
in order and the firt interconnect to match the importer's list is
selected.
All the more fancy stuff I've mentioned is someone else's problem down
the road to enhance the core matcher.
Jason
^ permalink raw reply [flat|nested] 21+ messages in thread
end of thread, other threads:[~2025-09-29 16:14 UTC | newest]
Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-09-26 8:46 [RFC PATCH v2 0/2] dma-buf private interconnect POC Thomas Hellström
2025-09-26 8:46 ` [RFC PATCH v2 1/2] dma-buf: Add support for private interconnects Thomas Hellström
2025-09-26 12:56 ` Christian König
2025-09-26 13:51 ` Thomas Hellström
2025-09-26 14:41 ` Jason Gunthorpe
2025-09-26 14:51 ` Christian König
2025-09-26 16:00 ` Jason Gunthorpe
2025-09-29 8:16 ` Thomas Hellström
2025-09-29 8:20 ` Christian König
2025-09-29 8:25 ` Thomas Hellström
2025-09-29 12:27 ` Jason Gunthorpe
2025-09-29 8:16 ` Christian König
2025-09-29 12:45 ` Jason Gunthorpe
2025-09-29 16:02 ` Thomas Hellström
2025-09-29 16:13 ` Jason Gunthorpe
2025-09-26 8:46 ` [RFC PATCH v2 2/2] drm/xe/dma-buf: Add generic interconnect support framework Thomas Hellström
2025-09-26 9:34 ` ✗ CI.checkpatch: warning for dma-buf private interconnect POC (rev2) Patchwork
2025-09-26 9:35 ` ✓ CI.KUnit: success " Patchwork
2025-09-26 9:50 ` ✗ CI.checksparse: warning " Patchwork
2025-09-26 10:11 ` ✓ Xe.CI.BAT: success " Patchwork
2025-09-26 14:23 ` ✗ Xe.CI.Full: failure " Patchwork
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox