* [PATCH v2 0/2] drm/xe: Expose retired VRAM pages via drm-ras
@ 2026-10-07 8:03 Aravind Iddamsetty
2026-10-07 8:03 ` [PATCH v2 1/2] " Aravind Iddamsetty
` (5 more replies)
0 siblings, 6 replies; 9+ messages in thread
From: Aravind Iddamsetty @ 2026-10-07 8:03 UTC (permalink / raw)
To: intel-xe, dri-devel, netdev, amd-gfx
Cc: simona.vetter, airlied, tejas.upadhyay, himal.prasad.ghimiray,
rodrigo.vivi, riana.tauro, raag.jadav, joshua.santosh.ranjan,
ashwin.kumar.kulkarni, pratik.bari, Hawking.Zhang, tao.zhou1,
YiPeng.Chai, jinzhou.su, cesun102, lijo.lazar, alexander.deucher,
christian.koenig
The memory page offlining support tracks bad VRAM pages and currently
only exposes them through debugfs (vram_bad_pages), which is not a
stable ABI. Add a proper userspace interface using the drm-ras
generic netlink family.
Introduce a new node type DRM_RAS_NODE_TYPE_RETIRED_RESOURCES which
enumerates hardware resources that have been permanently taken out of
service. Each node reports a single resource type, identified by its
node-name, so the resource type is implied by the node rather than
carried per entry. The per-entry payload stays extensible: each entry
carries a single type-specific nested attribute, so future resource
types can be added without touching existing consumers. VRAM pages are
the first supported type, reported via the vram-page nest as
{address, size, status} where status is one of retired/pending/failed.
A single operation is added on the node:
- GET_RETIRED_RESOURCES: dump the resources retired on the node. The
dump opens with a leading capacity summary entry (max-pages
inside the vram-page nest, i.e. the maximum number of pages that
can be offlined, with no address/size/status), followed by one
entry per retired resource. Userspace derives the retired/queued
counts by counting entries.
The netlink interface is described by the YAML spec
Documentation/netlink/specs/drm_ras.yaml. The following files are
generated from that spec with tools/net/ynl/ynl-regen.sh and must not
be edited by hand:
- include/uapi/drm/drm_ras.h (uapi attribute/command enums)
- drivers/gpu/drm/drm_ras_nl.c (generated policy and op table)
- drivers/gpu/drm/drm_ras_nl.h (generated declarations)
Eg:
$ sudo ./tools/net/ynl/pyynl/cli.py \
--spec Documentation/netlink/specs/drm_ras.yaml \
--dump list-nodes
[{'device-name': '0000:03:00.0', 'node-id': 0, 'node-name':'correctable-errors',
'node-type': 'error-counter'},
{'device-name': '0000:03:00.0', 'node-id': 1, 'node-name':'uncorrectable-errors
', 'node-type': 'error-counter'},
{'device-name': '0000:03:00.0', 'node-id': 2, 'node-name':'vram-retired-pages',
'node-type': 'retired-resources'}]
$ sudo ./tools/net/ynl/pyynl/cli.py --spec \
Documentation/netlink/specs/drm_ras.yaml --dump get-retired-resources \
--json '{"node-id": 2}'
[{'node-id': 2, 'vram-page': {'max-pages': 100}},
{'node-id': 2, 'vram-page': {'address': 12807041024, 'size': 4096,
'status': 'retired'}},
{'node-id': 2, 'vram-page': {'address': 12809400320, 'size': 4096,
'status': 'retired'}}]
The first entry is the capacity summary (max-pages); subsequent entries
are the retired pages.
v2:
- Rebase on drm-tip
- Drop the per-entry resource-type discriminator attribute; the type is
now implied by the node (node-name), which reports a single type.
- Fold all VRAM-page fields, including the retirement status, into the
vram-page nested attribute; the top-level entry is just
{node-id, vram-page}. (Rodrigo)
- Drop the separate GET_RETIRED_RESOURCES_INFO operation. The capacity
(max-pages) is now emitted as a leading summary entry inside
GET_RETIRED_RESOURCES (max-pages in the vram-page nest, no status);
offlined/queued counts are derived by counting entries.
Cc: Tejas Upadhyay <tejas.upadhyay@intel.com>
Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Riana Tauro <riana.tauro@intel.com>
Cc: Raag Jadav <raag.jadav@intel.com>
Cc: Joshua Santhosh Ranjan <joshua.santosh.ranjan@intel.com>
Cc: Ashwin Kumar Kulkarni <ashwin.kumar.kulkarni@intel.com>
Cc: Pratik Bari <pratik.bari@intel.com>
Aravind Iddamsetty (2):
drm/xe: Expose retired VRAM pages via drm-ras
drm/xe: Remove bad VRAM pages debugfs interface
Documentation/netlink/specs/drm_ras.yaml | 91 ++++++++++-
drivers/gpu/drm/drm_ras.c | 174 ++++++++++++++++++++-
drivers/gpu/drm/drm_ras_nl.c | 12 ++
drivers/gpu/drm/drm_ras_nl.h | 2 +
drivers/gpu/drm/xe/xe_debugfs.c | 2 -
drivers/gpu/drm/xe/xe_drm_ras.c | 77 +++++++++
drivers/gpu/drm/xe/xe_drm_ras_types.h | 3 +
drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 190 ++++++++++++++---------
drivers/gpu/drm/xe/xe_ttm_vram_mgr.h | 4 +-
include/drm/drm_ras.h | 74 +++++++++
include/uapi/drm/drm_ras.h | 48 +++++-
11 files changed, 592 insertions(+), 85 deletions(-)
--
2.25.1
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v2 1/2] drm/xe: Expose retired VRAM pages via drm-ras
2026-10-07 8:03 [PATCH v2 0/2] drm/xe: Expose retired VRAM pages via drm-ras Aravind Iddamsetty
@ 2026-10-07 8:03 ` Aravind Iddamsetty
2026-10-07 9:28 ` Christian König
2026-10-07 8:03 ` [PATCH v2 2/2] drm/xe: Remove bad VRAM pages debugfs interface Aravind Iddamsetty
` (4 subsequent siblings)
5 siblings, 1 reply; 9+ messages in thread
From: Aravind Iddamsetty @ 2026-10-07 8:03 UTC (permalink / raw)
To: intel-xe, dri-devel, netdev, amd-gfx
Cc: simona.vetter, airlied, tejas.upadhyay, himal.prasad.ghimiray,
rodrigo.vivi, riana.tauro, raag.jadav, joshua.santosh.ranjan,
ashwin.kumar.kulkarni, pratik.bari, Hawking.Zhang, tao.zhou1,
YiPeng.Chai, jinzhou.su, cesun102, lijo.lazar, alexander.deucher,
christian.koenig
The memory page offlining support tracks bad VRAM pages and currently
only exposes them through debugfs (vram_bad_pages), which is not a
stable ABI. Add a proper userspace interface using the drm-ras
generic netlink family.
Introduce a new node type DRM_RAS_NODE_TYPE_RETIRED_RESOURCES which
enumerates hardware resources that have been permanently taken out of
service. Each node reports a single resource type, identified by its
node-name, so the resource type is implied by the node rather than
carried per entry. The per-entry payload stays extensible: each entry
carries a single type-specific nested attribute, so future resource
types can be added without touching existing consumers. VRAM pages are
the first supported type, reported via the vram-page nest as
{address, size, status} where status is one of retired/pending/failed.
A single operation is added on the node:
- GET_RETIRED_RESOURCES: dump the resources retired on the node. The
dump opens with a leading capacity summary entry (max-pages
inside the vram-page nest, i.e. the maximum number of pages that
can be offlined, with no address/size/status), followed by one
entry per retired resource. Userspace derives the retired/queued
counts by counting entries.
The netlink interface is described by the YAML spec
Documentation/netlink/specs/drm_ras.yaml. The following files are
generated from that spec with tools/net/ynl/ynl-regen.sh and must not
be edited by hand:
- include/uapi/drm/drm_ras.h (uapi attribute/command enums)
- drivers/gpu/drm/drm_ras_nl.c (generated policy and op table)
- drivers/gpu/drm/drm_ras_nl.h (generated declarations)
Eg:
$ sudo ./tools/net/ynl/pyynl/cli.py \
--spec Documentation/netlink/specs/drm_ras.yaml \
--dump list-nodes
[{'device-name': '0000:03:00.0', 'node-id': 0, 'node-name':'correctable-errors',
'node-type': 'error-counter'},
{'device-name': '0000:03:00.0', 'node-id': 1, 'node-name':'uncorrectable-errors
', 'node-type': 'error-counter'},
{'device-name': '0000:03:00.0', 'node-id': 2, 'node-name':'vram-retired-pages',
'node-type': 'retired-resources'}]
$ sudo ./tools/net/ynl/pyynl/cli.py --spec \
Documentation/netlink/specs/drm_ras.yaml --dump get-retired-resources \
--json '{"node-id": 2}'
[{'node-id': 2, 'vram-page': {'max-pages': 100}},
{'node-id': 2, 'vram-page': {'address': 12807041024, 'size': 4096,
'status': 'retired'}},
{'node-id': 2, 'vram-page': {'address': 12809400320, 'size': 4096,
'status': 'retired'}}]
The first entry is the capacity summary (max-pages); subsequent entries
are the retired pages.
v2:
- Drop the per-entry resource-type discriminator attribute; the type is
now implied by the node (node-name), which reports a single type.
- Fold all VRAM-page fields, including the retirement status, into the
vram-page nested attribute; the top-level entry is just
{node-id, vram-page}. (Rodrigo)
- Drop the separate GET_RETIRED_RESOURCES_INFO operation. The capacity
(max-pages) is now emitted as a leading summary entry inside
GET_RETIRED_RESOURCES (max-pages in the vram-page nest, no status);
offlined/queued counts are derived by counting entries.
Cc: Tejas Upadhyay <tejas.upadhyay@intel.com>
Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Riana Tauro <riana.tauro@intel.com>
Cc: Raag Jadav <raag.jadav@intel.com>
Cc: Joshua Santhosh Ranjan <joshua.santosh.ranjan@intel.com>
Cc: Ashwin Kumar Kulkarni <ashwin.kumar.kulkarni@intel.com>
Cc: Pratik Bari <pratik.bari@intel.com>
Signed-off-by: Aravind Iddamsetty <aravind.iddamsetty@linux.intel.com>
Assisted-by: Copilot:claude-opus-4.8
---
Documentation/netlink/specs/drm_ras.yaml | 91 +++++++++++-
drivers/gpu/drm/drm_ras.c | 174 ++++++++++++++++++++++-
drivers/gpu/drm/drm_ras_nl.c | 12 ++
drivers/gpu/drm/drm_ras_nl.h | 2 +
drivers/gpu/drm/xe/xe_drm_ras.c | 77 ++++++++++
drivers/gpu/drm/xe/xe_drm_ras_types.h | 3 +
drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 119 ++++++++++++++++
drivers/gpu/drm/xe/xe_ttm_vram_mgr.h | 3 +
include/drm/drm_ras.h | 74 ++++++++++
include/uapi/drm/drm_ras.h | 48 ++++++-
10 files changed, 592 insertions(+), 11 deletions(-)
diff --git a/Documentation/netlink/specs/drm_ras.yaml b/Documentation/netlink/specs/drm_ras.yaml
index 4c2ac9a1ba3f..42ab1cceaea7 100644
--- a/Documentation/netlink/specs/drm_ras.yaml
+++ b/Documentation/netlink/specs/drm_ras.yaml
@@ -16,11 +16,34 @@ definitions:
type: enum
name: node-type
value-start: 1
- entries: [error-counter]
+ entries: [error-counter, retired-resources]
doc: >-
- Type of the node. Currently, only error-counter nodes are
- supported, which expose reliability counters for a hardware/software
- component.
+ Type of the node.
+ error-counter nodes expose reliability counters for a
+ hardware/software component. retired-resources nodes enumerate
+ hardware resources (e.g. VRAM pages) that have been permanently
+ taken out of service.
+ -
+ type: enum
+ name: retired-resource-status
+ value-start: 0
+ entries: [retired, pending, failed]
+ doc: >-
+ Status of a retired resource entry. retired means the resource is
+ permanently reserved and out of service; pending means retirement is
+ queued but the reservation is not yet complete; failed means the
+ reservation failed and the resource may still be in use.
+ -
+ type: enum
+ name: retired-resource-type
+ value-start: 1
+ entries: [vram-page]
+ doc: >-
+ Type of a retired resource entry. The type selects which type-specific
+ nested attribute is present. New hardware resource types can be added
+ here, each carrying its own nested attribute set, without affecting
+ existing types. vram-page describes a VRAM page by device address and
+ size.
attribute-sets:
-
@@ -100,6 +123,45 @@ attribute-sets:
name: error-value
type: u32
doc: Current value of the error counter.
+ -
+ name: retired-resource-attrs
+ attributes:
+ -
+ name: node-id
+ type: u32
+ doc: Node ID targeted by this retired resource operation.
+ -
+ name: vram-page
+ type: nest
+ nested-attributes: vram-page-attrs
+ doc: >-
+ Type-specific payload. The resource type is identified by the
+ node (its node-name); each node reports a single resource type.
+ -
+ name: vram-page-attrs
+ attributes:
+ -
+ name: address
+ type: u64
+ doc: Device address of the retired VRAM page (e.g. DPA).
+ -
+ name: size
+ type: u64
+ doc: Size of the retired VRAM page in bytes.
+ -
+ name: max-pages
+ type: u32
+ doc: >-
+ Maximum VRAM pages that can be retired. Present only in the
+ leading summary entry of the dump (no address/size/status).
+ -
+ name: status
+ type: u32
+ doc: Retirement status of the retired VRAM page.
+ enum: retired-resource-status
+ -
+ name: pad
+ type: pad
operations:
list:
@@ -199,6 +261,27 @@ operations:
- node-id
- error-id
- error-threshold
+ -
+ name: get-retired-resources
+ doc: >-
+ Enumerate the resources (e.g. VRAM pages) that a retired-resources
+ node has taken out of service. The dump begins with a leading
+ capacity summary entry (max-pages, with no address/size/status),
+ followed by one entry per retired resource (address, size and a
+ retirement status). The resource type is identified by the node
+ (its node-name); each node reports a single type. User space
+ derives the retired/queued counts by counting entries, and must
+ obtain the node ID from list-nodes first.
+ attribute-set: retired-resource-attrs
+ flags: [admin-perm]
+ dump:
+ request:
+ attributes:
+ - node-id
+ reply:
+ attributes:
+ - node-id
+ - vram-page
mcast-groups:
list:
diff --git a/drivers/gpu/drm/drm_ras.c b/drivers/gpu/drm/drm_ras.c
index b099eb67836e..46ee897a13c9 100644
--- a/drivers/gpu/drm/drm_ras.c
+++ b/drivers/gpu/drm/drm_ras.c
@@ -63,7 +63,6 @@
* Node type:
*
* - ERROR_COUNTER:
- * + Currently, only error counters are supported.
* + The driver must implement the query_error_counter() callback to provide
* the name and the value of the error counter.
* + The driver must provide a error_counter_range.last value informing the
@@ -81,6 +80,13 @@
* that are raised by the hardware.
* + The driver is responsible for error threshold bounds checking.
*
+ * - RETIRED_RESOURCES:
+ * + Enumerates hardware resources (e.g. VRAM pages) permanently taken out
+ * of service.
+ * + The driver must implement the query_retired_resource() callback, which
+ * is called with an incrementing index and returns -ENOENT once the last
+ * entry has been reported.
+ *
* Netlink handlers:
*
* - drm_ras_nl_list_nodes_dumpit(): Implements the LIST_NODES
@@ -95,6 +101,9 @@
* operation, fetching the error threshold of a specific counter.
* - drm_ras_nl_set_error_threshold_doit(): Implements the SET_ERROR_THRESHOLD doit
* operation, setting the error threshold of a specific counter.
+ * - drm_ras_nl_get_retired_resources_dumpit(): Implements the
+ * GET_RETIRED_RESOURCES dumpit operation, enumerating retired resources of a
+ * specific node.
*/
static DEFINE_XARRAY_ALLOC(drm_ras_xa);
@@ -105,6 +114,10 @@ static DEFINE_XARRAY_ALLOC(drm_ras_xa);
struct drm_ras_ctx {
/* Which xarray id to restart the dump from */
unsigned long restart;
+ /* Ordering-key cursor for retired-resource dumps (inclusive lower bound) */
+ u64 cursor;
+ /* Whether the leading retired-resource summary has been emitted */
+ bool summary_sent;
};
/**
@@ -564,6 +577,148 @@ int drm_ras_nl_clear_error_counter_doit(struct sk_buff *skb,
return node->clear_error_counter(node, error_id);
}
+static int msg_put_retired_resource(struct sk_buff *skb, u32 node_id,
+ const struct drm_ras_retired_resource *res)
+{
+ struct nlattr *nest;
+
+ if (nla_put_u32(skb, DRM_RAS_A_RETIRED_RESOURCE_ATTRS_NODE_ID, node_id))
+ return -EMSGSIZE;
+
+ /* Type is implied by the node (its node_name); it selects the nest. */
+ switch (res->type) {
+ case DRM_RAS_RETIRED_RESOURCE_TYPE_VRAM_PAGE:
+ nest = nla_nest_start(skb,
+ DRM_RAS_A_RETIRED_RESOURCE_ATTRS_VRAM_PAGE);
+ if (!nest)
+ return -EMSGSIZE;
+
+ if (res->is_summary) {
+ /* Leading capacity summary: max retirable pages. */
+ if (nla_put_u32(skb, DRM_RAS_A_VRAM_PAGE_ATTRS_MAX_PAGES,
+ res->vram_page.max_pages)) {
+ nla_nest_cancel(skb, nest);
+ return -EMSGSIZE;
+ }
+ } else if (nla_put_u64_64bit(skb, DRM_RAS_A_VRAM_PAGE_ATTRS_ADDRESS,
+ res->vram_page.address,
+ DRM_RAS_A_VRAM_PAGE_ATTRS_PAD) ||
+ nla_put_u64_64bit(skb, DRM_RAS_A_VRAM_PAGE_ATTRS_SIZE,
+ res->vram_page.size,
+ DRM_RAS_A_VRAM_PAGE_ATTRS_PAD) ||
+ nla_put_u32(skb, DRM_RAS_A_VRAM_PAGE_ATTRS_STATUS,
+ res->status)) {
+ nla_nest_cancel(skb, nest);
+ return -EMSGSIZE;
+ }
+
+ nla_nest_end(skb, nest);
+ break;
+ default:
+ /* Unknown type: only the common node-id is reported. */
+ break;
+ }
+
+ return 0;
+}
+
+/**
+ * drm_ras_nl_get_retired_resources_dumpit() - Dump retired resources of a node
+ * @skb: Netlink message buffer
+ * @cb: Callback context for multi-part dumps
+ *
+ * Iterates over all retired resources of a %DRM_RAS_NODE_TYPE_RETIRED_RESOURCES
+ * node and appends their attributes to the given netlink message buffer. The
+ * dump opens with an optional leading type-specific capacity summary (e.g. the
+ * maximum retirable page count), followed by one entry per retired resource;
+ * each resource entry carries a status plus one type-specific nested attribute
+ * selected by the node's type. Uses @cb->ctx to store an ordering-key cursor
+ * so multi-part dumps resume by key rather than position, staying correct if
+ * the list changes concurrently between message parts.
+ *
+ * Return: 0 if all entries fit in @skb, number of bytes added to @skb if
+ * the buffer filled up (requires multi-part continuation), or
+ * a negative error code on failure.
+ */
+int drm_ras_nl_get_retired_resources_dumpit(struct sk_buff *skb,
+ struct netlink_callback *cb)
+{
+ const struct genl_info *info = genl_info_dump(cb);
+ struct drm_ras_ctx *ctx = (void *)cb->ctx;
+ struct drm_ras_retired_resource res;
+ struct drm_ras_node *node;
+ struct nlattr *hdr;
+ u32 node_id;
+ u64 cursor;
+ int ret = 0;
+
+ if (!info->attrs ||
+ GENL_REQ_ATTR_CHECK(info, DRM_RAS_A_RETIRED_RESOURCE_ATTRS_NODE_ID))
+ return -EINVAL;
+
+ node_id = nla_get_u32(info->attrs[DRM_RAS_A_RETIRED_RESOURCE_ATTRS_NODE_ID]);
+
+ node = xa_load(&drm_ras_xa, node_id);
+ if (!node || node->type != DRM_RAS_NODE_TYPE_RETIRED_RESOURCES ||
+ !node->query_retired_resource)
+ return -ENOENT;
+
+ /* Leading type-specific capacity summary (e.g. max pages), emitted once. */
+ if (!ctx->summary_sent && node->query_retired_summary) {
+ memset(&res, 0, sizeof(res));
+ ret = node->query_retired_summary(node, &res);
+ if (ret == 0) {
+ hdr = genlmsg_iput(skb, info);
+ if (!hdr)
+ return -EMSGSIZE; /* retry summary next part */
+ ret = msg_put_retired_resource(skb, node_id, &res);
+ if (ret) {
+ genlmsg_cancel(skb, hdr);
+ return ret;
+ }
+ genlmsg_end(skb, hdr);
+ } else if (ret != -ENOENT) {
+ return ret;
+ }
+ ctx->summary_sent = true;
+ }
+
+ cursor = ctx->cursor;
+ for (;;) {
+ memset(&res, 0, sizeof(res));
+ ret = node->query_retired_resource(node, cursor, &res);
+ /* -ENOENT marks the end of the list. */
+ if (ret == -ENOENT) {
+ ret = 0;
+ break;
+ }
+ if (ret)
+ return ret;
+
+ hdr = genlmsg_iput(skb, info);
+ if (!hdr) {
+ ret = -EMSGSIZE;
+ break;
+ }
+
+ ret = msg_put_retired_resource(skb, node_id, &res);
+ if (ret) {
+ genlmsg_cancel(skb, hdr);
+ break;
+ }
+
+ genlmsg_end(skb, hdr);
+ /* Advance past this entry; keys are unique. */
+ cursor = res.key + 1;
+ }
+
+ /* On buffer-full the current entry was not emitted; resume at it. */
+ if (ret == -EMSGSIZE)
+ ctx->cursor = cursor;
+
+ return ret;
+}
+
/**
* drm_ras_nl_get_error_threshold_doit() - Query error threshold of a counter
* @skb: Netlink message buffer
@@ -631,15 +786,24 @@ int drm_ras_node_register(struct drm_ras_node *node)
if (!node->device_name || !node->node_name)
return -EINVAL;
- /* Currently, only Error Counter Endpoints are supported */
- if (node->type != DRM_RAS_NODE_TYPE_ERROR_COUNTER)
- return -EINVAL;
-
/* Mandatory entries for Error Counter Node */
if (node->type == DRM_RAS_NODE_TYPE_ERROR_COUNTER &&
(!node->error_counter_range.last || !node->query_error_counter))
return -EINVAL;
+ /* Mandatory entries for Retired Resources Node */
+ if (node->type == DRM_RAS_NODE_TYPE_RETIRED_RESOURCES &&
+ !node->query_retired_resource)
+ return -EINVAL;
+
+ switch (node->type) {
+ case DRM_RAS_NODE_TYPE_ERROR_COUNTER:
+ case DRM_RAS_NODE_TYPE_RETIRED_RESOURCES:
+ break;
+ default:
+ return -EINVAL;
+ }
+
return xa_alloc(&drm_ras_xa, &node->id, node, xa_limit_32b, GFP_KERNEL);
}
EXPORT_SYMBOL(drm_ras_node_register);
diff --git a/drivers/gpu/drm/drm_ras_nl.c b/drivers/gpu/drm/drm_ras_nl.c
index c9f5e0ceb3b5..2f23f5681fa4 100644
--- a/drivers/gpu/drm/drm_ras_nl.c
+++ b/drivers/gpu/drm/drm_ras_nl.c
@@ -41,6 +41,11 @@ static const struct nla_policy drm_ras_set_error_threshold_nl_policy[DRM_RAS_A_E
[DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_THRESHOLD] = { .type = NLA_U32, },
};
+/* DRM_RAS_CMD_GET_RETIRED_RESOURCES - dump */
+static const struct nla_policy drm_ras_get_retired_resources_nl_policy[DRM_RAS_A_RETIRED_RESOURCE_ATTRS_NODE_ID + 1] = {
+ [DRM_RAS_A_RETIRED_RESOURCE_ATTRS_NODE_ID] = { .type = NLA_U32, },
+};
+
/* Ops table for drm_ras */
static const struct genl_split_ops drm_ras_nl_ops[] = {
{
@@ -83,6 +88,13 @@ static const struct genl_split_ops drm_ras_nl_ops[] = {
.maxattr = DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_THRESHOLD,
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
},
+ {
+ .cmd = DRM_RAS_CMD_GET_RETIRED_RESOURCES,
+ .dumpit = drm_ras_nl_get_retired_resources_dumpit,
+ .policy = drm_ras_get_retired_resources_nl_policy,
+ .maxattr = DRM_RAS_A_RETIRED_RESOURCE_ATTRS_NODE_ID,
+ .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DUMP,
+ },
};
static const struct genl_multicast_group drm_ras_nl_mcgrps[] = {
diff --git a/drivers/gpu/drm/drm_ras_nl.h b/drivers/gpu/drm/drm_ras_nl.h
index 9aef097ea10f..96b0fe017ea8 100644
--- a/drivers/gpu/drm/drm_ras_nl.h
+++ b/drivers/gpu/drm/drm_ras_nl.h
@@ -24,6 +24,8 @@ int drm_ras_nl_get_error_threshold_doit(struct sk_buff *skb,
struct genl_info *info);
int drm_ras_nl_set_error_threshold_doit(struct sk_buff *skb,
struct genl_info *info);
+int drm_ras_nl_get_retired_resources_dumpit(struct sk_buff *skb,
+ struct netlink_callback *cb);
enum {
DRM_RAS_NLGRP_ERROR_REPORT,
diff --git a/drivers/gpu/drm/xe/xe_drm_ras.c b/drivers/gpu/drm/xe/xe_drm_ras.c
index 7f3695707611..fba58e9eb7e0 100644
--- a/drivers/gpu/drm/xe/xe_drm_ras.c
+++ b/drivers/gpu/drm/xe/xe_drm_ras.c
@@ -12,6 +12,7 @@
#include "xe_device_types.h"
#include "xe_drm_ras.h"
#include "xe_ras.h"
+#include "xe_ttm_vram_mgr.h"
static const char * const error_components[] = DRM_XE_RAS_ERROR_COMPONENT_NAMES;
static const char * const error_severity[] = DRM_XE_RAS_ERROR_SEVERITY_NAMES;
@@ -188,6 +189,75 @@ static void cleanup_node(struct drm_device *drm, void *node)
cleanup_node_param(node);
}
+static int query_retired_resource(struct drm_ras_node *node, u64 cursor,
+ struct drm_ras_retired_resource *res)
+{
+ struct xe_device *xe = node->priv;
+ int ret;
+
+ ret = xe_ttm_vram_get_retired_page(xe, cursor, &res->vram_page.address,
+ &res->vram_page.size, &res->status);
+ if (ret)
+ return ret;
+
+ res->type = DRM_RAS_RETIRED_RESOURCE_TYPE_VRAM_PAGE;
+ res->key = res->vram_page.address;
+
+ return 0;
+}
+
+static int query_retired_summary(struct drm_ras_node *node,
+ struct drm_ras_retired_resource *res)
+{
+ struct xe_device *xe = node->priv;
+
+ res->type = DRM_RAS_RETIRED_RESOURCE_TYPE_VRAM_PAGE;
+ res->is_summary = 1;
+ res->vram_page.max_pages = xe_ttm_vram_get_max_bad_pages(xe);
+
+ return 0;
+}
+
+static int register_retired_node(struct xe_device *xe)
+{
+ struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
+ struct xe_drm_ras *ras = &xe->ras;
+ struct drm_ras_node *node;
+ const char *device_name;
+ int ret;
+
+ /* Retired VRAM pages are only tracked on platforms with page offline */
+ if (xe->info.platform != XE_CRESCENTISLAND)
+ return 0;
+
+ node = drmm_kzalloc(&xe->drm, sizeof(*node), GFP_KERNEL);
+ if (!node)
+ return -ENOMEM;
+
+ device_name = kasprintf(GFP_KERNEL, "%04x:%02x:%02x.%d",
+ pci_domain_nr(pdev->bus), pdev->bus->number,
+ PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn));
+ if (!device_name)
+ return -ENOMEM;
+
+ node->device_name = device_name;
+ node->node_name = "vram-retired-pages";
+ node->type = DRM_RAS_NODE_TYPE_RETIRED_RESOURCES;
+ node->query_retired_resource = query_retired_resource;
+ node->query_retired_summary = query_retired_summary;
+ node->priv = xe;
+
+ ret = drm_ras_node_register(node);
+ if (ret) {
+ cleanup_node_param(node);
+ return ret;
+ }
+
+ ras->retired_node = node;
+
+ return drmm_add_action_or_reset(&xe->drm, cleanup_node, node);
+}
+
static int register_nodes(struct xe_device *xe)
{
struct xe_drm_ras *ras = &xe->ras;
@@ -279,5 +349,12 @@ int xe_drm_ras_init(struct xe_device *xe)
return err;
}
+ err = register_retired_node(xe);
+ if (err) {
+ drm_err(&xe->drm, "Failed to register DRM RAS retired node (%pe)\n",
+ ERR_PTR(err));
+ return err;
+ }
+
return 0;
}
diff --git a/drivers/gpu/drm/xe/xe_drm_ras_types.h b/drivers/gpu/drm/xe/xe_drm_ras_types.h
index 0be218ba2db7..186024640f87 100644
--- a/drivers/gpu/drm/xe/xe_drm_ras_types.h
+++ b/drivers/gpu/drm/xe/xe_drm_ras_types.h
@@ -41,6 +41,9 @@ struct xe_drm_ras {
/** @node: DRM RAS node */
struct drm_ras_node *node;
+ /** @retired_node: DRM RAS retired-resources node for VRAM bad pages */
+ struct drm_ras_node *retired_node;
+
/** @info: info array for all types of errors */
struct xe_drm_ras_counter *info[DRM_XE_RAS_ERR_SEV_MAX];
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
index 9a514d983e90..b56b543a56a2 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
@@ -15,6 +15,8 @@
#include <drm/ttm/ttm_placement.h>
#include <drm/ttm/ttm_range_manager.h>
+#include <uapi/drm/drm_ras.h>
+
#include "regs/xe_regs.h"
#include "xe_bo.h"
#include "xe_configfs.h"
@@ -624,6 +626,123 @@ u64 xe_ttm_vram_get_avail(struct ttm_resource_manager *man)
return avail;
}
+/**
+ * xe_ttm_vram_get_retired_page - Fetch the next retired VRAM page by address
+ * @xe: xe device instance
+ * @min_addr: inclusive lower bound; return the page with the smallest DPA >=
+ * this value
+ * @addr: output, device physical address (DPA) of the page
+ * @size: output, size of the page in bytes
+ * @status: output, retirement status (enum drm_ras_retired_resource_status)
+ *
+ * Scans the offlined and queued page lists across all tiles and returns the
+ * entry with the smallest DPA that is >= @min_addr. Because retired pages have
+ * unique addresses, iterating with @min_addr = previous_addr + 1 walks every
+ * entry in a stable address order, which is robust against concurrent
+ * insertion or removal between calls. Intended to back the drm-ras
+ * retired-resources node enumeration.
+ *
+ * Return: 0 on success, -ENOENT when no page has a DPA >= @min_addr.
+ */
+int xe_ttm_vram_get_retired_page(struct xe_device *xe, u64 min_addr,
+ u64 *addr, u64 *size, u32 *status)
+{
+ struct xe_ttm_vram_offline_resource *pos;
+ struct ttm_resource_manager *man;
+ struct gpu_buddy_block *block;
+ struct xe_ttm_vram_mgr *mgr;
+ u64 best_addr = 0, best_size = 0;
+ struct xe_tile *tile;
+ u32 best_status = 0;
+ bool found = false;
+ u8 id;
+
+ for_each_tile(tile, xe, id) {
+ struct xe_vram_region *vr = tile->mem.vram;
+ u64 a, s;
+
+ man = ttm_manager_type(&xe->ttm, XE_PL_VRAM0 + id);
+ if (!man || !vr)
+ continue;
+ mgr = to_xe_ttm_vram_mgr(man);
+
+ rcu_read_lock();
+
+ list_for_each_entry_rcu(pos, &mgr->offlined_pages, offlined_link) {
+ block = list_first_entry_or_null(&pos->blocks,
+ struct gpu_buddy_block, link);
+ if (block) {
+ a = gpu_buddy_block_offset(block) + vr->dpa_base;
+ s = gpu_buddy_block_size(&mgr->mm, block);
+ } else {
+ a = pos->addr + vr->dpa_base;
+ s = SZ_4K;
+ }
+
+ if (a >= min_addr && (!found || a < best_addr)) {
+ best_addr = a;
+ best_size = s;
+ best_status = DRM_RAS_RETIRED_RESOURCE_STATUS_RETIRED;
+ found = true;
+ }
+ }
+
+ list_for_each_entry_rcu(pos, &mgr->queued_pages, queued_link) {
+ block = list_first_entry_or_null(&pos->blocks,
+ struct gpu_buddy_block, link);
+ if (block) {
+ a = gpu_buddy_block_offset(block) + vr->dpa_base;
+ s = gpu_buddy_block_size(&mgr->mm, block);
+ } else {
+ a = pos->addr + vr->dpa_base;
+ s = SZ_4K;
+ }
+
+ if (a >= min_addr && (!found || a < best_addr)) {
+ best_addr = a;
+ best_size = s;
+ best_status = pos->status == XE_PAGE_RESERVE_FAIL ?
+ DRM_RAS_RETIRED_RESOURCE_STATUS_FAILED :
+ DRM_RAS_RETIRED_RESOURCE_STATUS_PENDING;
+ found = true;
+ }
+ }
+
+ rcu_read_unlock();
+ }
+
+ if (!found)
+ return -ENOENT;
+
+ *addr = best_addr;
+ *size = best_size;
+ *status = best_status;
+
+ return 0;
+}
+
+/**
+ * xe_ttm_vram_get_max_bad_pages - Fetch the FW-provided max offline page count
+ * @xe: xe device instance
+ *
+ * Returns the static maximum number of VRAM pages that can be offlined, as
+ * provided by FW at init. Intended to back the drm-ras retired-resources
+ * capacity summary. Read from the root (VRAM0) manager; the value is a static
+ * device-wide count.
+ *
+ * Return: max offline page count, or 0 if VRAM is not present.
+ */
+u32 xe_ttm_vram_get_max_bad_pages(struct xe_device *xe)
+{
+ struct ttm_resource_manager *man;
+
+ man = ttm_manager_type(&xe->ttm, XE_PL_VRAM0);
+ if (!man)
+ return 0;
+
+ return to_xe_ttm_vram_mgr(man)->max_pages;
+}
+
static int xe_ttm_vram_purge_page(struct xe_device *xe, struct xe_bo *bo)
{
u32 q_flag = DRM_XE_EXEC_QUEUE_BAN_REASON_PAGE_OFFLINE;
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
index d77f067d197b..70fae023d6a3 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
@@ -33,6 +33,9 @@ void xe_ttm_vram_get_used(struct ttm_resource_manager *man,
u64 *used, u64 *used_visible);
int xe_ttm_vram_handle_addr_fault(struct xe_device *xe, u64 addr);
int xe_ttm_vram_inject_fault(struct xe_device *xe);
+int xe_ttm_vram_get_retired_page(struct xe_device *xe, u64 min_addr,
+ u64 *addr, u64 *size, u32 *status);
+u32 xe_ttm_vram_get_max_bad_pages(struct xe_device *xe);
static inline struct xe_ttm_vram_mgr_resource *
to_xe_ttm_vram_mgr_resource(struct ttm_resource *res)
diff --git a/include/drm/drm_ras.h b/include/drm/drm_ras.h
index 1765a3130b09..38953f8f3012 100644
--- a/include/drm/drm_ras.h
+++ b/include/drm/drm_ras.h
@@ -10,6 +10,42 @@
#include <uapi/drm/drm_ras.h>
+/**
+ * struct drm_ras_retired_resource - A single retired resource entry
+ *
+ * Describes one hardware resource that has been taken out of service and is
+ * reported by a %DRM_RAS_NODE_TYPE_RETIRED_RESOURCES node. @type selects which
+ * member of the anonymous union is valid, allowing new hardware resource types
+ * to be added without changing the common fields. When @is_summary is set the
+ * entry is a leading, type-specific capacity summary (e.g. max retirable
+ * pages) rather than an individual retired resource.
+ */
+struct drm_ras_retired_resource {
+ /** @type: Resource type (enum drm_ras_retired_resource_type). */
+ __u32 type;
+ /** @status: Retirement status (enum drm_ras_retired_resource_status). */
+ __u32 status;
+ /**
+ * @key: Opaque, driver-assigned ordering key for this entry. drm-ras
+ * uses it only to advance the dump cursor; entries must be enumerable
+ * in strictly increasing @key order and keys must be unique.
+ */
+ __u64 key;
+ /** @is_summary: entry reports type capacity, not a retired resource. */
+ __u8 is_summary;
+ union {
+ /** @vram_page: Valid when @type is VRAM_PAGE. */
+ struct {
+ /** @vram_page.address: Device address (e.g. DPA). */
+ __u64 address;
+ /** @vram_page.size: Size in bytes. */
+ __u64 size;
+ /** @vram_page.max_pages: max retirable pages; summary only. */
+ __u32 max_pages;
+ } vram_page;
+ };
+};
+
/**
* struct drm_ras_node - A DRM RAS Node
*/
@@ -100,6 +136,44 @@ struct drm_ras_node {
*/
int (*set_error_threshold)(struct drm_ras_node *node, u32 error_id, u32 threshold);
+ /**
+ * @query_retired_resource:
+ *
+ * This callback is used by drm-ras to enumerate retired resources of a
+ * %DRM_RAS_NODE_TYPE_RETIRED_RESOURCES node. It is called with @cursor
+ * and must return the next entry whose ordering key is greater than or
+ * equal to @cursor, setting @res->key to that entry's key. drm-ras
+ * resumes multi-part dumps from the returned key, so enumeration stays
+ * correct across concurrent insertion or removal.
+ *
+ * The @query_retired_resource is a mandatory callback for
+ * retired-resources nodes.
+ *
+ * Returns: 0 on success,
+ * -ENOENT when no entry has a key >= @cursor, used as an
+ * indication that enumeration is complete.
+ * Other negative values on errors that should terminate the
+ * netlink query.
+ */
+ int (*query_retired_resource)(struct drm_ras_node *node, u64 cursor,
+ struct drm_ras_retired_resource *res);
+
+ /**
+ * @query_retired_summary:
+ *
+ * This optional callback fills a leading, type-specific capacity summary
+ * for a %DRM_RAS_NODE_TYPE_RETIRED_RESOURCES node (e.g. the maximum
+ * number of retirable pages). drm-ras emits it as the first entry of the
+ * retired-resources dump. The driver must set @res->is_summary, @res->type
+ * and the type-specific summary fields (e.g. vram_page.max_pages).
+ *
+ * Returns: 0 on success,
+ * -ENOENT if the node has no summary to report,
+ * other negative values on errors that terminate the query.
+ */
+ int (*query_retired_summary)(struct drm_ras_node *node,
+ struct drm_ras_retired_resource *res);
+
/** @priv: Driver private data */
void *priv;
};
diff --git a/include/uapi/drm/drm_ras.h b/include/uapi/drm/drm_ras.h
index 2f832275ee6e..64a7a7feb610 100644
--- a/include/uapi/drm/drm_ras.h
+++ b/include/uapi/drm/drm_ras.h
@@ -11,11 +11,35 @@
#define DRM_RAS_FAMILY_VERSION 1
/*
- * Type of the node. Currently, only error-counter nodes are supported, which
- * expose reliability counters for a hardware/software component.
+ * Type of the node. error-counter nodes expose reliability counters for a
+ * hardware/software component. retired-resources nodes enumerate hardware
+ * resources (e.g. VRAM pages) that have been permanently taken out of service.
*/
enum drm_ras_node_type {
DRM_RAS_NODE_TYPE_ERROR_COUNTER = 1,
+ DRM_RAS_NODE_TYPE_RETIRED_RESOURCES,
+};
+
+/*
+ * Status of a retired resource entry. retired means the resource is
+ * permanently reserved and out of service; pending means retirement is queued
+ * but the reservation is not yet complete; failed means the reservation failed
+ * and the resource may still be in use.
+ */
+enum drm_ras_retired_resource_status {
+ DRM_RAS_RETIRED_RESOURCE_STATUS_RETIRED,
+ DRM_RAS_RETIRED_RESOURCE_STATUS_PENDING,
+ DRM_RAS_RETIRED_RESOURCE_STATUS_FAILED,
+};
+
+/*
+ * Type of a retired resource entry. The type selects which type-specific
+ * nested attribute is present. New hardware resource types can be added here,
+ * each carrying its own nested attribute set, without affecting existing
+ * types. vram-page describes a VRAM page by device address and size.
+ */
+enum drm_ras_retired_resource_type {
+ DRM_RAS_RETIRED_RESOURCE_TYPE_VRAM_PAGE = 1,
};
enum {
@@ -51,6 +75,25 @@ enum {
DRM_RAS_A_ERROR_EVENT_ATTRS_MAX = (__DRM_RAS_A_ERROR_EVENT_ATTRS_MAX - 1)
};
+enum {
+ DRM_RAS_A_RETIRED_RESOURCE_ATTRS_NODE_ID = 1,
+ DRM_RAS_A_RETIRED_RESOURCE_ATTRS_VRAM_PAGE,
+
+ __DRM_RAS_A_RETIRED_RESOURCE_ATTRS_MAX,
+ DRM_RAS_A_RETIRED_RESOURCE_ATTRS_MAX = (__DRM_RAS_A_RETIRED_RESOURCE_ATTRS_MAX - 1)
+};
+
+enum {
+ DRM_RAS_A_VRAM_PAGE_ATTRS_ADDRESS = 1,
+ DRM_RAS_A_VRAM_PAGE_ATTRS_SIZE,
+ DRM_RAS_A_VRAM_PAGE_ATTRS_MAX_PAGES,
+ DRM_RAS_A_VRAM_PAGE_ATTRS_STATUS,
+ DRM_RAS_A_VRAM_PAGE_ATTRS_PAD,
+
+ __DRM_RAS_A_VRAM_PAGE_ATTRS_MAX,
+ DRM_RAS_A_VRAM_PAGE_ATTRS_MAX = (__DRM_RAS_A_VRAM_PAGE_ATTRS_MAX - 1)
+};
+
enum {
DRM_RAS_CMD_LIST_NODES = 1,
DRM_RAS_CMD_GET_ERROR_COUNTER,
@@ -58,6 +101,7 @@ enum {
DRM_RAS_CMD_ERROR_EVENT,
DRM_RAS_CMD_GET_ERROR_THRESHOLD,
DRM_RAS_CMD_SET_ERROR_THRESHOLD,
+ DRM_RAS_CMD_GET_RETIRED_RESOURCES,
__DRM_RAS_CMD_MAX,
DRM_RAS_CMD_MAX = (__DRM_RAS_CMD_MAX - 1)
--
2.25.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 2/2] drm/xe: Remove bad VRAM pages debugfs interface
2026-10-07 8:03 [PATCH v2 0/2] drm/xe: Expose retired VRAM pages via drm-ras Aravind Iddamsetty
2026-10-07 8:03 ` [PATCH v2 1/2] " Aravind Iddamsetty
@ 2026-10-07 8:03 ` Aravind Iddamsetty
2026-10-07 8:38 ` ✗ CI.checkpatch: warning for drm/xe: Expose retired VRAM pages via drm-ras (rev2) Patchwork
` (3 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Aravind Iddamsetty @ 2026-10-07 8:03 UTC (permalink / raw)
To: intel-xe, dri-devel, netdev, amd-gfx
Cc: simona.vetter, airlied, tejas.upadhyay, himal.prasad.ghimiray,
rodrigo.vivi, riana.tauro, raag.jadav, joshua.santosh.ranjan,
ashwin.kumar.kulkarni, pratik.bari, Hawking.Zhang, tao.zhou1,
YiPeng.Chai, jinzhou.su, cesun102, lijo.lazar, alexander.deucher,
christian.koenig
Drop the "vram_bad_pages" debugfs file added by commit fb19798cc366e
("drm/xe: Expose bad VRAM pages via debugfs"). The retired VRAM pages
are now exported through the drm-ras generic netlink interface, which
is a stable ABI, making the debugfs-only readback redundant.
This is a partial revert of fb19798cc366e: it removes vram_bad_pages_show(),
its DEFINE_SHOW_ATTRIBUTE(), xe_ttm_vram_debugfs_init() and its call site
and declaration, and the now-unused <linux/debugfs.h> include in
xe_ttm_vram_mgr.c. The struct xe_ttm_vram_mgr.max_pages field introduced
by the same commit is intentionally retained: it is the FW-provided
offline-page limit and is now consumed by the drm-ras retired-resources
capacity summary (xe_ttm_vram_get_max_bad_pages()).
The fault-injection debugfs interface (inject_mempage_offline) is left
untouched; it remains the mechanism for triggering page offlining in
test.
Cc: Tejas Upadhyay <tejas.upadhyay@intel.com>
Signed-off-by: Aravind Iddamsetty <aravind.iddamsetty@linux.intel.com>
Assisted-by: Copilot:claude-opus-4.8
---
drivers/gpu/drm/xe/xe_debugfs.c | 2 -
drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 71 ----------------------------
drivers/gpu/drm/xe/xe_ttm_vram_mgr.h | 1 -
3 files changed, 74 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_debugfs.c b/drivers/gpu/drm/xe/xe_debugfs.c
index 926020c7526e..6a19737104fb 100644
--- a/drivers/gpu/drm/xe/xe_debugfs.c
+++ b/drivers/gpu/drm/xe/xe_debugfs.c
@@ -823,8 +823,6 @@ void xe_debugfs_register(struct xe_device *xe)
if (man)
ttm_resource_manager_create_debugfs(man, root, "stolen_mm");
- xe_ttm_vram_debugfs_init(xe, root);
-
for_each_tile(tile, xe, tile_id)
xe_tile_debugfs_register(tile);
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
index b56b543a56a2..9fbdf1dcde8a 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
@@ -5,7 +5,6 @@
*/
#include <linux/cgroup_dmem.h>
-#include <linux/debugfs.h>
#include <drm/drm_managed.h>
#include <drm/drm_drv.h>
@@ -1120,73 +1119,3 @@ int xe_ttm_vram_inject_fault(struct xe_device *xe)
return -ENOSPC;
}
EXPORT_SYMBOL(xe_ttm_vram_inject_fault);
-
-static int vram_bad_pages_show(struct seq_file *m, void *unused)
-{
- struct xe_device *xe = m->private;
- struct xe_ttm_vram_offline_resource *pos;
- struct ttm_resource_manager *man;
- struct xe_ttm_vram_mgr *mgr;
- struct xe_tile *tile;
- u8 id;
-
- man = ttm_manager_type(&xe->ttm, XE_PL_VRAM0);
- if (man)
- /* TODO Hook with RAS to show max_pages fetched from FW */
- seq_printf(m, "max_pages: %d\n",
- to_xe_ttm_vram_mgr(man)->max_pages);
-
- for_each_tile(tile, xe, id) {
- struct xe_vram_region *vr = tile->mem.vram;
-
- man = ttm_manager_type(&xe->ttm, XE_PL_VRAM0 + id);
- if (!man || !vr)
- continue;
- mgr = to_xe_ttm_vram_mgr(man);
-
- rcu_read_lock();
-
- list_for_each_entry_rcu(pos, &mgr->offlined_pages, offlined_link) {
- u64 pfn;
-
- pfn = (pos->addr + vr->dpa_base) >> PAGE_SHIFT;
- seq_printf(m, "0x%016llx : 0x%016lx : R\n", pfn, PAGE_SIZE);
- }
-
- list_for_each_entry_rcu(pos, &mgr->queued_pages, queued_link) {
- u64 pfn;
-
- pfn = (pos->addr + vr->dpa_base) >> PAGE_SHIFT;
- seq_printf(m, "0x%016llx : 0x%016lx : %c\n",
- pfn, PAGE_SIZE, pos->status ? 'F' : 'P');
- }
-
- rcu_read_unlock();
- }
-
- return 0;
-}
-DEFINE_SHOW_ATTRIBUTE(vram_bad_pages);
-
-/**
- * xe_ttm_vram_debugfs_init - Initialize VRAM debugfs interfaces
- * @xe: The xe device structure pointer
- * @root: The root dentry of the debugfs directory
- *
- * This function registers platform-specific VRAM debugfs files used for
- * testing and debugging. Currently, it exposes the "vram_bad_pages" interface
- * to inspect marked faulty memory pages, restricted specifically to the
- * %XE_CRESCENTISLAND platform.
- *
- * Return: Void.
- */
-void xe_ttm_vram_debugfs_init(struct xe_device *xe, struct dentry *root)
-{
- /*
- * TODO: Replace platform check with xe->info
- * once the feature flag is plumbed through device info.
- */
- if (xe->info.platform != XE_CRESCENTISLAND)
- return;
- debugfs_create_file("vram_bad_pages", 0444, root, xe, &vram_bad_pages_fops);
-}
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
index 70fae023d6a3..7a4a041b8218 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
@@ -17,7 +17,6 @@ int __xe_ttm_vram_mgr_init(struct xe_device *xe, struct xe_ttm_vram_mgr *mgr,
u32 mem_type, u64 size, u64 io_size,
u64 default_page_size);
int xe_ttm_vram_mgr_init(struct xe_device *xe, struct xe_vram_region *vram);
-void xe_ttm_vram_debugfs_init(struct xe_device *xe, struct dentry *root);
int xe_ttm_vram_mgr_alloc_sgt(struct xe_device *xe,
struct ttm_resource *res,
u64 offset, u64 length,
--
2.25.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* ✗ CI.checkpatch: warning for drm/xe: Expose retired VRAM pages via drm-ras (rev2)
2026-10-07 8:03 [PATCH v2 0/2] drm/xe: Expose retired VRAM pages via drm-ras Aravind Iddamsetty
2026-10-07 8:03 ` [PATCH v2 1/2] " Aravind Iddamsetty
2026-10-07 8:03 ` [PATCH v2 2/2] drm/xe: Remove bad VRAM pages debugfs interface Aravind Iddamsetty
@ 2026-10-07 8:38 ` Patchwork
2026-10-07 8:40 ` ✓ CI.KUnit: success " Patchwork
` (2 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Patchwork @ 2026-10-07 8:38 UTC (permalink / raw)
To: Aravind Iddamsetty; +Cc: intel-xe
== Series Details ==
Series: drm/xe: Expose retired VRAM pages via drm-ras (rev2)
URL : https://patchwork.freedesktop.org/series/173066/
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
6bef5ce5c74dc76b4ee69ab2832c0d1fd63c91c7
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit 86d056a7465a780a68e15183bd68306c8e4869d8
Author: Aravind Iddamsetty <aravind.iddamsetty@linux.intel.com>
Date: Wed Oct 7 13:33:54 2026 +0530
drm/xe: Remove bad VRAM pages debugfs interface
Drop the "vram_bad_pages" debugfs file added by commit fb19798cc366e
("drm/xe: Expose bad VRAM pages via debugfs"). The retired VRAM pages
are now exported through the drm-ras generic netlink interface, which
is a stable ABI, making the debugfs-only readback redundant.
This is a partial revert of fb19798cc366e: it removes vram_bad_pages_show(),
its DEFINE_SHOW_ATTRIBUTE(), xe_ttm_vram_debugfs_init() and its call site
and declaration, and the now-unused <linux/debugfs.h> include in
xe_ttm_vram_mgr.c. The struct xe_ttm_vram_mgr.max_pages field introduced
by the same commit is intentionally retained: it is the FW-provided
offline-page limit and is now consumed by the drm-ras retired-resources
capacity summary (xe_ttm_vram_get_max_bad_pages()).
The fault-injection debugfs interface (inject_mempage_offline) is left
untouched; it remains the mechanism for triggering page offlining in
test.
Cc: Tejas Upadhyay <tejas.upadhyay@intel.com>
Signed-off-by: Aravind Iddamsetty <aravind.iddamsetty@linux.intel.com>
Assisted-by: Copilot:claude-opus-4.8
+ /mt/dim checkpatch daeb062fc40f727fafefed080c6d12a5ad1d0d12 drm-intel
882503c045fc drm/xe: Expose retired VRAM pages via drm-ras
-:42: WARNING:COMMIT_LOG_LONG_LINE: Prefer a maximum 75 chars per line (possible unwrapped commit description?)
#42:
[{'device-name': '0000:03:00.0', 'node-id': 0, 'node-name':'correctable-errors',
-:436: WARNING:LONG_LINE: line length of 120 exceeds 100 columns
#436: FILE: drivers/gpu/drm/drm_ras_nl.c:45:
+static const struct nla_policy drm_ras_get_retired_resources_nl_policy[DRM_RAS_A_RETIRED_RESOURCE_ATTRS_NODE_ID + 1] = {
total: 0 errors, 2 warnings, 0 checks, 755 lines checked
86d056a7465a drm/xe: Remove bad VRAM pages debugfs interface
-:11: WARNING:COMMIT_LOG_LONG_LINE: Prefer a maximum 75 chars per line (possible unwrapped commit description?)
#11:
This is a partial revert of fb19798cc366e: it removes vram_bad_pages_show(),
total: 0 errors, 1 warnings, 0 checks, 25 lines checked
^ permalink raw reply [flat|nested] 9+ messages in thread
* ✓ CI.KUnit: success for drm/xe: Expose retired VRAM pages via drm-ras (rev2)
2026-10-07 8:03 [PATCH v2 0/2] drm/xe: Expose retired VRAM pages via drm-ras Aravind Iddamsetty
` (2 preceding siblings ...)
2026-10-07 8:38 ` ✗ CI.checkpatch: warning for drm/xe: Expose retired VRAM pages via drm-ras (rev2) Patchwork
@ 2026-10-07 8:40 ` Patchwork
2026-10-07 9:27 ` ✓ Xe.CI.BAT: " Patchwork
2026-10-07 10:42 ` ✓ Xe.CI.FULL: " Patchwork
5 siblings, 0 replies; 9+ messages in thread
From: Patchwork @ 2026-10-07 8:40 UTC (permalink / raw)
To: Aravind Iddamsetty; +Cc: intel-xe
== Series Details ==
Series: drm/xe: Expose retired VRAM pages via drm-ras (rev2)
URL : https://patchwork.freedesktop.org/series/173066/
State : success
== Summary ==
+ trap cleanup EXIT
+ kunitconfigs=('/kernel/drivers/gpu/tests/.kunitconfig' '/kernel/drivers/gpu/drm/xe/.kunitconfig' '/kernel/drivers/gpu/drm/tests/.kunitconfig' '/kernel/drivers/gpu/drm/ttm/tests/.kunitconfig' '/kernel/drivers/dma-buf/.kunitconfig')
+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/gpu/tests/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/tests/.kunitconfig
[08:38:17] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[08:38:22] 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
[08:38:42] Starting KUnit Kernel (1/1)...
[08:38:42] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[08:38:42] ================= gpu_buddy (14 subtests) ==================
[08:38:42] [PASSED] gpu_test_buddy_alloc_limit
[08:38:42] [PASSED] gpu_test_buddy_alloc_optimistic
[08:38:42] [PASSED] gpu_test_buddy_alloc_pessimistic
[08:38:42] [PASSED] gpu_test_buddy_alloc_pathological
[08:38:42] [PASSED] gpu_test_buddy_alloc_contiguous
[08:38:42] [PASSED] gpu_test_buddy_alloc_clear
[08:38:42] [PASSED] gpu_test_buddy_alloc_range
[08:38:42] [PASSED] gpu_test_buddy_alloc_range_bias
[08:38:43] [PASSED] gpu_test_buddy_fragmentation_performance
[08:38:44] [PASSED] gpu_test_buddy_dirty_tracker_performance
[08:38:44] [PASSED] gpu_test_buddy_alloc_exceeds_max_order
[08:38:44] [PASSED] gpu_test_buddy_offset_aligned_allocation
[08:38:44] [PASSED] gpu_test_buddy_subtree_offset_alignment_stress
[08:38:44] [PASSED] gpu_test_buddy_addr_to_block
[08:38:44] ==================== [PASSED] gpu_buddy ====================
[08:38:44] ============================================================
[08:38:44] Testing complete. Ran 14 tests: passed: 14
[08:38:44] Elapsed time: 26.699s total, 4.411s configuring, 20.420s building, 1.817s running
+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/gpu/drm/xe/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[08:38:44] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[08:38:46] 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
[08:39:21] Starting KUnit Kernel (1/1)...
[08:39:21] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[08:39:21] ================== guc_buf (11 subtests) ===================
[08:39:21] [PASSED] test_smallest
[08:39:21] [PASSED] test_largest
[08:39:21] [PASSED] test_granular
[08:39:21] [PASSED] test_unique
[08:39:21] [PASSED] test_overlap
[08:39:21] [PASSED] test_reusable
[08:39:21] [PASSED] test_too_big
[08:39:21] [PASSED] test_flush
[08:39:21] [PASSED] test_lookup
[08:39:21] [PASSED] test_data
[08:39:21] [PASSED] test_class
[08:39:21] ===================== [PASSED] guc_buf =====================
[08:39:21] =================== guc_dbm (7 subtests) ===================
[08:39:21] [PASSED] test_empty
[08:39:21] [PASSED] test_default
[08:39:21] ======================== test_size ========================
[08:39:21] [PASSED] 4
[08:39:21] [PASSED] 8
[08:39:21] [PASSED] 32
[08:39:21] [PASSED] 256
[08:39:21] ==================== [PASSED] test_size ====================
[08:39:21] ======================= test_reuse ========================
[08:39:21] [PASSED] 4
[08:39:21] [PASSED] 8
[08:39:21] [PASSED] 32
[08:39:21] [PASSED] 256
[08:39:21] =================== [PASSED] test_reuse ====================
[08:39:21] =================== test_range_overlap ====================
[08:39:21] [PASSED] 4
[08:39:21] [PASSED] 8
[08:39:21] [PASSED] 32
[08:39:21] [PASSED] 256
[08:39:21] =============== [PASSED] test_range_overlap ================
[08:39:21] =================== test_range_compact ====================
[08:39:21] [PASSED] 4
[08:39:21] [PASSED] 8
[08:39:21] [PASSED] 32
[08:39:21] [PASSED] 256
[08:39:21] =============== [PASSED] test_range_compact ================
[08:39:21] ==================== test_range_spare =====================
[08:39:21] [PASSED] 4
[08:39:21] [PASSED] 8
[08:39:21] [PASSED] 32
[08:39:21] [PASSED] 256
[08:39:21] ================ [PASSED] test_range_spare =================
[08:39:21] ===================== [PASSED] guc_dbm =====================
[08:39:21] =================== guc_idm (6 subtests) ===================
[08:39:21] [PASSED] bad_init
[08:39:21] [PASSED] no_init
[08:39:21] [PASSED] init_fini
[08:39:21] [PASSED] check_used
[08:39:21] [PASSED] check_quota
[08:39:21] [PASSED] check_all
[08:39:21] ===================== [PASSED] guc_idm =====================
[08:39:21] ============== guc_klv_helpers (13 subtests) ===============
[08:39:21] [PASSED] test_count
[08:39:21] [PASSED] test_encode_u32
[08:39:21] [PASSED] test_encode_u64
[08:39:21] [PASSED] test_encode_string
[08:39:21] [PASSED] test_encode_object_raw
[08:39:21] [PASSED] test_encode_object_klv
[08:39:21] [PASSED] test_encode_object_nested
[08:39:21] [PASSED] test_encode_object_basic
[08:39:21] ===================== test_decode_u16 =====================
[08:39:21] [PASSED] empty
[08:39:21] [PASSED] valid
[08:39:21] [PASSED] max
[08:39:21] [PASSED] big
[08:39:21] [PASSED] long
[08:39:21] ================= [PASSED] test_decode_u16 =================
[08:39:21] ===================== test_decode_u32 =====================
[08:39:21] [PASSED] empty
[08:39:21] [PASSED] valid
[08:39:21] [PASSED] max
[08:39:21] [PASSED] long
[08:39:21] ================= [PASSED] test_decode_u32 =================
[08:39:21] ===================== test_decode_u64 =====================
[08:39:21] [PASSED] empty
[08:39:21] [PASSED] short
[08:39:21] [PASSED] valid
[08:39:21] [PASSED] max
[08:39:21] [PASSED] long
[08:39:21] ================= [PASSED] test_decode_u64 =================
[08:39:21] ===================== test_decode_str =====================
[08:39:21] [PASSED] empty
[08:39:21] [PASSED] one
[08:39:21] [PASSED] one_trash
[08:39:21] [PASSED] two
[08:39:21] [PASSED] two_trash
[08:39:21] [PASSED] three
[08:39:21] [PASSED] dword
[08:39:21] [PASSED] four
[08:39:21] [PASSED] five
[08:39:21] [PASSED] six
[08:39:21] [PASSED] seven
[08:39:21] [PASSED] qword
[08:39:21] ================= [PASSED] test_decode_str =================
[08:39:21] [PASSED] test_print
[08:39:21] ================= [PASSED] guc_klv_helpers =================
[08:39:21] =================== xe_log (4 subtests) ====================
[08:39:21] [PASSED] demo_cper
[08:39:21] [PASSED] demo_dmesg
[08:39:21] ======================= test_dmesg ========================
[08:39:21] [PASSED] test_fatal
[08:39:21] [PASSED] test_fatal_tile
[08:39:21] [PASSED] test_fatal_gt
[08:39:21] [PASSED] test_fatal_comp
[08:39:21] [PASSED] test_fatal_comp_tile
[08:39:21] [PASSED] test_fatal_comp_gt
[08:39:21] [PASSED] test_fatal_all
[08:39:21] [PASSED] test_recoverable
[08:39:21] [PASSED] test_recoverable_tile
[08:39:21] [PASSED] test_recoverable_gt
[08:39:21] [PASSED] test_recoverable_comp
[08:39:21] [PASSED] test_recoverable_comp_tile
[08:39:21] [PASSED] test_recoverable_comp_gt
[08:39:21] [PASSED] test_recoverable_all
[08:39:21] [PASSED] test_info
[08:39:21] [PASSED] test_info_tile
[08:39:21] [PASSED] test_info_gt
[08:39:21] [PASSED] test_info_err
[08:39:21] [PASSED] test_info_comp
[08:39:21] [PASSED] test_info_comp_tile
[08:39:21] [PASSED] test_info_comp_gt
[08:39:21] [PASSED] test_info_all
[08:39:21] [PASSED] test_hw_fatal
[08:39:21] [PASSED] test_hw_recoverable
[08:39:21] [PASSED] test_hw_corrected
[08:39:21] [PASSED] test_hw_informational
[08:39:21] =================== [PASSED] test_dmesg ====================
[08:39:21] ====================== test_invalid =======================
[08:39:21] [SKIPPED] no-component no-location no-warn (requires CONFIG_DRM_XE_DEBUG)
[08:39:21] [SKIPPED] reserved location (requires CONFIG_DRM_XE_DEBUG)
[08:39:21] [SKIPPED] unknown location (requires CONFIG_DRM_XE_DEBUG)
[08:39:21] [SKIPPED] nonzero-device-id location (requires CONFIG_DRM_XE_DEBUG)
[08:39:21] [SKIPPED] invalid-tile-id location (requires CONFIG_DRM_XE_DEBUG)
[08:39:21] [SKIPPED] invalid-gt-id location (requires CONFIG_DRM_XE_DEBUG)
[08:39:21] [SKIPPED] unknown component class (requires CONFIG_DRM_XE_DEBUG)
[08:39:21] [SKIPPED] unknown system component (requires CONFIG_DRM_XE_DEBUG)
[08:39:21] [SKIPPED] unknown hardware component (requires CONFIG_DRM_XE_DEBUG)
[08:39:21] [SKIPPED] unknown component and location (requires CONFIG_DRM_XE_DEBUG)
[08:39:21] ================== [SKIPPED] test_invalid ==================
[08:39:21] ===================== [PASSED] xe_log ======================
[08:39:21] ================== no_relay (3 subtests) ===================
[08:39:21] [PASSED] xe_drops_guc2pf_if_not_ready
[08:39:21] [PASSED] xe_drops_guc2vf_if_not_ready
[08:39:21] [PASSED] xe_rejects_send_if_not_ready
[08:39:21] ==================== [PASSED] no_relay =====================
[08:39:21] ================== pf_relay (14 subtests) ==================
[08:39:21] [PASSED] pf_rejects_guc2pf_too_short
[08:39:21] [PASSED] pf_rejects_guc2pf_too_long
[08:39:21] [PASSED] pf_rejects_guc2pf_no_payload
[08:39:21] [PASSED] pf_fails_no_payload
[08:39:21] [PASSED] pf_fails_bad_origin
[08:39:21] [PASSED] pf_fails_bad_type
[08:39:21] [PASSED] pf_txn_reports_error
[08:39:21] [PASSED] pf_txn_sends_pf2guc
[08:39:21] [PASSED] pf_sends_pf2guc
[08:39:21] [SKIPPED] pf_loopback_nop (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[08:39:21] [SKIPPED] pf_loopback_echo (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[08:39:21] [SKIPPED] pf_loopback_fail (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[08:39:21] [SKIPPED] pf_loopback_busy (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[08:39:21] [SKIPPED] pf_loopback_retry (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[08:39:21] ==================== [PASSED] pf_relay =====================
[08:39:21] ================== vf_relay (3 subtests) ===================
[08:39:21] [PASSED] vf_rejects_guc2vf_too_short
[08:39:21] [PASSED] vf_rejects_guc2vf_too_long
[08:39:21] [PASSED] vf_rejects_guc2vf_no_payload
[08:39:21] ==================== [PASSED] vf_relay =====================
[08:39:21] ================ pf_gt_config (9 subtests) =================
[08:39:21] [PASSED] fair_contexts_1vf
[08:39:21] [PASSED] fair_doorbells_1vf
[08:39:21] [PASSED] fair_ggtt_1vf
[08:39:21] ====================== fair_vram_1vf ======================
[08:39:21] [PASSED] 3.50 GiB
[08:39:21] [PASSED] 11.5 GiB
[08:39:21] [PASSED] 15.5 GiB
[08:39:21] [PASSED] 31.5 GiB
[08:39:21] [PASSED] 63.5 GiB
[08:39:21] [PASSED] 1.91 GiB
[08:39:21] ================== [PASSED] fair_vram_1vf ==================
[08:39:21] ================ fair_vram_1vf_admin_only =================
[08:39:21] [PASSED] 3.50 GiB
[08:39:21] [PASSED] 11.5 GiB
[08:39:21] [PASSED] 15.5 GiB
[08:39:21] [PASSED] 31.5 GiB
[08:39:21] [PASSED] 63.5 GiB
[08:39:21] [PASSED] 1.91 GiB
[08:39:21] ============ [PASSED] fair_vram_1vf_admin_only =============
[08:39:21] ====================== fair_contexts ======================
[08:39:21] [PASSED] 1 VF
[08:39:21] [PASSED] 2 VFs
[08:39:21] [PASSED] 3 VFs
[08:39:21] [PASSED] 4 VFs
[08:39:21] [PASSED] 5 VFs
[08:39:21] [PASSED] 6 VFs
[08:39:21] [PASSED] 7 VFs
[08:39:21] [PASSED] 8 VFs
[08:39:21] [PASSED] 9 VFs
[08:39:21] [PASSED] 10 VFs
[08:39:21] [PASSED] 11 VFs
[08:39:21] [PASSED] 12 VFs
[08:39:21] [PASSED] 13 VFs
[08:39:21] [PASSED] 14 VFs
[08:39:21] [PASSED] 15 VFs
[08:39:21] [PASSED] 16 VFs
[08:39:21] [PASSED] 17 VFs
[08:39:21] [PASSED] 18 VFs
[08:39:21] [PASSED] 19 VFs
[08:39:21] [PASSED] 20 VFs
[08:39:21] [PASSED] 21 VFs
[08:39:21] [PASSED] 22 VFs
[08:39:21] [PASSED] 23 VFs
[08:39:21] [PASSED] 24 VFs
[08:39:21] [PASSED] 25 VFs
[08:39:21] [PASSED] 26 VFs
[08:39:21] [PASSED] 27 VFs
[08:39:21] [PASSED] 28 VFs
[08:39:21] [PASSED] 29 VFs
[08:39:21] [PASSED] 30 VFs
[08:39:21] [PASSED] 31 VFs
[08:39:21] [PASSED] 32 VFs
[08:39:21] [PASSED] 33 VFs
[08:39:21] [PASSED] 34 VFs
[08:39:21] [PASSED] 35 VFs
[08:39:21] [PASSED] 36 VFs
[08:39:21] [PASSED] 37 VFs
[08:39:21] [PASSED] 38 VFs
[08:39:21] [PASSED] 39 VFs
[08:39:21] [PASSED] 40 VFs
[08:39:21] [PASSED] 41 VFs
[08:39:21] [PASSED] 42 VFs
[08:39:21] [PASSED] 43 VFs
[08:39:21] [PASSED] 44 VFs
[08:39:21] [PASSED] 45 VFs
[08:39:21] [PASSED] 46 VFs
[08:39:21] [PASSED] 47 VFs
[08:39:21] [PASSED] 48 VFs
[08:39:21] [PASSED] 49 VFs
[08:39:21] [PASSED] 50 VFs
[08:39:21] [PASSED] 51 VFs
[08:39:21] [PASSED] 52 VFs
[08:39:21] [PASSED] 53 VFs
[08:39:21] [PASSED] 54 VFs
[08:39:21] [PASSED] 55 VFs
[08:39:21] [PASSED] 56 VFs
[08:39:21] [PASSED] 57 VFs
[08:39:21] [PASSED] 58 VFs
[08:39:21] [PASSED] 59 VFs
[08:39:21] [PASSED] 60 VFs
[08:39:21] [PASSED] 61 VFs
[08:39:21] [PASSED] 62 VFs
[08:39:21] [PASSED] 63 VFs
[08:39:21] ================== [PASSED] fair_contexts ==================
[08:39:21] ===================== fair_doorbells ======================
[08:39:21] [PASSED] 1 VF
[08:39:21] [PASSED] 2 VFs
[08:39:21] [PASSED] 3 VFs
[08:39:21] [PASSED] 4 VFs
[08:39:21] [PASSED] 5 VFs
[08:39:21] [PASSED] 6 VFs
[08:39:21] [PASSED] 7 VFs
[08:39:21] [PASSED] 8 VFs
[08:39:21] [PASSED] 9 VFs
[08:39:21] [PASSED] 10 VFs
[08:39:21] [PASSED] 11 VFs
[08:39:21] [PASSED] 12 VFs
[08:39:21] [PASSED] 13 VFs
[08:39:21] [PASSED] 14 VFs
[08:39:21] [PASSED] 15 VFs
[08:39:21] [PASSED] 16 VFs
[08:39:21] [PASSED] 17 VFs
[08:39:21] [PASSED] 18 VFs
[08:39:21] [PASSED] 19 VFs
[08:39:21] [PASSED] 20 VFs
[08:39:21] [PASSED] 21 VFs
[08:39:21] [PASSED] 22 VFs
[08:39:21] [PASSED] 23 VFs
[08:39:21] [PASSED] 24 VFs
[08:39:21] [PASSED] 25 VFs
[08:39:21] [PASSED] 26 VFs
[08:39:21] [PASSED] 27 VFs
[08:39:21] [PASSED] 28 VFs
[08:39:21] [PASSED] 29 VFs
[08:39:21] [PASSED] 30 VFs
[08:39:21] [PASSED] 31 VFs
[08:39:21] [PASSED] 32 VFs
[08:39:21] [PASSED] 33 VFs
[08:39:21] [PASSED] 34 VFs
[08:39:21] [PASSED] 35 VFs
[08:39:21] [PASSED] 36 VFs
[08:39:21] [PASSED] 37 VFs
[08:39:21] [PASSED] 38 VFs
[08:39:21] [PASSED] 39 VFs
[08:39:21] [PASSED] 40 VFs
[08:39:21] [PASSED] 41 VFs
[08:39:21] [PASSED] 42 VFs
[08:39:21] [PASSED] 43 VFs
[08:39:21] [PASSED] 44 VFs
[08:39:21] [PASSED] 45 VFs
[08:39:21] [PASSED] 46 VFs
[08:39:21] [PASSED] 47 VFs
[08:39:21] [PASSED] 48 VFs
[08:39:21] [PASSED] 49 VFs
[08:39:21] [PASSED] 50 VFs
[08:39:21] [PASSED] 51 VFs
[08:39:21] [PASSED] 52 VFs
[08:39:21] [PASSED] 53 VFs
[08:39:21] [PASSED] 54 VFs
[08:39:21] [PASSED] 55 VFs
[08:39:21] [PASSED] 56 VFs
[08:39:21] [PASSED] 57 VFs
[08:39:21] [PASSED] 58 VFs
[08:39:21] [PASSED] 59 VFs
[08:39:21] [PASSED] 60 VFs
[08:39:21] [PASSED] 61 VFs
[08:39:21] [PASSED] 62 VFs
[08:39:21] [PASSED] 63 VFs
[08:39:21] ================= [PASSED] fair_doorbells ==================
[08:39:21] ======================== fair_ggtt ========================
[08:39:21] [PASSED] 1 VF
[08:39:21] [PASSED] 2 VFs
[08:39:21] [PASSED] 3 VFs
[08:39:21] [PASSED] 4 VFs
[08:39:21] [PASSED] 5 VFs
[08:39:21] [PASSED] 6 VFs
[08:39:21] [PASSED] 7 VFs
[08:39:21] [PASSED] 8 VFs
[08:39:21] [PASSED] 9 VFs
[08:39:21] [PASSED] 10 VFs
[08:39:21] [PASSED] 11 VFs
[08:39:21] [PASSED] 12 VFs
[08:39:21] [PASSED] 13 VFs
[08:39:21] [PASSED] 14 VFs
[08:39:21] [PASSED] 15 VFs
[08:39:21] [PASSED] 16 VFs
[08:39:21] [PASSED] 17 VFs
[08:39:21] [PASSED] 18 VFs
[08:39:21] [PASSED] 19 VFs
[08:39:21] [PASSED] 20 VFs
[08:39:21] [PASSED] 21 VFs
[08:39:21] [PASSED] 22 VFs
[08:39:21] [PASSED] 23 VFs
[08:39:21] [PASSED] 24 VFs
[08:39:21] [PASSED] 25 VFs
[08:39:21] [PASSED] 26 VFs
[08:39:21] [PASSED] 27 VFs
[08:39:21] [PASSED] 28 VFs
[08:39:21] [PASSED] 29 VFs
[08:39:21] [PASSED] 30 VFs
[08:39:21] [PASSED] 31 VFs
[08:39:21] [PASSED] 32 VFs
[08:39:21] [PASSED] 33 VFs
[08:39:21] [PASSED] 34 VFs
[08:39:21] [PASSED] 35 VFs
[08:39:21] [PASSED] 36 VFs
[08:39:21] [PASSED] 37 VFs
[08:39:21] [PASSED] 38 VFs
[08:39:21] [PASSED] 39 VFs
[08:39:21] [PASSED] 40 VFs
[08:39:21] [PASSED] 41 VFs
[08:39:21] [PASSED] 42 VFs
[08:39:21] [PASSED] 43 VFs
[08:39:21] [PASSED] 44 VFs
[08:39:21] [PASSED] 45 VFs
[08:39:21] [PASSED] 46 VFs
[08:39:21] [PASSED] 47 VFs
[08:39:21] [PASSED] 48 VFs
[08:39:21] [PASSED] 49 VFs
[08:39:21] [PASSED] 50 VFs
[08:39:21] [PASSED] 51 VFs
[08:39:21] [PASSED] 52 VFs
[08:39:21] [PASSED] 53 VFs
[08:39:21] [PASSED] 54 VFs
[08:39:21] [PASSED] 55 VFs
[08:39:21] [PASSED] 56 VFs
[08:39:21] [PASSED] 57 VFs
[08:39:21] [PASSED] 58 VFs
[08:39:21] [PASSED] 59 VFs
[08:39:21] [PASSED] 60 VFs
[08:39:21] [PASSED] 61 VFs
[08:39:21] [PASSED] 62 VFs
[08:39:21] [PASSED] 63 VFs
[08:39:21] ==================== [PASSED] fair_ggtt ====================
[08:39:21] ======================== fair_vram ========================
[08:39:21] [PASSED] 1 VF
[08:39:21] [PASSED] 2 VFs
[08:39:21] [PASSED] 3 VFs
[08:39:21] [PASSED] 4 VFs
[08:39:21] [PASSED] 5 VFs
[08:39:21] [PASSED] 6 VFs
[08:39:21] [PASSED] 7 VFs
[08:39:21] [PASSED] 8 VFs
[08:39:21] [PASSED] 9 VFs
[08:39:21] [PASSED] 10 VFs
[08:39:21] [PASSED] 11 VFs
[08:39:21] [PASSED] 12 VFs
[08:39:21] [PASSED] 13 VFs
[08:39:21] [PASSED] 14 VFs
[08:39:21] [PASSED] 15 VFs
[08:39:21] [PASSED] 16 VFs
[08:39:21] [PASSED] 17 VFs
[08:39:21] [PASSED] 18 VFs
[08:39:21] [PASSED] 19 VFs
[08:39:21] [PASSED] 20 VFs
[08:39:21] [PASSED] 21 VFs
[08:39:21] [PASSED] 22 VFs
[08:39:21] [PASSED] 23 VFs
[08:39:21] [PASSED] 24 VFs
[08:39:21] [PASSED] 25 VFs
[08:39:21] [PASSED] 26 VFs
[08:39:21] [PASSED] 27 VFs
[08:39:21] [PASSED] 28 VFs
[08:39:21] [PASSED] 29 VFs
[08:39:21] [PASSED] 30 VFs
[08:39:21] [PASSED] 31 VFs
[08:39:21] [PASSED] 32 VFs
[08:39:21] [PASSED] 33 VFs
[08:39:21] [PASSED] 34 VFs
[08:39:21] [PASSED] 35 VFs
[08:39:21] [PASSED] 36 VFs
[08:39:21] [PASSED] 37 VFs
[08:39:21] [PASSED] 38 VFs
[08:39:21] [PASSED] 39 VFs
[08:39:21] [PASSED] 40 VFs
[08:39:21] [PASSED] 41 VFs
[08:39:21] [PASSED] 42 VFs
[08:39:21] [PASSED] 43 VFs
[08:39:21] [PASSED] 44 VFs
[08:39:21] [PASSED] 45 VFs
[08:39:21] [PASSED] 46 VFs
[08:39:21] [PASSED] 47 VFs
[08:39:21] [PASSED] 48 VFs
[08:39:21] [PASSED] 49 VFs
[08:39:21] [PASSED] 50 VFs
[08:39:21] [PASSED] 51 VFs
[08:39:21] [PASSED] 52 VFs
[08:39:21] [PASSED] 53 VFs
[08:39:21] [PASSED] 54 VFs
[08:39:21] [PASSED] 55 VFs
[08:39:21] [PASSED] 56 VFs
[08:39:21] [PASSED] 57 VFs
[08:39:21] [PASSED] 58 VFs
[08:39:21] [PASSED] 59 VFs
[08:39:21] [PASSED] 60 VFs
[08:39:21] [PASSED] 61 VFs
[08:39:21] [PASSED] 62 VFs
[08:39:21] [PASSED] 63 VFs
[08:39:21] ==================== [PASSED] fair_vram ====================
[08:39:21] ================== [PASSED] pf_gt_config ===================
[08:39:21] ===================== lmtt (1 subtest) =====================
[08:39:21] ======================== test_ops =========================
[08:39:21] [PASSED] 2-level
[08:39:21] [PASSED] multi-level
[08:39:21] ==================== [PASSED] test_ops =====================
[08:39:21] ====================== [PASSED] lmtt =======================
[08:39:21] ================= sriov_packet (1 subtest) =================
[08:39:21] [PASSED] test_descriptor_init
[08:39:21] ================== [PASSED] sriov_packet ===================
[08:39:21] ================= pf_service (11 subtests) =================
[08:39:21] [PASSED] pf_negotiate_any
[08:39:21] [PASSED] pf_negotiate_base_match
[08:39:21] [PASSED] pf_negotiate_base_newer
[08:39:21] [PASSED] pf_negotiate_base_next
[08:39:21] [SKIPPED] pf_negotiate_base_older (no older minor)
[08:39:21] [PASSED] pf_negotiate_base_prev
[08:39:21] [PASSED] pf_negotiate_latest_match
[08:39:21] [PASSED] pf_negotiate_latest_newer
[08:39:21] [PASSED] pf_negotiate_latest_next
[08:39:21] [SKIPPED] pf_negotiate_latest_older (no older minor)
[08:39:21] [SKIPPED] pf_negotiate_latest_prev (no prev major)
[08:39:21] =================== [PASSED] pf_service ====================
[08:39:21] ================= xe_guc_g2g (2 subtests) ==================
[08:39:21] ============== xe_live_guc_g2g_kunit_default ==============
[08:39:21] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[08:39:21] ============== xe_live_guc_g2g_kunit_allmem ===============
[08:39:21] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[08:39:21] =================== [SKIPPED] xe_guc_g2g ===================
[08:39:21] =================== xe_mocs (2 subtests) ===================
[08:39:21] ================ xe_live_mocs_kernel_kunit ================
[08:39:21] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[08:39:21] ================ xe_live_mocs_reset_kunit =================
[08:39:21] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[08:39:21] ==================== [SKIPPED] xe_mocs =====================
[08:39:21] ================= xe_migrate (2 subtests) ==================
[08:39:21] ================= xe_migrate_sanity_kunit =================
[08:39:21] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[08:39:21] ================== xe_validate_ccs_kunit ==================
[08:39:21] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[08:39:21] =================== [SKIPPED] xe_migrate ===================
[08:39:21] ================== xe_dma_buf (1 subtest) ==================
[08:39:21] ==================== xe_dma_buf_kunit =====================
[08:39:21] ================ [SKIPPED] xe_dma_buf_kunit ================
[08:39:21] =================== [SKIPPED] xe_dma_buf ===================
[08:39:21] ================= xe_bo_shrink (1 subtest) =================
[08:39:21] =================== xe_bo_shrink_kunit ====================
[08:39:21] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[08:39:21] ================== [SKIPPED] xe_bo_shrink ==================
[08:39:21] ==================== xe_bo (2 subtests) ====================
[08:39:21] ================== xe_ccs_migrate_kunit ===================
[08:39:21] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[08:39:21] ==================== xe_bo_evict_kunit ====================
[08:39:21] =============== [SKIPPED] xe_bo_evict_kunit ================
[08:39:21] ===================== [SKIPPED] xe_bo ======================
[08:39:21] =================== xe_any (9 subtests) ====================
[08:39:21] [PASSED] test_to_xe
[08:39:21] [PASSED] test_to_dev
[08:39:21] [PASSED] test_to_pdev
[08:39:21] [PASSED] test_to_drm
[08:39:21] [PASSED] test_if_pdev
[08:39:21] [PASSED] test_if_xe
[08:39:21] [PASSED] test_if_tile
[08:39:21] [PASSED] test_if_gt
[08:39:21] [PASSED] test_to_id
[08:39:21] ===================== [PASSED] xe_any ======================
[08:39:21] ==================== args (13 subtests) ====================
[08:39:21] [PASSED] count_args_test
[08:39:21] [PASSED] call_args_example
[08:39:21] [PASSED] call_args_test
[08:39:21] [PASSED] drop_first_arg_example
[08:39:21] [PASSED] drop_first_arg_test
[08:39:21] [PASSED] first_arg_example
[08:39:21] [PASSED] first_arg_test
[08:39:21] [PASSED] last_arg_example
[08:39:21] [PASSED] last_arg_test
[08:39:21] [PASSED] pick_arg_example
[08:39:21] [PASSED] if_args_example
[08:39:21] [PASSED] if_args_test
[08:39:21] [PASSED] sep_comma_example
[08:39:21] ====================== [PASSED] args =======================
[08:39:21] =================== xe_pci (3 subtests) ====================
[08:39:21] ==================== check_graphics_ip ====================
[08:39:21] [PASSED] 12.00 Xe_LP
[08:39:21] [PASSED] 12.10 Xe_LP+
[08:39:21] [PASSED] 12.55 Xe_HPG
[08:39:21] [PASSED] 12.60 Xe_HPC
[08:39:21] [PASSED] 12.70 Xe_LPG
[08:39:21] [PASSED] 12.71 Xe_LPG
[08:39:21] [PASSED] 12.74 Xe_LPG+
[08:39:21] [PASSED] 20.01 Xe2_HPG
[08:39:21] [PASSED] 20.02 Xe2_HPG
[08:39:21] [PASSED] 20.04 Xe2_LPG
[08:39:21] [PASSED] 30.00 Xe3_LPG
[08:39:21] [PASSED] 30.01 Xe3_LPG
[08:39:21] [PASSED] 30.03 Xe3_LPG
[08:39:21] [PASSED] 30.04 Xe3_LPG
[08:39:21] [PASSED] 30.05 Xe3_LPG
[08:39:21] [PASSED] 35.10 Xe3p_LPG
[08:39:21] [PASSED] 35.11 Xe3p_XPC
[08:39:21] ================ [PASSED] check_graphics_ip ================
[08:39:21] ===================== check_media_ip ======================
[08:39:21] [PASSED] 12.00 Xe_M
[08:39:21] [PASSED] 12.55 Xe_HPM
[08:39:21] [PASSED] 13.00 Xe_LPM+
[08:39:21] [PASSED] 13.01 Xe2_HPM
[08:39:21] [PASSED] 20.00 Xe2_LPM
[08:39:21] [PASSED] 30.00 Xe3_LPM
[08:39:21] [PASSED] 30.02 Xe3_LPM
[08:39:21] [PASSED] 35.00 Xe3p_LPM
[08:39:21] [PASSED] 35.03 Xe3p_HPM
[08:39:21] ================= [PASSED] check_media_ip ==================
[08:39:21] =================== check_platform_desc ===================
[08:39:21] [PASSED] 0x9A60 (TIGERLAKE)
[08:39:21] [PASSED] 0x9A68 (TIGERLAKE)
[08:39:21] [PASSED] 0x9A70 (TIGERLAKE)
[08:39:21] [PASSED] 0x9A40 (TIGERLAKE)
[08:39:21] [PASSED] 0x9A49 (TIGERLAKE)
[08:39:21] [PASSED] 0x9A59 (TIGERLAKE)
[08:39:21] [PASSED] 0x9A78 (TIGERLAKE)
[08:39:21] [PASSED] 0x9AC0 (TIGERLAKE)
[08:39:21] [PASSED] 0x9AC9 (TIGERLAKE)
[08:39:21] [PASSED] 0x9AD9 (TIGERLAKE)
[08:39:21] [PASSED] 0x9AF8 (TIGERLAKE)
[08:39:21] [PASSED] 0x4C80 (ROCKETLAKE)
[08:39:21] [PASSED] 0x4C8A (ROCKETLAKE)
[08:39:21] [PASSED] 0x4C8B (ROCKETLAKE)
[08:39:21] [PASSED] 0x4C8C (ROCKETLAKE)
[08:39:21] [PASSED] 0x4C90 (ROCKETLAKE)
[08:39:21] [PASSED] 0x4C9A (ROCKETLAKE)
[08:39:21] [PASSED] 0x4680 (ALDERLAKE_S)
[08:39:21] [PASSED] 0x4682 (ALDERLAKE_S)
[08:39:21] [PASSED] 0x4688 (ALDERLAKE_S)
[08:39:21] [PASSED] 0x468A (ALDERLAKE_S)
[08:39:21] [PASSED] 0x468B (ALDERLAKE_S)
[08:39:21] [PASSED] 0x4690 (ALDERLAKE_S)
[08:39:21] [PASSED] 0x4692 (ALDERLAKE_S)
[08:39:21] [PASSED] 0x4693 (ALDERLAKE_S)
[08:39:21] [PASSED] 0x46A0 (ALDERLAKE_P)
[08:39:21] [PASSED] 0x46A1 (ALDERLAKE_P)
[08:39:21] [PASSED] 0x46A2 (ALDERLAKE_P)
[08:39:21] [PASSED] 0x46A3 (ALDERLAKE_P)
[08:39:21] [PASSED] 0x46A6 (ALDERLAKE_P)
[08:39:21] [PASSED] 0x46A8 (ALDERLAKE_P)
[08:39:21] [PASSED] 0x46AA (ALDERLAKE_P)
[08:39:21] [PASSED] 0x462A (ALDERLAKE_P)
[08:39:21] [PASSED] 0x4626 (ALDERLAKE_P)
[08:39:21] [PASSED] 0x4628 (ALDERLAKE_P)
[08:39:21] [PASSED] 0x46B0 (ALDERLAKE_P)
[08:39:21] [PASSED] 0x46B1 (ALDERLAKE_P)
[08:39:21] [PASSED] 0x46B2 (ALDERLAKE_P)
[08:39:21] [PASSED] 0x46B3 (ALDERLAKE_P)
[08:39:21] [PASSED] 0x46C0 (ALDERLAKE_P)
[08:39:21] [PASSED] 0x46C1 (ALDERLAKE_P)
[08:39:21] [PASSED] 0x46C2 (ALDERLAKE_P)
[08:39:21] [PASSED] 0x46C3 (ALDERLAKE_P)
[08:39:21] [PASSED] 0x46D0 (ALDERLAKE_N)
[08:39:21] [PASSED] 0x46D1 (ALDERLAKE_N)
[08:39:21] [PASSED] 0x46D2 (ALDERLAKE_N)
[08:39:21] [PASSED] 0x46D3 (ALDERLAKE_N)
[08:39:21] [PASSED] 0x46D4 (ALDERLAKE_N)
[08:39:21] [PASSED] 0xA721 (ALDERLAKE_P)
[08:39:21] [PASSED] 0xA7A1 (ALDERLAKE_P)
[08:39:21] [PASSED] 0xA7A9 (ALDERLAKE_P)
[08:39:21] [PASSED] 0xA7AC (ALDERLAKE_P)
[08:39:21] [PASSED] 0xA7AD (ALDERLAKE_P)
[08:39:21] [PASSED] 0xA720 (ALDERLAKE_P)
[08:39:21] [PASSED] 0xA7A0 (ALDERLAKE_P)
[08:39:21] [PASSED] 0xA7A8 (ALDERLAKE_P)
[08:39:21] [PASSED] 0xA7AA (ALDERLAKE_P)
[08:39:21] [PASSED] 0xA7AB (ALDERLAKE_P)
[08:39:21] [PASSED] 0xA780 (ALDERLAKE_S)
[08:39:21] [PASSED] 0xA781 (ALDERLAKE_S)
[08:39:21] [PASSED] 0xA782 (ALDERLAKE_S)
[08:39:21] [PASSED] 0xA783 (ALDERLAKE_S)
[08:39:21] [PASSED] 0xA788 (ALDERLAKE_S)
[08:39:21] [PASSED] 0xA789 (ALDERLAKE_S)
[08:39:21] [PASSED] 0xA78A (ALDERLAKE_S)
[08:39:21] [PASSED] 0xA78B (ALDERLAKE_S)
[08:39:21] [PASSED] 0x4905 (DG1)
[08:39:21] [PASSED] 0x4906 (DG1)
[08:39:21] [PASSED] 0x4907 (DG1)
[08:39:21] [PASSED] 0x4908 (DG1)
[08:39:21] [PASSED] 0x4909 (DG1)
[08:39:21] [PASSED] 0x56C0 (DG2)
[08:39:21] [PASSED] 0x56C2 (DG2)
[08:39:21] [PASSED] 0x56C1 (DG2)
[08:39:21] [PASSED] 0x7D51 (METEORLAKE)
[08:39:21] [PASSED] 0x7DD1 (METEORLAKE)
[08:39:21] [PASSED] 0x7D41 (METEORLAKE)
[08:39:21] [PASSED] 0x7D67 (METEORLAKE)
[08:39:21] [PASSED] 0xB640 (METEORLAKE)
[08:39:21] [PASSED] 0x56A0 (DG2)
[08:39:21] [PASSED] 0x56A1 (DG2)
[08:39:21] [PASSED] 0x56A2 (DG2)
[08:39:21] [PASSED] 0x56BE (DG2)
[08:39:21] [PASSED] 0x56BF (DG2)
[08:39:21] [PASSED] 0x5690 (DG2)
[08:39:21] [PASSED] 0x5691 (DG2)
[08:39:21] [PASSED] 0x5692 (DG2)
[08:39:21] [PASSED] 0x56A5 (DG2)
[08:39:21] [PASSED] 0x56A6 (DG2)
[08:39:21] [PASSED] 0x56B0 (DG2)
[08:39:21] [PASSED] 0x56B1 (DG2)
[08:39:21] [PASSED] 0x56BA (DG2)
[08:39:21] [PASSED] 0x56BB (DG2)
[08:39:21] [PASSED] 0x56BC (DG2)
[08:39:21] [PASSED] 0x56BD (DG2)
[08:39:21] [PASSED] 0x5693 (DG2)
[08:39:21] [PASSED] 0x5694 (DG2)
[08:39:21] [PASSED] 0x5695 (DG2)
[08:39:21] [PASSED] 0x56A3 (DG2)
[08:39:21] [PASSED] 0x56A4 (DG2)
[08:39:21] [PASSED] 0x56B2 (DG2)
[08:39:21] [PASSED] 0x56B3 (DG2)
[08:39:21] [PASSED] 0x5696 (DG2)
[08:39:21] [PASSED] 0x5697 (DG2)
[08:39:21] [PASSED] 0xB69 (PVC)
[08:39:21] [PASSED] 0xB6E (PVC)
[08:39:21] [PASSED] 0xBD4 (PVC)
[08:39:21] [PASSED] 0xBD5 (PVC)
[08:39:21] [PASSED] 0xBD6 (PVC)
[08:39:21] [PASSED] 0xBD7 (PVC)
[08:39:21] [PASSED] 0xBD8 (PVC)
[08:39:21] [PASSED] 0xBD9 (PVC)
[08:39:21] [PASSED] 0xBDA (PVC)
[08:39:21] [PASSED] 0xBDB (PVC)
[08:39:21] [PASSED] 0xBE0 (PVC)
[08:39:21] [PASSED] 0xBE1 (PVC)
[08:39:21] [PASSED] 0xBE5 (PVC)
[08:39:21] [PASSED] 0x7D40 (METEORLAKE)
[08:39:21] [PASSED] 0x7D45 (METEORLAKE)
[08:39:21] [PASSED] 0x7D55 (METEORLAKE)
[08:39:21] [PASSED] 0x7D60 (METEORLAKE)
[08:39:21] [PASSED] 0x7DD5 (METEORLAKE)
[08:39:21] [PASSED] 0x6420 (LUNARLAKE)
[08:39:21] [PASSED] 0x64A0 (LUNARLAKE)
[08:39:21] [PASSED] 0x64B0 (LUNARLAKE)
[08:39:21] [PASSED] 0xE202 (BATTLEMAGE)
[08:39:21] [PASSED] 0xE209 (BATTLEMAGE)
[08:39:21] [PASSED] 0xE20B (BATTLEMAGE)
[08:39:21] [PASSED] 0xE20C (BATTLEMAGE)
[08:39:21] [PASSED] 0xE20D (BATTLEMAGE)
[08:39:21] [PASSED] 0xE210 (BATTLEMAGE)
[08:39:21] [PASSED] 0xE211 (BATTLEMAGE)
[08:39:21] [PASSED] 0xE212 (BATTLEMAGE)
[08:39:21] [PASSED] 0xE216 (BATTLEMAGE)
[08:39:21] [PASSED] 0xE220 (BATTLEMAGE)
[08:39:21] [PASSED] 0xE221 (BATTLEMAGE)
[08:39:21] [PASSED] 0xE222 (BATTLEMAGE)
[08:39:21] [PASSED] 0xE223 (BATTLEMAGE)
[08:39:21] [PASSED] 0xB080 (PANTHERLAKE)
[08:39:21] [PASSED] 0xB081 (PANTHERLAKE)
[08:39:21] [PASSED] 0xB082 (PANTHERLAKE)
[08:39:21] [PASSED] 0xB083 (PANTHERLAKE)
[08:39:21] [PASSED] 0xB084 (PANTHERLAKE)
[08:39:21] [PASSED] 0xB085 (PANTHERLAKE)
[08:39:21] [PASSED] 0xB086 (PANTHERLAKE)
[08:39:21] [PASSED] 0xB087 (PANTHERLAKE)
[08:39:21] [PASSED] 0xB08F (PANTHERLAKE)
[08:39:21] [PASSED] 0xB090 (PANTHERLAKE)
[08:39:21] [PASSED] 0xB0A0 (PANTHERLAKE)
[08:39:21] [PASSED] 0xB0A1 (PANTHERLAKE)
[08:39:21] [PASSED] 0xB0B0 (PANTHERLAKE)
[08:39:21] [PASSED] 0xFD80 (PANTHERLAKE)
[08:39:21] [PASSED] 0xFD81 (PANTHERLAKE)
[08:39:21] [PASSED] 0xD740 (NOVALAKE_S)
[08:39:21] [PASSED] 0xD741 (NOVALAKE_S)
[08:39:21] [PASSED] 0xD742 (NOVALAKE_S)
[08:39:21] [PASSED] 0xD743 (NOVALAKE_S)
[08:39:21] [PASSED] 0xD745 (NOVALAKE_S)
[08:39:21] [PASSED] 0xD74A (NOVALAKE_S)
[08:39:21] [PASSED] 0xD74B (NOVALAKE_S)
[08:39:21] [PASSED] 0x674C (CRESCENTISLAND)
[08:39:21] [PASSED] 0x674D (CRESCENTISLAND)
[08:39:21] [PASSED] 0x674E (CRESCENTISLAND)
[08:39:21] [PASSED] 0x674F (CRESCENTISLAND)
[08:39:21] [PASSED] 0x6750 (CRESCENTISLAND)
[08:39:21] [PASSED] 0x6751 (CRESCENTISLAND)
[08:39:21] [PASSED] 0xD750 (NOVALAKE_P)
[08:39:21] [PASSED] 0xD751 (NOVALAKE_P)
[08:39:21] [PASSED] 0xD752 (NOVALAKE_P)
[08:39:21] [PASSED] 0xD753 (NOVALAKE_P)
[08:39:21] [PASSED] 0xD754 (NOVALAKE_P)
[08:39:21] [PASSED] 0xD755 (NOVALAKE_P)
[08:39:21] [PASSED] 0xD756 (NOVALAKE_P)
[08:39:21] [PASSED] 0xD757 (NOVALAKE_P)
[08:39:21] [PASSED] 0xD75F (NOVALAKE_P)
[08:39:21] =============== [PASSED] check_platform_desc ===============
[08:39:21] ===================== [PASSED] xe_pci ======================
[08:39:21] ============= xe_rtp_tables_test (5 subtests) ==============
[08:39:21] ================== xe_rtp_table_gt_test ===================
[08:39:21] [PASSED] gt_was/14011060649
[08:39:21] [PASSED] gt_was/14011059788
[08:39:21] [PASSED] gt_was/14015795083
[08:39:21] [PASSED] gt_was/16021867713
[08:39:21] [PASSED] gt_was/14019449301
[08:39:21] [PASSED] gt_was/16028005424
[08:39:21] [PASSED] gt_was/14026578760
[08:39:21] [PASSED] gt_was/1409420604
[08:39:21] [PASSED] gt_was/1408615072
[08:39:21] [PASSED] gt_was/22010523718
[08:39:21] [PASSED] gt_was/14011006942
[08:39:21] [PASSED] gt_was/14014830051
[08:39:21] [PASSED] gt_was/18018781329
[08:39:21] [PASSED] gt_was/1509235366
[08:39:21] [PASSED] gt_was/18018781329
[08:39:21] [PASSED] gt_was/16016694945
[08:39:21] [PASSED] gt_was/14018575942
[08:39:21] [PASSED] gt_was/22016670082
[08:39:21] [PASSED] gt_was/22016670082
[08:39:21] [PASSED] gt_was/14017421178
[08:39:21] [PASSED] gt_was/16025250150
[08:39:21] [PASSED] gt_was/14021871409
[08:39:21] [PASSED] gt_was/16021865536
[08:39:21] [PASSED] gt_was/14021486841
[08:39:21] [PASSED] gt_was/14025160223
[08:39:21] [PASSED] gt_was/14026144927, 16029437861, 14026127056
[08:39:21] [PASSED] gt_was/14025635424
[08:39:21] [PASSED] gt_was/16028005424
[08:39:21] ============== [PASSED] xe_rtp_table_gt_test ===============
[08:39:21] ================== xe_rtp_table_gt_test ===================
[08:39:21] [PASSED] gt_tunings/Tuning: Blend Fill Caching Optimization Disable
[08:39:21] [PASSED] gt_tunings/Tuning: 32B Access Enable
[08:39:21] [PASSED] gt_tunings/Tuning: L3 cache
[08:39:21] [PASSED] gt_tunings/Tuning: L3 cache - media
[08:39:21] [PASSED] gt_tunings/Tuning: Compression Overfetch
[08:39:21] [PASSED] gt_tunings/Tuning: Compression Overfetch - media
[08:39:21] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3
[08:39:21] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3 - media
[08:39:21] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only
[08:39:21] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only - media
[08:39:21] [PASSED] gt_tunings/Tuning: Stateless compression control
[08:39:21] [PASSED] gt_tunings/Tuning: Stateless compression control - media
[08:39:21] [PASSED] gt_tunings/Tuning: L3 RW flush all Cache
[08:39:21] [PASSED] gt_tunings/Tuning: L3 RW flush all cache - media
[08:39:21] [PASSED] gt_tunings/Tuning: Set STLB Bank Hash Mode to 4KB
[08:39:21] [PASSED] gt_tunings/Tuning: Force All Non-Compressible Memory Reads to be 256B Overfetches
[08:39:21] ============== [PASSED] xe_rtp_table_gt_test ===============
[08:39:21] ================== xe_rtp_table_oob_test ==================
[08:39:21] [PASSED] oob_was/1607983814
[08:39:21] [PASSED] oob_was/16010904313
[08:39:21] [PASSED] oob_was/18022495364
[08:39:21] [PASSED] oob_was/22012773006
[08:39:21] [PASSED] oob_was/14014475959
[08:39:21] [PASSED] oob_was/22011391025
[08:39:21] [PASSED] oob_was/22012727170
[08:39:21] [PASSED] oob_was/22012727685
[08:39:21] [PASSED] oob_was/22016596838
[08:39:21] [PASSED] oob_was/18020744125
[08:39:21] [PASSED] oob_was/1409600907
[08:39:21] [PASSED] oob_was/22014953428
[08:39:21] [PASSED] oob_was/16017236439
[08:39:21] [PASSED] oob_was/14019821291
[08:39:21] [PASSED] oob_was/14015076503
[08:39:21] [PASSED] oob_was/22016122933
[08:39:21] [PASSED] oob_was/14018913170
[08:39:21] [PASSED] oob_was/14018094691
[08:39:21] [PASSED] oob_was/18024947630
[08:39:21] [PASSED] oob_was/16022287689
[08:39:21] [PASSED] oob_was/13011645652
[08:39:21] [PASSED] oob_was/14022293748
[08:39:21] [PASSED] oob_was/22019794406
[08:39:21] [PASSED] oob_was/22019338487
[08:39:21] [PASSED] oob_was/16023588340
[08:39:21] [PASSED] oob_was/14019789679
[08:39:21] [PASSED] oob_was/14022866841
[08:39:21] [PASSED] oob_was/16021333562
[08:39:21] [PASSED] oob_was/14016712196
[08:39:21] [PASSED] oob_was/14015568240
[08:39:21] [PASSED] oob_was/18013179988
[08:39:21] [PASSED] oob_was/1508761755
[08:39:21] [PASSED] oob_was/16023105232
[08:39:21] [PASSED] oob_was/16026508708
[08:39:21] [PASSED] oob_was/14020001231
[08:39:21] [PASSED] oob_was/16023683509
[08:39:21] [PASSED] oob_was/14025515070
[08:39:21] [PASSED] oob_was/15015404425_disable
[08:39:21] [PASSED] oob_was/16026007364
[08:39:21] [PASSED] oob_was/14020316580
[08:39:21] [PASSED] oob_was/14025883347
[08:39:21] [PASSED] oob_was/16029380221
[08:39:21] [PASSED] oob_was/22022079272
[08:39:21] [PASSED] oob_was/16029897822
[08:39:21] [PASSED] oob_was/14027054324
[08:39:21] [PASSED] oob_was/14025941587
[08:39:21] [PASSED] oob_was/16030224309
[08:39:21] ============== [PASSED] xe_rtp_table_oob_test ==============
[08:39:21] ================ xe_rtp_table_dev_oob_test ================
[08:39:21] [PASSED] device_oob_was/22010954014
[08:39:21] [PASSED] device_oob_was/15015404425
[08:39:21] [PASSED] device_oob_was/22019338487_display
[08:39:21] [PASSED] device_oob_was/14022085890
[08:39:21] [PASSED] device_oob_was/14026539277
[08:39:21] [PASSED] device_oob_was/14026633728
[08:39:21] [PASSED] device_oob_was/14026746987
[08:39:21] [PASSED] device_oob_was/14026779378
[08:39:21] ============ [PASSED] xe_rtp_table_dev_oob_test ============
[08:39:21] ========== xe_rtp_table_missing_upper_bound_test ==========
[08:39:21] [PASSED] register_whitelist/WaAllowPMDepthAndInvocationCountAccessFromUMD, 1408556865
[08:39:21] [PASSED] register_whitelist/1508744258, 14012131227, 1808121037
[08:39:21] [PASSED] register_whitelist/1806527549
[08:39:21] [PASSED] register_whitelist/allow_read_ctx_timestamp
[08:39:21] [PASSED] register_whitelist/allow_read_queue_timestamp
[08:39:21] [PASSED] register_whitelist/16014440446
[08:39:21] [PASSED] register_whitelist/16017236439
[08:39:21] [PASSED] register_whitelist/16020183090
[08:39:21] [PASSED] register_whitelist/14024997852
[08:39:21] [PASSED] register_whitelist/14024997852
[08:39:21] ====== [PASSED] xe_rtp_table_missing_upper_bound_test ======
[08:39:21] =============== [PASSED] xe_rtp_tables_test ================
[08:39:21] =================== xe_rtp (3 subtests) ====================
[08:39:21] =================== xe_rtp_rules_tests ====================
[08:39:21] [PASSED] no
[08:39:21] [PASSED] yes
[08:39:21] [PASSED] no-and-no
[08:39:21] [PASSED] no-and-yes
[08:39:21] [PASSED] yes-and-no
[08:39:21] [PASSED] yes-and-yes
[08:39:21] [PASSED] no-or-no
[08:39:21] [PASSED] no-or-yes
[08:39:21] [PASSED] yes-or-no
[08:39:21] [PASSED] yes-or-yes
[08:39:21] [PASSED] no-yes-or-yes-no
[08:39:21] [PASSED] no-yes-or-yes-yes
[08:39:21] [PASSED] yes-yes-or-no-yes
[08:39:21] [PASSED] yes-yes-or-yes-yes
[08:39:21] [PASSED] no-no-or-yes-or-no
[08:39:21] [PASSED] or
[08:39:21] [PASSED] or-yes
[08:39:21] [PASSED] or-no
[08:39:21] [PASSED] yes-or
[08:39:21] [PASSED] no-or
[08:39:21] [PASSED] no-or-or-yes
[08:39:21] [PASSED] yes-or-or-no
[08:39:21] [PASSED] no-or-or-no
[08:39:21] [PASSED] missing-context-engine-class
[08:39:21] [PASSED] missing-context-engine-class-or-yes
[08:39:21] [PASSED] missing-context-engine-class-or-or-yes
[08:39:21] =============== [PASSED] xe_rtp_rules_tests ================
[08:39:21] =============== xe_rtp_process_to_sr_tests ================
[08:39:21] [PASSED] coalesce-same-reg
[08:39:21] [PASSED] coalesce-same-reg-literal-and-func
[08:39:21] [PASSED] no-match-no-add
[08:39:21] [PASSED] two-regs-two-entries
[08:39:21] [PASSED] clr-one-set-other
[08:39:21] [PASSED] set-field
[08:39:21] [PASSED] conflict-duplicate
[08:39:21] [PASSED] conflict-not-disjoint
[08:39:21] [PASSED] conflict-not-disjoint-literal-and-func
[08:39:21] [PASSED] conflict-reg-type
[08:39:21] [PASSED] bad-mcr-reg-forced-to-regular
[08:39:21] [PASSED] bad-regular-reg-forced-to-mcr
[08:39:21] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[08:39:21] ================== xe_rtp_process_tests ===================
[08:39:21] [PASSED] active1
[08:39:21] [PASSED] active2
[08:39:21] [PASSED] active-inactive
[08:39:21] [PASSED] inactive-active
[08:39:21] [PASSED] inactive-active-inactive
[08:39:21] [PASSED] inactive-inactive-inactive
[08:39:21] ============== [PASSED] xe_rtp_process_tests ===============
[08:39:21] ===================== [PASSED] xe_rtp ======================
[08:39:21] ==================== xe_wa (1 subtest) =====================
[08:39:21] ======================== xe_wa_gt =========================
[08:39:21] [PASSED] TIGERLAKE B0
[08:39:21] [PASSED] DG1 A0
[08:39:21] [PASSED] DG1 B0
[08:39:21] [PASSED] ALDERLAKE_S A0
[08:39:21] [PASSED] ALDERLAKE_S B0
[08:39:21] [PASSED] ALDERLAKE_S C0
[08:39:21] [PASSED] ALDERLAKE_S D0
[08:39:21] [PASSED] ALDERLAKE_P A0
[08:39:21] [PASSED] ALDERLAKE_P B0
[08:39:21] [PASSED] ALDERLAKE_P C0
[08:39:21] [PASSED] ALDERLAKE_S RPLS D0
[08:39:21] [PASSED] ALDERLAKE_P RPLU E0
[08:39:21] [PASSED] DG2 G10 C0
[08:39:21] [PASSED] DG2 G11 B1
[08:39:21] [PASSED] DG2 G12 A1
[08:39:21] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[08:39:21] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[08:39:21] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[08:39:21] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[08:39:21] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[08:39:21] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[08:39:21] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[08:39:21] ==================== [PASSED] xe_wa_gt =====================
[08:39:21] ====================== [PASSED] xe_wa ======================
[08:39:21] ============================================================
[08:39:21] Testing complete. Ran 821 tests: passed: 793, skipped: 28
[08:39:21] Elapsed time: 37.080s total, 1.912s configuring, 34.450s building, 0.711s running
+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/gpu/drm/tests/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[08:39:21] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[08:39:23] 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
[08:39:49] Starting KUnit Kernel (1/1)...
[08:39:49] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[08:39:49] ============ drm_test_pick_cmdline (2 subtests) ============
[08:39:49] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[08:39:49] =============== drm_test_pick_cmdline_named ===============
[08:39:49] [PASSED] NTSC
[08:39:49] [PASSED] NTSC-J
[08:39:49] [PASSED] PAL
[08:39:49] [PASSED] PAL-M
[08:39:49] =========== [PASSED] drm_test_pick_cmdline_named ===========
[08:39:49] ============== [PASSED] drm_test_pick_cmdline ==============
[08:39:49] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[08:39:49] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[08:39:49] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[08:39:49] =========== drm_validate_clone_mode (2 subtests) ===========
[08:39:49] ============== drm_test_check_in_clone_mode ===============
[08:39:49] [PASSED] in_clone_mode
[08:39:49] [PASSED] not_in_clone_mode
[08:39:49] ========== [PASSED] drm_test_check_in_clone_mode ===========
[08:39:49] =============== drm_test_check_valid_clones ===============
[08:39:49] [PASSED] not_in_clone_mode
[08:39:49] [PASSED] valid_clone
[08:39:49] [PASSED] invalid_clone
[08:39:49] =========== [PASSED] drm_test_check_valid_clones ===========
[08:39:49] ============= [PASSED] drm_validate_clone_mode =============
[08:39:49] ============= drm_validate_modeset (1 subtest) =============
[08:39:49] [PASSED] drm_test_check_connector_changed_modeset
[08:39:49] ============== [PASSED] drm_validate_modeset ===============
[08:39:49] ====== drm_test_bridge_get_current_state (1 subtest) =======
[08:39:49] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[08:39:49] ======== [PASSED] drm_test_bridge_get_current_state ========
[08:39:49] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[08:39:49] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[08:39:49] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[08:39:49] [PASSED] drm_test_drm_bridge_helper_hdmi_output_bus_fmts
[08:39:49] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[08:39:49] ============== drm_bridge_alloc (2 subtests) ===============
[08:39:49] [PASSED] drm_test_drm_bridge_alloc_basic
[08:39:49] [PASSED] drm_test_drm_bridge_alloc_get_put
[08:39:49] ================ [PASSED] drm_bridge_alloc =================
[08:39:49] ============= drm_bridge_bus_fmt (5 subtests) ==============
[08:39:49] [PASSED] drm_test_bridge_rgb_yuv_rgb
[08:39:49] [PASSED] drm_test_bridge_must_convert_to_yuv444
[08:39:49] [PASSED] drm_test_bridge_hdmi_auto_rgb
[08:39:49] [PASSED] drm_test_bridge_auto_first
[08:39:49] [PASSED] drm_test_bridge_rgb_yuv_no_path
[08:39:49] =============== [PASSED] drm_bridge_bus_fmt ================
[08:39:49] ============= drm_cmdline_parser (40 subtests) =============
[08:39:49] [PASSED] drm_test_cmdline_force_d_only
[08:39:49] [PASSED] drm_test_cmdline_force_D_only_dvi
[08:39:49] [PASSED] drm_test_cmdline_force_D_only_hdmi
[08:39:49] [PASSED] drm_test_cmdline_force_D_only_not_digital
[08:39:49] [PASSED] drm_test_cmdline_force_e_only
[08:39:49] [PASSED] drm_test_cmdline_res
[08:39:49] [PASSED] drm_test_cmdline_res_vesa
[08:39:49] [PASSED] drm_test_cmdline_res_vesa_rblank
[08:39:49] [PASSED] drm_test_cmdline_res_rblank
[08:39:49] [PASSED] drm_test_cmdline_res_bpp
[08:39:49] [PASSED] drm_test_cmdline_res_refresh
[08:39:49] [PASSED] drm_test_cmdline_res_bpp_refresh
[08:39:49] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[08:39:49] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[08:39:49] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[08:39:49] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[08:39:49] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[08:39:49] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[08:39:49] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[08:39:49] [PASSED] drm_test_cmdline_res_margins_force_on
[08:39:49] [PASSED] drm_test_cmdline_res_vesa_margins
[08:39:49] [PASSED] drm_test_cmdline_name
[08:39:49] [PASSED] drm_test_cmdline_name_bpp
[08:39:49] [PASSED] drm_test_cmdline_name_option
[08:39:49] [PASSED] drm_test_cmdline_name_bpp_option
[08:39:49] [PASSED] drm_test_cmdline_rotate_0
[08:39:49] [PASSED] drm_test_cmdline_rotate_90
[08:39:49] [PASSED] drm_test_cmdline_rotate_180
[08:39:49] [PASSED] drm_test_cmdline_rotate_270
[08:39:49] [PASSED] drm_test_cmdline_hmirror
[08:39:49] [PASSED] drm_test_cmdline_vmirror
[08:39:49] [PASSED] drm_test_cmdline_margin_options
[08:39:49] [PASSED] drm_test_cmdline_multiple_options
[08:39:49] [PASSED] drm_test_cmdline_bpp_extra_and_option
[08:39:49] [PASSED] drm_test_cmdline_extra_and_option
[08:39:49] [PASSED] drm_test_cmdline_freestanding_options
[08:39:49] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[08:39:49] [PASSED] drm_test_cmdline_panel_orientation
[08:39:49] ================ drm_test_cmdline_invalid =================
[08:39:49] [PASSED] margin_only
[08:39:49] [PASSED] interlace_only
[08:39:49] [PASSED] res_missing_x
[08:39:49] [PASSED] res_missing_y
[08:39:49] [PASSED] res_bad_y
[08:39:49] [PASSED] res_missing_y_bpp
[08:39:49] [PASSED] res_bad_bpp
[08:39:49] [PASSED] res_bad_refresh
[08:39:49] [PASSED] res_bpp_refresh_force_on_off
[08:39:49] [PASSED] res_invalid_mode
[08:39:49] [PASSED] res_bpp_wrong_place_mode
[08:39:49] [PASSED] name_bpp_refresh
[08:39:49] [PASSED] name_refresh
[08:39:49] [PASSED] name_refresh_wrong_mode
[08:39:49] [PASSED] name_refresh_invalid_mode
[08:39:49] [PASSED] rotate_multiple
[08:39:49] [PASSED] rotate_invalid_val
[08:39:49] [PASSED] rotate_truncated
[08:39:49] [PASSED] invalid_option
[08:39:49] [PASSED] invalid_tv_option
[08:39:49] [PASSED] truncated_tv_option
[08:39:49] ============ [PASSED] drm_test_cmdline_invalid =============
[08:39:49] =============== drm_test_cmdline_tv_options ===============
[08:39:49] [PASSED] NTSC
[08:39:49] [PASSED] NTSC_443
[08:39:49] [PASSED] NTSC_J
[08:39:49] [PASSED] PAL
[08:39:49] [PASSED] PAL_M
[08:39:49] [PASSED] PAL_N
[08:39:49] [PASSED] SECAM
[08:39:49] [PASSED] MONO_525
[08:39:49] [PASSED] MONO_625
[08:39:49] =========== [PASSED] drm_test_cmdline_tv_options ===========
[08:39:49] =============== [PASSED] drm_cmdline_parser ================
[08:39:49] ========== drmm_connector_hdmi_init (20 subtests) ==========
[08:39:49] [PASSED] drm_test_connector_hdmi_init_valid
[08:39:49] [PASSED] drm_test_connector_hdmi_init_bpc_8
[08:39:49] [PASSED] drm_test_connector_hdmi_init_bpc_10
[08:39:49] [PASSED] drm_test_connector_hdmi_init_bpc_12
[08:39:49] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[08:39:49] [PASSED] drm_test_connector_hdmi_init_bpc_null
[08:39:49] [PASSED] drm_test_connector_hdmi_init_formats_empty
[08:39:49] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[08:39:49] === drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[08:39:49] [PASSED] supported_formats=0x9 yuv420_allowed=1
[08:39:49] [PASSED] supported_formats=0x9 yuv420_allowed=0
[08:39:49] [PASSED] supported_formats=0x5 yuv420_allowed=1
[08:39:49] [PASSED] supported_formats=0x5 yuv420_allowed=0
[08:39:49] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[08:39:49] [PASSED] drm_test_connector_hdmi_init_null_ddc
[08:39:49] [PASSED] drm_test_connector_hdmi_init_null_product
[08:39:49] [PASSED] drm_test_connector_hdmi_init_null_vendor
[08:39:49] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[08:39:49] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[08:39:49] [PASSED] drm_test_connector_hdmi_init_product_valid
[08:39:49] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[08:39:49] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[08:39:49] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[08:39:49] ========= drm_test_connector_hdmi_init_type_valid =========
[08:39:49] [PASSED] HDMI-A
[08:39:49] [PASSED] HDMI-B
[08:39:49] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[08:39:49] ======== drm_test_connector_hdmi_init_type_invalid ========
[08:39:49] [PASSED] Unknown
[08:39:49] [PASSED] VGA
[08:39:49] [PASSED] DVI-I
[08:39:49] [PASSED] DVI-D
[08:39:49] [PASSED] DVI-A
[08:39:49] [PASSED] Composite
[08:39:49] [PASSED] SVIDEO
[08:39:49] [PASSED] LVDS
[08:39:49] [PASSED] Component
[08:39:49] [PASSED] DIN
[08:39:49] [PASSED] DP
[08:39:49] [PASSED] TV
[08:39:49] [PASSED] eDP
[08:39:49] [PASSED] Virtual
[08:39:49] [PASSED] DSI
[08:39:49] [PASSED] DPI
[08:39:49] [PASSED] Writeback
[08:39:49] [PASSED] SPI
[08:39:49] [PASSED] USB
[08:39:49] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[08:39:49] ============ [PASSED] drmm_connector_hdmi_init =============
[08:39:49] ============= drmm_connector_init (3 subtests) =============
[08:39:49] [PASSED] drm_test_drmm_connector_init
[08:39:49] [PASSED] drm_test_drmm_connector_init_null_ddc
[08:39:49] ========= drm_test_drmm_connector_init_type_valid =========
[08:39:49] [PASSED] Unknown
[08:39:49] [PASSED] VGA
[08:39:49] [PASSED] DVI-I
[08:39:49] [PASSED] DVI-D
[08:39:49] [PASSED] DVI-A
[08:39:49] [PASSED] Composite
[08:39:49] [PASSED] SVIDEO
[08:39:49] [PASSED] LVDS
[08:39:49] [PASSED] Component
[08:39:49] [PASSED] DIN
[08:39:49] [PASSED] DP
[08:39:49] [PASSED] HDMI-A
[08:39:49] [PASSED] HDMI-B
[08:39:49] [PASSED] TV
[08:39:49] [PASSED] eDP
[08:39:49] [PASSED] Virtual
[08:39:49] [PASSED] DSI
[08:39:49] [PASSED] DPI
[08:39:49] [PASSED] Writeback
[08:39:49] [PASSED] SPI
[08:39:49] [PASSED] USB
[08:39:49] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[08:39:49] =============== [PASSED] drmm_connector_init ===============
[08:39:49] ========= drm_connector_dynamic_init (6 subtests) ==========
[08:39:49] [PASSED] drm_test_drm_connector_dynamic_init
[08:39:49] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[08:39:49] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[08:39:49] [PASSED] drm_test_drm_connector_dynamic_init_properties
[08:39:49] ===== drm_test_drm_connector_dynamic_init_type_valid ======
[08:39:49] [PASSED] Unknown
[08:39:49] [PASSED] VGA
[08:39:49] [PASSED] DVI-I
[08:39:49] [PASSED] DVI-D
[08:39:49] [PASSED] DVI-A
[08:39:49] [PASSED] Composite
[08:39:49] [PASSED] SVIDEO
[08:39:49] [PASSED] LVDS
[08:39:49] [PASSED] Component
[08:39:49] [PASSED] DIN
[08:39:49] [PASSED] DP
[08:39:49] [PASSED] HDMI-A
[08:39:49] [PASSED] HDMI-B
[08:39:49] [PASSED] TV
[08:39:49] [PASSED] eDP
[08:39:49] [PASSED] Virtual
[08:39:49] [PASSED] DSI
[08:39:49] [PASSED] DPI
[08:39:49] [PASSED] Writeback
[08:39:49] [PASSED] SPI
[08:39:49] [PASSED] USB
[08:39:49] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[08:39:49] ======== drm_test_drm_connector_dynamic_init_name =========
[08:39:49] [PASSED] Unknown
[08:39:49] [PASSED] VGA
[08:39:49] [PASSED] DVI-I
[08:39:49] [PASSED] DVI-D
[08:39:49] [PASSED] DVI-A
[08:39:49] [PASSED] Composite
[08:39:49] [PASSED] SVIDEO
[08:39:49] [PASSED] LVDS
[08:39:49] [PASSED] Component
[08:39:49] [PASSED] DIN
[08:39:49] [PASSED] DP
[08:39:49] [PASSED] HDMI-A
[08:39:49] [PASSED] HDMI-B
[08:39:49] [PASSED] TV
[08:39:49] [PASSED] eDP
[08:39:49] [PASSED] Virtual
[08:39:49] [PASSED] DSI
[08:39:49] [PASSED] DPI
[08:39:49] [PASSED] Writeback
[08:39:49] [PASSED] SPI
[08:39:49] [PASSED] USB
[08:39:49] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[08:39:49] =========== [PASSED] drm_connector_dynamic_init ============
[08:39:49] ==== drm_connector_dynamic_register_early (4 subtests) =====
[08:39:49] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[08:39:49] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[08:39:49] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[08:39:49] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[08:39:49] ====== [PASSED] drm_connector_dynamic_register_early =======
[08:39:49] ======= drm_connector_dynamic_register (7 subtests) ========
[08:39:49] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[08:39:49] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[08:39:49] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[08:39:49] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[08:39:49] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[08:39:49] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[08:39:49] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[08:39:49] ========= [PASSED] drm_connector_dynamic_register ==========
[08:39:49] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[08:39:49] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[08:39:49] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[08:39:49] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[08:39:49] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[08:39:49] ========== drm_test_get_tv_mode_from_name_valid ===========
[08:39:49] [PASSED] NTSC
[08:39:49] [PASSED] NTSC-443
[08:39:49] [PASSED] NTSC-J
[08:39:49] [PASSED] PAL
[08:39:49] [PASSED] PAL-M
[08:39:49] [PASSED] PAL-N
[08:39:49] [PASSED] SECAM
[08:39:49] [PASSED] Mono
[08:39:49] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[08:39:49] [PASSED] drm_test_get_tv_mode_from_name_truncated
[08:39:49] ============ [PASSED] drm_get_tv_mode_from_name ============
[08:39:49] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[08:39:49] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[08:39:49] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[08:39:49] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[08:39:49] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[08:39:49] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[08:39:49] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[08:39:49] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[08:39:49] [PASSED] VIC 96
[08:39:49] [PASSED] VIC 97
[08:39:49] [PASSED] VIC 101
[08:39:49] [PASSED] VIC 102
[08:39:49] [PASSED] VIC 106
[08:39:49] [PASSED] VIC 107
[08:39:49] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[08:39:49] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[08:39:49] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[08:39:49] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[08:39:49] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[08:39:49] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[08:39:49] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[08:39:49] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[08:39:49] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[08:39:49] [PASSED] Automatic
[08:39:49] [PASSED] Full
[08:39:49] [PASSED] Limited 16:235
[08:39:49] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[08:39:49] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[08:39:49] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[08:39:49] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[08:39:49] === drm_test_drm_hdmi_connector_get_output_format_name ====
[08:39:49] [PASSED] RGB
[08:39:49] [PASSED] YUV 4:2:0
[08:39:49] [PASSED] YUV 4:2:2
[08:39:49] [PASSED] YUV 4:4:4
[08:39:49] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[08:39:49] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[08:39:49] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[08:39:49] ============= drm_damage_helper (21 subtests) ==============
[08:39:49] [PASSED] drm_test_damage_iter_no_damage
[08:39:49] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[08:39:49] [PASSED] drm_test_damage_iter_no_damage_src_moved
[08:39:49] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[08:39:49] [PASSED] drm_test_damage_iter_no_damage_not_visible
[08:39:49] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[08:39:49] [PASSED] drm_test_damage_iter_no_damage_no_fb
[08:39:49] [PASSED] drm_test_damage_iter_simple_damage
[08:39:49] [PASSED] drm_test_damage_iter_single_damage
[08:39:49] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[08:39:49] [PASSED] drm_test_damage_iter_single_damage_outside_src
[08:39:49] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[08:39:49] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[08:39:49] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[08:39:49] [PASSED] drm_test_damage_iter_single_damage_src_moved
[08:39:49] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[08:39:49] [PASSED] drm_test_damage_iter_damage
[08:39:49] [PASSED] drm_test_damage_iter_damage_one_intersect
[08:39:49] [PASSED] drm_test_damage_iter_damage_one_outside
[08:39:49] [PASSED] drm_test_damage_iter_damage_src_moved
[08:39:49] [PASSED] drm_test_damage_iter_damage_not_visible
[08:39:49] ================ [PASSED] drm_damage_helper ================
[08:39:49] ============== drm_dp_mst_helper (3 subtests) ==============
[08:39:49] ============== drm_test_dp_mst_calc_pbn_mode ==============
[08:39:49] [PASSED] Clock 154000 BPP 30 DSC disabled
[08:39:49] [PASSED] Clock 234000 BPP 30 DSC disabled
[08:39:49] [PASSED] Clock 297000 BPP 24 DSC disabled
[08:39:49] [PASSED] Clock 332880 BPP 24 DSC enabled
[08:39:49] [PASSED] Clock 324540 BPP 24 DSC enabled
[08:39:49] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[08:39:49] ============== drm_test_dp_mst_calc_pbn_div ===============
[08:39:49] [PASSED] Link rate 2000000 lane count 4
[08:39:49] [PASSED] Link rate 2000000 lane count 2
[08:39:49] [PASSED] Link rate 2000000 lane count 1
[08:39:49] [PASSED] Link rate 1350000 lane count 4
[08:39:49] [PASSED] Link rate 1350000 lane count 2
[08:39:49] [PASSED] Link rate 1350000 lane count 1
[08:39:49] [PASSED] Link rate 1000000 lane count 4
[08:39:49] [PASSED] Link rate 1000000 lane count 2
[08:39:49] [PASSED] Link rate 1000000 lane count 1
[08:39:49] [PASSED] Link rate 810000 lane count 4
[08:39:49] [PASSED] Link rate 810000 lane count 2
[08:39:49] [PASSED] Link rate 810000 lane count 1
[08:39:49] [PASSED] Link rate 540000 lane count 4
[08:39:49] [PASSED] Link rate 540000 lane count 2
[08:39:49] [PASSED] Link rate 540000 lane count 1
[08:39:49] [PASSED] Link rate 270000 lane count 4
[08:39:49] [PASSED] Link rate 270000 lane count 2
[08:39:49] [PASSED] Link rate 270000 lane count 1
[08:39:49] [PASSED] Link rate 162000 lane count 4
[08:39:49] [PASSED] Link rate 162000 lane count 2
[08:39:49] [PASSED] Link rate 162000 lane count 1
[08:39:49] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[08:39:49] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[08:39:49] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[08:39:49] [PASSED] DP_POWER_UP_PHY with port number
[08:39:49] [PASSED] DP_POWER_DOWN_PHY with port number
[08:39:49] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[08:39:49] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[08:39:49] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[08:39:49] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[08:39:49] [PASSED] DP_QUERY_PAYLOAD with port number
[08:39:49] [PASSED] DP_QUERY_PAYLOAD with VCPI
[08:39:49] [PASSED] DP_REMOTE_DPCD_READ with port number
[08:39:49] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[08:39:49] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[08:39:49] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[08:39:49] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[08:39:49] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[08:39:49] [PASSED] DP_REMOTE_I2C_READ with port number
[08:39:49] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[08:39:49] [PASSED] DP_REMOTE_I2C_READ with transactions array
[08:39:49] [PASSED] DP_REMOTE_I2C_WRITE with port number
[08:39:49] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[08:39:49] [PASSED] DP_REMOTE_I2C_WRITE with data array
[08:39:49] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[08:39:49] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[08:39:49] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[08:39:49] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[08:39:49] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[08:39:49] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[08:39:49] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[08:39:49] ================ [PASSED] drm_dp_mst_helper ================
[08:39:49] ================== drm_exec (7 subtests) ===================
[08:39:49] [PASSED] sanitycheck
[08:39:49] [PASSED] test_lock
[08:39:49] [PASSED] test_lock_unlock
[08:39:49] [PASSED] test_duplicates
[08:39:49] [PASSED] test_prepare
[08:39:49] [PASSED] test_prepare_array
[08:39:49] [PASSED] test_multiple_loops
[08:39:49] ==================== [PASSED] drm_exec =====================
[08:39:49] =========== drm_format_helper_test (17 subtests) ===========
[08:39:49] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[08:39:49] [PASSED] single_pixel_source_buffer
[08:39:49] [PASSED] single_pixel_clip_rectangle
[08:39:49] [PASSED] well_known_colors
[08:39:49] [PASSED] destination_pitch
[08:39:49] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[08:39:49] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[08:39:49] [PASSED] single_pixel_source_buffer
[08:39:49] [PASSED] single_pixel_clip_rectangle
[08:39:49] [PASSED] well_known_colors
[08:39:49] [PASSED] destination_pitch
[08:39:49] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[08:39:49] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[08:39:49] [PASSED] single_pixel_source_buffer
[08:39:49] [PASSED] single_pixel_clip_rectangle
[08:39:49] [PASSED] well_known_colors
[08:39:49] [PASSED] destination_pitch
[08:39:49] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[08:39:49] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[08:39:49] [PASSED] single_pixel_source_buffer
[08:39:49] [PASSED] single_pixel_clip_rectangle
[08:39:49] [PASSED] well_known_colors
[08:39:49] [PASSED] destination_pitch
[08:39:49] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[08:39:49] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[08:39:49] [PASSED] single_pixel_source_buffer
[08:39:49] [PASSED] single_pixel_clip_rectangle
[08:39:49] [PASSED] well_known_colors
[08:39:49] [PASSED] destination_pitch
[08:39:49] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[08:39:49] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[08:39:49] [PASSED] single_pixel_source_buffer
[08:39:49] [PASSED] single_pixel_clip_rectangle
[08:39:49] [PASSED] well_known_colors
[08:39:49] [PASSED] destination_pitch
[08:39:49] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[08:39:49] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[08:39:49] [PASSED] single_pixel_source_buffer
[08:39:49] [PASSED] single_pixel_clip_rectangle
[08:39:49] [PASSED] well_known_colors
[08:39:49] [PASSED] destination_pitch
[08:39:49] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[08:39:49] ============= drm_test_fb_xrgb8888_to_bgr888 ==============
[08:39:49] [PASSED] single_pixel_source_buffer
[08:39:49] [PASSED] single_pixel_clip_rectangle
[08:39:49] [PASSED] well_known_colors
[08:39:49] [PASSED] destination_pitch
[08:39:49] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[08:39:49] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[08:39:49] [PASSED] single_pixel_source_buffer
[08:39:49] [PASSED] single_pixel_clip_rectangle
[08:39:49] [PASSED] well_known_colors
[08:39:49] [PASSED] destination_pitch
[08:39:49] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[08:39:49] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[08:39:49] [PASSED] single_pixel_source_buffer
[08:39:49] [PASSED] single_pixel_clip_rectangle
[08:39:49] [PASSED] well_known_colors
[08:39:49] [PASSED] destination_pitch
[08:39:49] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[08:39:49] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[08:39:49] [PASSED] single_pixel_source_buffer
[08:39:49] [PASSED] single_pixel_clip_rectangle
[08:39:49] [PASSED] well_known_colors
[08:39:49] [PASSED] destination_pitch
[08:39:49] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[08:39:49] ============== drm_test_fb_xrgb8888_to_mono ===============
[08:39:49] [PASSED] single_pixel_source_buffer
[08:39:49] [PASSED] single_pixel_clip_rectangle
[08:39:49] [PASSED] well_known_colors
[08:39:49] [PASSED] destination_pitch
[08:39:49] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[08:39:49] ==================== drm_test_fb_swab =====================
[08:39:49] [PASSED] single_pixel_source_buffer
[08:39:49] [PASSED] single_pixel_clip_rectangle
[08:39:49] [PASSED] well_known_colors
[08:39:49] [PASSED] destination_pitch
[08:39:49] ================ [PASSED] drm_test_fb_swab =================
[08:39:49] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[08:39:49] [PASSED] single_pixel_source_buffer
[08:39:49] [PASSED] single_pixel_clip_rectangle
[08:39:49] [PASSED] well_known_colors
[08:39:49] [PASSED] destination_pitch
[08:39:49] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[08:39:49] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[08:39:49] [PASSED] single_pixel_source_buffer
[08:39:49] [PASSED] single_pixel_clip_rectangle
[08:39:49] [PASSED] well_known_colors
[08:39:49] [PASSED] destination_pitch
[08:39:49] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[08:39:49] ================= drm_test_fb_clip_offset =================
[08:39:49] [PASSED] pass through
[08:39:49] [PASSED] horizontal offset
[08:39:49] [PASSED] vertical offset
[08:39:49] [PASSED] horizontal and vertical offset
[08:39:49] [PASSED] horizontal offset (custom pitch)
[08:39:49] [PASSED] vertical offset (custom pitch)
[08:39:49] [PASSED] horizontal and vertical offset (custom pitch)
[08:39:49] ============= [PASSED] drm_test_fb_clip_offset =============
[08:39:49] =================== drm_test_fb_memcpy ====================
[08:39:49] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[08:39:49] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[08:39:49] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[08:39:49] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[08:39:49] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[08:39:49] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[08:39:49] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[08:39:49] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[08:39:49] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[08:39:49] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[08:39:49] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[08:39:49] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[08:39:49] =============== [PASSED] drm_test_fb_memcpy ================
[08:39:49] ============= [PASSED] drm_format_helper_test ==============
[08:39:49] ================= drm_format (18 subtests) =================
[08:39:49] [PASSED] drm_test_format_block_width_invalid
[08:39:49] [PASSED] drm_test_format_block_width_one_plane
[08:39:49] [PASSED] drm_test_format_block_width_two_plane
[08:39:49] [PASSED] drm_test_format_block_width_three_plane
[08:39:49] [PASSED] drm_test_format_block_width_tiled
[08:39:49] [PASSED] drm_test_format_block_height_invalid
[08:39:49] [PASSED] drm_test_format_block_height_one_plane
[08:39:49] [PASSED] drm_test_format_block_height_two_plane
[08:39:49] [PASSED] drm_test_format_block_height_three_plane
[08:39:49] [PASSED] drm_test_format_block_height_tiled
[08:39:49] [PASSED] drm_test_format_min_pitch_invalid
[08:39:49] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[08:39:49] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[08:39:49] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[08:39:49] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[08:39:49] [PASSED] drm_test_format_min_pitch_two_plane
[08:39:49] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[08:39:49] [PASSED] drm_test_format_min_pitch_tiled
[08:39:49] =================== [PASSED] drm_format ====================
[08:39:49] ============== drm_framebuffer (10 subtests) ===============
[08:39:49] ========== drm_test_framebuffer_check_src_coords ==========
[08:39:49] [PASSED] Success: source fits into fb
[08:39:49] [PASSED] Fail: overflowing fb with x-axis coordinate
[08:39:49] [PASSED] Fail: overflowing fb with y-axis coordinate
[08:39:49] [PASSED] Fail: overflowing fb with source width
[08:39:49] [PASSED] Fail: overflowing fb with source height
[08:39:49] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[08:39:49] [PASSED] drm_test_framebuffer_cleanup
[08:39:49] =============== drm_test_framebuffer_create ===============
[08:39:49] [PASSED] ABGR8888 normal sizes
[08:39:49] [PASSED] ABGR8888 max sizes
[08:39:49] [PASSED] ABGR8888 pitch greater than min required
[08:39:49] [PASSED] ABGR8888 pitch less than min required
[08:39:49] [PASSED] ABGR8888 Invalid width
[08:39:49] [PASSED] ABGR8888 Invalid buffer handle
[08:39:49] [PASSED] No pixel format
[08:39:49] [PASSED] ABGR8888 Width 0
[08:39:49] [PASSED] ABGR8888 Height 0
[08:39:49] [PASSED] ABGR8888 Out of bound height * pitch combination
[08:39:49] [PASSED] ABGR8888 Large buffer offset
[08:39:49] [PASSED] ABGR8888 Buffer offset for inexistent plane
[08:39:49] [PASSED] ABGR8888 Invalid flag
[08:39:49] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[08:39:49] [PASSED] ABGR8888 Valid buffer modifier
[08:39:49] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[08:39:49] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[08:39:49] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[08:39:49] [PASSED] NV12 Normal sizes
[08:39:49] [PASSED] NV12 Max sizes
[08:39:49] [PASSED] NV12 Invalid pitch
[08:39:49] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[08:39:49] [PASSED] NV12 different modifier per-plane
[08:39:49] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[08:39:49] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[08:39:49] [PASSED] NV12 Modifier for inexistent plane
[08:39:49] [PASSED] NV12 Handle for inexistent plane
[08:39:49] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[08:39:49] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[08:39:49] [PASSED] YVU420 Normal sizes
[08:39:49] [PASSED] YVU420 Max sizes
[08:39:49] [PASSED] YVU420 Invalid pitch
[08:39:49] [PASSED] YVU420 Different pitches
[08:39:49] [PASSED] YVU420 Different buffer offsets/pitches
[08:39:49] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[08:39:49] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[08:39:49] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[08:39:49] [PASSED] YVU420 Valid modifier
[08:39:49] [PASSED] YVU420 Different modifiers per plane
[08:39:49] [PASSED] YVU420 Modifier for inexistent plane
[08:39:49] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[08:39:49] [PASSED] X0L2 Normal sizes
[08:39:49] [PASSED] X0L2 Max sizes
[08:39:49] [PASSED] X0L2 Invalid pitch
[08:39:49] [PASSED] X0L2 Pitch greater than minimum required
[08:39:49] [PASSED] X0L2 Handle for inexistent plane
[08:39:49] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[08:39:49] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[08:39:49] [PASSED] X0L2 Valid modifier
[08:39:49] [PASSED] X0L2 Modifier for inexistent plane
[08:39:49] =========== [PASSED] drm_test_framebuffer_create ===========
[08:39:49] [PASSED] drm_test_framebuffer_free
[08:39:49] [PASSED] drm_test_framebuffer_init
[08:39:49] [PASSED] drm_test_framebuffer_init_bad_format
[08:39:49] [PASSED] drm_test_framebuffer_init_dev_mismatch
[08:39:49] [PASSED] drm_test_framebuffer_lookup
[08:39:49] [PASSED] drm_test_framebuffer_lookup_inexistent
[08:39:49] [PASSED] drm_test_framebuffer_modifiers_not_supported
[08:39:49] ================= [PASSED] drm_framebuffer =================
[08:39:49] ================ drm_gem_shmem (8 subtests) ================
[08:39:49] [PASSED] drm_gem_shmem_test_obj_create
[08:39:49] [PASSED] drm_gem_shmem_test_obj_create_private
[08:39:49] [PASSED] drm_gem_shmem_test_pin_pages
[08:39:49] [PASSED] drm_gem_shmem_test_vmap
[08:39:49] [PASSED] drm_gem_shmem_test_get_sg_table
[08:39:49] [PASSED] drm_gem_shmem_test_get_pages_sgt
[08:39:49] [PASSED] drm_gem_shmem_test_madvise
[08:39:49] [PASSED] drm_gem_shmem_test_purge
[08:39:49] ================== [PASSED] drm_gem_shmem ==================
[08:39:49] === drm_atomic_helper_connector_hdmi_check (29 subtests) ===
[08:39:49] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[08:39:49] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[08:39:49] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[08:39:49] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[08:39:49] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[08:39:49] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[08:39:49] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 =======
[08:39:49] [PASSED] Automatic
[08:39:49] [PASSED] Full
[08:39:49] [PASSED] Limited 16:235
[08:39:49] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[08:39:49] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[08:39:49] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[08:39:49] [PASSED] drm_test_check_disable_connector
[08:39:49] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[08:39:49] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[08:39:49] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[08:39:49] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[08:39:49] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[08:39:49] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[08:39:49] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[08:39:49] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[08:39:49] [PASSED] drm_test_check_output_bpc_dvi
[08:39:49] [PASSED] drm_test_check_output_bpc_format_vic_1
[08:39:49] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[08:39:49] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[08:39:49] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[08:39:49] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[08:39:49] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[08:39:49] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[08:39:49] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[08:39:49] ============ drm_test_check_hdmi_color_format =============
[08:39:49] [PASSED] AUTO -> RGB
[08:39:49] [PASSED] YCBCR422 -> YUV422
[08:39:49] [PASSED] YCBCR420 -> YUV420
[08:39:49] [PASSED] YCBCR444 -> YUV444
[08:39:49] [PASSED] RGB -> RGB
[08:39:49] ======== [PASSED] drm_test_check_hdmi_color_format =========
[08:39:49] ======== drm_test_check_hdmi_color_format_420_only ========
[08:39:49] [PASSED] RGB should fail
[08:39:49] [PASSED] YUV444 should fail
[08:39:49] [PASSED] YUV422 should fail
[08:39:49] [PASSED] YUV420 should work
[08:39:49] ==== [PASSED] drm_test_check_hdmi_color_format_420_only ====
[08:39:49] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[08:39:49] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[08:39:49] [PASSED] drm_test_check_broadcast_rgb_value
[08:39:49] [PASSED] drm_test_check_bpc_8_value
[08:39:49] [PASSED] drm_test_check_bpc_10_value
[08:39:49] [PASSED] drm_test_check_bpc_12_value
[08:39:49] [PASSED] drm_test_check_format_value
[08:39:49] [PASSED] drm_test_check_tmds_char_value
[08:39:49] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[08:39:49] = drm_atomic_helper_connector_hdmi_mode_valid (7 subtests) =
[08:39:49] [PASSED] drm_test_check_mode_valid
[08:39:49] [PASSED] drm_test_check_mode_valid_reject
[08:39:49] [PASSED] drm_test_check_mode_valid_reject_rate
[08:39:49] [PASSED] drm_test_check_mode_valid_reject_max_clock
[08:39:49] [PASSED] drm_test_check_mode_valid_yuv420_only_max_clock
[08:39:49] [PASSED] drm_test_check_mode_valid_reject_yuv420_only_connector
[08:39:49] [PASSED] drm_test_check_mode_valid_accept_yuv420_also_connector_rgb
[08:39:49] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[08:39:49] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[08:39:49] [PASSED] drm_test_check_infoframes
[08:39:49] [PASSED] drm_test_check_reject_avi_infoframe
[08:39:49] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[08:39:49] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[08:39:49] [PASSED] drm_test_check_reject_audio_infoframe
[08:39:49] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[08:39:49] ================= drm_managed (2 subtests) =================
[08:39:49] [PASSED] drm_test_managed_release_action
[08:39:49] [PASSED] drm_test_managed_run_action
[08:39:49] =================== [PASSED] drm_managed ===================
[08:39:49] =================== drm_mm (6 subtests) ====================
[08:39:49] [PASSED] drm_test_mm_init
[08:39:49] [PASSED] drm_test_mm_debug
[08:39:49] [PASSED] drm_test_mm_align32
[08:39:49] [PASSED] drm_test_mm_align64
[08:39:49] [PASSED] drm_test_mm_lowest
[08:39:49] [PASSED] drm_test_mm_highest
[08:39:49] ===================== [PASSED] drm_mm ======================
[08:39:49] ============= drm_modes_analog_tv (5 subtests) =============
[08:39:49] [PASSED] drm_test_modes_analog_tv_mono_576i
[08:39:49] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[08:39:49] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[08:39:49] [PASSED] drm_test_modes_analog_tv_pal_576i
[08:39:49] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[08:39:49] =============== [PASSED] drm_modes_analog_tv ===============
[08:39:49] ============== drm_panic_helper (3 subtests) ===============
[08:39:49] ============= drm_test_panic_screen_user_map ==============
[08:39:49] [PASSED] Panic screen user, mode: 1024 x 768 XR24 little-endian (0x34325258)
[08:39:49] [PASSED] Panic screen user, mode: 494 x 494 XR24 little-endian (0x34325258)
[08:39:49] [PASSED] Panic screen user, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[08:39:49] [PASSED] Panic screen user, mode: 1024 x 768 RG16 little-endian (0x36314752)
[08:39:49] [PASSED] Panic screen user, mode: 1024 x 768 RG24 little-endian (0x34324752)
[08:39:49] [PASSED] Panic screen kmsg, mode: 1024 x 768 XR24 little-endian (0x34325258)
[08:39:49] [PASSED] Panic screen kmsg, mode: 494 x 494 XR24 little-endian (0x34325258)
[08:39:49] [PASSED] Panic screen kmsg, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[08:39:49] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG16 little-endian (0x36314752)
[08:39:49] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG24 little-endian (0x34324752)
[08:39:49] ========= [PASSED] drm_test_panic_screen_user_map ==========
[08:39:49] ============= drm_test_panic_screen_user_page =============
[08:39:49] [PASSED] Panic screen user, mode: 1024 x 768 XR24 little-endian (0x34325258)
[08:39:49] [PASSED] Panic screen user, mode: 494 x 494 XR24 little-endian (0x34325258)
[08:39:49] [PASSED] Panic screen user, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[08:39:49] [PASSED] Panic screen user, mode: 1024 x 768 RG16 little-endian (0x36314752)
[08:39:49] [PASSED] Panic screen user, mode: 1024 x 768 RG24 little-endian (0x34324752)
[08:39:49] [PASSED] Panic screen kmsg, mode: 1024 x 768 XR24 little-endian (0x34325258)
[08:39:49] [PASSED] Panic screen kmsg, mode: 494 x 494 XR24 little-endian (0x34325258)
[08:39:49] [PASSED] Panic screen kmsg, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[08:39:49] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG16 little-endian (0x36314752)
[08:39:49] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG24 little-endian (0x34324752)
[08:39:49] ========= [PASSED] drm_test_panic_screen_user_page =========
[08:39:49] ========== drm_test_panic_screen_user_set_pixel ===========
[08:39:49] [PASSED] Panic screen user, mode: 1024 x 768 XR24 little-endian (0x34325258)
[08:39:49] [PASSED] Panic screen user, mode: 494 x 494 XR24 little-endian (0x34325258)
[08:39:49] [PASSED] Panic screen user, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[08:39:49] [PASSED] Panic screen user, mode: 1024 x 768 RG16 little-endian (0x36314752)
[08:39:49] [PASSED] Panic screen user, mode: 1024 x 768 RG24 little-endian (0x34324752)
[08:39:49] [PASSED] Panic screen kmsg, mode: 1024 x 768 XR24 little-endian (0x34325258)
[08:39:49] [PASSED] Panic screen kmsg, mode: 494 x 494 XR24 little-endian (0x34325258)
[08:39:49] [PASSED] Panic screen kmsg, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[08:39:49] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG16 little-endian (0x36314752)
[08:39:49] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG24 little-endian (0x34324752)
[08:39:49] ====== [PASSED] drm_test_panic_screen_user_set_pixel =======
[08:39:49] ================ [PASSED] drm_panic_helper =================
[08:39:49] ============== drm_plane_helper (2 subtests) ===============
[08:39:49] =============== drm_test_check_plane_state ================
[08:39:49] [PASSED] clipping_simple
[08:39:49] [PASSED] clipping_rotate_reflect
[08:39:49] [PASSED] positioning_simple
[08:39:49] [PASSED] upscaling
[08:39:49] [PASSED] downscaling
[08:39:49] [PASSED] rounding1
[08:39:49] [PASSED] rounding2
[08:39:49] [PASSED] rounding3
[08:39:49] [PASSED] rounding4
[08:39:49] =========== [PASSED] drm_test_check_plane_state ============
[08:39:49] =========== drm_test_check_invalid_plane_state ============
[08:39:49] [PASSED] positioning_invalid
[08:39:49] [PASSED] upscaling_invalid
[08:39:49] [PASSED] downscaling_invalid
[08:39:49] ======= [PASSED] drm_test_check_invalid_plane_state ========
[08:39:49] ================ [PASSED] drm_plane_helper =================
[08:39:49] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[08:39:49] ====== drm_test_connector_helper_tv_get_modes_check =======
[08:39:49] [PASSED] None
[08:39:49] [PASSED] PAL
[08:39:49] [PASSED] NTSC
[08:39:49] [PASSED] Both, NTSC Default
[08:39:49] [PASSED] Both, PAL Default
[08:39:49] [PASSED] Both, NTSC Default, with PAL on command-line
[08:39:49] [PASSED] Both, PAL Default, with NTSC on command-line
[08:39:49] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[08:39:49] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[08:39:49] ================== drm_rect (9 subtests) ===================
[08:39:49] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[08:39:49] [PASSED] drm_test_rect_clip_scaled_not_clipped
[08:39:49] [PASSED] drm_test_rect_clip_scaled_clipped
[08:39:49] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[08:39:49] ================= drm_test_rect_intersect =================
[08:39:49] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[08:39:49] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[08:39:49] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[08:39:49] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[08:39:49] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[08:39:49] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[08:39:49] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[08:39:49] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[08:39:49] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[08:39:49] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[08:39:49] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[08:39:49] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[08:39:49] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[08:39:49] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[08:39:49] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[08:39:49] ============= [PASSED] drm_test_rect_intersect =============
[08:39:49] ================ drm_test_rect_calc_hscale ================
[08:39:49] [PASSED] normal use
[08:39:49] [PASSED] out of max range
[08:39:49] [PASSED] out of min range
[08:39:49] [PASSED] zero dst
[08:39:49] [PASSED] negative src
[08:39:49] [PASSED] negative dst
[08:39:49] ============ [PASSED] drm_test_rect_calc_hscale ============
[08:39:49] ================ drm_test_rect_calc_vscale ================
[08:39:49] [PASSED] normal use
[08:39:49] [PASSED] out of max range
[08:39:49] [PASSED] out of min range
[08:39:49] [PASSED] zero dst
[08:39:49] [PASSED] negative src
[08:39:49] [PASSED] negative dst
[08:39:49] ============ [PASSED] drm_test_rect_calc_vscale ============
[08:39:49] ================== drm_test_rect_rotate ===================
[08:39:49] [PASSED] reflect-x
[08:39:49] [PASSED] reflect-y
[08:39:49] [PASSED] rotate-0
[08:39:49] [PASSED] rotate-90
[08:39:49] [PASSED] rotate-180
[08:39:49] [PASSED] rotate-270
[08:39:49] ============== [PASSED] drm_test_rect_rotate ===============
[08:39:49] ================ drm_test_rect_rotate_inv =================
[08:39:49] [PASSED] reflect-x
[08:39:49] [PASSED] reflect-y
[08:39:49] [PASSED] rotate-0
[08:39:49] [PASSED] rotate-90
[08:39:49] [PASSED] rotate-180
[08:39:49] [PASSED] rotate-270
[08:39:49] ============ [PASSED] drm_test_rect_rotate_inv =============
[08:39:49] ==================== [PASSED] drm_rect =====================
[08:39:49] ============ drm_sysfb_modeset_test (1 subtest) ============
[08:39:49] ============ drm_test_sysfb_build_fourcc_list =============
[08:39:49] [PASSED] no native formats
[08:39:49] [PASSED] XRGB8888 as native format
[08:39:49] [PASSED] remove duplicates
[08:39:49] [PASSED] convert alpha formats
[08:39:49] [PASSED] random formats
[08:39:49] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[08:39:49] ============= [PASSED] drm_sysfb_modeset_test ==============
[08:39:49] ================== drm_fixp (2 subtests) ===================
[08:39:49] [PASSED] drm_test_int2fixp
[08:39:49] [PASSED] drm_test_sm2fixp
[08:39:49] ==================== [PASSED] drm_fixp =====================
[08:39:49] ============================================================
[08:39:49] Testing complete. Ran 667 tests: passed: 667
[08:39:49] Elapsed time: 27.814s total, 1.904s configuring, 25.490s building, 0.415s running
+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[08:39:49] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[08:39:51] 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
[08:40:01] Starting KUnit Kernel (1/1)...
[08:40:01] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[08:40:01] ================= ttm_device (5 subtests) ==================
[08:40:01] [PASSED] ttm_device_init_basic
[08:40:01] [PASSED] ttm_device_init_multiple
[08:40:01] [PASSED] ttm_device_fini_basic
[08:40:01] [PASSED] ttm_device_init_no_vma_man
[08:40:01] ================== ttm_device_init_pools ==================
[08:40:01] [PASSED] No DMA allocations, no DMA32 required
[08:40:01] [PASSED] DMA allocations, DMA32 required
[08:40:01] [PASSED] No DMA allocations, DMA32 required
[08:40:01] [PASSED] DMA allocations, no DMA32 required
[08:40:01] ============== [PASSED] ttm_device_init_pools ==============
[08:40:01] =================== [PASSED] ttm_device ====================
[08:40:01] ================== ttm_pool (8 subtests) ===================
[08:40:01] ================== ttm_pool_alloc_basic ===================
[08:40:01] [PASSED] One page
[08:40:01] [PASSED] More than one page
[08:40:01] [PASSED] Above the allocation limit
[08:40:01] [PASSED] One page, with coherent DMA mappings enabled
[08:40:01] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[08:40:01] ============== [PASSED] ttm_pool_alloc_basic ===============
[08:40:01] ============== ttm_pool_alloc_basic_dma_addr ==============
[08:40:01] [PASSED] One page
[08:40:01] [PASSED] More than one page
[08:40:01] [PASSED] Above the allocation limit
[08:40:01] [PASSED] One page, with coherent DMA mappings enabled
[08:40:01] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[08:40:01] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[08:40:01] [PASSED] ttm_pool_alloc_order_caching_match
[08:40:01] [PASSED] ttm_pool_alloc_caching_mismatch
[08:40:01] [PASSED] ttm_pool_alloc_order_mismatch
[08:40:01] [PASSED] ttm_pool_free_dma_alloc
[08:40:01] [PASSED] ttm_pool_free_no_dma_alloc
[08:40:01] [PASSED] ttm_pool_fini_basic
[08:40:01] ==================== [PASSED] ttm_pool =====================
[08:40:01] ================ ttm_resource (8 subtests) =================
[08:40:01] ================= ttm_resource_init_basic =================
[08:40:01] [PASSED] Init resource in TTM_PL_SYSTEM
[08:40:01] [PASSED] Init resource in TTM_PL_VRAM
[08:40:01] [PASSED] Init resource in a private placement
[08:40:01] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[08:40:01] ============= [PASSED] ttm_resource_init_basic =============
[08:40:01] [PASSED] ttm_resource_init_pinned
[08:40:01] [PASSED] ttm_resource_fini_basic
[08:40:01] [PASSED] ttm_resource_manager_init_basic
[08:40:01] [PASSED] ttm_resource_manager_usage_basic
[08:40:01] [PASSED] ttm_resource_manager_set_used_basic
[08:40:01] [PASSED] ttm_sys_man_alloc_basic
[08:40:01] [PASSED] ttm_sys_man_free_basic
[08:40:01] ================== [PASSED] ttm_resource ===================
[08:40:01] =================== ttm_tt (15 subtests) ===================
[08:40:01] ==================== ttm_tt_init_basic ====================
[08:40:01] [PASSED] Page-aligned size
[08:40:01] [PASSED] Extra pages requested
[08:40:01] ================ [PASSED] ttm_tt_init_basic ================
[08:40:01] [PASSED] ttm_tt_init_misaligned
[08:40:01] [PASSED] ttm_tt_fini_basic
[08:40:01] [PASSED] ttm_tt_fini_sg
[08:40:01] [PASSED] ttm_tt_fini_shmem
[08:40:01] [PASSED] ttm_tt_create_basic
[08:40:01] [PASSED] ttm_tt_create_invalid_bo_type
[08:40:01] [PASSED] ttm_tt_create_ttm_exists
[08:40:01] [PASSED] ttm_tt_create_failed
[08:40:01] [PASSED] ttm_tt_destroy_basic
[08:40:01] [PASSED] ttm_tt_populate_null_ttm
[08:40:01] [PASSED] ttm_tt_populate_populated_ttm
[08:40:01] [PASSED] ttm_tt_unpopulate_basic
[08:40:01] [PASSED] ttm_tt_unpopulate_empty_ttm
[08:40:01] [PASSED] ttm_tt_swapin_basic
[08:40:01] ===================== [PASSED] ttm_tt ======================
[08:40:01] =================== ttm_bo (14 subtests) ===================
[08:40:01] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[08:40:01] [PASSED] Cannot be interrupted and sleeps
[08:40:01] [PASSED] Cannot be interrupted, locks straight away
[08:40:01] [PASSED] Can be interrupted, sleeps
[08:40:01] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[08:40:01] [PASSED] ttm_bo_reserve_locked_no_sleep
[08:40:01] [PASSED] ttm_bo_reserve_no_wait_ticket
[08:40:01] [PASSED] ttm_bo_reserve_double_resv
[08:40:01] [PASSED] ttm_bo_reserve_interrupted
[08:40:01] [PASSED] ttm_bo_reserve_deadlock
[08:40:01] [PASSED] ttm_bo_unreserve_basic
[08:40:01] [PASSED] ttm_bo_unreserve_pinned
[08:40:01] [PASSED] ttm_bo_unreserve_bulk
[08:40:01] [PASSED] ttm_bo_fini_basic
[08:40:02] [PASSED] ttm_bo_fini_shared_resv
[08:40:02] [PASSED] ttm_bo_pin_basic
[08:40:02] [PASSED] ttm_bo_pin_unpin_resource
[08:40:02] [PASSED] ttm_bo_multiple_pin_one_unpin
[08:40:02] ===================== [PASSED] ttm_bo ======================
[08:40:02] ============== ttm_bo_validate (22 subtests) ===============
[08:40:02] ============== ttm_bo_init_reserved_sys_man ===============
[08:40:02] [PASSED] Buffer object for userspace
[08:40:02] [PASSED] Kernel buffer object
[08:40:02] [PASSED] Shared buffer object
[08:40:02] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[08:40:02] ============== ttm_bo_init_reserved_mock_man ==============
[08:40:02] [PASSED] Buffer object for userspace
[08:40:02] [PASSED] Kernel buffer object
[08:40:02] [PASSED] Shared buffer object
[08:40:02] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[08:40:02] [PASSED] ttm_bo_init_reserved_resv
[08:40:02] ================== ttm_bo_validate_basic ==================
[08:40:02] [PASSED] Buffer object for userspace
[08:40:02] [PASSED] Kernel buffer object
[08:40:02] [PASSED] Shared buffer object
[08:40:02] ============== [PASSED] ttm_bo_validate_basic ==============
[08:40:02] [PASSED] ttm_bo_validate_invalid_placement
[08:40:02] ============= ttm_bo_validate_same_placement ==============
[08:40:02] [PASSED] System manager
[08:40:02] [PASSED] VRAM manager
[08:40:02] ========= [PASSED] ttm_bo_validate_same_placement ==========
[08:40:02] [PASSED] ttm_bo_validate_failed_alloc
[08:40:02] [PASSED] ttm_bo_validate_pinned
[08:40:02] [PASSED] ttm_bo_validate_busy_placement
[08:40:02] ================ ttm_bo_validate_multihop =================
[08:40:02] [PASSED] Buffer object for userspace
[08:40:02] [PASSED] Kernel buffer object
[08:40:02] [PASSED] Shared buffer object
[08:40:02] ============ [PASSED] ttm_bo_validate_multihop =============
[08:40:02] ========== ttm_bo_validate_no_placement_signaled ==========
[08:40:02] [PASSED] Buffer object in system domain, no page vector
[08:40:02] [PASSED] Buffer object in system domain with an existing page vector
[08:40:02] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[08:40:02] ======== ttm_bo_validate_no_placement_not_signaled ========
[08:40:02] [PASSED] Buffer object for userspace
[08:40:02] [PASSED] Kernel buffer object
[08:40:02] [PASSED] Shared buffer object
[08:40:02] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[08:40:02] [PASSED] ttm_bo_validate_move_fence_signaled
[08:40:02] ========= ttm_bo_validate_move_fence_not_signaled =========
[08:40:02] [PASSED] Waits for GPU
[08:40:02] [PASSED] Tries to lock straight away
[08:40:02] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[08:40:02] [PASSED] ttm_bo_validate_swapout
[08:40:02] [PASSED] ttm_bo_validate_happy_evict
[08:40:02] [PASSED] ttm_bo_validate_all_pinned_evict
[08:40:02] [PASSED] ttm_bo_validate_allowed_only_evict
[08:40:02] [PASSED] ttm_bo_validate_deleted_evict
[08:40:02] [PASSED] ttm_bo_validate_busy_domain_evict
[08:40:02] [PASSED] ttm_bo_validate_evict_gutting
[08:40:02] [PASSED] ttm_bo_validate_recrusive_evict
[08:40:02] ================= [PASSED] ttm_bo_validate =================
[08:40:02] ============================================================
[08:40:02] Testing complete. Ran 102 tests: passed: 102
[08:40:02] Elapsed time: 12.286s total, 1.865s configuring, 10.206s building, 0.182s running
+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/dma-buf/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/dma-buf/.kunitconfig
[08:40:02] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[08:40:04] 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
[08:40:12] Starting KUnit Kernel (1/1)...
[08:40:12] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[08:40:12] =============== dma-buf-fence (12 subtests) ================
[08:40:12] [PASSED] test_sanitycheck
[08:40:12] [PASSED] test_signaling
[08:40:12] [PASSED] test_add_callback
[08:40:12] [PASSED] test_late_add_callback
[08:40:12] [PASSED] test_rm_callback
[08:40:12] [PASSED] test_late_rm_callback
[08:40:12] [PASSED] test_status
[08:40:12] [PASSED] test_error
[08:40:12] [PASSED] test_wait
[08:40:12] [PASSED] test_wait_timeout
[08:40:12] [PASSED] test_stub
[08:40:12] [SKIPPED] test_race_signal_callback (requires at least 2 CPUs)
[08:40:12] ================== [PASSED] dma-buf-fence ==================
[08:40:12] ============ dma-buf-fence-chain (11 subtests) =============
[08:40:12] [PASSED] test_sanitycheck
[08:40:12] [PASSED] test_find_seqno
[08:40:12] [PASSED] test_find_signaled
[08:40:12] [PASSED] test_find_out_of_order
[08:40:17] [PASSED] test_find_gap
[08:40:17] [PASSED] test_find_race
[08:40:17] [PASSED] test_signal_forward
[08:40:17] [PASSED] test_signal_backward
[08:40:18] [PASSED] test_wait_forward
[08:40:18] [PASSED] test_wait_backward
[08:40:18] [PASSED] test_wait_random
[08:40:18] =============== [PASSED] dma-buf-fence-chain ===============
[08:40:18] ============ dma-buf-fence-unwrap (10 subtests) ============
[08:40:18] [PASSED] test_sanitycheck
[08:40:18] [PASSED] test_unwrap_array
[08:40:18] [PASSED] test_unwrap_chain
[08:40:18] [PASSED] test_unwrap_chain_array
[08:40:18] [PASSED] test_unwrap_merge
[08:40:18] [PASSED] test_unwrap_merge_duplicate
[08:40:18] [PASSED] test_unwrap_merge_seqno
[08:40:18] [PASSED] test_unwrap_merge_order
[08:40:18] [PASSED] test_unwrap_merge_complex
[08:40:18] [PASSED] test_unwrap_merge_complex_seqno
[08:40:18] ============== [PASSED] dma-buf-fence-unwrap ===============
[08:40:18] ================ dma-buf-resv (5 subtests) =================
[08:40:18] [PASSED] test_sanitycheck
[08:40:18] ===================== test_signaling ======================
[08:40:18] [PASSED] kernel
[08:40:18] [PASSED] write
[08:40:18] [PASSED] read
[08:40:18] [PASSED] bookkeep
[08:40:18] ================= [PASSED] test_signaling ==================
[08:40:18] ====================== test_for_each ======================
[08:40:18] [PASSED] kernel
[08:40:18] [PASSED] write
[08:40:18] [PASSED] read
[08:40:18] [PASSED] bookkeep
[08:40:18] ================== [PASSED] test_for_each ==================
[08:40:18] ================= test_for_each_unlocked ==================
[08:40:18] [PASSED] kernel
[08:40:18] [PASSED] write
[08:40:18] [PASSED] read
[08:40:18] [PASSED] bookkeep
[08:40:18] ============= [PASSED] test_for_each_unlocked ==============
[08:40:18] ===================== test_get_fences =====================
[08:40:18] [PASSED] kernel
[08:40:18] [PASSED] write
[08:40:18] [PASSED] read
[08:40:18] [PASSED] bookkeep
[08:40:18] ================= [PASSED] test_get_fences =================
[08:40:18] ================== [PASSED] dma-buf-resv ===================
[08:40:18] ============================================================
[08:40:18] Testing complete. Ran 50 tests: passed: 49, skipped: 1
[08:40:18] Elapsed time: 15.828s total, 1.835s configuring, 8.672s building, 5.277s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 9+ messages in thread
* ✓ Xe.CI.BAT: success for drm/xe: Expose retired VRAM pages via drm-ras (rev2)
2026-10-07 8:03 [PATCH v2 0/2] drm/xe: Expose retired VRAM pages via drm-ras Aravind Iddamsetty
` (3 preceding siblings ...)
2026-10-07 8:40 ` ✓ CI.KUnit: success " Patchwork
@ 2026-10-07 9:27 ` Patchwork
2026-10-07 10:42 ` ✓ Xe.CI.FULL: " Patchwork
5 siblings, 0 replies; 9+ messages in thread
From: Patchwork @ 2026-10-07 9:27 UTC (permalink / raw)
To: Aravind Iddamsetty; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 1526 bytes --]
== Series Details ==
Series: drm/xe: Expose retired VRAM pages via drm-ras (rev2)
URL : https://patchwork.freedesktop.org/series/173066/
State : success
== Summary ==
CI Bug Log - changes from xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12_BAT -> xe-pw-173066v2_BAT
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (15 -> 15)
------------------------------
No changes in participating hosts
Known issues
------------
Here are the changes found in xe-pw-173066v2_BAT that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@core_hotunplug@unbind-rebind:
- bat-bmg-2: [PASS][1] -> [ABORT][2] ([Intel XE#9463])
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/bat-bmg-2/igt@core_hotunplug@unbind-rebind.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/bat-bmg-2/igt@core_hotunplug@unbind-rebind.html
[Intel XE#9463]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9463
Build changes
-------------
* Linux: xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12 -> xe-pw-173066v2
IGT_9131: 5e43e9df3a1581074f0de2bbeddd939ebd950b93 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12: daeb062fc40f727fafefed080c6d12a5ad1d0d12
xe-pw-173066v2: 173066v2
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/index.html
[-- Attachment #2: Type: text/html, Size: 2091 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 1/2] drm/xe: Expose retired VRAM pages via drm-ras
2026-10-07 8:03 ` [PATCH v2 1/2] " Aravind Iddamsetty
@ 2026-10-07 9:28 ` Christian König
2026-10-07 13:55 ` Rodrigo Vivi
0 siblings, 1 reply; 9+ messages in thread
From: Christian König @ 2026-10-07 9:28 UTC (permalink / raw)
To: Aravind Iddamsetty, intel-xe, dri-devel, netdev, amd-gfx
Cc: simona.vetter, airlied, tejas.upadhyay, himal.prasad.ghimiray,
rodrigo.vivi, riana.tauro, raag.jadav, joshua.santosh.ranjan,
ashwin.kumar.kulkarni, pratik.bari, Hawking.Zhang, tao.zhou1,
YiPeng.Chai, jinzhou.su, cesun102, lijo.lazar, alexander.deucher
On 10/7/26 10:03, Aravind Iddamsetty wrote:
> The memory page offlining support tracks bad VRAM pages and currently
> only exposes them through debugfs (vram_bad_pages), which is not a
> stable ABI. Add a proper userspace interface using the drm-ras
> generic netlink family.
Oh, why in the world are you using netlink for that?
In almost all cases (except maybe udev) using netlink has proven to be a bad idea.
Why aren't RAS errors just exposed through sysfs and/or udev?
Regards,
Christian.
>
> Introduce a new node type DRM_RAS_NODE_TYPE_RETIRED_RESOURCES which
> enumerates hardware resources that have been permanently taken out of
> service. Each node reports a single resource type, identified by its
> node-name, so the resource type is implied by the node rather than
> carried per entry. The per-entry payload stays extensible: each entry
> carries a single type-specific nested attribute, so future resource
> types can be added without touching existing consumers. VRAM pages are
> the first supported type, reported via the vram-page nest as
> {address, size, status} where status is one of retired/pending/failed.
>
> A single operation is added on the node:
> - GET_RETIRED_RESOURCES: dump the resources retired on the node. The
> dump opens with a leading capacity summary entry (max-pages
> inside the vram-page nest, i.e. the maximum number of pages that
> can be offlined, with no address/size/status), followed by one
> entry per retired resource. Userspace derives the retired/queued
> counts by counting entries.
>
> The netlink interface is described by the YAML spec
> Documentation/netlink/specs/drm_ras.yaml. The following files are
> generated from that spec with tools/net/ynl/ynl-regen.sh and must not
> be edited by hand:
> - include/uapi/drm/drm_ras.h (uapi attribute/command enums)
> - drivers/gpu/drm/drm_ras_nl.c (generated policy and op table)
> - drivers/gpu/drm/drm_ras_nl.h (generated declarations)
>
> Eg:
> $ sudo ./tools/net/ynl/pyynl/cli.py \
> --spec Documentation/netlink/specs/drm_ras.yaml \
> --dump list-nodes
>
> [{'device-name': '0000:03:00.0', 'node-id': 0, 'node-name':'correctable-errors',
> 'node-type': 'error-counter'},
> {'device-name': '0000:03:00.0', 'node-id': 1, 'node-name':'uncorrectable-errors
> ', 'node-type': 'error-counter'},
> {'device-name': '0000:03:00.0', 'node-id': 2, 'node-name':'vram-retired-pages',
> 'node-type': 'retired-resources'}]
>
> $ sudo ./tools/net/ynl/pyynl/cli.py --spec \
> Documentation/netlink/specs/drm_ras.yaml --dump get-retired-resources \
> --json '{"node-id": 2}'
>
> [{'node-id': 2, 'vram-page': {'max-pages': 100}},
> {'node-id': 2, 'vram-page': {'address': 12807041024, 'size': 4096,
> 'status': 'retired'}},
> {'node-id': 2, 'vram-page': {'address': 12809400320, 'size': 4096,
> 'status': 'retired'}}]
>
> The first entry is the capacity summary (max-pages); subsequent entries
> are the retired pages.
>
> v2:
> - Drop the per-entry resource-type discriminator attribute; the type is
> now implied by the node (node-name), which reports a single type.
> - Fold all VRAM-page fields, including the retirement status, into the
> vram-page nested attribute; the top-level entry is just
> {node-id, vram-page}. (Rodrigo)
> - Drop the separate GET_RETIRED_RESOURCES_INFO operation. The capacity
> (max-pages) is now emitted as a leading summary entry inside
> GET_RETIRED_RESOURCES (max-pages in the vram-page nest, no status);
> offlined/queued counts are derived by counting entries.
>
> Cc: Tejas Upadhyay <tejas.upadhyay@intel.com>
> Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Cc: Riana Tauro <riana.tauro@intel.com>
> Cc: Raag Jadav <raag.jadav@intel.com>
> Cc: Joshua Santhosh Ranjan <joshua.santosh.ranjan@intel.com>
> Cc: Ashwin Kumar Kulkarni <ashwin.kumar.kulkarni@intel.com>
> Cc: Pratik Bari <pratik.bari@intel.com>
>
> Signed-off-by: Aravind Iddamsetty <aravind.iddamsetty@linux.intel.com>
> Assisted-by: Copilot:claude-opus-4.8
> ---
> Documentation/netlink/specs/drm_ras.yaml | 91 +++++++++++-
> drivers/gpu/drm/drm_ras.c | 174 ++++++++++++++++++++++-
> drivers/gpu/drm/drm_ras_nl.c | 12 ++
> drivers/gpu/drm/drm_ras_nl.h | 2 +
> drivers/gpu/drm/xe/xe_drm_ras.c | 77 ++++++++++
> drivers/gpu/drm/xe/xe_drm_ras_types.h | 3 +
> drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 119 ++++++++++++++++
> drivers/gpu/drm/xe/xe_ttm_vram_mgr.h | 3 +
> include/drm/drm_ras.h | 74 ++++++++++
> include/uapi/drm/drm_ras.h | 48 ++++++-
> 10 files changed, 592 insertions(+), 11 deletions(-)
>
> diff --git a/Documentation/netlink/specs/drm_ras.yaml b/Documentation/netlink/specs/drm_ras.yaml
> index 4c2ac9a1ba3f..42ab1cceaea7 100644
> --- a/Documentation/netlink/specs/drm_ras.yaml
> +++ b/Documentation/netlink/specs/drm_ras.yaml
> @@ -16,11 +16,34 @@ definitions:
> type: enum
> name: node-type
> value-start: 1
> - entries: [error-counter]
> + entries: [error-counter, retired-resources]
> doc: >-
> - Type of the node. Currently, only error-counter nodes are
> - supported, which expose reliability counters for a hardware/software
> - component.
> + Type of the node.
> + error-counter nodes expose reliability counters for a
> + hardware/software component. retired-resources nodes enumerate
> + hardware resources (e.g. VRAM pages) that have been permanently
> + taken out of service.
> + -
> + type: enum
> + name: retired-resource-status
> + value-start: 0
> + entries: [retired, pending, failed]
> + doc: >-
> + Status of a retired resource entry. retired means the resource is
> + permanently reserved and out of service; pending means retirement is
> + queued but the reservation is not yet complete; failed means the
> + reservation failed and the resource may still be in use.
> + -
> + type: enum
> + name: retired-resource-type
> + value-start: 1
> + entries: [vram-page]
> + doc: >-
> + Type of a retired resource entry. The type selects which type-specific
> + nested attribute is present. New hardware resource types can be added
> + here, each carrying its own nested attribute set, without affecting
> + existing types. vram-page describes a VRAM page by device address and
> + size.
>
> attribute-sets:
> -
> @@ -100,6 +123,45 @@ attribute-sets:
> name: error-value
> type: u32
> doc: Current value of the error counter.
> + -
> + name: retired-resource-attrs
> + attributes:
> + -
> + name: node-id
> + type: u32
> + doc: Node ID targeted by this retired resource operation.
> + -
> + name: vram-page
> + type: nest
> + nested-attributes: vram-page-attrs
> + doc: >-
> + Type-specific payload. The resource type is identified by the
> + node (its node-name); each node reports a single resource type.
> + -
> + name: vram-page-attrs
> + attributes:
> + -
> + name: address
> + type: u64
> + doc: Device address of the retired VRAM page (e.g. DPA).
> + -
> + name: size
> + type: u64
> + doc: Size of the retired VRAM page in bytes.
> + -
> + name: max-pages
> + type: u32
> + doc: >-
> + Maximum VRAM pages that can be retired. Present only in the
> + leading summary entry of the dump (no address/size/status).
> + -
> + name: status
> + type: u32
> + doc: Retirement status of the retired VRAM page.
> + enum: retired-resource-status
> + -
> + name: pad
> + type: pad
>
> operations:
> list:
> @@ -199,6 +261,27 @@ operations:
> - node-id
> - error-id
> - error-threshold
> + -
> + name: get-retired-resources
> + doc: >-
> + Enumerate the resources (e.g. VRAM pages) that a retired-resources
> + node has taken out of service. The dump begins with a leading
> + capacity summary entry (max-pages, with no address/size/status),
> + followed by one entry per retired resource (address, size and a
> + retirement status). The resource type is identified by the node
> + (its node-name); each node reports a single type. User space
> + derives the retired/queued counts by counting entries, and must
> + obtain the node ID from list-nodes first.
> + attribute-set: retired-resource-attrs
> + flags: [admin-perm]
> + dump:
> + request:
> + attributes:
> + - node-id
> + reply:
> + attributes:
> + - node-id
> + - vram-page
>
> mcast-groups:
> list:
> diff --git a/drivers/gpu/drm/drm_ras.c b/drivers/gpu/drm/drm_ras.c
> index b099eb67836e..46ee897a13c9 100644
> --- a/drivers/gpu/drm/drm_ras.c
> +++ b/drivers/gpu/drm/drm_ras.c
> @@ -63,7 +63,6 @@
> * Node type:
> *
> * - ERROR_COUNTER:
> - * + Currently, only error counters are supported.
> * + The driver must implement the query_error_counter() callback to provide
> * the name and the value of the error counter.
> * + The driver must provide a error_counter_range.last value informing the
> @@ -81,6 +80,13 @@
> * that are raised by the hardware.
> * + The driver is responsible for error threshold bounds checking.
> *
> + * - RETIRED_RESOURCES:
> + * + Enumerates hardware resources (e.g. VRAM pages) permanently taken out
> + * of service.
> + * + The driver must implement the query_retired_resource() callback, which
> + * is called with an incrementing index and returns -ENOENT once the last
> + * entry has been reported.
> + *
> * Netlink handlers:
> *
> * - drm_ras_nl_list_nodes_dumpit(): Implements the LIST_NODES
> @@ -95,6 +101,9 @@
> * operation, fetching the error threshold of a specific counter.
> * - drm_ras_nl_set_error_threshold_doit(): Implements the SET_ERROR_THRESHOLD doit
> * operation, setting the error threshold of a specific counter.
> + * - drm_ras_nl_get_retired_resources_dumpit(): Implements the
> + * GET_RETIRED_RESOURCES dumpit operation, enumerating retired resources of a
> + * specific node.
> */
>
> static DEFINE_XARRAY_ALLOC(drm_ras_xa);
> @@ -105,6 +114,10 @@ static DEFINE_XARRAY_ALLOC(drm_ras_xa);
> struct drm_ras_ctx {
> /* Which xarray id to restart the dump from */
> unsigned long restart;
> + /* Ordering-key cursor for retired-resource dumps (inclusive lower bound) */
> + u64 cursor;
> + /* Whether the leading retired-resource summary has been emitted */
> + bool summary_sent;
> };
>
> /**
> @@ -564,6 +577,148 @@ int drm_ras_nl_clear_error_counter_doit(struct sk_buff *skb,
> return node->clear_error_counter(node, error_id);
> }
>
> +static int msg_put_retired_resource(struct sk_buff *skb, u32 node_id,
> + const struct drm_ras_retired_resource *res)
> +{
> + struct nlattr *nest;
> +
> + if (nla_put_u32(skb, DRM_RAS_A_RETIRED_RESOURCE_ATTRS_NODE_ID, node_id))
> + return -EMSGSIZE;
> +
> + /* Type is implied by the node (its node_name); it selects the nest. */
> + switch (res->type) {
> + case DRM_RAS_RETIRED_RESOURCE_TYPE_VRAM_PAGE:
> + nest = nla_nest_start(skb,
> + DRM_RAS_A_RETIRED_RESOURCE_ATTRS_VRAM_PAGE);
> + if (!nest)
> + return -EMSGSIZE;
> +
> + if (res->is_summary) {
> + /* Leading capacity summary: max retirable pages. */
> + if (nla_put_u32(skb, DRM_RAS_A_VRAM_PAGE_ATTRS_MAX_PAGES,
> + res->vram_page.max_pages)) {
> + nla_nest_cancel(skb, nest);
> + return -EMSGSIZE;
> + }
> + } else if (nla_put_u64_64bit(skb, DRM_RAS_A_VRAM_PAGE_ATTRS_ADDRESS,
> + res->vram_page.address,
> + DRM_RAS_A_VRAM_PAGE_ATTRS_PAD) ||
> + nla_put_u64_64bit(skb, DRM_RAS_A_VRAM_PAGE_ATTRS_SIZE,
> + res->vram_page.size,
> + DRM_RAS_A_VRAM_PAGE_ATTRS_PAD) ||
> + nla_put_u32(skb, DRM_RAS_A_VRAM_PAGE_ATTRS_STATUS,
> + res->status)) {
> + nla_nest_cancel(skb, nest);
> + return -EMSGSIZE;
> + }
> +
> + nla_nest_end(skb, nest);
> + break;
> + default:
> + /* Unknown type: only the common node-id is reported. */
> + break;
> + }
> +
> + return 0;
> +}
> +
> +/**
> + * drm_ras_nl_get_retired_resources_dumpit() - Dump retired resources of a node
> + * @skb: Netlink message buffer
> + * @cb: Callback context for multi-part dumps
> + *
> + * Iterates over all retired resources of a %DRM_RAS_NODE_TYPE_RETIRED_RESOURCES
> + * node and appends their attributes to the given netlink message buffer. The
> + * dump opens with an optional leading type-specific capacity summary (e.g. the
> + * maximum retirable page count), followed by one entry per retired resource;
> + * each resource entry carries a status plus one type-specific nested attribute
> + * selected by the node's type. Uses @cb->ctx to store an ordering-key cursor
> + * so multi-part dumps resume by key rather than position, staying correct if
> + * the list changes concurrently between message parts.
> + *
> + * Return: 0 if all entries fit in @skb, number of bytes added to @skb if
> + * the buffer filled up (requires multi-part continuation), or
> + * a negative error code on failure.
> + */
> +int drm_ras_nl_get_retired_resources_dumpit(struct sk_buff *skb,
> + struct netlink_callback *cb)
> +{
> + const struct genl_info *info = genl_info_dump(cb);
> + struct drm_ras_ctx *ctx = (void *)cb->ctx;
> + struct drm_ras_retired_resource res;
> + struct drm_ras_node *node;
> + struct nlattr *hdr;
> + u32 node_id;
> + u64 cursor;
> + int ret = 0;
> +
> + if (!info->attrs ||
> + GENL_REQ_ATTR_CHECK(info, DRM_RAS_A_RETIRED_RESOURCE_ATTRS_NODE_ID))
> + return -EINVAL;
> +
> + node_id = nla_get_u32(info->attrs[DRM_RAS_A_RETIRED_RESOURCE_ATTRS_NODE_ID]);
> +
> + node = xa_load(&drm_ras_xa, node_id);
> + if (!node || node->type != DRM_RAS_NODE_TYPE_RETIRED_RESOURCES ||
> + !node->query_retired_resource)
> + return -ENOENT;
> +
> + /* Leading type-specific capacity summary (e.g. max pages), emitted once. */
> + if (!ctx->summary_sent && node->query_retired_summary) {
> + memset(&res, 0, sizeof(res));
> + ret = node->query_retired_summary(node, &res);
> + if (ret == 0) {
> + hdr = genlmsg_iput(skb, info);
> + if (!hdr)
> + return -EMSGSIZE; /* retry summary next part */
> + ret = msg_put_retired_resource(skb, node_id, &res);
> + if (ret) {
> + genlmsg_cancel(skb, hdr);
> + return ret;
> + }
> + genlmsg_end(skb, hdr);
> + } else if (ret != -ENOENT) {
> + return ret;
> + }
> + ctx->summary_sent = true;
> + }
> +
> + cursor = ctx->cursor;
> + for (;;) {
> + memset(&res, 0, sizeof(res));
> + ret = node->query_retired_resource(node, cursor, &res);
> + /* -ENOENT marks the end of the list. */
> + if (ret == -ENOENT) {
> + ret = 0;
> + break;
> + }
> + if (ret)
> + return ret;
> +
> + hdr = genlmsg_iput(skb, info);
> + if (!hdr) {
> + ret = -EMSGSIZE;
> + break;
> + }
> +
> + ret = msg_put_retired_resource(skb, node_id, &res);
> + if (ret) {
> + genlmsg_cancel(skb, hdr);
> + break;
> + }
> +
> + genlmsg_end(skb, hdr);
> + /* Advance past this entry; keys are unique. */
> + cursor = res.key + 1;
> + }
> +
> + /* On buffer-full the current entry was not emitted; resume at it. */
> + if (ret == -EMSGSIZE)
> + ctx->cursor = cursor;
> +
> + return ret;
> +}
> +
> /**
> * drm_ras_nl_get_error_threshold_doit() - Query error threshold of a counter
> * @skb: Netlink message buffer
> @@ -631,15 +786,24 @@ int drm_ras_node_register(struct drm_ras_node *node)
> if (!node->device_name || !node->node_name)
> return -EINVAL;
>
> - /* Currently, only Error Counter Endpoints are supported */
> - if (node->type != DRM_RAS_NODE_TYPE_ERROR_COUNTER)
> - return -EINVAL;
> -
> /* Mandatory entries for Error Counter Node */
> if (node->type == DRM_RAS_NODE_TYPE_ERROR_COUNTER &&
> (!node->error_counter_range.last || !node->query_error_counter))
> return -EINVAL;
>
> + /* Mandatory entries for Retired Resources Node */
> + if (node->type == DRM_RAS_NODE_TYPE_RETIRED_RESOURCES &&
> + !node->query_retired_resource)
> + return -EINVAL;
> +
> + switch (node->type) {
> + case DRM_RAS_NODE_TYPE_ERROR_COUNTER:
> + case DRM_RAS_NODE_TYPE_RETIRED_RESOURCES:
> + break;
> + default:
> + return -EINVAL;
> + }
> +
> return xa_alloc(&drm_ras_xa, &node->id, node, xa_limit_32b, GFP_KERNEL);
> }
> EXPORT_SYMBOL(drm_ras_node_register);
> diff --git a/drivers/gpu/drm/drm_ras_nl.c b/drivers/gpu/drm/drm_ras_nl.c
> index c9f5e0ceb3b5..2f23f5681fa4 100644
> --- a/drivers/gpu/drm/drm_ras_nl.c
> +++ b/drivers/gpu/drm/drm_ras_nl.c
> @@ -41,6 +41,11 @@ static const struct nla_policy drm_ras_set_error_threshold_nl_policy[DRM_RAS_A_E
> [DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_THRESHOLD] = { .type = NLA_U32, },
> };
>
> +/* DRM_RAS_CMD_GET_RETIRED_RESOURCES - dump */
> +static const struct nla_policy drm_ras_get_retired_resources_nl_policy[DRM_RAS_A_RETIRED_RESOURCE_ATTRS_NODE_ID + 1] = {
> + [DRM_RAS_A_RETIRED_RESOURCE_ATTRS_NODE_ID] = { .type = NLA_U32, },
> +};
> +
> /* Ops table for drm_ras */
> static const struct genl_split_ops drm_ras_nl_ops[] = {
> {
> @@ -83,6 +88,13 @@ static const struct genl_split_ops drm_ras_nl_ops[] = {
> .maxattr = DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_THRESHOLD,
> .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
> },
> + {
> + .cmd = DRM_RAS_CMD_GET_RETIRED_RESOURCES,
> + .dumpit = drm_ras_nl_get_retired_resources_dumpit,
> + .policy = drm_ras_get_retired_resources_nl_policy,
> + .maxattr = DRM_RAS_A_RETIRED_RESOURCE_ATTRS_NODE_ID,
> + .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DUMP,
> + },
> };
>
> static const struct genl_multicast_group drm_ras_nl_mcgrps[] = {
> diff --git a/drivers/gpu/drm/drm_ras_nl.h b/drivers/gpu/drm/drm_ras_nl.h
> index 9aef097ea10f..96b0fe017ea8 100644
> --- a/drivers/gpu/drm/drm_ras_nl.h
> +++ b/drivers/gpu/drm/drm_ras_nl.h
> @@ -24,6 +24,8 @@ int drm_ras_nl_get_error_threshold_doit(struct sk_buff *skb,
> struct genl_info *info);
> int drm_ras_nl_set_error_threshold_doit(struct sk_buff *skb,
> struct genl_info *info);
> +int drm_ras_nl_get_retired_resources_dumpit(struct sk_buff *skb,
> + struct netlink_callback *cb);
>
> enum {
> DRM_RAS_NLGRP_ERROR_REPORT,
> diff --git a/drivers/gpu/drm/xe/xe_drm_ras.c b/drivers/gpu/drm/xe/xe_drm_ras.c
> index 7f3695707611..fba58e9eb7e0 100644
> --- a/drivers/gpu/drm/xe/xe_drm_ras.c
> +++ b/drivers/gpu/drm/xe/xe_drm_ras.c
> @@ -12,6 +12,7 @@
> #include "xe_device_types.h"
> #include "xe_drm_ras.h"
> #include "xe_ras.h"
> +#include "xe_ttm_vram_mgr.h"
>
> static const char * const error_components[] = DRM_XE_RAS_ERROR_COMPONENT_NAMES;
> static const char * const error_severity[] = DRM_XE_RAS_ERROR_SEVERITY_NAMES;
> @@ -188,6 +189,75 @@ static void cleanup_node(struct drm_device *drm, void *node)
> cleanup_node_param(node);
> }
>
> +static int query_retired_resource(struct drm_ras_node *node, u64 cursor,
> + struct drm_ras_retired_resource *res)
> +{
> + struct xe_device *xe = node->priv;
> + int ret;
> +
> + ret = xe_ttm_vram_get_retired_page(xe, cursor, &res->vram_page.address,
> + &res->vram_page.size, &res->status);
> + if (ret)
> + return ret;
> +
> + res->type = DRM_RAS_RETIRED_RESOURCE_TYPE_VRAM_PAGE;
> + res->key = res->vram_page.address;
> +
> + return 0;
> +}
> +
> +static int query_retired_summary(struct drm_ras_node *node,
> + struct drm_ras_retired_resource *res)
> +{
> + struct xe_device *xe = node->priv;
> +
> + res->type = DRM_RAS_RETIRED_RESOURCE_TYPE_VRAM_PAGE;
> + res->is_summary = 1;
> + res->vram_page.max_pages = xe_ttm_vram_get_max_bad_pages(xe);
> +
> + return 0;
> +}
> +
> +static int register_retired_node(struct xe_device *xe)
> +{
> + struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
> + struct xe_drm_ras *ras = &xe->ras;
> + struct drm_ras_node *node;
> + const char *device_name;
> + int ret;
> +
> + /* Retired VRAM pages are only tracked on platforms with page offline */
> + if (xe->info.platform != XE_CRESCENTISLAND)
> + return 0;
> +
> + node = drmm_kzalloc(&xe->drm, sizeof(*node), GFP_KERNEL);
> + if (!node)
> + return -ENOMEM;
> +
> + device_name = kasprintf(GFP_KERNEL, "%04x:%02x:%02x.%d",
> + pci_domain_nr(pdev->bus), pdev->bus->number,
> + PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn));
> + if (!device_name)
> + return -ENOMEM;
> +
> + node->device_name = device_name;
> + node->node_name = "vram-retired-pages";
> + node->type = DRM_RAS_NODE_TYPE_RETIRED_RESOURCES;
> + node->query_retired_resource = query_retired_resource;
> + node->query_retired_summary = query_retired_summary;
> + node->priv = xe;
> +
> + ret = drm_ras_node_register(node);
> + if (ret) {
> + cleanup_node_param(node);
> + return ret;
> + }
> +
> + ras->retired_node = node;
> +
> + return drmm_add_action_or_reset(&xe->drm, cleanup_node, node);
> +}
> +
> static int register_nodes(struct xe_device *xe)
> {
> struct xe_drm_ras *ras = &xe->ras;
> @@ -279,5 +349,12 @@ int xe_drm_ras_init(struct xe_device *xe)
> return err;
> }
>
> + err = register_retired_node(xe);
> + if (err) {
> + drm_err(&xe->drm, "Failed to register DRM RAS retired node (%pe)\n",
> + ERR_PTR(err));
> + return err;
> + }
> +
> return 0;
> }
> diff --git a/drivers/gpu/drm/xe/xe_drm_ras_types.h b/drivers/gpu/drm/xe/xe_drm_ras_types.h
> index 0be218ba2db7..186024640f87 100644
> --- a/drivers/gpu/drm/xe/xe_drm_ras_types.h
> +++ b/drivers/gpu/drm/xe/xe_drm_ras_types.h
> @@ -41,6 +41,9 @@ struct xe_drm_ras {
> /** @node: DRM RAS node */
> struct drm_ras_node *node;
>
> + /** @retired_node: DRM RAS retired-resources node for VRAM bad pages */
> + struct drm_ras_node *retired_node;
> +
> /** @info: info array for all types of errors */
> struct xe_drm_ras_counter *info[DRM_XE_RAS_ERR_SEV_MAX];
>
> diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> index 9a514d983e90..b56b543a56a2 100644
> --- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> +++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> @@ -15,6 +15,8 @@
> #include <drm/ttm/ttm_placement.h>
> #include <drm/ttm/ttm_range_manager.h>
>
> +#include <uapi/drm/drm_ras.h>
> +
> #include "regs/xe_regs.h"
> #include "xe_bo.h"
> #include "xe_configfs.h"
> @@ -624,6 +626,123 @@ u64 xe_ttm_vram_get_avail(struct ttm_resource_manager *man)
> return avail;
> }
>
> +/**
> + * xe_ttm_vram_get_retired_page - Fetch the next retired VRAM page by address
> + * @xe: xe device instance
> + * @min_addr: inclusive lower bound; return the page with the smallest DPA >=
> + * this value
> + * @addr: output, device physical address (DPA) of the page
> + * @size: output, size of the page in bytes
> + * @status: output, retirement status (enum drm_ras_retired_resource_status)
> + *
> + * Scans the offlined and queued page lists across all tiles and returns the
> + * entry with the smallest DPA that is >= @min_addr. Because retired pages have
> + * unique addresses, iterating with @min_addr = previous_addr + 1 walks every
> + * entry in a stable address order, which is robust against concurrent
> + * insertion or removal between calls. Intended to back the drm-ras
> + * retired-resources node enumeration.
> + *
> + * Return: 0 on success, -ENOENT when no page has a DPA >= @min_addr.
> + */
> +int xe_ttm_vram_get_retired_page(struct xe_device *xe, u64 min_addr,
> + u64 *addr, u64 *size, u32 *status)
> +{
> + struct xe_ttm_vram_offline_resource *pos;
> + struct ttm_resource_manager *man;
> + struct gpu_buddy_block *block;
> + struct xe_ttm_vram_mgr *mgr;
> + u64 best_addr = 0, best_size = 0;
> + struct xe_tile *tile;
> + u32 best_status = 0;
> + bool found = false;
> + u8 id;
> +
> + for_each_tile(tile, xe, id) {
> + struct xe_vram_region *vr = tile->mem.vram;
> + u64 a, s;
> +
> + man = ttm_manager_type(&xe->ttm, XE_PL_VRAM0 + id);
> + if (!man || !vr)
> + continue;
> + mgr = to_xe_ttm_vram_mgr(man);
> +
> + rcu_read_lock();
> +
> + list_for_each_entry_rcu(pos, &mgr->offlined_pages, offlined_link) {
> + block = list_first_entry_or_null(&pos->blocks,
> + struct gpu_buddy_block, link);
> + if (block) {
> + a = gpu_buddy_block_offset(block) + vr->dpa_base;
> + s = gpu_buddy_block_size(&mgr->mm, block);
> + } else {
> + a = pos->addr + vr->dpa_base;
> + s = SZ_4K;
> + }
> +
> + if (a >= min_addr && (!found || a < best_addr)) {
> + best_addr = a;
> + best_size = s;
> + best_status = DRM_RAS_RETIRED_RESOURCE_STATUS_RETIRED;
> + found = true;
> + }
> + }
> +
> + list_for_each_entry_rcu(pos, &mgr->queued_pages, queued_link) {
> + block = list_first_entry_or_null(&pos->blocks,
> + struct gpu_buddy_block, link);
> + if (block) {
> + a = gpu_buddy_block_offset(block) + vr->dpa_base;
> + s = gpu_buddy_block_size(&mgr->mm, block);
> + } else {
> + a = pos->addr + vr->dpa_base;
> + s = SZ_4K;
> + }
> +
> + if (a >= min_addr && (!found || a < best_addr)) {
> + best_addr = a;
> + best_size = s;
> + best_status = pos->status == XE_PAGE_RESERVE_FAIL ?
> + DRM_RAS_RETIRED_RESOURCE_STATUS_FAILED :
> + DRM_RAS_RETIRED_RESOURCE_STATUS_PENDING;
> + found = true;
> + }
> + }
> +
> + rcu_read_unlock();
> + }
> +
> + if (!found)
> + return -ENOENT;
> +
> + *addr = best_addr;
> + *size = best_size;
> + *status = best_status;
> +
> + return 0;
> +}
> +
> +/**
> + * xe_ttm_vram_get_max_bad_pages - Fetch the FW-provided max offline page count
> + * @xe: xe device instance
> + *
> + * Returns the static maximum number of VRAM pages that can be offlined, as
> + * provided by FW at init. Intended to back the drm-ras retired-resources
> + * capacity summary. Read from the root (VRAM0) manager; the value is a static
> + * device-wide count.
> + *
> + * Return: max offline page count, or 0 if VRAM is not present.
> + */
> +u32 xe_ttm_vram_get_max_bad_pages(struct xe_device *xe)
> +{
> + struct ttm_resource_manager *man;
> +
> + man = ttm_manager_type(&xe->ttm, XE_PL_VRAM0);
> + if (!man)
> + return 0;
> +
> + return to_xe_ttm_vram_mgr(man)->max_pages;
> +}
> +
> static int xe_ttm_vram_purge_page(struct xe_device *xe, struct xe_bo *bo)
> {
> u32 q_flag = DRM_XE_EXEC_QUEUE_BAN_REASON_PAGE_OFFLINE;
> diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
> index d77f067d197b..70fae023d6a3 100644
> --- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
> +++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
> @@ -33,6 +33,9 @@ void xe_ttm_vram_get_used(struct ttm_resource_manager *man,
> u64 *used, u64 *used_visible);
> int xe_ttm_vram_handle_addr_fault(struct xe_device *xe, u64 addr);
> int xe_ttm_vram_inject_fault(struct xe_device *xe);
> +int xe_ttm_vram_get_retired_page(struct xe_device *xe, u64 min_addr,
> + u64 *addr, u64 *size, u32 *status);
> +u32 xe_ttm_vram_get_max_bad_pages(struct xe_device *xe);
>
> static inline struct xe_ttm_vram_mgr_resource *
> to_xe_ttm_vram_mgr_resource(struct ttm_resource *res)
> diff --git a/include/drm/drm_ras.h b/include/drm/drm_ras.h
> index 1765a3130b09..38953f8f3012 100644
> --- a/include/drm/drm_ras.h
> +++ b/include/drm/drm_ras.h
> @@ -10,6 +10,42 @@
>
> #include <uapi/drm/drm_ras.h>
>
> +/**
> + * struct drm_ras_retired_resource - A single retired resource entry
> + *
> + * Describes one hardware resource that has been taken out of service and is
> + * reported by a %DRM_RAS_NODE_TYPE_RETIRED_RESOURCES node. @type selects which
> + * member of the anonymous union is valid, allowing new hardware resource types
> + * to be added without changing the common fields. When @is_summary is set the
> + * entry is a leading, type-specific capacity summary (e.g. max retirable
> + * pages) rather than an individual retired resource.
> + */
> +struct drm_ras_retired_resource {
> + /** @type: Resource type (enum drm_ras_retired_resource_type). */
> + __u32 type;
> + /** @status: Retirement status (enum drm_ras_retired_resource_status). */
> + __u32 status;
> + /**
> + * @key: Opaque, driver-assigned ordering key for this entry. drm-ras
> + * uses it only to advance the dump cursor; entries must be enumerable
> + * in strictly increasing @key order and keys must be unique.
> + */
> + __u64 key;
> + /** @is_summary: entry reports type capacity, not a retired resource. */
> + __u8 is_summary;
> + union {
> + /** @vram_page: Valid when @type is VRAM_PAGE. */
> + struct {
> + /** @vram_page.address: Device address (e.g. DPA). */
> + __u64 address;
> + /** @vram_page.size: Size in bytes. */
> + __u64 size;
> + /** @vram_page.max_pages: max retirable pages; summary only. */
> + __u32 max_pages;
> + } vram_page;
> + };
> +};
> +
> /**
> * struct drm_ras_node - A DRM RAS Node
> */
> @@ -100,6 +136,44 @@ struct drm_ras_node {
> */
> int (*set_error_threshold)(struct drm_ras_node *node, u32 error_id, u32 threshold);
>
> + /**
> + * @query_retired_resource:
> + *
> + * This callback is used by drm-ras to enumerate retired resources of a
> + * %DRM_RAS_NODE_TYPE_RETIRED_RESOURCES node. It is called with @cursor
> + * and must return the next entry whose ordering key is greater than or
> + * equal to @cursor, setting @res->key to that entry's key. drm-ras
> + * resumes multi-part dumps from the returned key, so enumeration stays
> + * correct across concurrent insertion or removal.
> + *
> + * The @query_retired_resource is a mandatory callback for
> + * retired-resources nodes.
> + *
> + * Returns: 0 on success,
> + * -ENOENT when no entry has a key >= @cursor, used as an
> + * indication that enumeration is complete.
> + * Other negative values on errors that should terminate the
> + * netlink query.
> + */
> + int (*query_retired_resource)(struct drm_ras_node *node, u64 cursor,
> + struct drm_ras_retired_resource *res);
> +
> + /**
> + * @query_retired_summary:
> + *
> + * This optional callback fills a leading, type-specific capacity summary
> + * for a %DRM_RAS_NODE_TYPE_RETIRED_RESOURCES node (e.g. the maximum
> + * number of retirable pages). drm-ras emits it as the first entry of the
> + * retired-resources dump. The driver must set @res->is_summary, @res->type
> + * and the type-specific summary fields (e.g. vram_page.max_pages).
> + *
> + * Returns: 0 on success,
> + * -ENOENT if the node has no summary to report,
> + * other negative values on errors that terminate the query.
> + */
> + int (*query_retired_summary)(struct drm_ras_node *node,
> + struct drm_ras_retired_resource *res);
> +
> /** @priv: Driver private data */
> void *priv;
> };
> diff --git a/include/uapi/drm/drm_ras.h b/include/uapi/drm/drm_ras.h
> index 2f832275ee6e..64a7a7feb610 100644
> --- a/include/uapi/drm/drm_ras.h
> +++ b/include/uapi/drm/drm_ras.h
> @@ -11,11 +11,35 @@
> #define DRM_RAS_FAMILY_VERSION 1
>
> /*
> - * Type of the node. Currently, only error-counter nodes are supported, which
> - * expose reliability counters for a hardware/software component.
> + * Type of the node. error-counter nodes expose reliability counters for a
> + * hardware/software component. retired-resources nodes enumerate hardware
> + * resources (e.g. VRAM pages) that have been permanently taken out of service.
> */
> enum drm_ras_node_type {
> DRM_RAS_NODE_TYPE_ERROR_COUNTER = 1,
> + DRM_RAS_NODE_TYPE_RETIRED_RESOURCES,
> +};
> +
> +/*
> + * Status of a retired resource entry. retired means the resource is
> + * permanently reserved and out of service; pending means retirement is queued
> + * but the reservation is not yet complete; failed means the reservation failed
> + * and the resource may still be in use.
> + */
> +enum drm_ras_retired_resource_status {
> + DRM_RAS_RETIRED_RESOURCE_STATUS_RETIRED,
> + DRM_RAS_RETIRED_RESOURCE_STATUS_PENDING,
> + DRM_RAS_RETIRED_RESOURCE_STATUS_FAILED,
> +};
> +
> +/*
> + * Type of a retired resource entry. The type selects which type-specific
> + * nested attribute is present. New hardware resource types can be added here,
> + * each carrying its own nested attribute set, without affecting existing
> + * types. vram-page describes a VRAM page by device address and size.
> + */
> +enum drm_ras_retired_resource_type {
> + DRM_RAS_RETIRED_RESOURCE_TYPE_VRAM_PAGE = 1,
> };
>
> enum {
> @@ -51,6 +75,25 @@ enum {
> DRM_RAS_A_ERROR_EVENT_ATTRS_MAX = (__DRM_RAS_A_ERROR_EVENT_ATTRS_MAX - 1)
> };
>
> +enum {
> + DRM_RAS_A_RETIRED_RESOURCE_ATTRS_NODE_ID = 1,
> + DRM_RAS_A_RETIRED_RESOURCE_ATTRS_VRAM_PAGE,
> +
> + __DRM_RAS_A_RETIRED_RESOURCE_ATTRS_MAX,
> + DRM_RAS_A_RETIRED_RESOURCE_ATTRS_MAX = (__DRM_RAS_A_RETIRED_RESOURCE_ATTRS_MAX - 1)
> +};
> +
> +enum {
> + DRM_RAS_A_VRAM_PAGE_ATTRS_ADDRESS = 1,
> + DRM_RAS_A_VRAM_PAGE_ATTRS_SIZE,
> + DRM_RAS_A_VRAM_PAGE_ATTRS_MAX_PAGES,
> + DRM_RAS_A_VRAM_PAGE_ATTRS_STATUS,
> + DRM_RAS_A_VRAM_PAGE_ATTRS_PAD,
> +
> + __DRM_RAS_A_VRAM_PAGE_ATTRS_MAX,
> + DRM_RAS_A_VRAM_PAGE_ATTRS_MAX = (__DRM_RAS_A_VRAM_PAGE_ATTRS_MAX - 1)
> +};
> +
> enum {
> DRM_RAS_CMD_LIST_NODES = 1,
> DRM_RAS_CMD_GET_ERROR_COUNTER,
> @@ -58,6 +101,7 @@ enum {
> DRM_RAS_CMD_ERROR_EVENT,
> DRM_RAS_CMD_GET_ERROR_THRESHOLD,
> DRM_RAS_CMD_SET_ERROR_THRESHOLD,
> + DRM_RAS_CMD_GET_RETIRED_RESOURCES,
>
> __DRM_RAS_CMD_MAX,
> DRM_RAS_CMD_MAX = (__DRM_RAS_CMD_MAX - 1)
^ permalink raw reply [flat|nested] 9+ messages in thread
* ✓ Xe.CI.FULL: success for drm/xe: Expose retired VRAM pages via drm-ras (rev2)
2026-10-07 8:03 [PATCH v2 0/2] drm/xe: Expose retired VRAM pages via drm-ras Aravind Iddamsetty
` (4 preceding siblings ...)
2026-10-07 9:27 ` ✓ Xe.CI.BAT: " Patchwork
@ 2026-10-07 10:42 ` Patchwork
5 siblings, 0 replies; 9+ messages in thread
From: Patchwork @ 2026-10-07 10:42 UTC (permalink / raw)
To: Aravind Iddamsetty; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 77555 bytes --]
== Series Details ==
Series: drm/xe: Expose retired VRAM pages via drm-ras (rev2)
URL : https://patchwork.freedesktop.org/series/173066/
State : success
== Summary ==
CI Bug Log - changes from xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12_FULL -> xe-pw-173066v2_FULL
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (3 -> 3)
------------------------------
No changes in participating hosts
Known issues
------------
Here are the changes found in xe-pw-173066v2_FULL that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-b-edp-1:
- shard-ptl: NOTRUN -> [FAIL][1] ([Intel XE#6078]) +1 other test fail
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-2/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-b-edp-1.html
* igt@kms_async_flips@async-flip-suspend-resume:
- shard-bmg: [PASS][2] -> [DMESG-WARN][3] ([Intel XE#9428])
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-bmg-2/igt@kms_async_flips@async-flip-suspend-resume.html
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-2/igt@kms_async_flips@async-flip-suspend-resume.html
* igt@kms_async_flips@async-flip-suspend-resume@pipe-a-edp-1:
- shard-ptl: [PASS][4] -> [ABORT][5] ([Intel XE#9362]) +5 other tests abort
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-ptl-6/igt@kms_async_flips@async-flip-suspend-resume@pipe-a-edp-1.html
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-4/igt@kms_async_flips@async-flip-suspend-resume@pipe-a-edp-1.html
* igt@kms_async_flips@async-flip-suspend-resume@pipe-d-dp-2:
- shard-bmg: [PASS][6] -> [DMESG-WARN][7] ([Intel XE#9365])
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-bmg-2/igt@kms_async_flips@async-flip-suspend-resume@pipe-d-dp-2.html
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-2/igt@kms_async_flips@async-flip-suspend-resume@pipe-d-dp-2.html
* igt@kms_atomic_transition@plane-all-modeset-transition:
- shard-ptl: NOTRUN -> [SKIP][8] ([Intel XE#5947])
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-7/igt@kms_atomic_transition@plane-all-modeset-transition.html
* igt@kms_big_fb@4-tiled-8bpp-rotate-270:
- shard-lnl: NOTRUN -> [SKIP][9] ([Intel XE#1407]) +2 other tests skip
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-7/igt@kms_big_fb@4-tiled-8bpp-rotate-270.html
* igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip:
- shard-ptl: NOTRUN -> [SKIP][10] ([Intel XE#6925])
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-7/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip.html
* igt@kms_big_fb@linear-32bpp-rotate-270:
- shard-bmg: NOTRUN -> [SKIP][11] ([Intel XE#2327]) +1 other test skip
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-8/igt@kms_big_fb@linear-32bpp-rotate-270.html
* igt@kms_big_fb@linear-32bpp-rotate-90:
- shard-ptl: NOTRUN -> [SKIP][12] ([Intel XE#5901]) +1 other test skip
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-2/igt@kms_big_fb@linear-32bpp-rotate-90.html
* igt@kms_big_fb@linear-max-hw-stride-32bpp-rotate-0-hflip:
- shard-ptl: NOTRUN -> [SKIP][13] ([Intel XE#7085])
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-7/igt@kms_big_fb@linear-max-hw-stride-32bpp-rotate-0-hflip.html
* igt@kms_big_fb@linear-max-hw-stride-32bpp-rotate-180-hflip:
- shard-lnl: NOTRUN -> [SKIP][14] ([Intel XE#7059] / [Intel XE#7085])
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-6/igt@kms_big_fb@linear-max-hw-stride-32bpp-rotate-180-hflip.html
* igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-0-hflip-async-flip:
- shard-ptl: NOTRUN -> [SKIP][15] ([Intel XE#5808]) +9 other tests skip
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-2/igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-0-hflip-async-flip.html
* igt@kms_big_fb@y-tiled-addfb-size-overflow:
- shard-lnl: NOTRUN -> [SKIP][16] ([Intel XE#1428] / [Intel XE#7387])
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@kms_big_fb@y-tiled-addfb-size-overflow.html
* igt@kms_big_fb@yf-tiled-16bpp-rotate-180:
- shard-bmg: NOTRUN -> [SKIP][17] ([Intel XE#1124]) +2 other tests skip
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-8/igt@kms_big_fb@yf-tiled-16bpp-rotate-180.html
* igt@kms_big_fb@yf-tiled-addfb-size-offset-overflow:
- shard-ptl: NOTRUN -> [SKIP][18] ([Intel XE#5851])
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-7/igt@kms_big_fb@yf-tiled-addfb-size-offset-overflow.html
* igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip:
- shard-lnl: NOTRUN -> [SKIP][19] ([Intel XE#1124]) +6 other tests skip
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-7/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip.html
* igt@kms_bw@connected-linear-tiling-2-displays-target-3840x2160p:
- shard-lnl: NOTRUN -> [SKIP][20] ([Intel XE#7679])
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-6/igt@kms_bw@connected-linear-tiling-2-displays-target-3840x2160p.html
* igt@kms_bw@connected-linear-tiling-4-displays-target-1920x1080p:
- shard-bmg: NOTRUN -> [SKIP][21] ([Intel XE#7679])
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-9/igt@kms_bw@connected-linear-tiling-4-displays-target-1920x1080p.html
* igt@kms_bw@connected-linear-tiling-4-displays-target-2560x1440p:
- shard-ptl: NOTRUN -> [SKIP][22] ([Intel XE#7679]) +1 other test skip
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-1/igt@kms_bw@connected-linear-tiling-4-displays-target-2560x1440p.html
* igt@kms_bw@linear-tiling-3-displays-target-2560x1440p:
- shard-ptl: NOTRUN -> [SKIP][23] ([Intel XE#367]) +1 other test skip
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-1/igt@kms_bw@linear-tiling-3-displays-target-2560x1440p.html
* igt@kms_bw@linear-tiling-4-displays-target-3840x2160p:
- shard-lnl: NOTRUN -> [SKIP][24] ([Intel XE#8365])
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@kms_bw@linear-tiling-4-displays-target-3840x2160p.html
* igt@kms_ccs@bad-rotation-90-y-tiled-gen12-rc-ccs:
- shard-lnl: NOTRUN -> [SKIP][25] ([Intel XE#2887]) +8 other tests skip
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-6/igt@kms_ccs@bad-rotation-90-y-tiled-gen12-rc-ccs.html
* igt@kms_ccs@crc-primary-rotation-180-4-tiled-bmg-ccs@pipe-d-edp-1:
- shard-ptl: NOTRUN -> [SKIP][26] ([Intel XE#5823] / [Intel XE#6918]) +4 other tests skip
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-2/igt@kms_ccs@crc-primary-rotation-180-4-tiled-bmg-ccs@pipe-d-edp-1.html
* igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs@pipe-a-edp-1:
- shard-lnl: NOTRUN -> [SKIP][27] ([Intel XE#2669] / [Intel XE#3433] / [Intel XE#7389]) +3 other tests skip
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-7/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs@pipe-a-edp-1.html
* igt@kms_ccs@crc-sprite-planes-basic-4-tiled-dg2-mc-ccs:
- shard-ptl: NOTRUN -> [SKIP][28] ([Intel XE#5822]) +12 other tests skip
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-1/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-dg2-mc-ccs.html
* igt@kms_ccs@missing-ccs-buffer-y-tiled-gen12-rc-ccs:
- shard-bmg: NOTRUN -> [SKIP][29] ([Intel XE#2887]) +5 other tests skip
[29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-8/igt@kms_ccs@missing-ccs-buffer-y-tiled-gen12-rc-ccs.html
* igt@kms_ccs@random-ccs-data-4-tiled-bmg-ccs:
- shard-lnl: NOTRUN -> [SKIP][30] ([Intel XE#2669] / [Intel XE#7389]) +3 other tests skip
[30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@kms_ccs@random-ccs-data-4-tiled-bmg-ccs.html
* igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs@pipe-c-dp-2:
- shard-bmg: NOTRUN -> [SKIP][31] ([Intel XE#2652]) +7 other tests skip
[31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-4/igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs@pipe-c-dp-2.html
* igt@kms_chamelium_audio@hdmi-audio-after-suspend:
- shard-lnl: NOTRUN -> [SKIP][32] ([Intel XE#2252])
[32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@kms_chamelium_audio@hdmi-audio-after-suspend.html
* igt@kms_chamelium_color@ctm-max:
- shard-ptl: NOTRUN -> [SKIP][33] ([Intel XE#5824]) +1 other test skip
[33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-7/igt@kms_chamelium_color@ctm-max.html
* igt@kms_chamelium_color_pipeline@plane-fixed-matrix-yuv-rgb-bt709:
- shard-lnl: NOTRUN -> [SKIP][34] ([Intel XE#7358]) +3 other tests skip
[34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-6/igt@kms_chamelium_color_pipeline@plane-fixed-matrix-yuv-rgb-bt709.html
* igt@kms_chamelium_color_pipeline@plane-fixed-matrix-yuv-rgb-bt709-lim-lut1d:
- shard-bmg: NOTRUN -> [SKIP][35] ([Intel XE#7358]) +1 other test skip
[35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-8/igt@kms_chamelium_color_pipeline@plane-fixed-matrix-yuv-rgb-bt709-lim-lut1d.html
* igt@kms_chamelium_color_pipeline@plane-lut1d-ctm3x4:
- shard-ptl: NOTRUN -> [SKIP][36] ([Intel XE#8391]) +4 other tests skip
[36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-1/igt@kms_chamelium_color_pipeline@plane-lut1d-ctm3x4.html
* igt@kms_chamelium_frames@dp-frame-dump:
- shard-bmg: NOTRUN -> [SKIP][37] ([Intel XE#2252])
[37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-8/igt@kms_chamelium_frames@dp-frame-dump.html
* igt@kms_chamelium_hpd@dp-hpd-fast:
- shard-lnl: NOTRUN -> [SKIP][38] ([Intel XE#373]) +2 other tests skip
[38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@kms_chamelium_hpd@dp-hpd-fast.html
* igt@kms_chamelium_hpd@hdmi-hpd-storm:
- shard-ptl: NOTRUN -> [SKIP][39] ([Intel XE#2252]) +6 other tests skip
[39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-7/igt@kms_chamelium_hpd@hdmi-hpd-storm.html
* igt@kms_chamelium_sharpness_filter@filter-basic:
- shard-ptl: NOTRUN -> [SKIP][40] ([Intel XE#6507])
[40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-2/igt@kms_chamelium_sharpness_filter@filter-basic.html
* igt@kms_color_pipeline@plane-lut1d-post-ctm3x4@pipe-d-plane-4:
- shard-ptl: NOTRUN -> [SKIP][41] ([Intel XE#6969]) +7 other tests skip
[41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-1/igt@kms_color_pipeline@plane-lut1d-post-ctm3x4@pipe-d-plane-4.html
* igt@kms_content_protection@atomic-dpms-hdcp14@pipe-a-dp-2:
- shard-bmg: NOTRUN -> [FAIL][42] ([Intel XE#3304] / [Intel XE#7374])
[42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-5/igt@kms_content_protection@atomic-dpms-hdcp14@pipe-a-dp-2.html
* igt@kms_content_protection@atomic@pipe-a-dp-2:
- shard-bmg: NOTRUN -> [FAIL][43] ([Intel XE#1178] / [Intel XE#3304] / [Intel XE#7374]) +3 other tests fail
[43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-4/igt@kms_content_protection@atomic@pipe-a-dp-2.html
* igt@kms_content_protection@dp-mst-type-0:
- shard-ptl: NOTRUN -> [SKIP][44] ([Intel XE#5832] / [Intel XE#6974])
[44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-7/igt@kms_content_protection@dp-mst-type-0.html
* igt@kms_content_protection@dp-mst-type-0-suspend-resume:
- shard-ptl: NOTRUN -> [SKIP][45] ([Intel XE#6974]) +1 other test skip
[45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-3/igt@kms_content_protection@dp-mst-type-0-suspend-resume.html
* igt@kms_content_protection@legacy:
- shard-lnl: NOTRUN -> [SKIP][46] ([Intel XE#7642]) +2 other tests skip
[46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-6/igt@kms_content_protection@legacy.html
* igt@kms_content_protection@mei-interface:
- shard-bmg: NOTRUN -> [SKIP][47] ([Intel XE#7642])
[47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-8/igt@kms_content_protection@mei-interface.html
- shard-lnl: NOTRUN -> [SKIP][48] ([Intel XE#1468] / [Intel XE#7396])
[48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-7/igt@kms_content_protection@mei-interface.html
* igt@kms_content_protection@type1:
- shard-ptl: NOTRUN -> [SKIP][49] ([Intel XE#7642])
[49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-2/igt@kms_content_protection@type1.html
* igt@kms_cursor_crc@cursor-onscreen-512x170:
- shard-ptl: NOTRUN -> [SKIP][50] ([Intel XE#5846]) +1 other test skip
[50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-1/igt@kms_cursor_crc@cursor-onscreen-512x170.html
* igt@kms_cursor_crc@cursor-onscreen-512x512:
- shard-lnl: NOTRUN -> [SKIP][51] ([Intel XE#2321] / [Intel XE#7355])
[51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@kms_cursor_crc@cursor-onscreen-512x512.html
* igt@kms_cursor_crc@cursor-onscreen-64x21:
- shard-bmg: NOTRUN -> [SKIP][52] ([Intel XE#2320]) +1 other test skip
[52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-8/igt@kms_cursor_crc@cursor-onscreen-64x21.html
* igt@kms_cursor_crc@cursor-rapid-movement-128x42:
- shard-lnl: NOTRUN -> [SKIP][53] ([Intel XE#1424]) +2 other tests skip
[53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@kms_cursor_crc@cursor-rapid-movement-128x42.html
* igt@kms_cursor_crc@cursor-sliding-32x32:
- shard-ptl: NOTRUN -> [SKIP][54] ([Intel XE#5900]) +2 other tests skip
[54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-7/igt@kms_cursor_crc@cursor-sliding-32x32.html
* igt@kms_cursor_legacy@cursorb-vs-flipa-atomic-transitions:
- shard-ptl: NOTRUN -> [SKIP][55] ([Intel XE#5962]) +3 other tests skip
[55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-1/igt@kms_cursor_legacy@cursorb-vs-flipa-atomic-transitions.html
* igt@kms_cursor_legacy@cursorb-vs-flipa-atomic-transitions-varying-size:
- shard-lnl: NOTRUN -> [SKIP][56] ([Intel XE#309] / [Intel XE#7343]) +1 other test skip
[56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@kms_cursor_legacy@cursorb-vs-flipa-atomic-transitions-varying-size.html
* igt@kms_cursor_legacy@cursorb-vs-flipb-toggle:
- shard-ptl: NOTRUN -> [SKIP][57] ([Intel XE#5962] / [Intel XE#7343])
[57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-7/igt@kms_cursor_legacy@cursorb-vs-flipb-toggle.html
* igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle:
- shard-lnl: NOTRUN -> [SKIP][58] ([Intel XE#323] / [Intel XE#6035])
[58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-7/igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle.html
* igt@kms_dp_link_training@non-uhbr-mst:
- shard-lnl: NOTRUN -> [SKIP][59] ([Intel XE#9536])
[59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@kms_dp_link_training@non-uhbr-mst.html
* igt@kms_dsc@dsc-fractional-bpp-with-bpc-ultrajoiner:
- shard-ptl: NOTRUN -> [SKIP][60] ([Intel XE#5907]) +1 other test skip
[60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-2/igt@kms_dsc@dsc-fractional-bpp-with-bpc-ultrajoiner.html
* igt@kms_dsc@dsc-with-bpc-formats:
- shard-lnl: NOTRUN -> [SKIP][61] ([Intel XE#8265]) +1 other test skip
[61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@kms_dsc@dsc-with-bpc-formats.html
* igt@kms_dsc@dsc-with-bpc-formats-ultrajoiner:
- shard-bmg: NOTRUN -> [SKIP][62] ([Intel XE#8265])
[62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-8/igt@kms_dsc@dsc-with-bpc-formats-ultrajoiner.html
* igt@kms_fbc_dirty_rect@fbc-dirty-rectangle-out-visible-area:
- shard-lnl: NOTRUN -> [SKIP][63] ([Intel XE#4422] / [Intel XE#7442])
[63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-6/igt@kms_fbc_dirty_rect@fbc-dirty-rectangle-out-visible-area.html
* igt@kms_feature_discovery@dp-mst:
- shard-lnl: NOTRUN -> [SKIP][64] ([Intel XE#1137] / [Intel XE#2375])
[64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@kms_feature_discovery@dp-mst.html
* igt@kms_flip@2x-flip-vs-absolute-wf_vblank:
- shard-ptl: NOTRUN -> [SKIP][65] ([Intel XE#2316]) +6 other tests skip
[65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-7/igt@kms_flip@2x-flip-vs-absolute-wf_vblank.html
* igt@kms_flip@2x-flip-vs-dpms:
- shard-lnl: NOTRUN -> [SKIP][66] ([Intel XE#1421]) +3 other tests skip
[66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-6/igt@kms_flip@2x-flip-vs-dpms.html
* igt@kms_flip@flip-vs-expired-vblank-interruptible@a-edp1:
- shard-lnl: [PASS][67] -> [FAIL][68] ([Intel XE#301])
[67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-lnl-4/igt@kms_flip@flip-vs-expired-vblank-interruptible@a-edp1.html
[68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-8/igt@kms_flip@flip-vs-expired-vblank-interruptible@a-edp1.html
* igt@kms_flip@modeset-vs-vblank-race:
- shard-bmg: [PASS][69] -> [FAIL][70] ([Intel XE#3098]) +1 other test fail
[69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-bmg-5/igt@kms_flip@modeset-vs-vblank-race.html
[70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-6/igt@kms_flip@modeset-vs-vblank-race.html
* igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-downscaling:
- shard-lnl: NOTRUN -> [SKIP][71] ([Intel XE#7178] / [Intel XE#7351]) +3 other tests skip
[71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-downscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-xtile-to-32bpp-xtile-downscaling:
- shard-ptl: NOTRUN -> [SKIP][72] ([Intel XE#7178]) +4 other tests skip
[72]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-2/igt@kms_flip_scaled_crc@flip-64bpp-xtile-to-32bpp-xtile-downscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-downscaling:
- shard-bmg: NOTRUN -> [SKIP][73] ([Intel XE#7178] / [Intel XE#7351])
[73]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-9/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-downscaling.html
* igt@kms_flip_scaled_crc@flip-nv12-linear-to-nv12-linear-reflect-x:
- shard-lnl: NOTRUN -> [SKIP][74] ([Intel XE#7179])
[74]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@kms_flip_scaled_crc@flip-nv12-linear-to-nv12-linear-reflect-x.html
* igt@kms_force_connector_basic@force-edid:
- shard-lnl: NOTRUN -> [SKIP][75] ([Intel XE#352])
[75]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-7/igt@kms_force_connector_basic@force-edid.html
* igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-onoff:
- shard-lnl: NOTRUN -> [SKIP][76] ([Intel XE#656] / [Intel XE#7905]) +23 other tests skip
[76]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-6/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-onoff.html
* igt@kms_frontbuffer_tracking@drrs-abgr161616f-draw-mmap-wc:
- shard-bmg: NOTRUN -> [SKIP][77] ([Intel XE#7061] / [Intel XE#7356])
[77]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-8/igt@kms_frontbuffer_tracking@drrs-abgr161616f-draw-mmap-wc.html
- shard-lnl: NOTRUN -> [SKIP][78] ([Intel XE#7061] / [Intel XE#7356]) +3 other tests skip
[78]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-7/igt@kms_frontbuffer_tracking@drrs-abgr161616f-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@drrs-indfb-scaledprimary:
- shard-lnl: NOTRUN -> [SKIP][79] ([Intel XE#6312] / [Intel XE#651]) +4 other tests skip
[79]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-7/igt@kms_frontbuffer_tracking@drrs-indfb-scaledprimary.html
* igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-mmap-wc:
- shard-ptl: NOTRUN -> [SKIP][80] ([Intel XE#5800] / [Intel XE#6312]) +9 other tests skip
[80]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-1/igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@drrshdr-1p-primscrn-pri-indfb-draw-blt:
- shard-lnl: NOTRUN -> [SKIP][81] ([Intel XE#6312]) +8 other tests skip
[81]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-7/igt@kms_frontbuffer_tracking@drrshdr-1p-primscrn-pri-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-render:
- shard-bmg: NOTRUN -> [SKIP][82] ([Intel XE#4141])
[82]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-8/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-render.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-indfb-pgflip-blt:
- shard-ptl: NOTRUN -> [SKIP][83] ([Intel XE#5812]) +69 other tests skip
[83]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-7/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-indfb-pgflip-blt.html
* igt@kms_frontbuffer_tracking@fbc-abgr161616f-draw-mmap-wc:
- shard-ptl: NOTRUN -> [SKIP][84] ([Intel XE#7061] / [Intel XE#7356]) +4 other tests skip
[84]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-3/igt@kms_frontbuffer_tracking@fbc-abgr161616f-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbcdrrs-tiling-y:
- shard-lnl: NOTRUN -> [SKIP][85] ([Intel XE#1469] / [Intel XE#7399]) +1 other test skip
[85]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-6/igt@kms_frontbuffer_tracking@fbcdrrs-tiling-y.html
* igt@kms_frontbuffer_tracking@fbcdrrshdr-2p-primscrn-pri-shrfb-draw-mmap-wc:
- shard-bmg: NOTRUN -> [SKIP][86] ([Intel XE#2311]) +10 other tests skip
[86]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-8/igt@kms_frontbuffer_tracking@fbcdrrshdr-2p-primscrn-pri-shrfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbcdrrshdr-argb161616f-draw-render:
- shard-ptl: NOTRUN -> [SKIP][87] ([Intel XE#7061])
[87]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-1/igt@kms_frontbuffer_tracking@fbcdrrshdr-argb161616f-draw-render.html
* igt@kms_frontbuffer_tracking@fbcdrrshdr-modesetfrombusy:
- shard-ptl: NOTRUN -> [SKIP][88] ([Intel XE#6312]) +9 other tests skip
[88]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-2/igt@kms_frontbuffer_tracking@fbcdrrshdr-modesetfrombusy.html
* igt@kms_frontbuffer_tracking@fbchdr-abgr161616f-draw-mmap-wc:
- shard-lnl: NOTRUN -> [SKIP][89] ([Intel XE#7061]) +6 other tests skip
[89]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-7/igt@kms_frontbuffer_tracking@fbchdr-abgr161616f-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-primscrn-cur-indfb-draw-mmap-wc:
- shard-ptl: NOTRUN -> [SKIP][90] ([Intel XE#7865]) +24 other tests skip
[90]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-7/igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-primscrn-cur-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbcpsrhdr-abgr161616f-draw-blt:
- shard-bmg: NOTRUN -> [SKIP][91] ([Intel XE#7061]) +2 other tests skip
[91]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-8/igt@kms_frontbuffer_tracking@fbcpsrhdr-abgr161616f-draw-blt.html
* igt@kms_frontbuffer_tracking@psr-2p-primscrn-indfb-plflip-blt:
- shard-bmg: NOTRUN -> [SKIP][92] ([Intel XE#2313]) +18 other tests skip
[92]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-8/igt@kms_frontbuffer_tracking@psr-2p-primscrn-indfb-plflip-blt.html
* igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-spr-indfb-draw-blt:
- shard-lnl: NOTRUN -> [SKIP][93] ([Intel XE#7865]) +13 other tests skip
[93]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-7/igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-spr-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@psrhdr-2p-scndscrn-cur-indfb-onoff:
- shard-lnl: NOTRUN -> [SKIP][94] ([Intel XE#7905]) +23 other tests skip
[94]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-6/igt@kms_frontbuffer_tracking@psrhdr-2p-scndscrn-cur-indfb-onoff.html
* igt@kms_hdmi_audio_bw@audio-bw-hblank160:
- shard-ptl: NOTRUN -> [SKIP][95] ([Intel XE#9312])
[95]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-1/igt@kms_hdmi_audio_bw@audio-bw-hblank160.html
* igt@kms_joiner@invalid-modeset-big-joiner:
- shard-lnl: NOTRUN -> [SKIP][96] ([Intel XE#6901])
[96]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@kms_joiner@invalid-modeset-big-joiner.html
* igt@kms_joiner@invalid-modeset-force-big-joiner:
- shard-lnl: NOTRUN -> [SKIP][97] ([Intel XE#7086] / [Intel XE#7390])
[97]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-6/igt@kms_joiner@invalid-modeset-force-big-joiner.html
* igt@kms_mst@mst-suspend-read-crc:
- shard-bmg: NOTRUN -> [SKIP][98] ([Intel XE#8348])
[98]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-2/igt@kms_mst@mst-suspend-read-crc.html
* igt@kms_pipe_crc_basic@suspend-read-crc:
- shard-bmg: NOTRUN -> [INCOMPLETE][99] ([Intel XE#2597]) +1 other test incomplete
[99]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-8/igt@kms_pipe_crc_basic@suspend-read-crc.html
* igt@kms_plane@pixel-format-x-tiled-modifier-source-clamping:
- shard-ptl: NOTRUN -> [SKIP][100] ([Intel XE#7283]) +2 other tests skip
[100]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-2/igt@kms_plane@pixel-format-x-tiled-modifier-source-clamping.html
* igt@kms_plane@pixel-format-y-tiled-gen12-rc-ccs-modifier-source-clamping:
- shard-lnl: NOTRUN -> [SKIP][101] ([Intel XE#7283]) +3 other tests skip
[101]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-7/igt@kms_plane@pixel-format-y-tiled-gen12-rc-ccs-modifier-source-clamping.html
* igt@kms_plane@pixel-format-yf-tiled-ccs-modifier-source-clamping:
- shard-bmg: NOTRUN -> [SKIP][102] ([Intel XE#7283]) +1 other test skip
[102]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-8/igt@kms_plane@pixel-format-yf-tiled-ccs-modifier-source-clamping.html
* igt@kms_plane_lowres@tiling-none@pipe-b-edp-1:
- shard-ptl: NOTRUN -> [SKIP][103] ([Intel XE#5844]) +4 other tests skip
[103]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-2/igt@kms_plane_lowres@tiling-none@pipe-b-edp-1.html
* igt@kms_plane_multiple@tiling-yf:
- shard-ptl: NOTRUN -> [SKIP][104] ([Intel XE#5020])
[104]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-1/igt@kms_plane_multiple@tiling-yf.html
* igt@kms_plane_scaling@intel-max-src-size:
- shard-ptl: NOTRUN -> [SKIP][105] ([Intel XE#5959])
[105]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-1/igt@kms_plane_scaling@intel-max-src-size.html
* igt@kms_plane_scaling@planes-downscale-factor-0-75@pipe-b:
- shard-lnl: NOTRUN -> [SKIP][106] ([Intel XE#2763] / [Intel XE#6886]) +7 other tests skip
[106]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@kms_plane_scaling@planes-downscale-factor-0-75@pipe-b.html
* igt@kms_pm_dc@dc5-dpms-negative:
- shard-ptl: NOTRUN -> [SKIP][107] ([Intel XE#1131])
[107]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-2/igt@kms_pm_dc@dc5-dpms-negative.html
* igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait:
- shard-ptl: NOTRUN -> [SKIP][108] ([Intel XE#5849])
[108]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-2/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html
* igt@kms_psr2_sf@fbc-pr-overlay-plane-move-continuous-exceed-sf:
- shard-lnl: NOTRUN -> [SKIP][109] ([Intel XE#2893] / [Intel XE#7304]) +1 other test skip
[109]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-7/igt@kms_psr2_sf@fbc-pr-overlay-plane-move-continuous-exceed-sf.html
* igt@kms_psr2_sf@fbc-pr-overlay-plane-update-sf-dmg-area:
- shard-ptl: NOTRUN -> [SKIP][110] ([Intel XE#7304]) +2 other tests skip
[110]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-2/igt@kms_psr2_sf@fbc-pr-overlay-plane-update-sf-dmg-area.html
* igt@kms_psr2_sf@fbc-psr2-cursor-plane-update-sf:
- shard-lnl: NOTRUN -> [SKIP][111] ([Intel XE#2893] / [Intel XE#4608] / [Intel XE#7304]) +1 other test skip
[111]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@kms_psr2_sf@fbc-psr2-cursor-plane-update-sf.html
* igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-sf@pipe-a-edp-1:
- shard-lnl: NOTRUN -> [SKIP][112] ([Intel XE#4608]) +1 other test skip
[112]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-sf@pipe-a-edp-1.html
* igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-sf@pipe-b-edp-1:
- shard-lnl: NOTRUN -> [SKIP][113] ([Intel XE#4608] / [Intel XE#7304]) +1 other test skip
[113]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-sf@pipe-b-edp-1.html
* igt@kms_psr2_sf@fbc-psr2-overlay-plane-update-continuous-sf@pipe-a-edp-1:
- shard-ptl: NOTRUN -> [SKIP][114] ([Intel XE#5858]) +1 other test skip
[114]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-3/igt@kms_psr2_sf@fbc-psr2-overlay-plane-update-continuous-sf@pipe-a-edp-1.html
* igt@kms_psr2_sf@fbc-psr2-plane-move-sf-dmg-area@pipe-b-edp-1:
- shard-ptl: NOTRUN -> [SKIP][115] ([Intel XE#5858] / [Intel XE#7304]) +3 other tests skip
[115]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-1/igt@kms_psr2_sf@fbc-psr2-plane-move-sf-dmg-area@pipe-b-edp-1.html
* igt@kms_psr2_sf@pr-cursor-plane-move-continuous-exceed-fully-sf:
- shard-bmg: NOTRUN -> [SKIP][116] ([Intel XE#1489]) +2 other tests skip
[116]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-2/igt@kms_psr2_sf@pr-cursor-plane-move-continuous-exceed-fully-sf.html
* igt@kms_psr2_su@frontbuffer-xrgb8888:
- shard-ptl: NOTRUN -> [SKIP][117] ([Intel XE#7413]) +1 other test skip
[117]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-2/igt@kms_psr2_su@frontbuffer-xrgb8888.html
* igt@kms_psr@fbc-pr-sprite-plane-move:
- shard-lnl: NOTRUN -> [SKIP][118] ([Intel XE#1406]) +2 other tests skip
[118]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-6/igt@kms_psr@fbc-pr-sprite-plane-move.html
* igt@kms_psr@fbc-psr2-cursor-plane-onoff:
- shard-lnl: NOTRUN -> [SKIP][119] ([Intel XE#1406] / [Intel XE#7345])
[119]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@kms_psr@fbc-psr2-cursor-plane-onoff.html
* igt@kms_psr@fbc-psr2-cursor-plane-onoff@edp-1:
- shard-lnl: NOTRUN -> [SKIP][120] ([Intel XE#1406] / [Intel XE#4609] / [Intel XE#7345])
[120]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@kms_psr@fbc-psr2-cursor-plane-onoff@edp-1.html
* igt@kms_psr@fbc-psr2-no-drrs:
- shard-ptl: NOTRUN -> [SKIP][121] ([Intel XE#1406] / [Intel XE#5835]) +3 other tests skip
[121]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-7/igt@kms_psr@fbc-psr2-no-drrs.html
* igt@kms_psr@pr-sprite-blt:
- shard-ptl: NOTRUN -> [SKIP][122] ([Intel XE#1406]) +4 other tests skip
[122]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-1/igt@kms_psr@pr-sprite-blt.html
* igt@kms_psr@psr-sprite-plane-onoff:
- shard-bmg: NOTRUN -> [SKIP][123] ([Intel XE#2234] / [Intel XE#2850]) +1 other test skip
[123]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-2/igt@kms_psr@psr-sprite-plane-onoff.html
* igt@kms_psr@psr2-primary-render:
- shard-bmg: NOTRUN -> [SKIP][124] ([Intel XE#2234])
[124]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-8/igt@kms_psr@psr2-primary-render.html
* igt@kms_rotation_crc@bad-tiling:
- shard-bmg: NOTRUN -> [SKIP][125] ([Intel XE#3904] / [Intel XE#7342])
[125]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-4/igt@kms_rotation_crc@bad-tiling.html
* igt@kms_rotation_crc@primary-x-tiled-reflect-x-0:
- shard-ptl: NOTRUN -> [SKIP][126] ([Intel XE#5813])
[126]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-7/igt@kms_rotation_crc@primary-x-tiled-reflect-x-0.html
* igt@kms_rotation_crc@primary-y-tiled-reflect-x-90:
- shard-lnl: NOTRUN -> [SKIP][127] ([Intel XE#3414] / [Intel XE#3904] / [Intel XE#7342])
[127]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-6/igt@kms_rotation_crc@primary-y-tiled-reflect-x-90.html
* igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0:
- shard-lnl: NOTRUN -> [SKIP][128] ([Intel XE#1127] / [Intel XE#5813])
[128]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0.html
* igt@kms_setmode@invalid-clone-single-crtc:
- shard-ptl: NOTRUN -> [SKIP][129] ([Intel XE#5910]) +1 other test skip
[129]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-7/igt@kms_setmode@invalid-clone-single-crtc.html
* igt@kms_vrr@negative-basic:
- shard-lnl: NOTRUN -> [SKIP][130] ([Intel XE#1499] / [Intel XE#9271])
[130]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@kms_vrr@negative-basic.html
* igt@xe_compute_preempt@compute-preempt-many-vram-evict:
- shard-ptl: NOTRUN -> [SKIP][131] ([Intel XE#5191]) +1 other test skip
[131]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-7/igt@xe_compute_preempt@compute-preempt-many-vram-evict.html
* igt@xe_configfs@gt-types-allowed:
- shard-bmg: [PASS][132] -> [ABORT][133] ([Intel XE#9463])
[132]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-bmg-4/igt@xe_configfs@gt-types-allowed.html
[133]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-7/igt@xe_configfs@gt-types-allowed.html
* igt@xe_evict@evict-beng-cm-threads-small-multi-vm:
- shard-lnl: NOTRUN -> [SKIP][134] ([Intel XE#6540] / [Intel XE#688]) +5 other tests skip
[134]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-6/igt@xe_evict@evict-beng-cm-threads-small-multi-vm.html
* igt@xe_evict@evict-beng-mixed-many-threads-large:
- shard-ptl: NOTRUN -> [SKIP][135] ([Intel XE#5764]) +7 other tests skip
[135]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-1/igt@xe_evict@evict-beng-mixed-many-threads-large.html
* igt@xe_evict@evict-beng-mixed-many-threads-small:
- shard-bmg: [PASS][136] -> [INCOMPLETE][137] ([Intel XE#6321] / [Intel XE#8355])
[136]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-bmg-5/igt@xe_evict@evict-beng-mixed-many-threads-small.html
[137]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-6/igt@xe_evict@evict-beng-mixed-many-threads-small.html
* igt@xe_evict@evict-small-multi-queue-cm:
- shard-bmg: NOTRUN -> [SKIP][138] ([Intel XE#8370])
[138]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-8/igt@xe_evict@evict-small-multi-queue-cm.html
* igt@xe_evict_ccs@evict-overcommit-parallel-nofree-reopen:
- shard-ptl: NOTRUN -> [SKIP][139] ([Intel XE#6144]) +2 other tests skip
[139]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-2/igt@xe_evict_ccs@evict-overcommit-parallel-nofree-reopen.html
* igt@xe_exec_balancer@many-virtual-userptr-rebind:
- shard-lnl: NOTRUN -> [SKIP][140] ([Intel XE#7482]) +10 other tests skip
[140]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-7/igt@xe_exec_balancer@many-virtual-userptr-rebind.html
* igt@xe_exec_balancer@twice-virtual-rebind:
- shard-ptl: NOTRUN -> [SKIP][141] ([Intel XE#7482]) +15 other tests skip
[141]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-1/igt@xe_exec_balancer@twice-virtual-rebind.html
* igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr:
- shard-bmg: NOTRUN -> [SKIP][142] ([Intel XE#2322] / [Intel XE#7372]) +2 other tests skip
[142]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-8/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr.html
* igt@xe_exec_basic@multigpu-no-exec-bindexecqueue-userptr-rebind:
- shard-lnl: NOTRUN -> [SKIP][143] ([Intel XE#1392]) +2 other tests skip
[143]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@xe_exec_basic@multigpu-no-exec-bindexecqueue-userptr-rebind.html
* igt@xe_exec_basic@multigpu-no-exec-userptr:
- shard-ptl: NOTRUN -> [SKIP][144] ([Intel XE#5575] / [Intel XE#7484]) +6 other tests skip
[144]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-7/igt@xe_exec_basic@multigpu-no-exec-userptr.html
* igt@xe_exec_fault_mode@many-multi-queue-rebind-imm:
- shard-lnl: NOTRUN -> [SKIP][145] ([Intel XE#8374]) +5 other tests skip
[145]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@xe_exec_fault_mode@many-multi-queue-rebind-imm.html
* igt@xe_exec_fault_mode@once-multi-queue-rebind-imm:
- shard-bmg: NOTRUN -> [SKIP][146] ([Intel XE#8374]) +2 other tests skip
[146]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-8/igt@xe_exec_fault_mode@once-multi-queue-rebind-imm.html
* igt@xe_exec_fault_mode@twice-multi-queue-userptr-rebind-imm:
- shard-ptl: NOTRUN -> [SKIP][147] ([Intel XE#8374]) +4 other tests skip
[147]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-7/igt@xe_exec_fault_mode@twice-multi-queue-userptr-rebind-imm.html
* igt@xe_exec_mix_modes@exec-multi-queue-spinner-interrupted-lr:
- shard-ptl: NOTRUN -> [SKIP][148] ([Intel XE#9003])
[148]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-2/igt@xe_exec_mix_modes@exec-multi-queue-spinner-interrupted-lr.html
* igt@xe_exec_multi_queue@many-execs-preempt-mode-fault-close-fd-smem:
- shard-ptl: NOTRUN -> [SKIP][149] ([Intel XE#8364]) +21 other tests skip
[149]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-2/igt@xe_exec_multi_queue@many-execs-preempt-mode-fault-close-fd-smem.html
* igt@xe_exec_multi_queue@many-execs-priority:
- shard-lnl: NOTRUN -> [SKIP][150] ([Intel XE#8364]) +14 other tests skip
[150]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@xe_exec_multi_queue@many-execs-priority.html
* igt@xe_exec_multi_queue@many-queues-preempt-mode-fault-userptr:
- shard-bmg: NOTRUN -> [SKIP][151] ([Intel XE#8364]) +6 other tests skip
[151]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-8/igt@xe_exec_multi_queue@many-queues-preempt-mode-fault-userptr.html
* igt@xe_exec_reset@multi-queue-gt-reset:
- shard-lnl: NOTRUN -> [SKIP][152] ([Intel XE#8369]) +1 other test skip
[152]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@xe_exec_reset@multi-queue-gt-reset.html
* igt@xe_exec_reset@multi-queue-long-spin-many-queue-switch:
- shard-ptl: NOTRUN -> [SKIP][153] ([Intel XE#8369]) +2 other tests skip
[153]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-3/igt@xe_exec_reset@multi-queue-long-spin-many-queue-switch.html
* igt@xe_exec_system_allocator@pat-index-madvise-pat-idx-wt-multi-vma:
- shard-lnl: NOTRUN -> [SKIP][154] ([Intel XE#6196])
[154]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-7/igt@xe_exec_system_allocator@pat-index-madvise-pat-idx-wt-multi-vma.html
* igt@xe_exec_threads@threads-multi-queue-cm-basic:
- shard-lnl: NOTRUN -> [SKIP][155] ([Intel XE#8378]) +6 other tests skip
[155]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-7/igt@xe_exec_threads@threads-multi-queue-cm-basic.html
* igt@xe_exec_threads@threads-multi-queue-cm-fd-userptr:
- shard-bmg: NOTRUN -> [SKIP][156] ([Intel XE#8378]) +3 other tests skip
[156]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-4/igt@xe_exec_threads@threads-multi-queue-cm-fd-userptr.html
* igt@xe_exec_threads@threads-multi-queue-mixed-basic:
- shard-ptl: NOTRUN -> [SKIP][157] ([Intel XE#8378]) +6 other tests skip
[157]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-7/igt@xe_exec_threads@threads-multi-queue-mixed-basic.html
* igt@xe_gpgpu_fill@offset-4x4:
- shard-lnl: NOTRUN -> [SKIP][158] ([Intel XE#7954])
[158]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-7/igt@xe_gpgpu_fill@offset-4x4.html
* igt@xe_live_ktest@xe_bo@xe_bo_evict_kunit:
- shard-ptl: NOTRUN -> [SKIP][159] ([Intel XE#5775])
[159]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-2/igt@xe_live_ktest@xe_bo@xe_bo_evict_kunit.html
* igt@xe_live_ktest@xe_eudebug:
- shard-lnl: NOTRUN -> [SKIP][160] ([Intel XE#2833])
[160]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@xe_live_ktest@xe_eudebug.html
* igt@xe_live_ktest@xe_migrate@xe_validate_ccs_kunit:
- shard-lnl: NOTRUN -> [SKIP][161] ([Intel XE#2229])
[161]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-6/igt@xe_live_ktest@xe_migrate@xe_validate_ccs_kunit.html
* igt@xe_madvise@atomic-cpu:
- shard-ptl: NOTRUN -> [SKIP][162] ([Intel XE#7980])
[162]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-2/igt@xe_madvise@atomic-cpu.html
* igt@xe_madvise@atomic-global:
- shard-lnl: NOTRUN -> [SKIP][163] ([Intel XE#7980])
[163]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-7/igt@xe_madvise@atomic-global.html
* igt@xe_mempage_offline@inject-duplicate-page:
- shard-ptl: NOTRUN -> [SKIP][164] ([Intel XE#9203])
[164]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-7/igt@xe_mempage_offline@inject-duplicate-page.html
* igt@xe_module_load@load:
- shard-lnl: ([PASS][165], [PASS][166], [PASS][167], [PASS][168], [PASS][169], [PASS][170], [PASS][171], [PASS][172], [PASS][173], [PASS][174], [PASS][175], [PASS][176], [PASS][177], [PASS][178], [PASS][179], [PASS][180], [PASS][181], [PASS][182], [PASS][183], [PASS][184], [PASS][185], [PASS][186]) -> ([PASS][187], [SKIP][188], [PASS][189], [PASS][190], [PASS][191], [PASS][192], [PASS][193], [PASS][194], [PASS][195], [PASS][196], [PASS][197], [PASS][198], [PASS][199], [PASS][200], [PASS][201], [PASS][202], [PASS][203], [PASS][204], [PASS][205], [PASS][206], [PASS][207], [PASS][208], [PASS][209], [PASS][210], [PASS][211], [PASS][212]) ([Intel XE#378] / [Intel XE#7405])
[165]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-lnl-1/igt@xe_module_load@load.html
[166]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-lnl-1/igt@xe_module_load@load.html
[167]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-lnl-1/igt@xe_module_load@load.html
[168]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-lnl-7/igt@xe_module_load@load.html
[169]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-lnl-7/igt@xe_module_load@load.html
[170]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-lnl-3/igt@xe_module_load@load.html
[171]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-lnl-2/igt@xe_module_load@load.html
[172]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-lnl-8/igt@xe_module_load@load.html
[173]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-lnl-4/igt@xe_module_load@load.html
[174]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-lnl-4/igt@xe_module_load@load.html
[175]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-lnl-8/igt@xe_module_load@load.html
[176]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-lnl-8/igt@xe_module_load@load.html
[177]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-lnl-4/igt@xe_module_load@load.html
[178]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-lnl-7/igt@xe_module_load@load.html
[179]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-lnl-3/igt@xe_module_load@load.html
[180]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-lnl-4/igt@xe_module_load@load.html
[181]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-lnl-3/igt@xe_module_load@load.html
[182]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-lnl-2/igt@xe_module_load@load.html
[183]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-lnl-2/igt@xe_module_load@load.html
[184]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-lnl-5/igt@xe_module_load@load.html
[185]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-lnl-5/igt@xe_module_load@load.html
[186]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-lnl-8/igt@xe_module_load@load.html
[187]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-1/igt@xe_module_load@load.html
[188]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@xe_module_load@load.html
[189]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-4/igt@xe_module_load@load.html
[190]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-3/igt@xe_module_load@load.html
[191]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-7/igt@xe_module_load@load.html
[192]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-8/igt@xe_module_load@load.html
[193]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-2/igt@xe_module_load@load.html
[194]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@xe_module_load@load.html
[195]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@xe_module_load@load.html
[196]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-4/igt@xe_module_load@load.html
[197]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-4/igt@xe_module_load@load.html
[198]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-7/igt@xe_module_load@load.html
[199]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-8/igt@xe_module_load@load.html
[200]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-1/igt@xe_module_load@load.html
[201]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-6/igt@xe_module_load@load.html
[202]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@xe_module_load@load.html
[203]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-2/igt@xe_module_load@load.html
[204]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-2/igt@xe_module_load@load.html
[205]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-2/igt@xe_module_load@load.html
[206]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-6/igt@xe_module_load@load.html
[207]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-3/igt@xe_module_load@load.html
[208]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-4/igt@xe_module_load@load.html
[209]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-3/igt@xe_module_load@load.html
[210]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-8/igt@xe_module_load@load.html
[211]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-7/igt@xe_module_load@load.html
[212]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-3/igt@xe_module_load@load.html
* igt@xe_multigpu_svm@mgpu-pagefault-basic:
- shard-bmg: NOTRUN -> [SKIP][213] ([Intel XE#6964])
[213]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-8/igt@xe_multigpu_svm@mgpu-pagefault-basic.html
- shard-lnl: NOTRUN -> [SKIP][214] ([Intel XE#6964])
[214]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-7/igt@xe_multigpu_svm@mgpu-pagefault-basic.html
* igt@xe_multigpu_svm@mgpu-xgpu-access-prefetch:
- shard-ptl: NOTRUN -> [SKIP][215] ([Intel XE#6964]) +2 other tests skip
[215]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-1/igt@xe_multigpu_svm@mgpu-xgpu-access-prefetch.html
* igt@xe_noexec_ping_pong@basic:
- shard-ptl: NOTRUN -> [SKIP][216] ([Intel XE#6259] / [Intel XE#7406])
[216]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-3/igt@xe_noexec_ping_pong@basic.html
* igt@xe_page_reclaim@binds-1g-partial:
- shard-ptl: NOTRUN -> [SKIP][217] ([Intel XE#7793])
[217]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-2/igt@xe_page_reclaim@binds-1g-partial.html
* igt@xe_page_reclaim@prl-invalidate-full:
- shard-lnl: NOTRUN -> [SKIP][218] ([Intel XE#7793]) +1 other test skip
[218]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@xe_page_reclaim@prl-invalidate-full.html
* igt@xe_page_reclaim@random:
- shard-bmg: NOTRUN -> [SKIP][219] ([Intel XE#7793])
[219]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-8/igt@xe_page_reclaim@random.html
* igt@xe_pat@pat-sw-hw-reset-compare:
- shard-lnl: NOTRUN -> [FAIL][220] ([Intel XE#7695])
[220]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@xe_pat@pat-sw-hw-reset-compare.html
* igt@xe_peer2peer@write:
- shard-bmg: NOTRUN -> [SKIP][221] ([Intel XE#2427] / [Intel XE#6953] / [Intel XE#7326] / [Intel XE#7353])
[221]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-4/igt@xe_peer2peer@write.html
* igt@xe_pm@auto-link-downgrade-status-show:
- shard-ptl: NOTRUN -> [SKIP][222] ([Intel XE#9490])
[222]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-3/igt@xe_pm@auto-link-downgrade-status-show.html
* igt@xe_pm@d3cold-basic:
- shard-lnl: NOTRUN -> [SKIP][223] ([Intel XE#2284] / [Intel XE#366] / [Intel XE#7370])
[223]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-7/igt@xe_pm@d3cold-basic.html
* igt@xe_pm@d3cold-multiple-execs:
- shard-ptl: NOTRUN -> [SKIP][224] ([Intel XE#5741])
[224]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-2/igt@xe_pm@d3cold-multiple-execs.html
* igt@xe_pm@s3-mocs:
- shard-ptl: NOTRUN -> [SKIP][225] ([Intel XE#6867])
[225]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-3/igt@xe_pm@s3-mocs.html
* igt@xe_pm@s3-vm-bind-unbind-all:
- shard-lnl: NOTRUN -> [SKIP][226] ([Intel XE#584] / [Intel XE#7369])
[226]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-7/igt@xe_pm@s3-vm-bind-unbind-all.html
* igt@xe_pm@s4-basic-exec:
- shard-lnl: [PASS][227] -> [ABORT][228] ([Intel XE#9362])
[227]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-lnl-5/igt@xe_pm@s4-basic-exec.html
[228]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-4/igt@xe_pm@s4-basic-exec.html
* igt@xe_pmu@all-fn-engine-activity-load:
- shard-lnl: NOTRUN -> [SKIP][229] ([Intel XE#4650] / [Intel XE#7347]) +1 other test skip
[229]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@xe_pmu@all-fn-engine-activity-load.html
* igt@xe_pxp@pxp-stale-bo-bind-post-rpm:
- shard-bmg: NOTRUN -> [SKIP][230] ([Intel XE#4733] / [Intel XE#7417])
[230]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-8/igt@xe_pxp@pxp-stale-bo-bind-post-rpm.html
* igt@xe_query@multigpu-query-oa-units:
- shard-ptl: NOTRUN -> [SKIP][231] ([Intel XE#6019]) +1 other test skip
[231]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-3/igt@xe_query@multigpu-query-oa-units.html
* igt@xe_query@multigpu-query-uc-fw-version-guc:
- shard-lnl: NOTRUN -> [SKIP][232] ([Intel XE#944]) +1 other test skip
[232]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-7/igt@xe_query@multigpu-query-uc-fw-version-guc.html
- shard-bmg: NOTRUN -> [SKIP][233] ([Intel XE#944])
[233]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-8/igt@xe_query@multigpu-query-uc-fw-version-guc.html
* igt@xe_sriov_admin@bulk-exec-quantum-vfs-disabled:
- shard-lnl: NOTRUN -> [SKIP][234] ([Intel XE#7174]) +1 other test skip
[234]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-7/igt@xe_sriov_admin@bulk-exec-quantum-vfs-disabled.html
* igt@xe_sriov_auto_provisioning@exclusive-ranges:
- shard-lnl: NOTRUN -> [SKIP][235] ([Intel XE#4130] / [Intel XE#7366])
[235]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@xe_sriov_auto_provisioning@exclusive-ranges.html
* igt@xe_sriov_scheduling@nonpreempt-engine-resets-low-priority:
- shard-lnl: NOTRUN -> [SKIP][236] ([Intel XE#8339])
[236]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-5/igt@xe_sriov_scheduling@nonpreempt-engine-resets-low-priority.html
* igt@xe_sriov_vfio@region-info:
- shard-lnl: NOTRUN -> [SKIP][237] ([Intel XE#7724])
[237]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-7/igt@xe_sriov_vfio@region-info.html
* igt@xe_vm@overcommit-fault-vram-lr-no-overcommit:
- shard-ptl: NOTRUN -> [SKIP][238] ([Intel XE#7892]) +1 other test skip
[238]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-7/igt@xe_vm@overcommit-fault-vram-lr-no-overcommit.html
#### Possible fixes ####
* igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs:
- shard-bmg: [INCOMPLETE][239] ([Intel XE#7084] / [Intel XE#8150]) -> [PASS][240] +1 other test pass
[239]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-bmg-4/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html
[240]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-8/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html
* igt@kms_cursor_crc@cursor-suspend:
- shard-ptl: [ABORT][241] ([Intel XE#9362] / [Intel XE#9375]) -> [PASS][242]
[241]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-ptl-7/igt@kms_cursor_crc@cursor-suspend.html
[242]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-3/igt@kms_cursor_crc@cursor-suspend.html
* igt@kms_cursor_crc@cursor-suspend@pipe-a-edp-1:
- shard-ptl: [ABORT][243] ([Intel XE#9362]) -> [PASS][244] +3 other tests pass
[243]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-ptl-7/igt@kms_cursor_crc@cursor-suspend@pipe-a-edp-1.html
[244]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-3/igt@kms_cursor_crc@cursor-suspend@pipe-a-edp-1.html
* igt@kms_cursor_crc@cursor-suspend@pipe-d-edp-1:
- shard-ptl: [DMESG-WARN][245] ([Intel XE#9407]) -> [PASS][246]
[245]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-ptl-7/igt@kms_cursor_crc@cursor-suspend@pipe-d-edp-1.html
[246]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-3/igt@kms_cursor_crc@cursor-suspend@pipe-d-edp-1.html
* igt@kms_flip@flip-vs-expired-vblank-interruptible@b-edp1:
- shard-lnl: [FAIL][247] ([Intel XE#301]) -> [PASS][248]
[247]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-lnl-4/igt@kms_flip@flip-vs-expired-vblank-interruptible@b-edp1.html
[248]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-8/igt@kms_flip@flip-vs-expired-vblank-interruptible@b-edp1.html
* igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1:
- shard-lnl: [FAIL][249] ([Intel XE#301] / [Intel XE#3149]) -> [PASS][250]
[249]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-lnl-4/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1.html
[250]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-8/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1.html
* igt@kms_hdr@invalid-hdr:
- shard-bmg: [SKIP][251] ([Intel XE#1503]) -> [PASS][252]
[251]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-bmg-4/igt@kms_hdr@invalid-hdr.html
[252]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-7/igt@kms_hdr@invalid-hdr.html
* igt@xe_compute_preempt@compute-preempt-many-all-ram:
- shard-bmg: [ABORT][253] ([Intel XE#9481]) -> [PASS][254] +1 other test pass
[253]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-bmg-3/igt@xe_compute_preempt@compute-preempt-many-all-ram.html
[254]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-9/igt@xe_compute_preempt@compute-preempt-many-all-ram.html
#### Warnings ####
* igt@kms_async_flips@async-flip-suspend-resume:
- shard-ptl: [ABORT][255] ([Intel XE#9375]) -> [ABORT][256] ([Intel XE#9362])
[255]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-ptl-6/igt@kms_async_flips@async-flip-suspend-resume.html
[256]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-ptl-4/igt@kms_async_flips@async-flip-suspend-resume.html
* igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions:
- shard-lnl: [SKIP][257] ([Intel XE#309] / [Intel XE#7343] / [Intel XE#7935]) -> [SKIP][258] ([Intel XE#309] / [Intel XE#7343])
[257]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-lnl-8/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions.html
[258]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-7/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions.html
* igt@kms_flip@flip-vs-expired-vblank-interruptible:
- shard-lnl: [FAIL][259] ([Intel XE#301] / [Intel XE#3149]) -> [FAIL][260] ([Intel XE#301])
[259]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-lnl-4/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
[260]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-lnl-8/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
* igt@kms_tiled_display@basic-test-pattern:
- shard-bmg: [SKIP][261] ([Intel XE#2426] / [Intel XE#5848]) -> [FAIL][262] ([Intel XE#1729] / [Intel XE#7424])
[261]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12/shard-bmg-9/igt@kms_tiled_display@basic-test-pattern.html
[262]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/shard-bmg-5/igt@kms_tiled_display@basic-test-pattern.html
[Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
[Intel XE#1127]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1127
[Intel XE#1131]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1131
[Intel XE#1137]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1137
[Intel XE#1178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1178
[Intel XE#1392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1392
[Intel XE#1406]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1406
[Intel XE#1407]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1407
[Intel XE#1421]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1421
[Intel XE#1424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1424
[Intel XE#1428]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1428
[Intel XE#1468]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1468
[Intel XE#1469]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1469
[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#1729]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1729
[Intel XE#2229]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2229
[Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
[Intel XE#2252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2252
[Intel XE#2284]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2284
[Intel XE#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311
[Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313
[Intel XE#2316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2316
[Intel XE#2320]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2320
[Intel XE#2321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2321
[Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
[Intel XE#2327]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2327
[Intel XE#2375]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2375
[Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
[Intel XE#2427]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2427
[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#2669]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2669
[Intel XE#2763]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2763
[Intel XE#2833]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2833
[Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
[Intel XE#2887]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2887
[Intel XE#2893]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2893
[Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
[Intel XE#309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/309
[Intel XE#3098]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3098
[Intel XE#3149]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3149
[Intel XE#323]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/323
[Intel XE#3304]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3304
[Intel XE#3414]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3414
[Intel XE#3433]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3433
[Intel XE#352]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/352
[Intel XE#366]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/366
[Intel XE#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
[Intel XE#373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/373
[Intel XE#378]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/378
[Intel XE#3904]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3904
[Intel XE#4130]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4130
[Intel XE#4141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4141
[Intel XE#4422]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4422
[Intel XE#4608]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4608
[Intel XE#4609]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4609
[Intel XE#4650]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4650
[Intel XE#4733]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4733
[Intel XE#5020]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5020
[Intel XE#5191]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5191
[Intel XE#5575]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5575
[Intel XE#5741]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5741
[Intel XE#5764]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5764
[Intel XE#5775]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5775
[Intel XE#5800]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5800
[Intel XE#5808]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5808
[Intel XE#5812]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5812
[Intel XE#5813]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5813
[Intel XE#5822]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5822
[Intel XE#5823]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5823
[Intel XE#5824]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5824
[Intel XE#5832]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5832
[Intel XE#5835]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5835
[Intel XE#584]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/584
[Intel XE#5844]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5844
[Intel XE#5846]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5846
[Intel XE#5848]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5848
[Intel XE#5849]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5849
[Intel XE#5851]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5851
[Intel XE#5858]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5858
[Intel XE#5900]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5900
[Intel XE#5901]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5901
[Intel XE#5907]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5907
[Intel XE#5910]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5910
[Intel XE#5947]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5947
[Intel XE#5959]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5959
[Intel XE#5962]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5962
[Intel XE#6019]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6019
[Intel XE#6035]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6035
[Intel XE#6078]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6078
[Intel XE#6144]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6144
[Intel XE#6196]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6196
[Intel XE#6259]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6259
[Intel XE#6312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6312
[Intel XE#6321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6321
[Intel XE#6507]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6507
[Intel XE#651]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/651
[Intel XE#6540]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6540
[Intel XE#656]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/656
[Intel XE#6867]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6867
[Intel XE#688]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/688
[Intel XE#6886]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6886
[Intel XE#6901]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6901
[Intel XE#6918]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6918
[Intel XE#6925]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6925
[Intel XE#6953]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6953
[Intel XE#6964]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6964
[Intel XE#6969]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6969
[Intel XE#6974]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6974
[Intel XE#7059]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7059
[Intel XE#7061]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7061
[Intel XE#7084]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7084
[Intel XE#7085]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7085
[Intel XE#7086]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7086
[Intel XE#7174]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7174
[Intel XE#7178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7178
[Intel XE#7179]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7179
[Intel XE#7283]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7283
[Intel XE#7304]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7304
[Intel XE#7326]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7326
[Intel XE#7342]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7342
[Intel XE#7343]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7343
[Intel XE#7345]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7345
[Intel XE#7347]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7347
[Intel XE#7351]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7351
[Intel XE#7353]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7353
[Intel XE#7355]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7355
[Intel XE#7356]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7356
[Intel XE#7358]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7358
[Intel XE#7366]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7366
[Intel XE#7369]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7369
[Intel XE#7370]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7370
[Intel XE#7372]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7372
[Intel XE#7374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7374
[Intel XE#7387]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7387
[Intel XE#7389]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7389
[Intel XE#7390]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7390
[Intel XE#7396]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7396
[Intel XE#7399]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7399
[Intel XE#7405]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7405
[Intel XE#7406]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7406
[Intel XE#7413]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7413
[Intel XE#7417]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7417
[Intel XE#7424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7424
[Intel XE#7442]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7442
[Intel XE#7482]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7482
[Intel XE#7484]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7484
[Intel XE#7642]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7642
[Intel XE#7679]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7679
[Intel XE#7695]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7695
[Intel XE#7724]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7724
[Intel XE#7793]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7793
[Intel XE#7865]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7865
[Intel XE#7892]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7892
[Intel XE#7905]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7905
[Intel XE#7935]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7935
[Intel XE#7954]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7954
[Intel XE#7980]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7980
[Intel XE#8150]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8150
[Intel XE#8265]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8265
[Intel XE#8339]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8339
[Intel XE#8348]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8348
[Intel XE#8355]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8355
[Intel XE#8364]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8364
[Intel XE#8365]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8365
[Intel XE#8369]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8369
[Intel XE#8370]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8370
[Intel XE#8374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8374
[Intel XE#8378]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8378
[Intel XE#8391]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8391
[Intel XE#9003]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9003
[Intel XE#9203]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9203
[Intel XE#9271]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9271
[Intel XE#9312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9312
[Intel XE#9362]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9362
[Intel XE#9365]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9365
[Intel XE#9375]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9375
[Intel XE#9407]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9407
[Intel XE#9428]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9428
[Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944
[Intel XE#9463]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9463
[Intel XE#9481]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9481
[Intel XE#9490]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9490
[Intel XE#9536]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9536
Build changes
-------------
* Linux: xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12 -> xe-pw-173066v2
IGT_9131: 5e43e9df3a1581074f0de2bbeddd939ebd950b93 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-5899-daeb062fc40f727fafefed080c6d12a5ad1d0d12: daeb062fc40f727fafefed080c6d12a5ad1d0d12
xe-pw-173066v2: 173066v2
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-173066v2/index.html
[-- Attachment #2: Type: text/html, Size: 88726 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 1/2] drm/xe: Expose retired VRAM pages via drm-ras
2026-10-07 9:28 ` Christian König
@ 2026-10-07 13:55 ` Rodrigo Vivi
0 siblings, 0 replies; 9+ messages in thread
From: Rodrigo Vivi @ 2026-10-07 13:55 UTC (permalink / raw)
To: Christian König
Cc: Aravind Iddamsetty, intel-xe, dri-devel, netdev, amd-gfx,
simona.vetter, airlied, tejas.upadhyay, himal.prasad.ghimiray,
riana.tauro, raag.jadav, joshua.santosh.ranjan,
ashwin.kumar.kulkarni, pratik.bari, Hawking.Zhang, tao.zhou1,
YiPeng.Chai, jinzhou.su, cesun102, lijo.lazar, alexander.deucher
On Wed, Oct 07, 2026 at 11:28:03AM +0200, Christian König wrote:
> On 10/7/26 10:03, Aravind Iddamsetty wrote:
> > The memory page offlining support tracks bad VRAM pages and currently
> > only exposes them through debugfs (vram_bad_pages), which is not a
> > stable ABI. Add a proper userspace interface using the drm-ras
> > generic netlink family.
>
> Oh, why in the world are you using netlink for that?
Well, that came from a rough consensus at LPC BoF 4 years ago:
https://airlied.blogspot.com/2022/09/accelerators-bof-outcomes-summary.html
And a series of news and patches that evolved through these years:
https://lwn.net/Articles/947134/
>
> In almost all cases (except maybe udev) using netlink has proven to be a bad idea.
I honestly understand you very much.
When Intel used gen netlink for PVC's iaf/xe-link fabric I tried to push back
(back in 2018, or 2019 iirc)
When I saw this netlink conclusions and first patches I also didn't like it much
but I was in a kind of disagree and commit mode.
But as I had to jump in to help with the review and refactoring, I noticed the
bit netlink refactor during these years and the yaml declaration, generation
and tooling and I started liking it.
>
> Why aren't RAS errors just exposed through sysfs and/or udev?
Well, I honestly never liked the sysfs for the errors anyway, this is the main
reason I was in the disagree and commit mode. I didn't have anything better to
offer.
sysfs for error reporting is a horrible choice. It gets polluted and messed
pretty quickly. It is also not an interface that you can use alone, you
immediately need an alternative for reporting up like uevents. So, you end
up with errors declared in multiple places, filesystem and file names that
are messed, ugly.
But that we are talking for error only. We have several other needs.
Like this new case of the memory page offline. Our first attempt was
the sysfs for this case as well. But sysfs rules forbids multiple values
in a single file. I know, there are some cases doing it, but they are
running against sysfs rules of 1 file - 1 entry.
So, sysfs cannot provide a interface where you need multiple information
in a race free manner. So, I don't see another good alternative for
this memory page offline, but I would be glad to hear suggestions.
Thanks,
Rodrigo.
>
> Regards,
> Christian.
>
> >
> > Introduce a new node type DRM_RAS_NODE_TYPE_RETIRED_RESOURCES which
> > enumerates hardware resources that have been permanently taken out of
> > service. Each node reports a single resource type, identified by its
> > node-name, so the resource type is implied by the node rather than
> > carried per entry. The per-entry payload stays extensible: each entry
> > carries a single type-specific nested attribute, so future resource
> > types can be added without touching existing consumers. VRAM pages are
> > the first supported type, reported via the vram-page nest as
> > {address, size, status} where status is one of retired/pending/failed.
> >
> > A single operation is added on the node:
> > - GET_RETIRED_RESOURCES: dump the resources retired on the node. The
> > dump opens with a leading capacity summary entry (max-pages
> > inside the vram-page nest, i.e. the maximum number of pages that
> > can be offlined, with no address/size/status), followed by one
> > entry per retired resource. Userspace derives the retired/queued
> > counts by counting entries.
> >
> > The netlink interface is described by the YAML spec
> > Documentation/netlink/specs/drm_ras.yaml. The following files are
> > generated from that spec with tools/net/ynl/ynl-regen.sh and must not
> > be edited by hand:
> > - include/uapi/drm/drm_ras.h (uapi attribute/command enums)
> > - drivers/gpu/drm/drm_ras_nl.c (generated policy and op table)
> > - drivers/gpu/drm/drm_ras_nl.h (generated declarations)
> >
> > Eg:
> > $ sudo ./tools/net/ynl/pyynl/cli.py \
> > --spec Documentation/netlink/specs/drm_ras.yaml \
> > --dump list-nodes
> >
> > [{'device-name': '0000:03:00.0', 'node-id': 0, 'node-name':'correctable-errors',
> > 'node-type': 'error-counter'},
> > {'device-name': '0000:03:00.0', 'node-id': 1, 'node-name':'uncorrectable-errors
> > ', 'node-type': 'error-counter'},
> > {'device-name': '0000:03:00.0', 'node-id': 2, 'node-name':'vram-retired-pages',
> > 'node-type': 'retired-resources'}]
> >
> > $ sudo ./tools/net/ynl/pyynl/cli.py --spec \
> > Documentation/netlink/specs/drm_ras.yaml --dump get-retired-resources \
> > --json '{"node-id": 2}'
> >
> > [{'node-id': 2, 'vram-page': {'max-pages': 100}},
> > {'node-id': 2, 'vram-page': {'address': 12807041024, 'size': 4096,
> > 'status': 'retired'}},
> > {'node-id': 2, 'vram-page': {'address': 12809400320, 'size': 4096,
> > 'status': 'retired'}}]
> >
> > The first entry is the capacity summary (max-pages); subsequent entries
> > are the retired pages.
> >
> > v2:
> > - Drop the per-entry resource-type discriminator attribute; the type is
> > now implied by the node (node-name), which reports a single type.
> > - Fold all VRAM-page fields, including the retirement status, into the
> > vram-page nested attribute; the top-level entry is just
> > {node-id, vram-page}. (Rodrigo)
> > - Drop the separate GET_RETIRED_RESOURCES_INFO operation. The capacity
> > (max-pages) is now emitted as a leading summary entry inside
> > GET_RETIRED_RESOURCES (max-pages in the vram-page nest, no status);
> > offlined/queued counts are derived by counting entries.
> >
> > Cc: Tejas Upadhyay <tejas.upadhyay@intel.com>
> > Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
> > Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> > Cc: Riana Tauro <riana.tauro@intel.com>
> > Cc: Raag Jadav <raag.jadav@intel.com>
> > Cc: Joshua Santhosh Ranjan <joshua.santosh.ranjan@intel.com>
> > Cc: Ashwin Kumar Kulkarni <ashwin.kumar.kulkarni@intel.com>
> > Cc: Pratik Bari <pratik.bari@intel.com>
> >
> > Signed-off-by: Aravind Iddamsetty <aravind.iddamsetty@linux.intel.com>
> > Assisted-by: Copilot:claude-opus-4.8
> > ---
> > Documentation/netlink/specs/drm_ras.yaml | 91 +++++++++++-
> > drivers/gpu/drm/drm_ras.c | 174 ++++++++++++++++++++++-
> > drivers/gpu/drm/drm_ras_nl.c | 12 ++
> > drivers/gpu/drm/drm_ras_nl.h | 2 +
> > drivers/gpu/drm/xe/xe_drm_ras.c | 77 ++++++++++
> > drivers/gpu/drm/xe/xe_drm_ras_types.h | 3 +
> > drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 119 ++++++++++++++++
> > drivers/gpu/drm/xe/xe_ttm_vram_mgr.h | 3 +
> > include/drm/drm_ras.h | 74 ++++++++++
> > include/uapi/drm/drm_ras.h | 48 ++++++-
> > 10 files changed, 592 insertions(+), 11 deletions(-)
> >
> > diff --git a/Documentation/netlink/specs/drm_ras.yaml b/Documentation/netlink/specs/drm_ras.yaml
> > index 4c2ac9a1ba3f..42ab1cceaea7 100644
> > --- a/Documentation/netlink/specs/drm_ras.yaml
> > +++ b/Documentation/netlink/specs/drm_ras.yaml
> > @@ -16,11 +16,34 @@ definitions:
> > type: enum
> > name: node-type
> > value-start: 1
> > - entries: [error-counter]
> > + entries: [error-counter, retired-resources]
> > doc: >-
> > - Type of the node. Currently, only error-counter nodes are
> > - supported, which expose reliability counters for a hardware/software
> > - component.
> > + Type of the node.
> > + error-counter nodes expose reliability counters for a
> > + hardware/software component. retired-resources nodes enumerate
> > + hardware resources (e.g. VRAM pages) that have been permanently
> > + taken out of service.
> > + -
> > + type: enum
> > + name: retired-resource-status
> > + value-start: 0
> > + entries: [retired, pending, failed]
> > + doc: >-
> > + Status of a retired resource entry. retired means the resource is
> > + permanently reserved and out of service; pending means retirement is
> > + queued but the reservation is not yet complete; failed means the
> > + reservation failed and the resource may still be in use.
> > + -
> > + type: enum
> > + name: retired-resource-type
> > + value-start: 1
> > + entries: [vram-page]
> > + doc: >-
> > + Type of a retired resource entry. The type selects which type-specific
> > + nested attribute is present. New hardware resource types can be added
> > + here, each carrying its own nested attribute set, without affecting
> > + existing types. vram-page describes a VRAM page by device address and
> > + size.
> >
> > attribute-sets:
> > -
> > @@ -100,6 +123,45 @@ attribute-sets:
> > name: error-value
> > type: u32
> > doc: Current value of the error counter.
> > + -
> > + name: retired-resource-attrs
> > + attributes:
> > + -
> > + name: node-id
> > + type: u32
> > + doc: Node ID targeted by this retired resource operation.
> > + -
> > + name: vram-page
> > + type: nest
> > + nested-attributes: vram-page-attrs
> > + doc: >-
> > + Type-specific payload. The resource type is identified by the
> > + node (its node-name); each node reports a single resource type.
> > + -
> > + name: vram-page-attrs
> > + attributes:
> > + -
> > + name: address
> > + type: u64
> > + doc: Device address of the retired VRAM page (e.g. DPA).
> > + -
> > + name: size
> > + type: u64
> > + doc: Size of the retired VRAM page in bytes.
> > + -
> > + name: max-pages
> > + type: u32
> > + doc: >-
> > + Maximum VRAM pages that can be retired. Present only in the
> > + leading summary entry of the dump (no address/size/status).
> > + -
> > + name: status
> > + type: u32
> > + doc: Retirement status of the retired VRAM page.
> > + enum: retired-resource-status
> > + -
> > + name: pad
> > + type: pad
> >
> > operations:
> > list:
> > @@ -199,6 +261,27 @@ operations:
> > - node-id
> > - error-id
> > - error-threshold
> > + -
> > + name: get-retired-resources
> > + doc: >-
> > + Enumerate the resources (e.g. VRAM pages) that a retired-resources
> > + node has taken out of service. The dump begins with a leading
> > + capacity summary entry (max-pages, with no address/size/status),
> > + followed by one entry per retired resource (address, size and a
> > + retirement status). The resource type is identified by the node
> > + (its node-name); each node reports a single type. User space
> > + derives the retired/queued counts by counting entries, and must
> > + obtain the node ID from list-nodes first.
> > + attribute-set: retired-resource-attrs
> > + flags: [admin-perm]
> > + dump:
> > + request:
> > + attributes:
> > + - node-id
> > + reply:
> > + attributes:
> > + - node-id
> > + - vram-page
> >
> > mcast-groups:
> > list:
> > diff --git a/drivers/gpu/drm/drm_ras.c b/drivers/gpu/drm/drm_ras.c
> > index b099eb67836e..46ee897a13c9 100644
> > --- a/drivers/gpu/drm/drm_ras.c
> > +++ b/drivers/gpu/drm/drm_ras.c
> > @@ -63,7 +63,6 @@
> > * Node type:
> > *
> > * - ERROR_COUNTER:
> > - * + Currently, only error counters are supported.
> > * + The driver must implement the query_error_counter() callback to provide
> > * the name and the value of the error counter.
> > * + The driver must provide a error_counter_range.last value informing the
> > @@ -81,6 +80,13 @@
> > * that are raised by the hardware.
> > * + The driver is responsible for error threshold bounds checking.
> > *
> > + * - RETIRED_RESOURCES:
> > + * + Enumerates hardware resources (e.g. VRAM pages) permanently taken out
> > + * of service.
> > + * + The driver must implement the query_retired_resource() callback, which
> > + * is called with an incrementing index and returns -ENOENT once the last
> > + * entry has been reported.
> > + *
> > * Netlink handlers:
> > *
> > * - drm_ras_nl_list_nodes_dumpit(): Implements the LIST_NODES
> > @@ -95,6 +101,9 @@
> > * operation, fetching the error threshold of a specific counter.
> > * - drm_ras_nl_set_error_threshold_doit(): Implements the SET_ERROR_THRESHOLD doit
> > * operation, setting the error threshold of a specific counter.
> > + * - drm_ras_nl_get_retired_resources_dumpit(): Implements the
> > + * GET_RETIRED_RESOURCES dumpit operation, enumerating retired resources of a
> > + * specific node.
> > */
> >
> > static DEFINE_XARRAY_ALLOC(drm_ras_xa);
> > @@ -105,6 +114,10 @@ static DEFINE_XARRAY_ALLOC(drm_ras_xa);
> > struct drm_ras_ctx {
> > /* Which xarray id to restart the dump from */
> > unsigned long restart;
> > + /* Ordering-key cursor for retired-resource dumps (inclusive lower bound) */
> > + u64 cursor;
> > + /* Whether the leading retired-resource summary has been emitted */
> > + bool summary_sent;
> > };
> >
> > /**
> > @@ -564,6 +577,148 @@ int drm_ras_nl_clear_error_counter_doit(struct sk_buff *skb,
> > return node->clear_error_counter(node, error_id);
> > }
> >
> > +static int msg_put_retired_resource(struct sk_buff *skb, u32 node_id,
> > + const struct drm_ras_retired_resource *res)
> > +{
> > + struct nlattr *nest;
> > +
> > + if (nla_put_u32(skb, DRM_RAS_A_RETIRED_RESOURCE_ATTRS_NODE_ID, node_id))
> > + return -EMSGSIZE;
> > +
> > + /* Type is implied by the node (its node_name); it selects the nest. */
> > + switch (res->type) {
> > + case DRM_RAS_RETIRED_RESOURCE_TYPE_VRAM_PAGE:
> > + nest = nla_nest_start(skb,
> > + DRM_RAS_A_RETIRED_RESOURCE_ATTRS_VRAM_PAGE);
> > + if (!nest)
> > + return -EMSGSIZE;
> > +
> > + if (res->is_summary) {
> > + /* Leading capacity summary: max retirable pages. */
> > + if (nla_put_u32(skb, DRM_RAS_A_VRAM_PAGE_ATTRS_MAX_PAGES,
> > + res->vram_page.max_pages)) {
> > + nla_nest_cancel(skb, nest);
> > + return -EMSGSIZE;
> > + }
> > + } else if (nla_put_u64_64bit(skb, DRM_RAS_A_VRAM_PAGE_ATTRS_ADDRESS,
> > + res->vram_page.address,
> > + DRM_RAS_A_VRAM_PAGE_ATTRS_PAD) ||
> > + nla_put_u64_64bit(skb, DRM_RAS_A_VRAM_PAGE_ATTRS_SIZE,
> > + res->vram_page.size,
> > + DRM_RAS_A_VRAM_PAGE_ATTRS_PAD) ||
> > + nla_put_u32(skb, DRM_RAS_A_VRAM_PAGE_ATTRS_STATUS,
> > + res->status)) {
> > + nla_nest_cancel(skb, nest);
> > + return -EMSGSIZE;
> > + }
> > +
> > + nla_nest_end(skb, nest);
> > + break;
> > + default:
> > + /* Unknown type: only the common node-id is reported. */
> > + break;
> > + }
> > +
> > + return 0;
> > +}
> > +
> > +/**
> > + * drm_ras_nl_get_retired_resources_dumpit() - Dump retired resources of a node
> > + * @skb: Netlink message buffer
> > + * @cb: Callback context for multi-part dumps
> > + *
> > + * Iterates over all retired resources of a %DRM_RAS_NODE_TYPE_RETIRED_RESOURCES
> > + * node and appends their attributes to the given netlink message buffer. The
> > + * dump opens with an optional leading type-specific capacity summary (e.g. the
> > + * maximum retirable page count), followed by one entry per retired resource;
> > + * each resource entry carries a status plus one type-specific nested attribute
> > + * selected by the node's type. Uses @cb->ctx to store an ordering-key cursor
> > + * so multi-part dumps resume by key rather than position, staying correct if
> > + * the list changes concurrently between message parts.
> > + *
> > + * Return: 0 if all entries fit in @skb, number of bytes added to @skb if
> > + * the buffer filled up (requires multi-part continuation), or
> > + * a negative error code on failure.
> > + */
> > +int drm_ras_nl_get_retired_resources_dumpit(struct sk_buff *skb,
> > + struct netlink_callback *cb)
> > +{
> > + const struct genl_info *info = genl_info_dump(cb);
> > + struct drm_ras_ctx *ctx = (void *)cb->ctx;
> > + struct drm_ras_retired_resource res;
> > + struct drm_ras_node *node;
> > + struct nlattr *hdr;
> > + u32 node_id;
> > + u64 cursor;
> > + int ret = 0;
> > +
> > + if (!info->attrs ||
> > + GENL_REQ_ATTR_CHECK(info, DRM_RAS_A_RETIRED_RESOURCE_ATTRS_NODE_ID))
> > + return -EINVAL;
> > +
> > + node_id = nla_get_u32(info->attrs[DRM_RAS_A_RETIRED_RESOURCE_ATTRS_NODE_ID]);
> > +
> > + node = xa_load(&drm_ras_xa, node_id);
> > + if (!node || node->type != DRM_RAS_NODE_TYPE_RETIRED_RESOURCES ||
> > + !node->query_retired_resource)
> > + return -ENOENT;
> > +
> > + /* Leading type-specific capacity summary (e.g. max pages), emitted once. */
> > + if (!ctx->summary_sent && node->query_retired_summary) {
> > + memset(&res, 0, sizeof(res));
> > + ret = node->query_retired_summary(node, &res);
> > + if (ret == 0) {
> > + hdr = genlmsg_iput(skb, info);
> > + if (!hdr)
> > + return -EMSGSIZE; /* retry summary next part */
> > + ret = msg_put_retired_resource(skb, node_id, &res);
> > + if (ret) {
> > + genlmsg_cancel(skb, hdr);
> > + return ret;
> > + }
> > + genlmsg_end(skb, hdr);
> > + } else if (ret != -ENOENT) {
> > + return ret;
> > + }
> > + ctx->summary_sent = true;
> > + }
> > +
> > + cursor = ctx->cursor;
> > + for (;;) {
> > + memset(&res, 0, sizeof(res));
> > + ret = node->query_retired_resource(node, cursor, &res);
> > + /* -ENOENT marks the end of the list. */
> > + if (ret == -ENOENT) {
> > + ret = 0;
> > + break;
> > + }
> > + if (ret)
> > + return ret;
> > +
> > + hdr = genlmsg_iput(skb, info);
> > + if (!hdr) {
> > + ret = -EMSGSIZE;
> > + break;
> > + }
> > +
> > + ret = msg_put_retired_resource(skb, node_id, &res);
> > + if (ret) {
> > + genlmsg_cancel(skb, hdr);
> > + break;
> > + }
> > +
> > + genlmsg_end(skb, hdr);
> > + /* Advance past this entry; keys are unique. */
> > + cursor = res.key + 1;
> > + }
> > +
> > + /* On buffer-full the current entry was not emitted; resume at it. */
> > + if (ret == -EMSGSIZE)
> > + ctx->cursor = cursor;
> > +
> > + return ret;
> > +}
> > +
> > /**
> > * drm_ras_nl_get_error_threshold_doit() - Query error threshold of a counter
> > * @skb: Netlink message buffer
> > @@ -631,15 +786,24 @@ int drm_ras_node_register(struct drm_ras_node *node)
> > if (!node->device_name || !node->node_name)
> > return -EINVAL;
> >
> > - /* Currently, only Error Counter Endpoints are supported */
> > - if (node->type != DRM_RAS_NODE_TYPE_ERROR_COUNTER)
> > - return -EINVAL;
> > -
> > /* Mandatory entries for Error Counter Node */
> > if (node->type == DRM_RAS_NODE_TYPE_ERROR_COUNTER &&
> > (!node->error_counter_range.last || !node->query_error_counter))
> > return -EINVAL;
> >
> > + /* Mandatory entries for Retired Resources Node */
> > + if (node->type == DRM_RAS_NODE_TYPE_RETIRED_RESOURCES &&
> > + !node->query_retired_resource)
> > + return -EINVAL;
> > +
> > + switch (node->type) {
> > + case DRM_RAS_NODE_TYPE_ERROR_COUNTER:
> > + case DRM_RAS_NODE_TYPE_RETIRED_RESOURCES:
> > + break;
> > + default:
> > + return -EINVAL;
> > + }
> > +
> > return xa_alloc(&drm_ras_xa, &node->id, node, xa_limit_32b, GFP_KERNEL);
> > }
> > EXPORT_SYMBOL(drm_ras_node_register);
> > diff --git a/drivers/gpu/drm/drm_ras_nl.c b/drivers/gpu/drm/drm_ras_nl.c
> > index c9f5e0ceb3b5..2f23f5681fa4 100644
> > --- a/drivers/gpu/drm/drm_ras_nl.c
> > +++ b/drivers/gpu/drm/drm_ras_nl.c
> > @@ -41,6 +41,11 @@ static const struct nla_policy drm_ras_set_error_threshold_nl_policy[DRM_RAS_A_E
> > [DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_THRESHOLD] = { .type = NLA_U32, },
> > };
> >
> > +/* DRM_RAS_CMD_GET_RETIRED_RESOURCES - dump */
> > +static const struct nla_policy drm_ras_get_retired_resources_nl_policy[DRM_RAS_A_RETIRED_RESOURCE_ATTRS_NODE_ID + 1] = {
> > + [DRM_RAS_A_RETIRED_RESOURCE_ATTRS_NODE_ID] = { .type = NLA_U32, },
> > +};
> > +
> > /* Ops table for drm_ras */
> > static const struct genl_split_ops drm_ras_nl_ops[] = {
> > {
> > @@ -83,6 +88,13 @@ static const struct genl_split_ops drm_ras_nl_ops[] = {
> > .maxattr = DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_THRESHOLD,
> > .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
> > },
> > + {
> > + .cmd = DRM_RAS_CMD_GET_RETIRED_RESOURCES,
> > + .dumpit = drm_ras_nl_get_retired_resources_dumpit,
> > + .policy = drm_ras_get_retired_resources_nl_policy,
> > + .maxattr = DRM_RAS_A_RETIRED_RESOURCE_ATTRS_NODE_ID,
> > + .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DUMP,
> > + },
> > };
> >
> > static const struct genl_multicast_group drm_ras_nl_mcgrps[] = {
> > diff --git a/drivers/gpu/drm/drm_ras_nl.h b/drivers/gpu/drm/drm_ras_nl.h
> > index 9aef097ea10f..96b0fe017ea8 100644
> > --- a/drivers/gpu/drm/drm_ras_nl.h
> > +++ b/drivers/gpu/drm/drm_ras_nl.h
> > @@ -24,6 +24,8 @@ int drm_ras_nl_get_error_threshold_doit(struct sk_buff *skb,
> > struct genl_info *info);
> > int drm_ras_nl_set_error_threshold_doit(struct sk_buff *skb,
> > struct genl_info *info);
> > +int drm_ras_nl_get_retired_resources_dumpit(struct sk_buff *skb,
> > + struct netlink_callback *cb);
> >
> > enum {
> > DRM_RAS_NLGRP_ERROR_REPORT,
> > diff --git a/drivers/gpu/drm/xe/xe_drm_ras.c b/drivers/gpu/drm/xe/xe_drm_ras.c
> > index 7f3695707611..fba58e9eb7e0 100644
> > --- a/drivers/gpu/drm/xe/xe_drm_ras.c
> > +++ b/drivers/gpu/drm/xe/xe_drm_ras.c
> > @@ -12,6 +12,7 @@
> > #include "xe_device_types.h"
> > #include "xe_drm_ras.h"
> > #include "xe_ras.h"
> > +#include "xe_ttm_vram_mgr.h"
> >
> > static const char * const error_components[] = DRM_XE_RAS_ERROR_COMPONENT_NAMES;
> > static const char * const error_severity[] = DRM_XE_RAS_ERROR_SEVERITY_NAMES;
> > @@ -188,6 +189,75 @@ static void cleanup_node(struct drm_device *drm, void *node)
> > cleanup_node_param(node);
> > }
> >
> > +static int query_retired_resource(struct drm_ras_node *node, u64 cursor,
> > + struct drm_ras_retired_resource *res)
> > +{
> > + struct xe_device *xe = node->priv;
> > + int ret;
> > +
> > + ret = xe_ttm_vram_get_retired_page(xe, cursor, &res->vram_page.address,
> > + &res->vram_page.size, &res->status);
> > + if (ret)
> > + return ret;
> > +
> > + res->type = DRM_RAS_RETIRED_RESOURCE_TYPE_VRAM_PAGE;
> > + res->key = res->vram_page.address;
> > +
> > + return 0;
> > +}
> > +
> > +static int query_retired_summary(struct drm_ras_node *node,
> > + struct drm_ras_retired_resource *res)
> > +{
> > + struct xe_device *xe = node->priv;
> > +
> > + res->type = DRM_RAS_RETIRED_RESOURCE_TYPE_VRAM_PAGE;
> > + res->is_summary = 1;
> > + res->vram_page.max_pages = xe_ttm_vram_get_max_bad_pages(xe);
> > +
> > + return 0;
> > +}
> > +
> > +static int register_retired_node(struct xe_device *xe)
> > +{
> > + struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
> > + struct xe_drm_ras *ras = &xe->ras;
> > + struct drm_ras_node *node;
> > + const char *device_name;
> > + int ret;
> > +
> > + /* Retired VRAM pages are only tracked on platforms with page offline */
> > + if (xe->info.platform != XE_CRESCENTISLAND)
> > + return 0;
> > +
> > + node = drmm_kzalloc(&xe->drm, sizeof(*node), GFP_KERNEL);
> > + if (!node)
> > + return -ENOMEM;
> > +
> > + device_name = kasprintf(GFP_KERNEL, "%04x:%02x:%02x.%d",
> > + pci_domain_nr(pdev->bus), pdev->bus->number,
> > + PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn));
> > + if (!device_name)
> > + return -ENOMEM;
> > +
> > + node->device_name = device_name;
> > + node->node_name = "vram-retired-pages";
> > + node->type = DRM_RAS_NODE_TYPE_RETIRED_RESOURCES;
> > + node->query_retired_resource = query_retired_resource;
> > + node->query_retired_summary = query_retired_summary;
> > + node->priv = xe;
> > +
> > + ret = drm_ras_node_register(node);
> > + if (ret) {
> > + cleanup_node_param(node);
> > + return ret;
> > + }
> > +
> > + ras->retired_node = node;
> > +
> > + return drmm_add_action_or_reset(&xe->drm, cleanup_node, node);
> > +}
> > +
> > static int register_nodes(struct xe_device *xe)
> > {
> > struct xe_drm_ras *ras = &xe->ras;
> > @@ -279,5 +349,12 @@ int xe_drm_ras_init(struct xe_device *xe)
> > return err;
> > }
> >
> > + err = register_retired_node(xe);
> > + if (err) {
> > + drm_err(&xe->drm, "Failed to register DRM RAS retired node (%pe)\n",
> > + ERR_PTR(err));
> > + return err;
> > + }
> > +
> > return 0;
> > }
> > diff --git a/drivers/gpu/drm/xe/xe_drm_ras_types.h b/drivers/gpu/drm/xe/xe_drm_ras_types.h
> > index 0be218ba2db7..186024640f87 100644
> > --- a/drivers/gpu/drm/xe/xe_drm_ras_types.h
> > +++ b/drivers/gpu/drm/xe/xe_drm_ras_types.h
> > @@ -41,6 +41,9 @@ struct xe_drm_ras {
> > /** @node: DRM RAS node */
> > struct drm_ras_node *node;
> >
> > + /** @retired_node: DRM RAS retired-resources node for VRAM bad pages */
> > + struct drm_ras_node *retired_node;
> > +
> > /** @info: info array for all types of errors */
> > struct xe_drm_ras_counter *info[DRM_XE_RAS_ERR_SEV_MAX];
> >
> > diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> > index 9a514d983e90..b56b543a56a2 100644
> > --- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> > +++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> > @@ -15,6 +15,8 @@
> > #include <drm/ttm/ttm_placement.h>
> > #include <drm/ttm/ttm_range_manager.h>
> >
> > +#include <uapi/drm/drm_ras.h>
> > +
> > #include "regs/xe_regs.h"
> > #include "xe_bo.h"
> > #include "xe_configfs.h"
> > @@ -624,6 +626,123 @@ u64 xe_ttm_vram_get_avail(struct ttm_resource_manager *man)
> > return avail;
> > }
> >
> > +/**
> > + * xe_ttm_vram_get_retired_page - Fetch the next retired VRAM page by address
> > + * @xe: xe device instance
> > + * @min_addr: inclusive lower bound; return the page with the smallest DPA >=
> > + * this value
> > + * @addr: output, device physical address (DPA) of the page
> > + * @size: output, size of the page in bytes
> > + * @status: output, retirement status (enum drm_ras_retired_resource_status)
> > + *
> > + * Scans the offlined and queued page lists across all tiles and returns the
> > + * entry with the smallest DPA that is >= @min_addr. Because retired pages have
> > + * unique addresses, iterating with @min_addr = previous_addr + 1 walks every
> > + * entry in a stable address order, which is robust against concurrent
> > + * insertion or removal between calls. Intended to back the drm-ras
> > + * retired-resources node enumeration.
> > + *
> > + * Return: 0 on success, -ENOENT when no page has a DPA >= @min_addr.
> > + */
> > +int xe_ttm_vram_get_retired_page(struct xe_device *xe, u64 min_addr,
> > + u64 *addr, u64 *size, u32 *status)
> > +{
> > + struct xe_ttm_vram_offline_resource *pos;
> > + struct ttm_resource_manager *man;
> > + struct gpu_buddy_block *block;
> > + struct xe_ttm_vram_mgr *mgr;
> > + u64 best_addr = 0, best_size = 0;
> > + struct xe_tile *tile;
> > + u32 best_status = 0;
> > + bool found = false;
> > + u8 id;
> > +
> > + for_each_tile(tile, xe, id) {
> > + struct xe_vram_region *vr = tile->mem.vram;
> > + u64 a, s;
> > +
> > + man = ttm_manager_type(&xe->ttm, XE_PL_VRAM0 + id);
> > + if (!man || !vr)
> > + continue;
> > + mgr = to_xe_ttm_vram_mgr(man);
> > +
> > + rcu_read_lock();
> > +
> > + list_for_each_entry_rcu(pos, &mgr->offlined_pages, offlined_link) {
> > + block = list_first_entry_or_null(&pos->blocks,
> > + struct gpu_buddy_block, link);
> > + if (block) {
> > + a = gpu_buddy_block_offset(block) + vr->dpa_base;
> > + s = gpu_buddy_block_size(&mgr->mm, block);
> > + } else {
> > + a = pos->addr + vr->dpa_base;
> > + s = SZ_4K;
> > + }
> > +
> > + if (a >= min_addr && (!found || a < best_addr)) {
> > + best_addr = a;
> > + best_size = s;
> > + best_status = DRM_RAS_RETIRED_RESOURCE_STATUS_RETIRED;
> > + found = true;
> > + }
> > + }
> > +
> > + list_for_each_entry_rcu(pos, &mgr->queued_pages, queued_link) {
> > + block = list_first_entry_or_null(&pos->blocks,
> > + struct gpu_buddy_block, link);
> > + if (block) {
> > + a = gpu_buddy_block_offset(block) + vr->dpa_base;
> > + s = gpu_buddy_block_size(&mgr->mm, block);
> > + } else {
> > + a = pos->addr + vr->dpa_base;
> > + s = SZ_4K;
> > + }
> > +
> > + if (a >= min_addr && (!found || a < best_addr)) {
> > + best_addr = a;
> > + best_size = s;
> > + best_status = pos->status == XE_PAGE_RESERVE_FAIL ?
> > + DRM_RAS_RETIRED_RESOURCE_STATUS_FAILED :
> > + DRM_RAS_RETIRED_RESOURCE_STATUS_PENDING;
> > + found = true;
> > + }
> > + }
> > +
> > + rcu_read_unlock();
> > + }
> > +
> > + if (!found)
> > + return -ENOENT;
> > +
> > + *addr = best_addr;
> > + *size = best_size;
> > + *status = best_status;
> > +
> > + return 0;
> > +}
> > +
> > +/**
> > + * xe_ttm_vram_get_max_bad_pages - Fetch the FW-provided max offline page count
> > + * @xe: xe device instance
> > + *
> > + * Returns the static maximum number of VRAM pages that can be offlined, as
> > + * provided by FW at init. Intended to back the drm-ras retired-resources
> > + * capacity summary. Read from the root (VRAM0) manager; the value is a static
> > + * device-wide count.
> > + *
> > + * Return: max offline page count, or 0 if VRAM is not present.
> > + */
> > +u32 xe_ttm_vram_get_max_bad_pages(struct xe_device *xe)
> > +{
> > + struct ttm_resource_manager *man;
> > +
> > + man = ttm_manager_type(&xe->ttm, XE_PL_VRAM0);
> > + if (!man)
> > + return 0;
> > +
> > + return to_xe_ttm_vram_mgr(man)->max_pages;
> > +}
> > +
> > static int xe_ttm_vram_purge_page(struct xe_device *xe, struct xe_bo *bo)
> > {
> > u32 q_flag = DRM_XE_EXEC_QUEUE_BAN_REASON_PAGE_OFFLINE;
> > diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
> > index d77f067d197b..70fae023d6a3 100644
> > --- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
> > +++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
> > @@ -33,6 +33,9 @@ void xe_ttm_vram_get_used(struct ttm_resource_manager *man,
> > u64 *used, u64 *used_visible);
> > int xe_ttm_vram_handle_addr_fault(struct xe_device *xe, u64 addr);
> > int xe_ttm_vram_inject_fault(struct xe_device *xe);
> > +int xe_ttm_vram_get_retired_page(struct xe_device *xe, u64 min_addr,
> > + u64 *addr, u64 *size, u32 *status);
> > +u32 xe_ttm_vram_get_max_bad_pages(struct xe_device *xe);
> >
> > static inline struct xe_ttm_vram_mgr_resource *
> > to_xe_ttm_vram_mgr_resource(struct ttm_resource *res)
> > diff --git a/include/drm/drm_ras.h b/include/drm/drm_ras.h
> > index 1765a3130b09..38953f8f3012 100644
> > --- a/include/drm/drm_ras.h
> > +++ b/include/drm/drm_ras.h
> > @@ -10,6 +10,42 @@
> >
> > #include <uapi/drm/drm_ras.h>
> >
> > +/**
> > + * struct drm_ras_retired_resource - A single retired resource entry
> > + *
> > + * Describes one hardware resource that has been taken out of service and is
> > + * reported by a %DRM_RAS_NODE_TYPE_RETIRED_RESOURCES node. @type selects which
> > + * member of the anonymous union is valid, allowing new hardware resource types
> > + * to be added without changing the common fields. When @is_summary is set the
> > + * entry is a leading, type-specific capacity summary (e.g. max retirable
> > + * pages) rather than an individual retired resource.
> > + */
> > +struct drm_ras_retired_resource {
> > + /** @type: Resource type (enum drm_ras_retired_resource_type). */
> > + __u32 type;
> > + /** @status: Retirement status (enum drm_ras_retired_resource_status). */
> > + __u32 status;
> > + /**
> > + * @key: Opaque, driver-assigned ordering key for this entry. drm-ras
> > + * uses it only to advance the dump cursor; entries must be enumerable
> > + * in strictly increasing @key order and keys must be unique.
> > + */
> > + __u64 key;
> > + /** @is_summary: entry reports type capacity, not a retired resource. */
> > + __u8 is_summary;
> > + union {
> > + /** @vram_page: Valid when @type is VRAM_PAGE. */
> > + struct {
> > + /** @vram_page.address: Device address (e.g. DPA). */
> > + __u64 address;
> > + /** @vram_page.size: Size in bytes. */
> > + __u64 size;
> > + /** @vram_page.max_pages: max retirable pages; summary only. */
> > + __u32 max_pages;
> > + } vram_page;
> > + };
> > +};
> > +
> > /**
> > * struct drm_ras_node - A DRM RAS Node
> > */
> > @@ -100,6 +136,44 @@ struct drm_ras_node {
> > */
> > int (*set_error_threshold)(struct drm_ras_node *node, u32 error_id, u32 threshold);
> >
> > + /**
> > + * @query_retired_resource:
> > + *
> > + * This callback is used by drm-ras to enumerate retired resources of a
> > + * %DRM_RAS_NODE_TYPE_RETIRED_RESOURCES node. It is called with @cursor
> > + * and must return the next entry whose ordering key is greater than or
> > + * equal to @cursor, setting @res->key to that entry's key. drm-ras
> > + * resumes multi-part dumps from the returned key, so enumeration stays
> > + * correct across concurrent insertion or removal.
> > + *
> > + * The @query_retired_resource is a mandatory callback for
> > + * retired-resources nodes.
> > + *
> > + * Returns: 0 on success,
> > + * -ENOENT when no entry has a key >= @cursor, used as an
> > + * indication that enumeration is complete.
> > + * Other negative values on errors that should terminate the
> > + * netlink query.
> > + */
> > + int (*query_retired_resource)(struct drm_ras_node *node, u64 cursor,
> > + struct drm_ras_retired_resource *res);
> > +
> > + /**
> > + * @query_retired_summary:
> > + *
> > + * This optional callback fills a leading, type-specific capacity summary
> > + * for a %DRM_RAS_NODE_TYPE_RETIRED_RESOURCES node (e.g. the maximum
> > + * number of retirable pages). drm-ras emits it as the first entry of the
> > + * retired-resources dump. The driver must set @res->is_summary, @res->type
> > + * and the type-specific summary fields (e.g. vram_page.max_pages).
> > + *
> > + * Returns: 0 on success,
> > + * -ENOENT if the node has no summary to report,
> > + * other negative values on errors that terminate the query.
> > + */
> > + int (*query_retired_summary)(struct drm_ras_node *node,
> > + struct drm_ras_retired_resource *res);
> > +
> > /** @priv: Driver private data */
> > void *priv;
> > };
> > diff --git a/include/uapi/drm/drm_ras.h b/include/uapi/drm/drm_ras.h
> > index 2f832275ee6e..64a7a7feb610 100644
> > --- a/include/uapi/drm/drm_ras.h
> > +++ b/include/uapi/drm/drm_ras.h
> > @@ -11,11 +11,35 @@
> > #define DRM_RAS_FAMILY_VERSION 1
> >
> > /*
> > - * Type of the node. Currently, only error-counter nodes are supported, which
> > - * expose reliability counters for a hardware/software component.
> > + * Type of the node. error-counter nodes expose reliability counters for a
> > + * hardware/software component. retired-resources nodes enumerate hardware
> > + * resources (e.g. VRAM pages) that have been permanently taken out of service.
> > */
> > enum drm_ras_node_type {
> > DRM_RAS_NODE_TYPE_ERROR_COUNTER = 1,
> > + DRM_RAS_NODE_TYPE_RETIRED_RESOURCES,
> > +};
> > +
> > +/*
> > + * Status of a retired resource entry. retired means the resource is
> > + * permanently reserved and out of service; pending means retirement is queued
> > + * but the reservation is not yet complete; failed means the reservation failed
> > + * and the resource may still be in use.
> > + */
> > +enum drm_ras_retired_resource_status {
> > + DRM_RAS_RETIRED_RESOURCE_STATUS_RETIRED,
> > + DRM_RAS_RETIRED_RESOURCE_STATUS_PENDING,
> > + DRM_RAS_RETIRED_RESOURCE_STATUS_FAILED,
> > +};
> > +
> > +/*
> > + * Type of a retired resource entry. The type selects which type-specific
> > + * nested attribute is present. New hardware resource types can be added here,
> > + * each carrying its own nested attribute set, without affecting existing
> > + * types. vram-page describes a VRAM page by device address and size.
> > + */
> > +enum drm_ras_retired_resource_type {
> > + DRM_RAS_RETIRED_RESOURCE_TYPE_VRAM_PAGE = 1,
> > };
> >
> > enum {
> > @@ -51,6 +75,25 @@ enum {
> > DRM_RAS_A_ERROR_EVENT_ATTRS_MAX = (__DRM_RAS_A_ERROR_EVENT_ATTRS_MAX - 1)
> > };
> >
> > +enum {
> > + DRM_RAS_A_RETIRED_RESOURCE_ATTRS_NODE_ID = 1,
> > + DRM_RAS_A_RETIRED_RESOURCE_ATTRS_VRAM_PAGE,
> > +
> > + __DRM_RAS_A_RETIRED_RESOURCE_ATTRS_MAX,
> > + DRM_RAS_A_RETIRED_RESOURCE_ATTRS_MAX = (__DRM_RAS_A_RETIRED_RESOURCE_ATTRS_MAX - 1)
> > +};
> > +
> > +enum {
> > + DRM_RAS_A_VRAM_PAGE_ATTRS_ADDRESS = 1,
> > + DRM_RAS_A_VRAM_PAGE_ATTRS_SIZE,
> > + DRM_RAS_A_VRAM_PAGE_ATTRS_MAX_PAGES,
> > + DRM_RAS_A_VRAM_PAGE_ATTRS_STATUS,
> > + DRM_RAS_A_VRAM_PAGE_ATTRS_PAD,
> > +
> > + __DRM_RAS_A_VRAM_PAGE_ATTRS_MAX,
> > + DRM_RAS_A_VRAM_PAGE_ATTRS_MAX = (__DRM_RAS_A_VRAM_PAGE_ATTRS_MAX - 1)
> > +};
> > +
> > enum {
> > DRM_RAS_CMD_LIST_NODES = 1,
> > DRM_RAS_CMD_GET_ERROR_COUNTER,
> > @@ -58,6 +101,7 @@ enum {
> > DRM_RAS_CMD_ERROR_EVENT,
> > DRM_RAS_CMD_GET_ERROR_THRESHOLD,
> > DRM_RAS_CMD_SET_ERROR_THRESHOLD,
> > + DRM_RAS_CMD_GET_RETIRED_RESOURCES,
> >
> > __DRM_RAS_CMD_MAX,
> > DRM_RAS_CMD_MAX = (__DRM_RAS_CMD_MAX - 1)
>
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2026-10-07 13:55 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-07 8:03 [PATCH v2 0/2] drm/xe: Expose retired VRAM pages via drm-ras Aravind Iddamsetty
2026-10-07 8:03 ` [PATCH v2 1/2] " Aravind Iddamsetty
2026-10-07 9:28 ` Christian König
2026-10-07 13:55 ` Rodrigo Vivi
2026-10-07 8:03 ` [PATCH v2 2/2] drm/xe: Remove bad VRAM pages debugfs interface Aravind Iddamsetty
2026-10-07 8:38 ` ✗ CI.checkpatch: warning for drm/xe: Expose retired VRAM pages via drm-ras (rev2) Patchwork
2026-10-07 8:40 ` ✓ CI.KUnit: success " Patchwork
2026-10-07 9:27 ` ✓ Xe.CI.BAT: " Patchwork
2026-10-07 10:42 ` ✓ Xe.CI.FULL: " Patchwork
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox