* [PATCH v4 1/5] drm/ras: Cancel and free message on get counter failure
2026-06-23 10:09 [PATCH v4 0/5] Introduce error threshold to drm_ras Raag Jadav
@ 2026-06-23 10:09 ` Raag Jadav
2026-06-24 10:15 ` sashiko-bot
2026-06-23 10:09 ` [PATCH v4 2/5] drm/ras: Introduce error threshold Raag Jadav
` (7 subsequent siblings)
8 siblings, 1 reply; 14+ messages in thread
From: Raag Jadav @ 2026-06-23 10:09 UTC (permalink / raw)
To: intel-xe, dri-devel, netdev
Cc: simona.vetter, airlied, kuba, lijo.lazar, Hawking.Zhang, davem,
pabeni, edumazet, dev, zachary.mckevitt, rodrigo.vivi,
riana.tauro, michal.wajdeczko, matthew.d.roper, mallesh.koujalagi,
Raag Jadav
doit_reply_value() directly returns on get counter failure, which results
in stale sk_buff and genetlink header that aren't cleaned up. Fix it and
while at it, consolidate error handling using goto.
Fixes: c36218dc49f5 ("drm/ras: Introduce the DRM RAS infrastructure over generic netlink")
Signed-off-by: Raag Jadav <raag.jadav@intel.com>
Reviewed-by: Riana Tauro <riana.tauro@intel.com>
---
v2: Use goto (Riana)
---
drivers/gpu/drm/drm_ras.c | 19 +++++++++++--------
1 file changed, 11 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/drm_ras.c b/drivers/gpu/drm/drm_ras.c
index d6eab29a1394..467a169026fc 100644
--- a/drivers/gpu/drm/drm_ras.c
+++ b/drivers/gpu/drm/drm_ras.c
@@ -201,25 +201,28 @@ static int doit_reply_value(struct genl_info *info, u32 node_id,
hdr = genlmsg_iput(msg, info);
if (!hdr) {
- nlmsg_free(msg);
- return -EMSGSIZE;
+ ret = -EMSGSIZE;
+ goto free_msg;
}
ret = get_node_error_counter(node_id, error_id,
&error_name, &value);
if (ret)
- return ret;
+ goto cancel_msg;
ret = msg_reply_value(msg, error_id, error_name, value);
- if (ret) {
- genlmsg_cancel(msg, hdr);
- nlmsg_free(msg);
- return ret;
- }
+ if (ret)
+ goto cancel_msg;
genlmsg_end(msg, hdr);
return genlmsg_reply(msg, info);
+
+cancel_msg:
+ genlmsg_cancel(msg, hdr);
+free_msg:
+ nlmsg_free(msg);
+ return ret;
}
/**
--
2.43.0
^ permalink raw reply related [flat|nested] 14+ messages in thread* Re: [PATCH v4 1/5] drm/ras: Cancel and free message on get counter failure
2026-06-23 10:09 ` [PATCH v4 1/5] drm/ras: Cancel and free message on get counter failure Raag Jadav
@ 2026-06-24 10:15 ` sashiko-bot
0 siblings, 0 replies; 14+ messages in thread
From: sashiko-bot @ 2026-06-24 10:15 UTC (permalink / raw)
To: Raag Jadav; +Cc: dri-devel
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
Pre-existing issues:
- [Critical] Lockless access to `drm_ras_node` pointers from the global `drm_ras_xa` XArray leads to Use-After-Free and control-flow hijacking during concurrent device teardown.
- [Medium] Missing generation counter and NLM_F_DUMP_INTR flag for lockless Netlink dumps.
--
commit 17d70fc870ba118f3745064732f976f0856f2d46
Author: Raag Jadav <raag.jadav@intel.com>
drm/ras: Cancel and free message on get counter failure
This commit fixes a resource leak in doit_reply_value() where sk_buff
and the genetlink header were not cleaned up on a get counter failure.
It also consolidates the error handling using a goto pattern.
> diff --git a/drivers/gpu/drm/drm_ras.c b/drivers/gpu/drm/drm_ras.c
> index d6eab29a1394c..467a169026fc1 100644
> --- a/drivers/gpu/drm/drm_ras.c
> +++ b/drivers/gpu/drm/drm_ras.c
> @@ -201,25 +201,28 @@ static int doit_reply_value(struct genl_info *info, u32 node_id,
[ ... ]
> ret = get_node_error_counter(node_id, error_id,
> &error_name, &value);
[Severity: Critical]
This is a pre-existing issue, but does lockless access to drm_ras_node
pointers from the global drm_ras_xa XArray lead to a use-after-free
during concurrent device teardown?
The drm_ras netlink operations use .parallel_ops = true, meaning handlers
like get_node_error_counter() run concurrently without holding the global
genl_lock().
When retrieving a drm_ras_node pointer via xa_load(), the XArray API drops
the RCU read lock immediately after the lookup, returning a raw, unprotected
pointer:
drivers/gpu/drm/drm_ras.c:get_node_error_counter() {
node = xa_load(&drm_ras_xa, node_id);
if (!node || !node->query_error_counter)
return -ENOENT;
...
return node->query_error_counter(node, error_id, name, value);
}
Concurrently, a driver can unregister its nodes during teardown, which removes
the node from the XArray and synchronously frees the node memory via DRM's
managed cleanup.
Could the netlink handler then dereference this freed pointer, calling function
pointers read from freed memory?
This same pattern appears in drm_ras_nl_list_nodes_dumpit() and
get_node_error_threshold().
[Severity: Medium]
This is also a pre-existing issue, but are we missing a generation counter and
NLM_F_DUMP_INTR flag for lockless Netlink dumps?
The Generic Netlink UAPI rules dictate: "If iteration during a dump may skip or
repeat objects (e.g. due to lockless data structures), set NLM_F_DUMP_INTR on
the affected message(s)."
drm_ras_nl_list_nodes_dumpit() and drm_ras_nl_get_error_counter_dumpit()
iterate over the lockless drm_ras_xa XArray across potentially multiple netlink
continuations:
drivers/gpu/drm/drm_ras.c:drm_ras_nl_list_nodes_dumpit() {
xa_for_each_start(&drm_ras_xa, id, node, ctx->restart) {
...
}
}
Because drm_ras_xa can be modified concurrently by node registration or
unregistration, a multipart dump might skip newly registered elements. Should
the implementation maintain a generation counter or set NLM_F_DUMP_INTR on the
netlink message to inform userspace of the sequence change?
> if (ret)
> - return ret;
> + goto cancel_msg;
>
> ret = msg_reply_value(msg, error_id, error_name, value);
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260623101043.255897-1-raag.jadav@intel.com?part=1
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v4 2/5] drm/ras: Introduce error threshold
2026-06-23 10:09 [PATCH v4 0/5] Introduce error threshold to drm_ras Raag Jadav
2026-06-23 10:09 ` [PATCH v4 1/5] drm/ras: Cancel and free message on get counter failure Raag Jadav
@ 2026-06-23 10:09 ` Raag Jadav
2026-06-24 10:15 ` sashiko-bot
2026-06-23 10:09 ` [PATCH v4 3/5] drm/xe/ras: Add support for " Raag Jadav
` (6 subsequent siblings)
8 siblings, 1 reply; 14+ messages in thread
From: Raag Jadav @ 2026-06-23 10:09 UTC (permalink / raw)
To: intel-xe, dri-devel, netdev
Cc: simona.vetter, airlied, kuba, lijo.lazar, Hawking.Zhang, davem,
pabeni, edumazet, dev, zachary.mckevitt, rodrigo.vivi,
riana.tauro, michal.wajdeczko, matthew.d.roper, mallesh.koujalagi,
Raag Jadav
Add get-error-threshold and set-error-threshold command support which
allows querying/setting error threshold of the counter. Threshold in RAS
context means the number of errors the hardware is expected to accumulate
before it raises them to software. This is to have a fine grained control
over error notifications that are raised by the hardware.
Signed-off-by: Raag Jadav <raag.jadav@intel.com>
---
v2: Document threshold definition (Riana)
Return -EOPNOTSUPP on threshold callbacks absence (Riana)
Cancel and free genlmsg on failure (Riana)
Document threshold bounds checking responsibility (Riana)
v3: Move documentation from yaml to rst file (Riana)
s/value/threshold (Riana)
Use goto for error handling (Riana)
v4: Clarify 0 threshold expectations (Riana)
Drop redundant wrapping (Riana)
---
Documentation/gpu/drm-ras.rst | 18 +++
Documentation/netlink/specs/drm_ras.yaml | 32 +++++
drivers/gpu/drm/drm_ras.c | 161 +++++++++++++++++++++++
drivers/gpu/drm/drm_ras_nl.c | 27 ++++
drivers/gpu/drm/drm_ras_nl.h | 4 +
include/drm/drm_ras.h | 28 ++++
include/uapi/drm/drm_ras.h | 3 +
7 files changed, 273 insertions(+)
diff --git a/Documentation/gpu/drm-ras.rst b/Documentation/gpu/drm-ras.rst
index 83c21853b74b..2718f8aee09d 100644
--- a/Documentation/gpu/drm-ras.rst
+++ b/Documentation/gpu/drm-ras.rst
@@ -56,6 +56,10 @@ User space tools can:
``node-id`` and ``error-id`` as parameters.
* Clear specific error counters with the ``clear-error-counter`` command, using both
``node-id`` and ``error-id`` as parameters.
+* Query specific error counter threshold with the ``get-error-threshold`` command, using both
+ ``node-id`` and ``error-id`` as parameters.
+* Set specific error counter threshold with the ``set-error-threshold`` command, using
+ ``node-id``, ``error-id`` and ``error-threshold`` as parameters.
YAML-based Interface
--------------------
@@ -111,3 +115,17 @@ Example: Clear an error counter for a given node
sudo ynl --family drm_ras --do clear-error-counter --json '{"node-id":0, "error-id":1}'
None
+
+Example: Query error threshold of a given counter
+
+.. code-block:: bash
+
+ sudo ynl --family drm_ras --do get-error-threshold --json '{"node-id":0, "error-id":1}'
+ {'error-id': 1, 'error-name': 'error_name1', 'error-threshold': 16}
+
+Example: Set error threshold of a given counter
+
+.. code-block:: bash
+
+ sudo ynl --family drm_ras --do set-error-threshold --json '{"node-id":0, "error-id":1, "error-threshold":8}'
+ None
diff --git a/Documentation/netlink/specs/drm_ras.yaml b/Documentation/netlink/specs/drm_ras.yaml
index e113056f8c01..9cf7f9cde242 100644
--- a/Documentation/netlink/specs/drm_ras.yaml
+++ b/Documentation/netlink/specs/drm_ras.yaml
@@ -69,6 +69,10 @@ attribute-sets:
name: error-value
type: u32
doc: Current value of the requested error counter.
+ -
+ name: error-threshold
+ type: u32
+ doc: Error threshold of the counter.
operations:
list:
@@ -124,3 +128,31 @@ operations:
do:
request:
attributes: *id-attrs
+ -
+ name: get-error-threshold
+ doc: >-
+ Retrieve error threshold of a given counter.
+ The response includes the id, the name, and current threshold
+ of the counter.
+ attribute-set: error-counter-attrs
+ flags: [admin-perm]
+ do:
+ request:
+ attributes: *id-attrs
+ reply:
+ attributes:
+ - error-id
+ - error-name
+ - error-threshold
+ -
+ name: set-error-threshold
+ doc: >-
+ Set error threshold of a given counter.
+ attribute-set: error-counter-attrs
+ flags: [admin-perm]
+ do:
+ request:
+ attributes:
+ - node-id
+ - error-id
+ - error-threshold
diff --git a/drivers/gpu/drm/drm_ras.c b/drivers/gpu/drm/drm_ras.c
index 467a169026fc..d60c40ac5427 100644
--- a/drivers/gpu/drm/drm_ras.c
+++ b/drivers/gpu/drm/drm_ras.c
@@ -41,6 +41,13 @@
* Userspace must provide Node ID, Error ID.
* Clears specific error counter of a node if supported.
*
+ * 4. GET_ERROR_THRESHOLD: Query error threshold of a given counter.
+ * Userspace must provide Node ID and Error ID.
+ * Returns the error threshold of a specific counter.
+ *
+ * 5. SET_ERROR_THRESHOLD: Set error threshold of a given counter.
+ * Userspace must provide Node ID, Error ID and threshold to be set.
+ *
* Node registration:
*
* - drm_ras_node_register(): Registers a new node and assigns
@@ -61,6 +68,16 @@
* + The error counters in the driver doesn't need to be contiguous, but the
* driver must return -ENOENT to the query_error_counter as an indication
* that the ID should be skipped and not listed in the netlink API.
+ * + The driver can optionally implement query_error_threshold() and
+ * set_error_threshold() callbacks to facilitate getting/setting error
+ * threshold of the counter. Threshold in RAS context means the number of
+ * errors the hardware is expected to accumulate before it raises them to
+ * software. This is to have a fine grained control over error notifications
+ * that are raised by the hardware.
+ * + The driver is responsible for error threshold bounds checking.
+ * + Threshold of 0 can mean invalid threshold or act as a disable notifications
+ * toggle for that counter depending on usecase and the driver is responsible
+ * for handling it as needed.
*
* Netlink handlers:
*
@@ -72,6 +89,10 @@
* operation, fetching a counter value from a specific node.
* - drm_ras_nl_clear_error_counter_doit(): Implements the CLEAR_ERROR_COUNTER doit
* operation, clearing a counter value from a specific node.
+ * - drm_ras_nl_get_error_threshold_doit(): Implements the GET_ERROR_THRESHOLD doit
+ * 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.
*/
static DEFINE_XARRAY_ALLOC(drm_ras_xa);
@@ -168,6 +189,40 @@ static int get_node_error_counter(u32 node_id, u32 error_id,
return node->query_error_counter(node, error_id, name, value);
}
+static int get_node_error_threshold(u32 node_id, u32 error_id, const char **name, u32 *threshold)
+{
+ struct drm_ras_node *node;
+
+ node = xa_load(&drm_ras_xa, node_id);
+ if (!node)
+ return -ENOENT;
+
+ if (!node->query_error_threshold)
+ return -EOPNOTSUPP;
+
+ if (error_id < node->error_counter_range.first || error_id > node->error_counter_range.last)
+ return -EINVAL;
+
+ return node->query_error_threshold(node, error_id, name, threshold);
+}
+
+static int set_node_error_threshold(u32 node_id, u32 error_id, u32 threshold)
+{
+ struct drm_ras_node *node;
+
+ node = xa_load(&drm_ras_xa, node_id);
+ if (!node)
+ return -ENOENT;
+
+ if (!node->set_error_threshold)
+ return -EOPNOTSUPP;
+
+ if (error_id < node->error_counter_range.first || error_id > node->error_counter_range.last)
+ return -EINVAL;
+
+ return node->set_error_threshold(node, error_id, threshold);
+}
+
static int msg_reply_value(struct sk_buff *msg, u32 error_id,
const char *error_name, u32 value)
{
@@ -186,6 +241,22 @@ static int msg_reply_value(struct sk_buff *msg, u32 error_id,
value);
}
+static int msg_reply_threshold(struct sk_buff *msg, u32 error_id, const char *error_name,
+ u32 threshold)
+{
+ int ret;
+
+ ret = nla_put_u32(msg, DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID, error_id);
+ if (ret)
+ return ret;
+
+ ret = nla_put_string(msg, DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_NAME, error_name);
+ if (ret)
+ return ret;
+
+ return nla_put_u32(msg, DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_THRESHOLD, threshold);
+}
+
static int doit_reply_value(struct genl_info *info, u32 node_id,
u32 error_id)
{
@@ -225,6 +296,43 @@ static int doit_reply_value(struct genl_info *info, u32 node_id,
return ret;
}
+static int doit_reply_threshold(struct genl_info *info, u32 node_id, u32 error_id)
+{
+ const char *error_name;
+ struct sk_buff *msg;
+ struct nlattr *hdr;
+ u32 threshold;
+ int ret;
+
+ msg = genlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
+ if (!msg)
+ return -ENOMEM;
+
+ hdr = genlmsg_iput(msg, info);
+ if (!hdr) {
+ ret = -EMSGSIZE;
+ goto free_msg;
+ }
+
+ ret = get_node_error_threshold(node_id, error_id, &error_name, &threshold);
+ if (ret)
+ goto cancel_msg;
+
+ ret = msg_reply_threshold(msg, error_id, error_name, threshold);
+ if (ret)
+ goto cancel_msg;
+
+ genlmsg_end(msg, hdr);
+
+ return genlmsg_reply(msg, info);
+
+cancel_msg:
+ genlmsg_cancel(msg, hdr);
+free_msg:
+ nlmsg_free(msg);
+ return ret;
+}
+
/**
* drm_ras_nl_get_error_counter_dumpit() - Dump all Error Counters
* @skb: Netlink message buffer
@@ -358,6 +466,59 @@ int drm_ras_nl_clear_error_counter_doit(struct sk_buff *skb,
return node->clear_error_counter(node, error_id);
}
+/**
+ * drm_ras_nl_get_error_threshold_doit() - Query error threshold of a counter
+ * @skb: Netlink message buffer
+ * @info: Generic Netlink info containing attributes of the request
+ *
+ * Extracts the Node ID and Error ID from the netlink attributes and retrieves
+ * the error threshold of the corresponding counter. Sends the result back to
+ * the requesting user via the standard Genl reply.
+ *
+ * Return: 0 on success, or negative errno on failure.
+ */
+int drm_ras_nl_get_error_threshold_doit(struct sk_buff *skb, struct genl_info *info)
+{
+ u32 node_id, error_id;
+
+ if (!info->attrs ||
+ GENL_REQ_ATTR_CHECK(info, DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID) ||
+ GENL_REQ_ATTR_CHECK(info, DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID))
+ return -EINVAL;
+
+ node_id = nla_get_u32(info->attrs[DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID]);
+ error_id = nla_get_u32(info->attrs[DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID]);
+
+ return doit_reply_threshold(info, node_id, error_id);
+}
+
+/**
+ * drm_ras_nl_set_error_threshold_doit() - Set error threshold of a counter
+ * @skb: Netlink message buffer
+ * @info: Generic Netlink info containing attributes of the request
+ *
+ * Extracts the Node ID, Error ID and threshold from the netlink attributes and
+ * sets the error threshold of the corresponding counter.
+ *
+ * Return: 0 on success, or negative errno on failure.
+ */
+int drm_ras_nl_set_error_threshold_doit(struct sk_buff *skb, struct genl_info *info)
+{
+ u32 node_id, error_id, threshold;
+
+ if (!info->attrs ||
+ GENL_REQ_ATTR_CHECK(info, DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID) ||
+ GENL_REQ_ATTR_CHECK(info, DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID) ||
+ GENL_REQ_ATTR_CHECK(info, DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_THRESHOLD))
+ return -EINVAL;
+
+ node_id = nla_get_u32(info->attrs[DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID]);
+ error_id = nla_get_u32(info->attrs[DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID]);
+ threshold = nla_get_u32(info->attrs[DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_THRESHOLD]);
+
+ return set_node_error_threshold(node_id, error_id, threshold);
+}
+
/**
* drm_ras_node_register() - Register a new RAS node
* @node: Node structure to register
diff --git a/drivers/gpu/drm/drm_ras_nl.c b/drivers/gpu/drm/drm_ras_nl.c
index dea1c1b2494e..02e8e5054d05 100644
--- a/drivers/gpu/drm/drm_ras_nl.c
+++ b/drivers/gpu/drm/drm_ras_nl.c
@@ -28,6 +28,19 @@ static const struct nla_policy drm_ras_clear_error_counter_nl_policy[DRM_RAS_A_E
[DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID] = { .type = NLA_U32, },
};
+/* DRM_RAS_CMD_GET_ERROR_THRESHOLD - do */
+static const struct nla_policy drm_ras_get_error_threshold_nl_policy[DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID + 1] = {
+ [DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID] = { .type = NLA_U32, },
+ [DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID] = { .type = NLA_U32, },
+};
+
+/* DRM_RAS_CMD_SET_ERROR_THRESHOLD - do */
+static const struct nla_policy drm_ras_set_error_threshold_nl_policy[DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_THRESHOLD + 1] = {
+ [DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID] = { .type = NLA_U32, },
+ [DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID] = { .type = NLA_U32, },
+ [DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_THRESHOLD] = { .type = NLA_U32, },
+};
+
/* Ops table for drm_ras */
static const struct genl_split_ops drm_ras_nl_ops[] = {
{
@@ -56,6 +69,20 @@ static const struct genl_split_ops drm_ras_nl_ops[] = {
.maxattr = DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID,
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
},
+ {
+ .cmd = DRM_RAS_CMD_GET_ERROR_THRESHOLD,
+ .doit = drm_ras_nl_get_error_threshold_doit,
+ .policy = drm_ras_get_error_threshold_nl_policy,
+ .maxattr = DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID,
+ .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
+ },
+ {
+ .cmd = DRM_RAS_CMD_SET_ERROR_THRESHOLD,
+ .doit = drm_ras_nl_set_error_threshold_doit,
+ .policy = drm_ras_set_error_threshold_nl_policy,
+ .maxattr = DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_THRESHOLD,
+ .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DO,
+ },
};
struct genl_family drm_ras_nl_family __ro_after_init = {
diff --git a/drivers/gpu/drm/drm_ras_nl.h b/drivers/gpu/drm/drm_ras_nl.h
index a398643572a5..57b1e647d833 100644
--- a/drivers/gpu/drm/drm_ras_nl.h
+++ b/drivers/gpu/drm/drm_ras_nl.h
@@ -20,6 +20,10 @@ int drm_ras_nl_get_error_counter_dumpit(struct sk_buff *skb,
struct netlink_callback *cb);
int drm_ras_nl_clear_error_counter_doit(struct sk_buff *skb,
struct genl_info *info);
+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);
extern struct genl_family drm_ras_nl_family;
diff --git a/include/drm/drm_ras.h b/include/drm/drm_ras.h
index f2a787bc4f64..683a3844f84f 100644
--- a/include/drm/drm_ras.h
+++ b/include/drm/drm_ras.h
@@ -69,6 +69,34 @@ struct drm_ras_node {
*/
int (*clear_error_counter)(struct drm_ras_node *node, u32 error_id);
+ /**
+ * @query_error_threshold:
+ *
+ * This callback is used by drm-ras to query error threshold of a
+ * specific counter.
+ *
+ * Driver should expect query_error_threshold() to be called with
+ * error_id from `error_counter_range.first` to
+ * `error_counter_range.last`.
+ *
+ * Returns: 0 on success, negative error code on failure.
+ */
+ int (*query_error_threshold)(struct drm_ras_node *node, u32 error_id, const char **name,
+ u32 *threshold);
+ /**
+ * @set_error_threshold:
+ *
+ * This callback is used by drm-ras to set error threshold of a specific
+ * counter.
+ *
+ * Driver should expect set_error_threshold() to be called with error_id
+ * from `error_counter_range.first` to `error_counter_range.last`.
+ * Driver is responsible for error threshold bounds checking.
+ *
+ * Returns: 0 on success, negative error code on failure.
+ */
+ int (*set_error_threshold)(struct drm_ras_node *node, u32 error_id, u32 threshold);
+
/** @priv: Driver private data */
void *priv;
};
diff --git a/include/uapi/drm/drm_ras.h b/include/uapi/drm/drm_ras.h
index 218a3ee86805..27c68956495f 100644
--- a/include/uapi/drm/drm_ras.h
+++ b/include/uapi/drm/drm_ras.h
@@ -33,6 +33,7 @@ enum {
DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID,
DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_NAME,
DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_VALUE,
+ DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_THRESHOLD,
__DRM_RAS_A_ERROR_COUNTER_ATTRS_MAX,
DRM_RAS_A_ERROR_COUNTER_ATTRS_MAX = (__DRM_RAS_A_ERROR_COUNTER_ATTRS_MAX - 1)
@@ -42,6 +43,8 @@ enum {
DRM_RAS_CMD_LIST_NODES = 1,
DRM_RAS_CMD_GET_ERROR_COUNTER,
DRM_RAS_CMD_CLEAR_ERROR_COUNTER,
+ DRM_RAS_CMD_GET_ERROR_THRESHOLD,
+ DRM_RAS_CMD_SET_ERROR_THRESHOLD,
__DRM_RAS_CMD_MAX,
DRM_RAS_CMD_MAX = (__DRM_RAS_CMD_MAX - 1)
--
2.43.0
^ permalink raw reply related [flat|nested] 14+ messages in thread* Re: [PATCH v4 2/5] drm/ras: Introduce error threshold
2026-06-23 10:09 ` [PATCH v4 2/5] drm/ras: Introduce error threshold Raag Jadav
@ 2026-06-24 10:15 ` sashiko-bot
0 siblings, 0 replies; 14+ messages in thread
From: sashiko-bot @ 2026-06-24 10:15 UTC (permalink / raw)
To: Raag Jadav; +Cc: dri-devel
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
New issues:
- [Medium] The `set-error-threshold` operation modifies state but only replies with a generic ACK instead of returning the finalized object state, violating Netlink uAPI guidelines.
Pre-existing issues:
- [Critical] Lockless lookup and dereference of `drm_ras_node` via `xa_load()` leads to a Use-After-Free if the node is concurrently unregistered.
--
commit 90a4ea5c0139594375be477d76556dae20fa84e0
Author: Raag Jadav <raag.jadav@intel.com>
Subject: drm/ras: Introduce error threshold
Add get-error-threshold and set-error-threshold command support which
allows querying/setting error threshold of the counter. Threshold in RAS
context means the number of errors the hardware is expected to accumulate
before it raises them to software.
> diff --git a/Documentation/netlink/specs/drm_ras.yaml b/Documentation/netlink/specs/drm_ras.yaml
> index e113056f8c016..9cf7f9cde2425 100644
> --- a/Documentation/netlink/specs/drm_ras.yaml
> +++ b/Documentation/netlink/specs/drm_ras.yaml
> @@ -124,3 +128,31 @@ operations:
[ ... ]
> + -
> + name: set-error-threshold
> + doc: >-
> + Set error threshold of a given counter.
> + attribute-set: error-counter-attrs
> + flags: [admin-perm]
> + do:
> + request:
> + attributes:
> + - node-id
> + - error-id
> + - error-threshold
[Severity: Medium]
Does this operation need a reply block to return the finalized threshold?
According to the Generic Netlink subsystem uAPI guidelines, operations that
modify state must reply with a full message carrying identifying information
about the object.
If the driver applies bounds checking and clamps or rounds the threshold,
user space won't know the actual applied value since the command only
returns a generic ACK. Is it possible to include a reply block here?
> diff --git a/drivers/gpu/drm/drm_ras.c b/drivers/gpu/drm/drm_ras.c
> index 467a169026fc1..d60c40ac5427a 100644
> --- a/drivers/gpu/drm/drm_ras.c
> +++ b/drivers/gpu/drm/drm_ras.c
> @@ -168,6 +189,40 @@ static int get_node_error_counter(u32 node_id, u32 error_id,
> return node->query_error_counter(node, error_id, name, value);
> }
>
> +static int get_node_error_threshold(u32 node_id, u32 error_id, const char **name, u32 *threshold)
> +{
> + struct drm_ras_node *node;
> +
> + node = xa_load(&drm_ras_xa, node_id);
> + if (!node)
> + return -ENOENT;
> +
> + if (!node->query_error_threshold)
> + return -EOPNOTSUPP;
> +
> + if (error_id < node->error_counter_range.first || error_id > node->error_counter_range.last)
> + return -EINVAL;
> +
> + return node->query_error_threshold(node, error_id, name, threshold);
[Severity: Critical]
This is a pre-existing issue, but is it safe to dereference the node pointer
here without RCU protection or a reference count?
The xa_load() function drops the RCU read lock before returning. If a
concurrent thread unregisters the node and frees it, could this result in a
use-after-free when calling node->query_error_threshold()?
> +}
> +
> +static int set_node_error_threshold(u32 node_id, u32 error_id, u32 threshold)
> +{
> + struct drm_ras_node *node;
> +
> + node = xa_load(&drm_ras_xa, node_id);
> + if (!node)
> + return -ENOENT;
> +
> + if (!node->set_error_threshold)
> + return -EOPNOTSUPP;
> +
> + if (error_id < node->error_counter_range.first || error_id > node->error_counter_range.last)
> + return -EINVAL;
> +
> + return node->set_error_threshold(node, error_id, threshold);
[Severity: Critical]
This is a pre-existing issue, but similarly to get_node_error_threshold(),
the node pointer is retrieved locklessly via xa_load() and immediately
dereferenced.
Could a concurrent unregistration of the device free the node while it is
being accessed here?
> +}
[ ... ]
> @@ -358,6 +466,59 @@ int drm_ras_nl_clear_error_counter_doit(struct sk_buff *skb,
> return node->clear_error_counter(node, error_id);
> }
>
[ ... ]
> +int drm_ras_nl_set_error_threshold_doit(struct sk_buff *skb, struct genl_info *info)
> +{
> + u32 node_id, error_id, threshold;
> +
> + if (!info->attrs ||
> + GENL_REQ_ATTR_CHECK(info, DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID) ||
> + GENL_REQ_ATTR_CHECK(info, DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID) ||
> + GENL_REQ_ATTR_CHECK(info, DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_THRESHOLD))
> + return -EINVAL;
> +
> + node_id = nla_get_u32(info->attrs[DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID]);
> + error_id = nla_get_u32(info->attrs[DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID]);
> + threshold = nla_get_u32(info->attrs[DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_THRESHOLD]);
> +
> + return set_node_error_threshold(node_id, error_id, threshold);
[Severity: Medium]
This operation completes by returning the success code from
set_node_error_threshold(), which results in a generic ACK being sent to
user space.
Should this prepare and send a netlink response message containing the
actual applied threshold instead of relying on the ACK?
> +}
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260623101043.255897-1-raag.jadav@intel.com?part=2
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v4 3/5] drm/xe/ras: Add support for error threshold
2026-06-23 10:09 [PATCH v4 0/5] Introduce error threshold to drm_ras Raag Jadav
2026-06-23 10:09 ` [PATCH v4 1/5] drm/ras: Cancel and free message on get counter failure Raag Jadav
2026-06-23 10:09 ` [PATCH v4 2/5] drm/ras: Introduce error threshold Raag Jadav
@ 2026-06-23 10:09 ` Raag Jadav
2026-06-24 10:15 ` sashiko-bot
2026-06-23 10:09 ` [PATCH v4 4/5] drm/xe/drm_ras: Wire up error threshold callbacks Raag Jadav
` (5 subsequent siblings)
8 siblings, 1 reply; 14+ messages in thread
From: Raag Jadav @ 2026-06-23 10:09 UTC (permalink / raw)
To: intel-xe, dri-devel, netdev
Cc: simona.vetter, airlied, kuba, lijo.lazar, Hawking.Zhang, davem,
pabeni, edumazet, dev, zachary.mckevitt, rodrigo.vivi,
riana.tauro, michal.wajdeczko, matthew.d.roper, mallesh.koujalagi,
Raag Jadav
System controller allows getting/setting per counter threshold for
correctable errors, which it uses to raise error events to the driver.
Get/set it using the respective mailbox command.
Signed-off-by: Raag Jadav <raag.jadav@intel.com>
---
v2: Add RAS operation status codes (Riana)
v3: Reuse status codes and uapi mapping from counter series (Riana)
Access request/response counter using local pointer (Riana)
Mark unused field as reserved (Riana)
v4: Make debug logs consistent (Riana)
Update kdoc (Riana)
---
drivers/gpu/drm/xe/xe_ras.c | 105 ++++++++++++++++++
drivers/gpu/drm/xe/xe_ras.h | 2 +
drivers/gpu/drm/xe/xe_ras_types.h | 51 +++++++++
drivers/gpu/drm/xe/xe_sysctrl_mailbox_types.h | 4 +
4 files changed, 162 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_ras.c b/drivers/gpu/drm/xe/xe_ras.c
index 44f4e1a3455b..afee8202d24e 100644
--- a/drivers/gpu/drm/xe/xe_ras.c
+++ b/drivers/gpu/drm/xe/xe_ras.c
@@ -270,6 +270,111 @@ int xe_ras_clear_counter(struct xe_device *xe, u8 severity, u8 component)
return 0;
}
+/**
+ * xe_ras_get_threshold() - Get error counter threshold
+ * @xe: Xe device instance
+ * @severity: Error severity to be queried (&enum drm_xe_ras_error_severity)
+ * @component: Error component to be queried (&enum drm_xe_ras_error_component)
+ * @threshold: Counter threshold
+ *
+ * This function retrieves the error threshold of a specific counter based on
+ * severity and component.
+ *
+ * Return: 0 on success, negative error code on failure.
+ */
+int xe_ras_get_threshold(struct xe_device *xe, u8 severity, u8 component, u32 *threshold)
+{
+ struct xe_ras_get_threshold_response response = {};
+ struct xe_ras_get_threshold_request request = {};
+ struct xe_sysctrl_mailbox_command command = {};
+ struct xe_ras_error_class *counter;
+ size_t len;
+ int ret;
+
+ counter = &request.counter;
+ counter->common.severity = drm_to_xe_ras_severity(severity);
+ counter->common.component = drm_to_xe_ras_component(component);
+
+ xe_sysctrl_create_command(&command, XE_SYSCTRL_GROUP_GFSP, XE_SYSCTRL_CMD_GET_THRESHOLD,
+ &request, sizeof(request), &response, sizeof(response));
+
+ guard(xe_pm_runtime)(xe);
+ ret = xe_sysctrl_send_command(&xe->sc, &command, &len);
+ if (ret) {
+ xe_err(xe, "sysctrl: failed to get threshold %d\n", ret);
+ return ret;
+ }
+
+ if (len != sizeof(response)) {
+ xe_err(xe, "sysctrl: unexpected get threshold response length %zu (expected %zu)\n",
+ len, sizeof(response));
+ return -EIO;
+ }
+
+ counter = &response.counter;
+ *threshold = response.threshold;
+
+ xe_dbg(xe, "[RAS]: get threshold %u for %s %s\n", *threshold,
+ comp_to_str(counter->common.component), sev_to_str(counter->common.severity));
+ return 0;
+}
+
+/**
+ * xe_ras_set_threshold() - Set error counter threshold
+ * @xe: Xe device instance
+ * @severity: Error severity to be set (&enum drm_xe_ras_error_severity)
+ * @component: Error component to be set (&enum drm_xe_ras_error_component)
+ * @threshold: Counter threshold
+ *
+ * This function sets the error threshold of a specific counter based on
+ * severity and component.
+ *
+ * Return: 0 on success, negative error code on failure.
+ */
+int xe_ras_set_threshold(struct xe_device *xe, u8 severity, u8 component, u32 threshold)
+{
+ struct xe_ras_set_threshold_response response = {};
+ struct xe_ras_set_threshold_request request = {};
+ struct xe_sysctrl_mailbox_command command = {};
+ struct xe_ras_error_class *counter;
+ size_t len;
+ int ret;
+
+ counter = &request.counter;
+ counter->common.severity = drm_to_xe_ras_severity(severity);
+ counter->common.component = drm_to_xe_ras_component(component);
+ request.threshold = threshold;
+
+ xe_sysctrl_create_command(&command, XE_SYSCTRL_GROUP_GFSP, XE_SYSCTRL_CMD_SET_THRESHOLD,
+ &request, sizeof(request), &response, sizeof(response));
+
+ guard(xe_pm_runtime)(xe);
+ ret = xe_sysctrl_send_command(&xe->sc, &command, &len);
+ if (ret) {
+ xe_err(xe, "sysctrl: failed to set threshold %d\n", ret);
+ return ret;
+ }
+
+ if (len != sizeof(response)) {
+ xe_err(xe, "sysctrl: unexpected set threshold response length %zu (expected %zu)\n",
+ len, sizeof(response));
+ return -EIO;
+ }
+
+ ret = ras_status_to_errno(response.status);
+ if (ret) {
+ xe_err(xe, "sysctrl: set threshold command failed with status %#x\n",
+ response.status);
+ return ret;
+ }
+
+ counter = &response.counter;
+
+ xe_dbg(xe, "[RAS]: set threshold %u for %s %s\n", response.threshold,
+ comp_to_str(counter->common.component), sev_to_str(counter->common.severity));
+ return 0;
+}
+
/**
* xe_ras_init - Initialize Xe RAS
* @xe: xe device instance
diff --git a/drivers/gpu/drm/xe/xe_ras.h b/drivers/gpu/drm/xe/xe_ras.h
index ba0b0224df23..1aa43c54b710 100644
--- a/drivers/gpu/drm/xe/xe_ras.h
+++ b/drivers/gpu/drm/xe/xe_ras.h
@@ -15,6 +15,8 @@ void xe_ras_counter_threshold_crossed(struct xe_device *xe,
struct xe_sysctrl_event_response *response);
int xe_ras_get_counter(struct xe_device *xe, u8 severity, u8 component, u32 *value);
int xe_ras_clear_counter(struct xe_device *xe, u8 severity, u8 component);
+int xe_ras_get_threshold(struct xe_device *xe, u8 severity, u8 component, u32 *threshold);
+int xe_ras_set_threshold(struct xe_device *xe, u8 severity, u8 component, u32 threshold);
void xe_ras_init(struct xe_device *xe);
#endif
diff --git a/drivers/gpu/drm/xe/xe_ras_types.h b/drivers/gpu/drm/xe/xe_ras_types.h
index 6688e11f57a8..747b651880cd 100644
--- a/drivers/gpu/drm/xe/xe_ras_types.h
+++ b/drivers/gpu/drm/xe/xe_ras_types.h
@@ -121,4 +121,55 @@ struct xe_ras_clear_counter_response {
/** @reserved1: Reserved for future use */
u32 reserved1[3];
} __packed;
+
+/**
+ * struct xe_ras_get_threshold_request - Request structure for get threshold
+ */
+struct xe_ras_get_threshold_request {
+ /** @counter: Counter to get threshold for */
+ struct xe_ras_error_class counter;
+ /** @reserved: Reserved for future use */
+ u32 reserved;
+} __packed;
+
+/**
+ * struct xe_ras_get_threshold_response - Response structure for get threshold
+ */
+struct xe_ras_get_threshold_response {
+ /** @counter: Counter ID */
+ struct xe_ras_error_class counter;
+ /** @threshold: Current threshold of the counter */
+ u32 threshold;
+ /** @reserved: Reserved for future use */
+ u32 reserved[4];
+} __packed;
+
+/**
+ * struct xe_ras_set_threshold_request - Request structure for set threshold
+ */
+struct xe_ras_set_threshold_request {
+ /** @counter: Counter to set threshold for */
+ struct xe_ras_error_class counter;
+ /** @threshold: Threshold to be set */
+ u32 threshold;
+ /** @reserved: Reserved for future use */
+ u32 reserved;
+} __packed;
+
+/**
+ * struct xe_ras_set_threshold_response - Response structure for set threshold
+ */
+struct xe_ras_set_threshold_response {
+ /** @counter: Counter ID */
+ struct xe_ras_error_class counter;
+ /** @reserved: Reserved */
+ u32 reserved;
+ /** @threshold: Updated threshold */
+ u32 threshold;
+ /** @status: Operation status */
+ u32 status;
+ /** @reserved1: Reserved for future use */
+ u32 reserved1[2];
+} __packed;
+
#endif
diff --git a/drivers/gpu/drm/xe/xe_sysctrl_mailbox_types.h b/drivers/gpu/drm/xe/xe_sysctrl_mailbox_types.h
index 6e3753554510..10f06aa5c4b5 100644
--- a/drivers/gpu/drm/xe/xe_sysctrl_mailbox_types.h
+++ b/drivers/gpu/drm/xe/xe_sysctrl_mailbox_types.h
@@ -24,11 +24,15 @@ enum xe_sysctrl_group {
*
* @XE_SYSCTRL_CMD_GET_COUNTER: Get error counter value
* @XE_SYSCTRL_CMD_CLEAR_COUNTER: Clear error counter value
+ * @XE_SYSCTRL_CMD_GET_THRESHOLD: Retrieve error threshold
+ * @XE_SYSCTRL_CMD_SET_THRESHOLD: Set error threshold
* @XE_SYSCTRL_CMD_GET_PENDING_EVENT: Retrieve pending event
*/
enum xe_sysctrl_gfsp_cmd {
XE_SYSCTRL_CMD_GET_COUNTER = 0x03,
XE_SYSCTRL_CMD_CLEAR_COUNTER = 0x04,
+ XE_SYSCTRL_CMD_GET_THRESHOLD = 0x05,
+ XE_SYSCTRL_CMD_SET_THRESHOLD = 0x06,
XE_SYSCTRL_CMD_GET_PENDING_EVENT = 0x07,
};
--
2.43.0
^ permalink raw reply related [flat|nested] 14+ messages in thread* Re: [PATCH v4 3/5] drm/xe/ras: Add support for error threshold
2026-06-23 10:09 ` [PATCH v4 3/5] drm/xe/ras: Add support for " Raag Jadav
@ 2026-06-24 10:15 ` sashiko-bot
0 siblings, 0 replies; 14+ messages in thread
From: sashiko-bot @ 2026-06-24 10:15 UTC (permalink / raw)
To: Raag Jadav; +Cc: dri-devel
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] The `threshold` and `reserved` fields are incorrectly swapped in `struct xe_ras_set_threshold_response`.
--
commit b88a93d0104e4bd53859ba2c4b041330bc44ceef
Author: Raag Jadav <raag.jadav@intel.com>
drm/xe/ras: Add support for error threshold
System controller allows getting/setting per counter threshold for
correctable errors, which it uses to raise error events to the driver.
Get/set it using the respective mailbox command.
> diff --git a/drivers/gpu/drm/xe/xe_ras_types.h b/drivers/gpu/drm/xe/xe_ras_types.h
> index 6688e11f57a86..747b651880cd5 100644
> --- a/drivers/gpu/drm/xe/xe_ras_types.h
> +++ b/drivers/gpu/drm/xe/xe_ras_types.h
[ ... ]
> +struct xe_ras_get_threshold_response {
> + /** @counter: Counter ID */
> + struct xe_ras_error_class counter;
> + /** @threshold: Current threshold of the counter */
> + u32 threshold;
> + /** @reserved: Reserved for future use */
> + u32 reserved[4];
> +} __packed;
[ ... ]
> +struct xe_ras_set_threshold_request {
> + /** @counter: Counter to set threshold for */
> + struct xe_ras_error_class counter;
> + /** @threshold: Threshold to be set */
> + u32 threshold;
> + /** @reserved: Reserved for future use */
> + u32 reserved;
> +} __packed;
> +
> +/**
> + * struct xe_ras_set_threshold_response - Response structure for set threshold
> + */
> +struct xe_ras_set_threshold_response {
> + /** @counter: Counter ID */
> + struct xe_ras_error_class counter;
> + /** @reserved: Reserved */
> + u32 reserved;
> + /** @threshold: Updated threshold */
> + u32 threshold;
> + /** @status: Operation status */
> + u32 status;
[Severity: Medium]
Are the reserved and threshold fields swapped in this structure compared to
the firmware specification?
In xe_ras_set_threshold_request and xe_ras_get_threshold_response, the
threshold payload immediately follows the counter struct. Placing reserved
before threshold here shifts the threshold and status fields to different
offsets.
If this is a mistake, it could cause ras_status_to_errno() to read the
wrong offset and silently ignore firmware errors when xe_ras_set_threshold()
checks response.status, as well as log an incorrect threshold value.
> + /** @reserved1: Reserved for future use */
> + u32 reserved1[2];
> +} __packed;
> +
> #endif
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260623101043.255897-1-raag.jadav@intel.com?part=3
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v4 4/5] drm/xe/drm_ras: Wire up error threshold callbacks
2026-06-23 10:09 [PATCH v4 0/5] Introduce error threshold to drm_ras Raag Jadav
` (2 preceding siblings ...)
2026-06-23 10:09 ` [PATCH v4 3/5] drm/xe/ras: Add support for " Raag Jadav
@ 2026-06-23 10:09 ` Raag Jadav
2026-06-24 10:15 ` sashiko-bot
2026-06-23 10:09 ` [PATCH v4 5/5] drm/xe/sysctrl: Reuse xe_sysctrl_create_command() Raag Jadav
` (4 subsequent siblings)
8 siblings, 1 reply; 14+ messages in thread
From: Raag Jadav @ 2026-06-23 10:09 UTC (permalink / raw)
To: intel-xe, dri-devel, netdev
Cc: simona.vetter, airlied, kuba, lijo.lazar, Hawking.Zhang, davem,
pabeni, edumazet, dev, zachary.mckevitt, rodrigo.vivi,
riana.tauro, michal.wajdeczko, matthew.d.roper, mallesh.koujalagi,
Raag Jadav
Now that we have get/set error threshold support in xe driver, wire them
up to drm_ras so that userspace can make use of the functionality.
$ sudo ynl --family drm_ras --do get-error-threshold \
--json '{"node-id":0, "error-id":2}'
{'error-id': 2, 'error-name': 'soc-internal', 'error-threshold': 16}
$ sudo ynl --family drm_ras --do set-error-threshold \
--json '{"node-id":0, "error-id":2, "error-threshold":8}'
None
Signed-off-by: Raag Jadav <raag.jadav@intel.com>
Reviewed-by: Riana Tauro <riana.tauro@intel.com>
---
v3: Return -ENOENT on info absence (Riana)
---
drivers/gpu/drm/xe/xe_drm_ras.c | 34 +++++++++++++++++++++++++++++++++
1 file changed, 34 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_drm_ras.c b/drivers/gpu/drm/xe/xe_drm_ras.c
index 7937d8ba0ed9..4afa2ad98300 100644
--- a/drivers/gpu/drm/xe/xe_drm_ras.c
+++ b/drivers/gpu/drm/xe/xe_drm_ras.c
@@ -86,6 +86,38 @@ static int clear_correctable_error_counter(struct drm_ras_node *node, u32 error_
return clear_error_counter(xe, DRM_XE_RAS_ERR_SEV_CORRECTABLE, error_id);
}
+static int query_correctable_error_threshold(struct drm_ras_node *ep, u32 error_id,
+ const char **name, u32 *threshold)
+{
+ struct xe_device *xe = ep->priv;
+ struct xe_drm_ras *ras = &xe->ras;
+ struct xe_drm_ras_counter *info = ras->info[DRM_XE_RAS_ERR_SEV_CORRECTABLE];
+
+ if (!info || !info[error_id].name)
+ return -ENOENT;
+
+ if (!xe->info.has_sysctrl)
+ return -EOPNOTSUPP;
+
+ *name = info[error_id].name;
+ return xe_ras_get_threshold(xe, DRM_XE_RAS_ERR_SEV_CORRECTABLE, error_id, threshold);
+}
+
+static int set_correctable_error_threshold(struct drm_ras_node *ep, u32 error_id, u32 threshold)
+{
+ struct xe_device *xe = ep->priv;
+ struct xe_drm_ras *ras = &xe->ras;
+ struct xe_drm_ras_counter *info = ras->info[DRM_XE_RAS_ERR_SEV_CORRECTABLE];
+
+ if (!info || !info[error_id].name)
+ return -ENOENT;
+
+ if (!xe->info.has_sysctrl)
+ return -EOPNOTSUPP;
+
+ return xe_ras_set_threshold(xe, DRM_XE_RAS_ERR_SEV_CORRECTABLE, error_id, threshold);
+}
+
static struct xe_drm_ras_counter *allocate_and_copy_counters(struct xe_device *xe)
{
struct xe_drm_ras_counter *counter;
@@ -134,6 +166,8 @@ static int assign_node_params(struct xe_device *xe, struct drm_ras_node *node,
if (severity == DRM_XE_RAS_ERR_SEV_CORRECTABLE) {
node->query_error_counter = query_correctable_error_counter;
node->clear_error_counter = clear_correctable_error_counter;
+ node->query_error_threshold = query_correctable_error_threshold;
+ node->set_error_threshold = set_correctable_error_threshold;
} else {
node->query_error_counter = query_uncorrectable_error_counter;
node->clear_error_counter = clear_uncorrectable_error_counter;
--
2.43.0
^ permalink raw reply related [flat|nested] 14+ messages in thread* Re: [PATCH v4 4/5] drm/xe/drm_ras: Wire up error threshold callbacks
2026-06-23 10:09 ` [PATCH v4 4/5] drm/xe/drm_ras: Wire up error threshold callbacks Raag Jadav
@ 2026-06-24 10:15 ` sashiko-bot
0 siblings, 0 replies; 14+ messages in thread
From: sashiko-bot @ 2026-06-24 10:15 UTC (permalink / raw)
To: Raag Jadav; +Cc: dri-devel
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] The set_error_threshold callback implementation does not perform bounds checking on the threshold value.
--
commit fed54e8b69e86b28d2dcdaf8a7fe08701b357d95
Author: Raag Jadav <raag.jadav@intel.com>
drm/xe/drm_ras: Wire up error threshold callbacks
This commit wires up the get and set error threshold callbacks to the
drm_ras infrastructure, allowing userspace to configure these thresholds
via netlink commands.
> diff --git a/drivers/gpu/drm/xe/xe_drm_ras.c b/drivers/gpu/drm/xe/xe_drm_ras.c
> index 7937d8ba0ed9c..4afa2ad98300f 100644
> --- a/drivers/gpu/drm/xe/xe_drm_ras.c
> +++ b/drivers/gpu/drm/xe/xe_drm_ras.c
[ ... ]
> @@ -86,6 +86,38 @@ static int clear_correctable_error_counter(struct drm_ras_node *node, u32 error_
[ ... ]
> +static int set_correctable_error_threshold(struct drm_ras_node *ep, u32 error_id, u32 threshold)
> +{
> + struct xe_device *xe = ep->priv;
> + struct xe_drm_ras *ras = &xe->ras;
> + struct xe_drm_ras_counter *info = ras->info[DRM_XE_RAS_ERR_SEV_CORRECTABLE];
> +
> + if (!info || !info[error_id].name)
> + return -ENOENT;
> +
> + if (!xe->info.has_sysctrl)
> + return -EOPNOTSUPP;
> +
[Severity: Medium]
Does this code need bounds checking for the threshold value before passing it
to the hardware?
The drm_ras API documentation for set_error_threshold specifies that the
driver is responsible for error threshold bounds checking. If a privileged
user provides an extreme value, such as 0, could this result in undefined
hardware behavior or continuous interrupts from the system controller?
> + return xe_ras_set_threshold(xe, DRM_XE_RAS_ERR_SEV_CORRECTABLE, error_id, threshold);
> +}
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260623101043.255897-1-raag.jadav@intel.com?part=4
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v4 5/5] drm/xe/sysctrl: Reuse xe_sysctrl_create_command()
2026-06-23 10:09 [PATCH v4 0/5] Introduce error threshold to drm_ras Raag Jadav
` (3 preceding siblings ...)
2026-06-23 10:09 ` [PATCH v4 4/5] drm/xe/drm_ras: Wire up error threshold callbacks Raag Jadav
@ 2026-06-23 10:09 ` Raag Jadav
2026-06-23 10:56 ` ✗ CI.checkpatch: warning for Introduce error threshold to drm_ras (rev4) Patchwork
` (3 subsequent siblings)
8 siblings, 0 replies; 14+ messages in thread
From: Raag Jadav @ 2026-06-23 10:09 UTC (permalink / raw)
To: intel-xe, dri-devel, netdev
Cc: simona.vetter, airlied, kuba, lijo.lazar, Hawking.Zhang, davem,
pabeni, edumazet, dev, zachary.mckevitt, rodrigo.vivi,
riana.tauro, michal.wajdeczko, matthew.d.roper, mallesh.koujalagi,
Raag Jadav
Now that we have a helper to create sysctrl command, reuse it for
threshold crossed events.
Signed-off-by: Raag Jadav <raag.jadav@intel.com>
---
drivers/gpu/drm/xe/xe_sysctrl_event.c | 28 ++++++++-------------------
1 file changed, 8 insertions(+), 20 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_sysctrl_event.c b/drivers/gpu/drm/xe/xe_sysctrl_event.c
index b4d17329af6c..0547b7b39726 100644
--- a/drivers/gpu/drm/xe/xe_sysctrl_event.c
+++ b/drivers/gpu/drm/xe/xe_sysctrl_event.c
@@ -49,18 +49,6 @@ static void get_pending_event(struct xe_sysctrl *sc, struct xe_sysctrl_mailbox_c
} while (response->count);
}
-static void event_request_prepare(struct xe_device *xe, struct xe_sysctrl_app_msg_hdr *header,
- struct xe_sysctrl_event_request *request)
-{
- struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
-
- header->data = REG_FIELD_PREP(APP_HDR_GROUP_ID_MASK, XE_SYSCTRL_GROUP_GFSP) |
- REG_FIELD_PREP(APP_HDR_COMMAND_MASK, XE_SYSCTRL_CMD_GET_PENDING_EVENT);
-
- request->vector = xe_device_has_msix(xe) ? XE_IRQ_DEFAULT_MSIX : 0;
- request->fn = PCI_FUNC(pdev->devfn);
-}
-
/**
* xe_sysctrl_event() - Handler for System Controller events
* @sc: System Controller instance
@@ -72,16 +60,16 @@ void xe_sysctrl_event(struct xe_sysctrl *sc)
struct xe_sysctrl_mailbox_command command = {};
struct xe_sysctrl_event_response response = {};
struct xe_sysctrl_event_request request = {};
- struct xe_sysctrl_app_msg_hdr header = {};
+ struct xe_device *xe = sc_to_xe(sc);
+ struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
- xe_device_assert_mem_access(sc_to_xe(sc));
- event_request_prepare(sc_to_xe(sc), &header, &request);
+ xe_device_assert_mem_access(xe);
- command.header = header;
- command.data_in = &request;
- command.data_in_len = sizeof(request);
- command.data_out = &response;
- command.data_out_len = sizeof(response);
+ request.vector = xe_device_has_msix(xe) ? XE_IRQ_DEFAULT_MSIX : 0;
+ request.fn = PCI_FUNC(pdev->devfn);
+
+ xe_sysctrl_create_command(&command, XE_SYSCTRL_GROUP_GFSP, XE_SYSCTRL_CMD_GET_PENDING_EVENT,
+ &request, sizeof(request), &response, sizeof(response));
guard(mutex)(&sc->event_lock);
get_pending_event(sc, &command);
--
2.43.0
^ permalink raw reply related [flat|nested] 14+ messages in thread* ✗ CI.checkpatch: warning for Introduce error threshold to drm_ras (rev4)
2026-06-23 10:09 [PATCH v4 0/5] Introduce error threshold to drm_ras Raag Jadav
` (4 preceding siblings ...)
2026-06-23 10:09 ` [PATCH v4 5/5] drm/xe/sysctrl: Reuse xe_sysctrl_create_command() Raag Jadav
@ 2026-06-23 10:56 ` Patchwork
2026-06-23 10:57 ` ✓ CI.KUnit: success " Patchwork
` (2 subsequent siblings)
8 siblings, 0 replies; 14+ messages in thread
From: Patchwork @ 2026-06-23 10:56 UTC (permalink / raw)
To: Raag Jadav; +Cc: intel-xe
== Series Details ==
Series: Introduce error threshold to drm_ras (rev4)
URL : https://patchwork.freedesktop.org/series/165091/
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
061140b9bc586ae7f40abc1249c97e1cc72d1b9d
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit 0455ef26277e364e46e6c48ceda60e0d4bc1cc0d
Author: Raag Jadav <raag.jadav@intel.com>
Date: Tue Jun 23 15:39:59 2026 +0530
drm/xe/sysctrl: Reuse xe_sysctrl_create_command()
Now that we have a helper to create sysctrl command, reuse it for
threshold crossed events.
Signed-off-by: Raag Jadav <raag.jadav@intel.com>
+ /mt/dim checkpatch 60326b17f877e12846167bf8ef83680b9875218a drm-intel
533a6e1cce29 drm/ras: Cancel and free message on get counter failure
aedc9c8edeec drm/ras: Introduce error threshold
-:317: WARNING:LONG_LINE: line length of 116 exceeds 100 columns
#317: FILE: drivers/gpu/drm/drm_ras_nl.c:32:
+static const struct nla_policy drm_ras_get_error_threshold_nl_policy[DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_ID + 1] = {
-:323: WARNING:LONG_LINE: line length of 123 exceeds 100 columns
#323: FILE: drivers/gpu/drm/drm_ras_nl.c:38:
+static const struct nla_policy drm_ras_set_error_threshold_nl_policy[DRM_RAS_A_ERROR_COUNTER_ATTRS_ERROR_THRESHOLD + 1] = {
total: 0 errors, 2 warnings, 0 checks, 369 lines checked
931928eb902f drm/xe/ras: Add support for error threshold
7205b1a333a9 drm/xe/drm_ras: Wire up error threshold callbacks
0455ef26277e drm/xe/sysctrl: Reuse xe_sysctrl_create_command()
^ permalink raw reply [flat|nested] 14+ messages in thread* ✓ CI.KUnit: success for Introduce error threshold to drm_ras (rev4)
2026-06-23 10:09 [PATCH v4 0/5] Introduce error threshold to drm_ras Raag Jadav
` (5 preceding siblings ...)
2026-06-23 10:56 ` ✗ CI.checkpatch: warning for Introduce error threshold to drm_ras (rev4) Patchwork
@ 2026-06-23 10:57 ` Patchwork
2026-06-23 12:24 ` ✓ Xe.CI.BAT: " Patchwork
2026-06-23 14:14 ` ✓ Xe.CI.FULL: " Patchwork
8 siblings, 0 replies; 14+ messages in thread
From: Patchwork @ 2026-06-23 10:57 UTC (permalink / raw)
To: Raag Jadav; +Cc: intel-xe
== Series Details ==
Series: Introduce error threshold to drm_ras (rev4)
URL : https://patchwork.freedesktop.org/series/165091/
State : success
== Summary ==
+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[10:56:22] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[10:56:26] 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
[10:56:57] Starting KUnit Kernel (1/1)...
[10:56:57] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[10:56:57] ================== guc_buf (11 subtests) ===================
[10:56:57] [PASSED] test_smallest
[10:56:57] [PASSED] test_largest
[10:56:57] [PASSED] test_granular
[10:56:57] [PASSED] test_unique
[10:56:57] [PASSED] test_overlap
[10:56:57] [PASSED] test_reusable
[10:56:57] [PASSED] test_too_big
[10:56:57] [PASSED] test_flush
[10:56:57] [PASSED] test_lookup
[10:56:57] [PASSED] test_data
[10:56:57] [PASSED] test_class
[10:56:57] ===================== [PASSED] guc_buf =====================
[10:56:57] =================== guc_dbm (7 subtests) ===================
[10:56:57] [PASSED] test_empty
[10:56:57] [PASSED] test_default
[10:56:57] ======================== test_size ========================
[10:56:57] [PASSED] 4
[10:56:57] [PASSED] 8
[10:56:57] [PASSED] 32
[10:56:57] [PASSED] 256
[10:56:57] ==================== [PASSED] test_size ====================
[10:56:57] ======================= test_reuse ========================
[10:56:57] [PASSED] 4
[10:56:57] [PASSED] 8
[10:56:57] [PASSED] 32
[10:56:57] [PASSED] 256
[10:56:57] =================== [PASSED] test_reuse ====================
[10:56:57] =================== test_range_overlap ====================
[10:56:57] [PASSED] 4
[10:56:57] [PASSED] 8
[10:56:57] [PASSED] 32
[10:56:57] [PASSED] 256
[10:56:57] =============== [PASSED] test_range_overlap ================
[10:56:57] =================== test_range_compact ====================
[10:56:57] [PASSED] 4
[10:56:57] [PASSED] 8
[10:56:57] [PASSED] 32
[10:56:57] [PASSED] 256
[10:56:57] =============== [PASSED] test_range_compact ================
[10:56:57] ==================== test_range_spare =====================
[10:56:57] [PASSED] 4
[10:56:57] [PASSED] 8
[10:56:57] [PASSED] 32
[10:56:57] [PASSED] 256
[10:56:57] ================ [PASSED] test_range_spare =================
[10:56:57] ===================== [PASSED] guc_dbm =====================
[10:56:57] =================== guc_idm (6 subtests) ===================
[10:56:57] [PASSED] bad_init
[10:56:57] [PASSED] no_init
[10:56:57] [PASSED] init_fini
[10:56:57] [PASSED] check_used
[10:56:57] [PASSED] check_quota
[10:56:57] [PASSED] check_all
[10:56:57] ===================== [PASSED] guc_idm =====================
[10:56:57] ================== no_relay (3 subtests) ===================
[10:56:57] [PASSED] xe_drops_guc2pf_if_not_ready
[10:56:57] [PASSED] xe_drops_guc2vf_if_not_ready
[10:56:57] [PASSED] xe_rejects_send_if_not_ready
[10:56:57] ==================== [PASSED] no_relay =====================
[10:56:57] ================== pf_relay (14 subtests) ==================
[10:56:57] [PASSED] pf_rejects_guc2pf_too_short
[10:56:57] [PASSED] pf_rejects_guc2pf_too_long
[10:56:57] [PASSED] pf_rejects_guc2pf_no_payload
[10:56:57] [PASSED] pf_fails_no_payload
[10:56:57] [PASSED] pf_fails_bad_origin
[10:56:57] [PASSED] pf_fails_bad_type
[10:56:57] [PASSED] pf_txn_reports_error
[10:56:57] [PASSED] pf_txn_sends_pf2guc
[10:56:57] [PASSED] pf_sends_pf2guc
[10:56:57] [SKIPPED] pf_loopback_nop
[10:56:57] [SKIPPED] pf_loopback_echo
[10:56:57] [SKIPPED] pf_loopback_fail
[10:56:57] [SKIPPED] pf_loopback_busy
[10:56:57] [SKIPPED] pf_loopback_retry
[10:56:57] ==================== [PASSED] pf_relay =====================
[10:56:57] ================== vf_relay (3 subtests) ===================
[10:56:57] [PASSED] vf_rejects_guc2vf_too_short
[10:56:57] [PASSED] vf_rejects_guc2vf_too_long
[10:56:57] [PASSED] vf_rejects_guc2vf_no_payload
[10:56:57] ==================== [PASSED] vf_relay =====================
[10:56:57] ================ pf_gt_config (9 subtests) =================
[10:56:57] [PASSED] fair_contexts_1vf
[10:56:57] [PASSED] fair_doorbells_1vf
[10:56:57] [PASSED] fair_ggtt_1vf
[10:56:57] ====================== fair_vram_1vf ======================
[10:56:57] [PASSED] 3.50 GiB
[10:56:57] [PASSED] 11.5 GiB
[10:56:57] [PASSED] 15.5 GiB
[10:56:57] [PASSED] 31.5 GiB
[10:56:57] [PASSED] 63.5 GiB
[10:56:57] [PASSED] 1.91 GiB
[10:56:57] ================== [PASSED] fair_vram_1vf ==================
[10:56:57] ================ fair_vram_1vf_admin_only =================
[10:56:57] [PASSED] 3.50 GiB
[10:56:57] [PASSED] 11.5 GiB
[10:56:57] [PASSED] 15.5 GiB
[10:56:57] [PASSED] 31.5 GiB
[10:56:57] [PASSED] 63.5 GiB
[10:56:57] [PASSED] 1.91 GiB
[10:56:57] ============ [PASSED] fair_vram_1vf_admin_only =============
[10:56:57] ====================== fair_contexts ======================
[10:56:57] [PASSED] 1 VF
[10:56:57] [PASSED] 2 VFs
[10:56:57] [PASSED] 3 VFs
[10:56:57] [PASSED] 4 VFs
[10:56:57] [PASSED] 5 VFs
[10:56:57] [PASSED] 6 VFs
[10:56:57] [PASSED] 7 VFs
[10:56:57] [PASSED] 8 VFs
[10:56:57] [PASSED] 9 VFs
[10:56:57] [PASSED] 10 VFs
[10:56:57] [PASSED] 11 VFs
[10:56:57] [PASSED] 12 VFs
[10:56:57] [PASSED] 13 VFs
[10:56:57] [PASSED] 14 VFs
[10:56:57] [PASSED] 15 VFs
[10:56:57] [PASSED] 16 VFs
[10:56:57] [PASSED] 17 VFs
[10:56:57] [PASSED] 18 VFs
[10:56:57] [PASSED] 19 VFs
[10:56:57] [PASSED] 20 VFs
[10:56:57] [PASSED] 21 VFs
[10:56:57] [PASSED] 22 VFs
[10:56:57] [PASSED] 23 VFs
[10:56:57] [PASSED] 24 VFs
[10:56:57] [PASSED] 25 VFs
[10:56:57] [PASSED] 26 VFs
[10:56:57] [PASSED] 27 VFs
[10:56:57] [PASSED] 28 VFs
[10:56:57] [PASSED] 29 VFs
[10:56:57] [PASSED] 30 VFs
[10:56:57] [PASSED] 31 VFs
[10:56:57] [PASSED] 32 VFs
[10:56:57] [PASSED] 33 VFs
[10:56:58] [PASSED] 34 VFs
[10:56:58] [PASSED] 35 VFs
[10:56:58] [PASSED] 36 VFs
[10:56:58] [PASSED] 37 VFs
[10:56:58] [PASSED] 38 VFs
[10:56:58] [PASSED] 39 VFs
[10:56:58] [PASSED] 40 VFs
[10:56:58] [PASSED] 41 VFs
[10:56:58] [PASSED] 42 VFs
[10:56:58] [PASSED] 43 VFs
[10:56:58] [PASSED] 44 VFs
[10:56:58] [PASSED] 45 VFs
[10:56:58] [PASSED] 46 VFs
[10:56:58] [PASSED] 47 VFs
[10:56:58] [PASSED] 48 VFs
[10:56:58] [PASSED] 49 VFs
[10:56:58] [PASSED] 50 VFs
[10:56:58] [PASSED] 51 VFs
[10:56:58] [PASSED] 52 VFs
[10:56:58] [PASSED] 53 VFs
[10:56:58] [PASSED] 54 VFs
[10:56:58] [PASSED] 55 VFs
[10:56:58] [PASSED] 56 VFs
[10:56:58] [PASSED] 57 VFs
[10:56:58] [PASSED] 58 VFs
[10:56:58] [PASSED] 59 VFs
[10:56:58] [PASSED] 60 VFs
[10:56:58] [PASSED] 61 VFs
[10:56:58] [PASSED] 62 VFs
[10:56:58] [PASSED] 63 VFs
[10:56:58] ================== [PASSED] fair_contexts ==================
[10:56:58] ===================== fair_doorbells ======================
[10:56:58] [PASSED] 1 VF
[10:56:58] [PASSED] 2 VFs
[10:56:58] [PASSED] 3 VFs
[10:56:58] [PASSED] 4 VFs
[10:56:58] [PASSED] 5 VFs
[10:56:58] [PASSED] 6 VFs
[10:56:58] [PASSED] 7 VFs
[10:56:58] [PASSED] 8 VFs
[10:56:58] [PASSED] 9 VFs
[10:56:58] [PASSED] 10 VFs
[10:56:58] [PASSED] 11 VFs
[10:56:58] [PASSED] 12 VFs
[10:56:58] [PASSED] 13 VFs
[10:56:58] [PASSED] 14 VFs
[10:56:58] [PASSED] 15 VFs
[10:56:58] [PASSED] 16 VFs
[10:56:58] [PASSED] 17 VFs
[10:56:58] [PASSED] 18 VFs
[10:56:58] [PASSED] 19 VFs
[10:56:58] [PASSED] 20 VFs
[10:56:58] [PASSED] 21 VFs
[10:56:58] [PASSED] 22 VFs
[10:56:58] [PASSED] 23 VFs
[10:56:58] [PASSED] 24 VFs
[10:56:58] [PASSED] 25 VFs
[10:56:58] [PASSED] 26 VFs
[10:56:58] [PASSED] 27 VFs
[10:56:58] [PASSED] 28 VFs
[10:56:58] [PASSED] 29 VFs
[10:56:58] [PASSED] 30 VFs
[10:56:58] [PASSED] 31 VFs
[10:56:58] [PASSED] 32 VFs
[10:56:58] [PASSED] 33 VFs
[10:56:58] [PASSED] 34 VFs
[10:56:58] [PASSED] 35 VFs
[10:56:58] [PASSED] 36 VFs
[10:56:58] [PASSED] 37 VFs
[10:56:58] [PASSED] 38 VFs
[10:56:58] [PASSED] 39 VFs
[10:56:58] [PASSED] 40 VFs
[10:56:58] [PASSED] 41 VFs
[10:56:58] [PASSED] 42 VFs
[10:56:58] [PASSED] 43 VFs
[10:56:58] [PASSED] 44 VFs
[10:56:58] [PASSED] 45 VFs
[10:56:58] [PASSED] 46 VFs
[10:56:58] [PASSED] 47 VFs
[10:56:58] [PASSED] 48 VFs
[10:56:58] [PASSED] 49 VFs
[10:56:58] [PASSED] 50 VFs
[10:56:58] [PASSED] 51 VFs
[10:56:58] [PASSED] 52 VFs
[10:56:58] [PASSED] 53 VFs
[10:56:58] [PASSED] 54 VFs
[10:56:58] [PASSED] 55 VFs
[10:56:58] [PASSED] 56 VFs
[10:56:58] [PASSED] 57 VFs
[10:56:58] [PASSED] 58 VFs
[10:56:58] [PASSED] 59 VFs
[10:56:58] [PASSED] 60 VFs
[10:56:58] [PASSED] 61 VFs
[10:56:58] [PASSED] 62 VFs
[10:56:58] [PASSED] 63 VFs
[10:56:58] ================= [PASSED] fair_doorbells ==================
[10:56:58] ======================== fair_ggtt ========================
[10:56:58] [PASSED] 1 VF
[10:56:58] [PASSED] 2 VFs
[10:56:58] [PASSED] 3 VFs
[10:56:58] [PASSED] 4 VFs
[10:56:58] [PASSED] 5 VFs
[10:56:58] [PASSED] 6 VFs
[10:56:58] [PASSED] 7 VFs
[10:56:58] [PASSED] 8 VFs
[10:56:58] [PASSED] 9 VFs
[10:56:58] [PASSED] 10 VFs
[10:56:58] [PASSED] 11 VFs
[10:56:58] [PASSED] 12 VFs
[10:56:58] [PASSED] 13 VFs
[10:56:58] [PASSED] 14 VFs
[10:56:58] [PASSED] 15 VFs
[10:56:58] [PASSED] 16 VFs
[10:56:58] [PASSED] 17 VFs
[10:56:58] [PASSED] 18 VFs
[10:56:58] [PASSED] 19 VFs
[10:56:58] [PASSED] 20 VFs
[10:56:58] [PASSED] 21 VFs
[10:56:58] [PASSED] 22 VFs
[10:56:58] [PASSED] 23 VFs
[10:56:58] [PASSED] 24 VFs
[10:56:58] [PASSED] 25 VFs
[10:56:58] [PASSED] 26 VFs
[10:56:58] [PASSED] 27 VFs
[10:56:58] [PASSED] 28 VFs
[10:56:58] [PASSED] 29 VFs
[10:56:58] [PASSED] 30 VFs
[10:56:58] [PASSED] 31 VFs
[10:56:58] [PASSED] 32 VFs
[10:56:58] [PASSED] 33 VFs
[10:56:58] [PASSED] 34 VFs
[10:56:58] [PASSED] 35 VFs
[10:56:58] [PASSED] 36 VFs
[10:56:58] [PASSED] 37 VFs
[10:56:58] [PASSED] 38 VFs
[10:56:58] [PASSED] 39 VFs
[10:56:58] [PASSED] 40 VFs
[10:56:58] [PASSED] 41 VFs
[10:56:58] [PASSED] 42 VFs
[10:56:58] [PASSED] 43 VFs
[10:56:58] [PASSED] 44 VFs
[10:56:58] [PASSED] 45 VFs
[10:56:58] [PASSED] 46 VFs
[10:56:58] [PASSED] 47 VFs
[10:56:58] [PASSED] 48 VFs
[10:56:58] [PASSED] 49 VFs
[10:56:58] [PASSED] 50 VFs
[10:56:58] [PASSED] 51 VFs
[10:56:58] [PASSED] 52 VFs
[10:56:58] [PASSED] 53 VFs
[10:56:58] [PASSED] 54 VFs
[10:56:58] [PASSED] 55 VFs
[10:56:58] [PASSED] 56 VFs
[10:56:58] [PASSED] 57 VFs
[10:56:58] [PASSED] 58 VFs
[10:56:58] [PASSED] 59 VFs
[10:56:58] [PASSED] 60 VFs
[10:56:58] [PASSED] 61 VFs
[10:56:58] [PASSED] 62 VFs
[10:56:58] [PASSED] 63 VFs
[10:56:58] ==================== [PASSED] fair_ggtt ====================
[10:56:58] ======================== fair_vram ========================
[10:56:58] [PASSED] 1 VF
[10:56:58] [PASSED] 2 VFs
[10:56:58] [PASSED] 3 VFs
[10:56:58] [PASSED] 4 VFs
[10:56:58] [PASSED] 5 VFs
[10:56:58] [PASSED] 6 VFs
[10:56:58] [PASSED] 7 VFs
[10:56:58] [PASSED] 8 VFs
[10:56:58] [PASSED] 9 VFs
[10:56:58] [PASSED] 10 VFs
[10:56:58] [PASSED] 11 VFs
[10:56:58] [PASSED] 12 VFs
[10:56:58] [PASSED] 13 VFs
[10:56:58] [PASSED] 14 VFs
[10:56:58] [PASSED] 15 VFs
[10:56:58] [PASSED] 16 VFs
[10:56:58] [PASSED] 17 VFs
[10:56:58] [PASSED] 18 VFs
[10:56:58] [PASSED] 19 VFs
[10:56:58] [PASSED] 20 VFs
[10:56:58] [PASSED] 21 VFs
[10:56:58] [PASSED] 22 VFs
[10:56:58] [PASSED] 23 VFs
[10:56:58] [PASSED] 24 VFs
[10:56:58] [PASSED] 25 VFs
[10:56:58] [PASSED] 26 VFs
[10:56:58] [PASSED] 27 VFs
[10:56:58] [PASSED] 28 VFs
[10:56:58] [PASSED] 29 VFs
[10:56:58] [PASSED] 30 VFs
[10:56:58] [PASSED] 31 VFs
[10:56:58] [PASSED] 32 VFs
[10:56:58] [PASSED] 33 VFs
[10:56:58] [PASSED] 34 VFs
[10:56:58] [PASSED] 35 VFs
[10:56:58] [PASSED] 36 VFs
[10:56:58] [PASSED] 37 VFs
[10:56:58] [PASSED] 38 VFs
[10:56:58] [PASSED] 39 VFs
[10:56:58] [PASSED] 40 VFs
[10:56:58] [PASSED] 41 VFs
[10:56:58] [PASSED] 42 VFs
[10:56:58] [PASSED] 43 VFs
[10:56:58] [PASSED] 44 VFs
[10:56:58] [PASSED] 45 VFs
[10:56:58] [PASSED] 46 VFs
[10:56:58] [PASSED] 47 VFs
[10:56:58] [PASSED] 48 VFs
[10:56:58] [PASSED] 49 VFs
[10:56:58] [PASSED] 50 VFs
[10:56:58] [PASSED] 51 VFs
[10:56:58] [PASSED] 52 VFs
[10:56:58] [PASSED] 53 VFs
[10:56:58] [PASSED] 54 VFs
[10:56:58] [PASSED] 55 VFs
[10:56:58] [PASSED] 56 VFs
[10:56:58] [PASSED] 57 VFs
[10:56:58] [PASSED] 58 VFs
[10:56:58] [PASSED] 59 VFs
[10:56:58] [PASSED] 60 VFs
[10:56:58] [PASSED] 61 VFs
[10:56:58] [PASSED] 62 VFs
[10:56:58] [PASSED] 63 VFs
[10:56:58] ==================== [PASSED] fair_vram ====================
[10:56:58] ================== [PASSED] pf_gt_config ===================
[10:56:58] ===================== lmtt (1 subtest) =====================
[10:56:58] ======================== test_ops =========================
[10:56:58] [PASSED] 2-level
[10:56:58] [PASSED] multi-level
[10:56:58] ==================== [PASSED] test_ops =====================
[10:56:58] ====================== [PASSED] lmtt =======================
[10:56:58] ================= pf_service (11 subtests) =================
[10:56:58] [PASSED] pf_negotiate_any
[10:56:58] [PASSED] pf_negotiate_base_match
[10:56:58] [PASSED] pf_negotiate_base_newer
[10:56:58] [PASSED] pf_negotiate_base_next
[10:56:58] [SKIPPED] pf_negotiate_base_older
[10:56:58] [PASSED] pf_negotiate_base_prev
[10:56:58] [PASSED] pf_negotiate_latest_match
[10:56:58] [PASSED] pf_negotiate_latest_newer
[10:56:58] [PASSED] pf_negotiate_latest_next
[10:56:58] [SKIPPED] pf_negotiate_latest_older
[10:56:58] [SKIPPED] pf_negotiate_latest_prev
[10:56:58] =================== [PASSED] pf_service ====================
[10:56:58] ================= xe_guc_g2g (2 subtests) ==================
[10:56:58] ============== xe_live_guc_g2g_kunit_default ==============
[10:56:58] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[10:56:58] ============== xe_live_guc_g2g_kunit_allmem ===============
[10:56:58] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[10:56:58] =================== [SKIPPED] xe_guc_g2g ===================
[10:56:58] =================== xe_mocs (2 subtests) ===================
[10:56:58] ================ xe_live_mocs_kernel_kunit ================
[10:56:58] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[10:56:58] ================ xe_live_mocs_reset_kunit =================
[10:56:58] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[10:56:58] ==================== [SKIPPED] xe_mocs =====================
[10:56:58] ================= xe_migrate (2 subtests) ==================
[10:56:58] ================= xe_migrate_sanity_kunit =================
[10:56:58] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[10:56:58] ================== xe_validate_ccs_kunit ==================
[10:56:58] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[10:56:58] =================== [SKIPPED] xe_migrate ===================
[10:56:58] ================== xe_dma_buf (1 subtest) ==================
[10:56:58] ==================== xe_dma_buf_kunit =====================
[10:56:58] ================ [SKIPPED] xe_dma_buf_kunit ================
[10:56:58] =================== [SKIPPED] xe_dma_buf ===================
[10:56:58] ================= xe_bo_shrink (1 subtest) =================
[10:56:58] =================== xe_bo_shrink_kunit ====================
[10:56:58] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[10:56:58] ================== [SKIPPED] xe_bo_shrink ==================
[10:56:58] ==================== xe_bo (2 subtests) ====================
[10:56:58] ================== xe_ccs_migrate_kunit ===================
[10:56:58] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[10:56:58] ==================== xe_bo_evict_kunit ====================
[10:56:58] =============== [SKIPPED] xe_bo_evict_kunit ================
[10:56:58] ===================== [SKIPPED] xe_bo ======================
[10:56:58] ==================== args (13 subtests) ====================
[10:56:58] [PASSED] count_args_test
[10:56:58] [PASSED] call_args_example
[10:56:58] [PASSED] call_args_test
[10:56:58] [PASSED] drop_first_arg_example
[10:56:58] [PASSED] drop_first_arg_test
[10:56:58] [PASSED] first_arg_example
[10:56:58] [PASSED] first_arg_test
[10:56:58] [PASSED] last_arg_example
[10:56:58] [PASSED] last_arg_test
[10:56:58] [PASSED] pick_arg_example
[10:56:58] [PASSED] if_args_example
[10:56:58] [PASSED] if_args_test
[10:56:58] [PASSED] sep_comma_example
[10:56:58] ====================== [PASSED] args =======================
[10:56:58] =================== xe_pci (3 subtests) ====================
[10:56:58] ==================== check_graphics_ip ====================
[10:56:58] [PASSED] 12.00 Xe_LP
[10:56:58] [PASSED] 12.10 Xe_LP+
[10:56:58] [PASSED] 12.55 Xe_HPG
[10:56:58] [PASSED] 12.60 Xe_HPC
[10:56:58] [PASSED] 12.70 Xe_LPG
[10:56:58] [PASSED] 12.71 Xe_LPG
[10:56:58] [PASSED] 12.74 Xe_LPG+
[10:56:58] [PASSED] 20.01 Xe2_HPG
[10:56:58] [PASSED] 20.02 Xe2_HPG
[10:56:58] [PASSED] 20.04 Xe2_LPG
[10:56:58] [PASSED] 30.00 Xe3_LPG
[10:56:58] [PASSED] 30.01 Xe3_LPG
[10:56:58] [PASSED] 30.03 Xe3_LPG
[10:56:58] [PASSED] 30.04 Xe3_LPG
[10:56:58] [PASSED] 30.05 Xe3_LPG
[10:56:58] [PASSED] 35.10 Xe3p_LPG
[10:56:58] [PASSED] 35.11 Xe3p_XPC
[10:56:58] ================ [PASSED] check_graphics_ip ================
[10:56:58] ===================== check_media_ip ======================
[10:56:58] [PASSED] 12.00 Xe_M
[10:56:58] [PASSED] 12.55 Xe_HPM
[10:56:58] [PASSED] 13.00 Xe_LPM+
[10:56:58] [PASSED] 13.01 Xe2_HPM
[10:56:58] [PASSED] 20.00 Xe2_LPM
[10:56:58] [PASSED] 30.00 Xe3_LPM
[10:56:58] [PASSED] 30.02 Xe3_LPM
[10:56:58] [PASSED] 35.00 Xe3p_LPM
[10:56:58] [PASSED] 35.03 Xe3p_HPM
[10:56:58] ================= [PASSED] check_media_ip ==================
[10:56:58] =================== check_platform_desc ===================
[10:56:58] [PASSED] 0x9A60 (TIGERLAKE)
[10:56:58] [PASSED] 0x9A68 (TIGERLAKE)
[10:56:58] [PASSED] 0x9A70 (TIGERLAKE)
[10:56:58] [PASSED] 0x9A40 (TIGERLAKE)
[10:56:58] [PASSED] 0x9A49 (TIGERLAKE)
[10:56:58] [PASSED] 0x9A59 (TIGERLAKE)
[10:56:58] [PASSED] 0x9A78 (TIGERLAKE)
[10:56:58] [PASSED] 0x9AC0 (TIGERLAKE)
[10:56:58] [PASSED] 0x9AC9 (TIGERLAKE)
[10:56:58] [PASSED] 0x9AD9 (TIGERLAKE)
[10:56:58] [PASSED] 0x9AF8 (TIGERLAKE)
[10:56:58] [PASSED] 0x4C80 (ROCKETLAKE)
[10:56:58] [PASSED] 0x4C8A (ROCKETLAKE)
[10:56:58] [PASSED] 0x4C8B (ROCKETLAKE)
[10:56:58] [PASSED] 0x4C8C (ROCKETLAKE)
[10:56:58] [PASSED] 0x4C90 (ROCKETLAKE)
[10:56:58] [PASSED] 0x4C9A (ROCKETLAKE)
[10:56:58] [PASSED] 0x4680 (ALDERLAKE_S)
[10:56:58] [PASSED] 0x4682 (ALDERLAKE_S)
[10:56:58] [PASSED] 0x4688 (ALDERLAKE_S)
[10:56:58] [PASSED] 0x468A (ALDERLAKE_S)
[10:56:58] [PASSED] 0x468B (ALDERLAKE_S)
[10:56:58] [PASSED] 0x4690 (ALDERLAKE_S)
[10:56:58] [PASSED] 0x4692 (ALDERLAKE_S)
[10:56:58] [PASSED] 0x4693 (ALDERLAKE_S)
[10:56:58] [PASSED] 0x46A0 (ALDERLAKE_P)
[10:56:58] [PASSED] 0x46A1 (ALDERLAKE_P)
[10:56:58] [PASSED] 0x46A2 (ALDERLAKE_P)
[10:56:58] [PASSED] 0x46A3 (ALDERLAKE_P)
[10:56:58] [PASSED] 0x46A6 (ALDERLAKE_P)
[10:56:58] [PASSED] 0x46A8 (ALDERLAKE_P)
[10:56:58] [PASSED] 0x46AA (ALDERLAKE_P)
[10:56:58] [PASSED] 0x462A (ALDERLAKE_P)
[10:56:58] [PASSED] 0x4626 (ALDERLAKE_P)
[10:56:58] [PASSED] 0x4628 (ALDERLAKE_P)
[10:56:58] [PASSED] 0x46B0 (ALDERLAKE_P)
[10:56:58] [PASSED] 0x46B1 (ALDERLAKE_P)
[10:56:58] [PASSED] 0x46B2 (ALDERLAKE_P)
[10:56:58] [PASSED] 0x46B3 (ALDERLAKE_P)
[10:56:58] [PASSED] 0x46C0 (ALDERLAKE_P)
[10:56:58] [PASSED] 0x46C1 (ALDERLAKE_P)
[10:56:58] [PASSED] 0x46C2 (ALDERLAKE_P)
[10:56:58] [PASSED] 0x46C3 (ALDERLAKE_P)
[10:56:58] [PASSED] 0x46D0 (ALDERLAKE_N)
[10:56:58] [PASSED] 0x46D1 (ALDERLAKE_N)
[10:56:58] [PASSED] 0x46D2 (ALDERLAKE_N)
[10:56:58] [PASSED] 0x46D3 (ALDERLAKE_N)
[10:56:58] [PASSED] 0x46D4 (ALDERLAKE_N)
[10:56:58] [PASSED] 0xA721 (ALDERLAKE_P)
[10:56:58] [PASSED] 0xA7A1 (ALDERLAKE_P)
[10:56:58] [PASSED] 0xA7A9 (ALDERLAKE_P)
[10:56:58] [PASSED] 0xA7AC (ALDERLAKE_P)
[10:56:58] [PASSED] 0xA7AD (ALDERLAKE_P)
[10:56:58] [PASSED] 0xA720 (ALDERLAKE_P)
[10:56:58] [PASSED] 0xA7A0 (ALDERLAKE_P)
[10:56:58] [PASSED] 0xA7A8 (ALDERLAKE_P)
[10:56:58] [PASSED] 0xA7AA (ALDERLAKE_P)
[10:56:58] [PASSED] 0xA7AB (ALDERLAKE_P)
[10:56:58] [PASSED] 0xA780 (ALDERLAKE_S)
[10:56:58] [PASSED] 0xA781 (ALDERLAKE_S)
[10:56:58] [PASSED] 0xA782 (ALDERLAKE_S)
[10:56:58] [PASSED] 0xA783 (ALDERLAKE_S)
[10:56:58] [PASSED] 0xA788 (ALDERLAKE_S)
[10:56:58] [PASSED] 0xA789 (ALDERLAKE_S)
[10:56:58] [PASSED] 0xA78A (ALDERLAKE_S)
[10:56:58] [PASSED] 0xA78B (ALDERLAKE_S)
[10:56:58] [PASSED] 0x4905 (DG1)
[10:56:58] [PASSED] 0x4906 (DG1)
[10:56:58] [PASSED] 0x4907 (DG1)
[10:56:58] [PASSED] 0x4908 (DG1)
[10:56:58] [PASSED] 0x4909 (DG1)
[10:56:58] [PASSED] 0x56C0 (DG2)
[10:56:58] [PASSED] 0x56C2 (DG2)
[10:56:58] [PASSED] 0x56C1 (DG2)
[10:56:58] [PASSED] 0x7D51 (METEORLAKE)
[10:56:58] [PASSED] 0x7DD1 (METEORLAKE)
[10:56:58] [PASSED] 0x7D41 (METEORLAKE)
[10:56:58] [PASSED] 0x7D67 (METEORLAKE)
[10:56:58] [PASSED] 0xB640 (METEORLAKE)
[10:56:58] [PASSED] 0x56A0 (DG2)
[10:56:58] [PASSED] 0x56A1 (DG2)
[10:56:58] [PASSED] 0x56A2 (DG2)
[10:56:58] [PASSED] 0x56BE (DG2)
[10:56:58] [PASSED] 0x56BF (DG2)
[10:56:58] [PASSED] 0x5690 (DG2)
[10:56:58] [PASSED] 0x5691 (DG2)
[10:56:58] [PASSED] 0x5692 (DG2)
[10:56:58] [PASSED] 0x56A5 (DG2)
[10:56:58] [PASSED] 0x56A6 (DG2)
[10:56:58] [PASSED] 0x56B0 (DG2)
[10:56:58] [PASSED] 0x56B1 (DG2)
[10:56:58] [PASSED] 0x56BA (DG2)
[10:56:58] [PASSED] 0x56BB (DG2)
[10:56:58] [PASSED] 0x56BC (DG2)
[10:56:58] [PASSED] 0x56BD (DG2)
[10:56:58] [PASSED] 0x5693 (DG2)
[10:56:58] [PASSED] 0x5694 (DG2)
[10:56:58] [PASSED] 0x5695 (DG2)
[10:56:58] [PASSED] 0x56A3 (DG2)
[10:56:58] [PASSED] 0x56A4 (DG2)
[10:56:58] [PASSED] 0x56B2 (DG2)
[10:56:58] [PASSED] 0x56B3 (DG2)
[10:56:58] [PASSED] 0x5696 (DG2)
[10:56:58] [PASSED] 0x5697 (DG2)
[10:56:58] [PASSED] 0xB69 (PVC)
[10:56:58] [PASSED] 0xB6E (PVC)
[10:56:58] [PASSED] 0xBD4 (PVC)
[10:56:58] [PASSED] 0xBD5 (PVC)
[10:56:58] [PASSED] 0xBD6 (PVC)
[10:56:58] [PASSED] 0xBD7 (PVC)
[10:56:58] [PASSED] 0xBD8 (PVC)
[10:56:58] [PASSED] 0xBD9 (PVC)
[10:56:58] [PASSED] 0xBDA (PVC)
[10:56:58] [PASSED] 0xBDB (PVC)
[10:56:58] [PASSED] 0xBE0 (PVC)
[10:56:58] [PASSED] 0xBE1 (PVC)
[10:56:58] [PASSED] 0xBE5 (PVC)
[10:56:58] [PASSED] 0x7D40 (METEORLAKE)
[10:56:58] [PASSED] 0x7D45 (METEORLAKE)
[10:56:58] [PASSED] 0x7D55 (METEORLAKE)
[10:56:58] [PASSED] 0x7D60 (METEORLAKE)
[10:56:58] [PASSED] 0x7DD5 (METEORLAKE)
[10:56:58] [PASSED] 0x6420 (LUNARLAKE)
[10:56:58] [PASSED] 0x64A0 (LUNARLAKE)
[10:56:58] [PASSED] 0x64B0 (LUNARLAKE)
[10:56:58] [PASSED] 0xE202 (BATTLEMAGE)
[10:56:58] [PASSED] 0xE209 (BATTLEMAGE)
[10:56:58] [PASSED] 0xE20B (BATTLEMAGE)
[10:56:58] [PASSED] 0xE20C (BATTLEMAGE)
[10:56:58] [PASSED] 0xE20D (BATTLEMAGE)
[10:56:58] [PASSED] 0xE210 (BATTLEMAGE)
[10:56:58] [PASSED] 0xE211 (BATTLEMAGE)
[10:56:58] [PASSED] 0xE212 (BATTLEMAGE)
[10:56:58] [PASSED] 0xE216 (BATTLEMAGE)
[10:56:58] [PASSED] 0xE220 (BATTLEMAGE)
[10:56:58] [PASSED] 0xE221 (BATTLEMAGE)
[10:56:58] [PASSED] 0xE222 (BATTLEMAGE)
[10:56:58] [PASSED] 0xE223 (BATTLEMAGE)
[10:56:58] [PASSED] 0xB080 (PANTHERLAKE)
[10:56:58] [PASSED] 0xB081 (PANTHERLAKE)
[10:56:58] [PASSED] 0xB082 (PANTHERLAKE)
[10:56:58] [PASSED] 0xB083 (PANTHERLAKE)
[10:56:58] [PASSED] 0xB084 (PANTHERLAKE)
[10:56:58] [PASSED] 0xB085 (PANTHERLAKE)
[10:56:58] [PASSED] 0xB086 (PANTHERLAKE)
[10:56:58] [PASSED] 0xB087 (PANTHERLAKE)
[10:56:58] [PASSED] 0xB08F (PANTHERLAKE)
[10:56:58] [PASSED] 0xB090 (PANTHERLAKE)
[10:56:58] [PASSED] 0xB0A0 (PANTHERLAKE)
[10:56:58] [PASSED] 0xB0B0 (PANTHERLAKE)
[10:56:58] [PASSED] 0xFD80 (PANTHERLAKE)
[10:56:58] [PASSED] 0xFD81 (PANTHERLAKE)
[10:56:58] [PASSED] 0xD740 (NOVALAKE_S)
[10:56:58] [PASSED] 0xD741 (NOVALAKE_S)
[10:56:58] [PASSED] 0xD742 (NOVALAKE_S)
[10:56:58] [PASSED] 0xD743 (NOVALAKE_S)
[10:56:58] [PASSED] 0xD745 (NOVALAKE_S)
[10:56:58] [PASSED] 0xD74A (NOVALAKE_S)
[10:56:58] [PASSED] 0xD74B (NOVALAKE_S)
[10:56:58] [PASSED] 0x674C (CRESCENTISLAND)
[10:56:58] [PASSED] 0x674D (CRESCENTISLAND)
[10:56:58] [PASSED] 0x674E (CRESCENTISLAND)
[10:56:58] [PASSED] 0x674F (CRESCENTISLAND)
[10:56:58] [PASSED] 0x6750 (CRESCENTISLAND)
[10:56:58] [PASSED] 0xD750 (NOVALAKE_P)
[10:56:58] [PASSED] 0xD751 (NOVALAKE_P)
[10:56:58] [PASSED] 0xD752 (NOVALAKE_P)
[10:56:58] [PASSED] 0xD753 (NOVALAKE_P)
[10:56:58] [PASSED] 0xD754 (NOVALAKE_P)
[10:56:58] [PASSED] 0xD755 (NOVALAKE_P)
[10:56:58] [PASSED] 0xD756 (NOVALAKE_P)
[10:56:58] [PASSED] 0xD757 (NOVALAKE_P)
[10:56:58] [PASSED] 0xD75F (NOVALAKE_P)
[10:56:58] =============== [PASSED] check_platform_desc ===============
[10:56:58] ===================== [PASSED] xe_pci ======================
[10:56:58] ============= xe_rtp_tables_test (4 subtests) ==============
[10:56:58] ================== xe_rtp_table_gt_test ===================
[10:56:58] [PASSED] gt_was/14011060649
[10:56:58] [PASSED] gt_was/14011059788
[10:56:58] [PASSED] gt_was/14015795083
[10:56:58] [PASSED] gt_was/16021867713
[10:56:58] [PASSED] gt_was/14019449301
[10:56:58] [PASSED] gt_was/16028005424
[10:56:58] [PASSED] gt_was/14026578760
[10:56:58] [PASSED] gt_was/1409420604
[10:56:58] [PASSED] gt_was/1408615072
[10:56:58] [PASSED] gt_was/22010523718
[10:56:58] [PASSED] gt_was/14011006942
[10:56:58] [PASSED] gt_was/14014830051
[10:56:58] [PASSED] gt_was/18018781329
[10:56:58] [PASSED] gt_was/1509235366
[10:56:58] [PASSED] gt_was/18018781329
[10:56:58] [PASSED] gt_was/16016694945
[10:56:58] [PASSED] gt_was/14018575942
[10:56:58] [PASSED] gt_was/22016670082
[10:56:58] [PASSED] gt_was/22016670082
[10:56:58] [PASSED] gt_was/14017421178
[10:56:58] [PASSED] gt_was/16025250150
[10:56:58] [PASSED] gt_was/14021871409
[10:56:58] [PASSED] gt_was/16021865536
[10:56:58] [PASSED] gt_was/14021486841
[10:56:58] [PASSED] gt_was/14025160223
[10:56:58] [PASSED] gt_was/14026144927, 16029437861, 14026127056
[10:56:58] [PASSED] gt_was/14025635424
[10:56:58] [PASSED] gt_was/16028005424
[10:56:58] ============== [PASSED] xe_rtp_table_gt_test ===============
[10:56:58] ================== xe_rtp_table_gt_test ===================
[10:56:58] [PASSED] gt_tunings/Tuning: Blend Fill Caching Optimization Disable
[10:56:58] [PASSED] gt_tunings/Tuning: 32B Access Enable
[10:56:58] [PASSED] gt_tunings/Tuning: L3 cache
[10:56:58] [PASSED] gt_tunings/Tuning: L3 cache - media
[10:56:58] [PASSED] gt_tunings/Tuning: Compression Overfetch
[10:56:58] [PASSED] gt_tunings/Tuning: Compression Overfetch - media
[10:56:58] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3
[10:56:58] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3 - media
[10:56:58] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only
[10:56:58] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only - media
[10:56:58] [PASSED] gt_tunings/Tuning: Stateless compression control
[10:56:58] [PASSED] gt_tunings/Tuning: Stateless compression control - media
[10:56:58] [PASSED] gt_tunings/Tuning: L3 RW flush all Cache
[10:56:58] [PASSED] gt_tunings/Tuning: L3 RW flush all cache - media
[10:56:58] [PASSED] gt_tunings/Tuning: Set STLB Bank Hash Mode to 4KB
[10:56:58] ============== [PASSED] xe_rtp_table_gt_test ===============
[10:56:58] ================== xe_rtp_table_oob_test ==================
[10:56:58] [PASSED] oob_was/1607983814
[10:56:58] [PASSED] oob_was/16010904313
[10:56:58] [PASSED] oob_was/18022495364
[10:56:58] [PASSED] oob_was/22012773006
[10:56:58] [PASSED] oob_was/14014475959
[10:56:58] [PASSED] oob_was/22011391025
[10:56:58] [PASSED] oob_was/22012727170
[10:56:58] [PASSED] oob_was/22012727685
[10:56:58] [PASSED] oob_was/22016596838
[10:56:58] [PASSED] oob_was/18020744125
[10:56:58] [PASSED] oob_was/1409600907
[10:56:58] [PASSED] oob_was/22014953428
[10:56:58] [PASSED] oob_was/16017236439
[10:56:58] [PASSED] oob_was/14019821291
[10:56:58] [PASSED] oob_was/14015076503
[10:56:58] [PASSED] oob_was/14018913170
[10:56:58] [PASSED] oob_was/14018094691
[10:56:58] [PASSED] oob_was/18024947630
[10:56:58] [PASSED] oob_was/16022287689
[10:56:58] [PASSED] oob_was/13011645652
[10:56:58] [PASSED] oob_was/14022293748
[10:56:58] [PASSED] oob_was/22019794406
[10:56:58] [PASSED] oob_was/22019338487
[10:56:58] [PASSED] oob_was/16023588340
[10:56:58] [PASSED] oob_was/14019789679
[10:56:58] [PASSED] oob_was/14022866841
[10:56:58] [PASSED] oob_was/16021333562
[10:56:58] [PASSED] oob_was/14016712196
[10:56:58] [PASSED] oob_was/14015568240
[10:56:58] [PASSED] oob_was/18013179988
[10:56:58] [PASSED] oob_was/1508761755
[10:56:58] [PASSED] oob_was/16023105232
[10:56:58] [PASSED] oob_was/16026508708
[10:56:58] [PASSED] oob_was/14020001231
[10:56:58] [PASSED] oob_was/16023683509
[10:56:58] [PASSED] oob_was/14025515070
[10:56:58] [PASSED] oob_was/15015404425_disable
[10:56:58] [PASSED] oob_was/16026007364
[10:56:58] [PASSED] oob_was/14020316580
[10:56:58] [PASSED] oob_was/14025883347
[10:56:58] [PASSED] oob_was/16029380221
[10:56:58] ============== [PASSED] xe_rtp_table_oob_test ==============
[10:56:58] ================ xe_rtp_table_dev_oob_test ================
[10:56:58] [PASSED] device_oob_was/22010954014
[10:56:58] [PASSED] device_oob_was/15015404425
[10:56:58] [PASSED] device_oob_was/22019338487_display
[10:56:58] [PASSED] device_oob_was/14022085890
[10:56:58] [PASSED] device_oob_was/14026539277
[10:56:58] [PASSED] device_oob_was/14026633728
[10:56:58] [PASSED] device_oob_was/14026746987
[10:56:58] [PASSED] device_oob_was/14026779378
[10:56:58] ============ [PASSED] xe_rtp_table_dev_oob_test ============
[10:56:58] =============== [PASSED] xe_rtp_tables_test ================
[10:56:58] =================== xe_rtp (3 subtests) ====================
[10:56:58] =================== xe_rtp_rules_tests ====================
[10:56:58] [PASSED] no
[10:56:58] [PASSED] yes
[10:56:58] [PASSED] no-and-no
[10:56:58] [PASSED] no-and-yes
[10:56:58] [PASSED] yes-and-no
[10:56:58] [PASSED] yes-and-yes
[10:56:58] [PASSED] no-or-no
[10:56:58] [PASSED] no-or-yes
[10:56:58] [PASSED] yes-or-no
[10:56:58] [PASSED] yes-or-yes
[10:56:58] [PASSED] no-yes-or-yes-no
[10:56:58] [PASSED] no-yes-or-yes-yes
[10:56:58] [PASSED] yes-yes-or-no-yes
[10:56:58] [PASSED] yes-yes-or-yes-yes
[10:56:58] [PASSED] no-no-or-yes-or-no
[10:56:58] [PASSED] or
[10:56:58] [PASSED] or-yes
[10:56:58] [PASSED] or-no
[10:56:58] [PASSED] yes-or
[10:56:58] [PASSED] no-or
[10:56:58] [PASSED] no-or-or-yes
[10:56:58] [PASSED] yes-or-or-no
[10:56:58] [PASSED] no-or-or-no
[10:56:58] [PASSED] missing-context-engine-class
[10:56:58] [PASSED] missing-context-engine-class-or-yes
[10:56:58] [PASSED] missing-context-engine-class-or-or-yes
[10:56:58] =============== [PASSED] xe_rtp_rules_tests ================
[10:56:58] =============== xe_rtp_process_to_sr_tests ================
[10:56:58] [PASSED] coalesce-same-reg
[10:56:58] [PASSED] coalesce-same-reg-literal-and-func
[10:56:58] [PASSED] no-match-no-add
[10:56:58] [PASSED] two-regs-two-entries
[10:56:58] [PASSED] clr-one-set-other
[10:56:58] [PASSED] set-field
[10:56:58] [PASSED] conflict-duplicate
[10:56:58] [PASSED] conflict-not-disjoint
[10:56:58] [PASSED] conflict-not-disjoint-literal-and-func
[10:56:58] [PASSED] conflict-reg-type
[10:56:58] [PASSED] bad-mcr-reg-forced-to-regular
[10:56:58] [PASSED] bad-regular-reg-forced-to-mcr
[10:56:58] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[10:56:58] ================== xe_rtp_process_tests ===================
[10:56:58] [PASSED] active1
[10:56:58] [PASSED] active2
[10:56:58] [PASSED] active-inactive
[10:56:58] [PASSED] inactive-active
[10:56:58] [PASSED] inactive-active-inactive
[10:56:58] [PASSED] inactive-inactive-inactive
[10:56:58] ============== [PASSED] xe_rtp_process_tests ===============
[10:56:58] ===================== [PASSED] xe_rtp ======================
[10:56:58] ==================== xe_wa (1 subtest) =====================
[10:56:58] ======================== xe_wa_gt =========================
[10:56:58] [PASSED] TIGERLAKE B0
[10:56:58] [PASSED] DG1 A0
[10:56:58] [PASSED] DG1 B0
[10:56:58] [PASSED] ALDERLAKE_S A0
[10:56:58] [PASSED] ALDERLAKE_S B0
[10:56:58] [PASSED] ALDERLAKE_S C0
[10:56:58] [PASSED] ALDERLAKE_S D0
[10:56:58] [PASSED] ALDERLAKE_P A0
[10:56:58] [PASSED] ALDERLAKE_P B0
[10:56:58] [PASSED] ALDERLAKE_P C0
[10:56:58] [PASSED] ALDERLAKE_S RPLS D0
[10:56:58] [PASSED] ALDERLAKE_P RPLU E0
[10:56:58] [PASSED] DG2 G10 C0
[10:56:58] [PASSED] DG2 G11 B1
[10:56:58] [PASSED] DG2 G12 A1
[10:56:58] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[10:56:58] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[10:56:58] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[10:56:58] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[10:56:58] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[10:56:58] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[10:56:58] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[10:56:58] ==================== [PASSED] xe_wa_gt =====================
[10:56:58] ====================== [PASSED] xe_wa ======================
[10:56:58] ============================================================
[10:56:58] Testing complete. Ran 719 tests: passed: 701, skipped: 18
[10:56:58] Elapsed time: 36.134s total, 4.324s configuring, 31.145s building, 0.640s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[10:56:58] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[10:57:00] 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
[10:57:24] Starting KUnit Kernel (1/1)...
[10:57:24] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[10:57:24] ============ drm_test_pick_cmdline (2 subtests) ============
[10:57:24] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[10:57:24] =============== drm_test_pick_cmdline_named ===============
[10:57:24] [PASSED] NTSC
[10:57:24] [PASSED] NTSC-J
[10:57:24] [PASSED] PAL
[10:57:24] [PASSED] PAL-M
[10:57:24] =========== [PASSED] drm_test_pick_cmdline_named ===========
[10:57:24] ============== [PASSED] drm_test_pick_cmdline ==============
[10:57:24] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[10:57:24] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[10:57:24] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[10:57:24] =========== drm_validate_clone_mode (2 subtests) ===========
[10:57:24] ============== drm_test_check_in_clone_mode ===============
[10:57:24] [PASSED] in_clone_mode
[10:57:24] [PASSED] not_in_clone_mode
[10:57:24] ========== [PASSED] drm_test_check_in_clone_mode ===========
[10:57:24] =============== drm_test_check_valid_clones ===============
[10:57:24] [PASSED] not_in_clone_mode
[10:57:24] [PASSED] valid_clone
[10:57:24] [PASSED] invalid_clone
[10:57:24] =========== [PASSED] drm_test_check_valid_clones ===========
[10:57:24] ============= [PASSED] drm_validate_clone_mode =============
[10:57:24] ============= drm_validate_modeset (1 subtest) =============
[10:57:24] [PASSED] drm_test_check_connector_changed_modeset
[10:57:24] ============== [PASSED] drm_validate_modeset ===============
[10:57:24] ====== drm_test_bridge_get_current_state (2 subtests) ======
[10:57:24] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[10:57:24] [PASSED] drm_test_drm_bridge_get_current_state_legacy
[10:57:24] ======== [PASSED] drm_test_bridge_get_current_state ========
[10:57:24] ====== drm_test_bridge_helper_reset_crtc (4 subtests) ======
[10:57:24] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[10:57:24] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[10:57:24] [PASSED] drm_test_drm_bridge_helper_reset_crtc_legacy
[10:57:24] [PASSED] drm_test_drm_bridge_helper_hdmi_output_bus_fmts
[10:57:24] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[10:57:24] ============== drm_bridge_alloc (2 subtests) ===============
[10:57:24] [PASSED] drm_test_drm_bridge_alloc_basic
[10:57:24] [PASSED] drm_test_drm_bridge_alloc_get_put
[10:57:24] ================ [PASSED] drm_bridge_alloc =================
[10:57:24] ============= drm_bridge_bus_fmt (5 subtests) ==============
[10:57:24] [PASSED] drm_test_bridge_rgb_yuv_rgb
[10:57:24] [PASSED] drm_test_bridge_must_convert_to_yuv444
[10:57:24] [PASSED] drm_test_bridge_hdmi_auto_rgb
[10:57:24] [PASSED] drm_test_bridge_auto_first
[10:57:24] [PASSED] drm_test_bridge_rgb_yuv_no_path
[10:57:24] =============== [PASSED] drm_bridge_bus_fmt ================
[10:57:24] ============= drm_cmdline_parser (40 subtests) =============
[10:57:24] [PASSED] drm_test_cmdline_force_d_only
[10:57:24] [PASSED] drm_test_cmdline_force_D_only_dvi
[10:57:24] [PASSED] drm_test_cmdline_force_D_only_hdmi
[10:57:24] [PASSED] drm_test_cmdline_force_D_only_not_digital
[10:57:24] [PASSED] drm_test_cmdline_force_e_only
[10:57:24] [PASSED] drm_test_cmdline_res
[10:57:24] [PASSED] drm_test_cmdline_res_vesa
[10:57:24] [PASSED] drm_test_cmdline_res_vesa_rblank
[10:57:24] [PASSED] drm_test_cmdline_res_rblank
[10:57:24] [PASSED] drm_test_cmdline_res_bpp
[10:57:24] [PASSED] drm_test_cmdline_res_refresh
[10:57:24] [PASSED] drm_test_cmdline_res_bpp_refresh
[10:57:24] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[10:57:24] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[10:57:24] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[10:57:24] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[10:57:24] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[10:57:24] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[10:57:24] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[10:57:24] [PASSED] drm_test_cmdline_res_margins_force_on
[10:57:24] [PASSED] drm_test_cmdline_res_vesa_margins
[10:57:24] [PASSED] drm_test_cmdline_name
[10:57:24] [PASSED] drm_test_cmdline_name_bpp
[10:57:24] [PASSED] drm_test_cmdline_name_option
[10:57:24] [PASSED] drm_test_cmdline_name_bpp_option
[10:57:24] [PASSED] drm_test_cmdline_rotate_0
[10:57:24] [PASSED] drm_test_cmdline_rotate_90
[10:57:24] [PASSED] drm_test_cmdline_rotate_180
[10:57:24] [PASSED] drm_test_cmdline_rotate_270
[10:57:24] [PASSED] drm_test_cmdline_hmirror
[10:57:24] [PASSED] drm_test_cmdline_vmirror
[10:57:24] [PASSED] drm_test_cmdline_margin_options
[10:57:24] [PASSED] drm_test_cmdline_multiple_options
[10:57:24] [PASSED] drm_test_cmdline_bpp_extra_and_option
[10:57:24] [PASSED] drm_test_cmdline_extra_and_option
[10:57:24] [PASSED] drm_test_cmdline_freestanding_options
[10:57:24] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[10:57:24] [PASSED] drm_test_cmdline_panel_orientation
[10:57:24] ================ drm_test_cmdline_invalid =================
[10:57:24] [PASSED] margin_only
[10:57:24] [PASSED] interlace_only
[10:57:24] [PASSED] res_missing_x
[10:57:24] [PASSED] res_missing_y
[10:57:24] [PASSED] res_bad_y
[10:57:24] [PASSED] res_missing_y_bpp
[10:57:24] [PASSED] res_bad_bpp
[10:57:24] [PASSED] res_bad_refresh
[10:57:24] [PASSED] res_bpp_refresh_force_on_off
[10:57:24] [PASSED] res_invalid_mode
[10:57:24] [PASSED] res_bpp_wrong_place_mode
[10:57:24] [PASSED] name_bpp_refresh
[10:57:24] [PASSED] name_refresh
[10:57:24] [PASSED] name_refresh_wrong_mode
[10:57:24] [PASSED] name_refresh_invalid_mode
[10:57:24] [PASSED] rotate_multiple
[10:57:24] [PASSED] rotate_invalid_val
[10:57:24] [PASSED] rotate_truncated
[10:57:24] [PASSED] invalid_option
[10:57:24] [PASSED] invalid_tv_option
[10:57:24] [PASSED] truncated_tv_option
[10:57:24] ============ [PASSED] drm_test_cmdline_invalid =============
[10:57:24] =============== drm_test_cmdline_tv_options ===============
[10:57:24] [PASSED] NTSC
[10:57:24] [PASSED] NTSC_443
[10:57:24] [PASSED] NTSC_J
[10:57:24] [PASSED] PAL
[10:57:24] [PASSED] PAL_M
[10:57:24] [PASSED] PAL_N
[10:57:24] [PASSED] SECAM
[10:57:24] [PASSED] MONO_525
[10:57:24] [PASSED] MONO_625
[10:57:24] =========== [PASSED] drm_test_cmdline_tv_options ===========
[10:57:24] =============== [PASSED] drm_cmdline_parser ================
[10:57:24] ========== drmm_connector_hdmi_init (20 subtests) ==========
[10:57:24] [PASSED] drm_test_connector_hdmi_init_valid
[10:57:24] [PASSED] drm_test_connector_hdmi_init_bpc_8
[10:57:24] [PASSED] drm_test_connector_hdmi_init_bpc_10
[10:57:24] [PASSED] drm_test_connector_hdmi_init_bpc_12
[10:57:24] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[10:57:24] [PASSED] drm_test_connector_hdmi_init_bpc_null
[10:57:24] [PASSED] drm_test_connector_hdmi_init_formats_empty
[10:57:24] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[10:57:24] === drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[10:57:24] [PASSED] supported_formats=0x9 yuv420_allowed=1
[10:57:24] [PASSED] supported_formats=0x9 yuv420_allowed=0
[10:57:24] [PASSED] supported_formats=0x5 yuv420_allowed=1
[10:57:24] [PASSED] supported_formats=0x5 yuv420_allowed=0
[10:57:24] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[10:57:24] [PASSED] drm_test_connector_hdmi_init_null_ddc
[10:57:24] [PASSED] drm_test_connector_hdmi_init_null_product
[10:57:24] [PASSED] drm_test_connector_hdmi_init_null_vendor
[10:57:24] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[10:57:24] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[10:57:24] [PASSED] drm_test_connector_hdmi_init_product_valid
[10:57:24] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[10:57:24] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[10:57:24] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[10:57:24] ========= drm_test_connector_hdmi_init_type_valid =========
[10:57:24] [PASSED] HDMI-A
[10:57:24] [PASSED] HDMI-B
[10:57:24] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[10:57:24] ======== drm_test_connector_hdmi_init_type_invalid ========
[10:57:24] [PASSED] Unknown
[10:57:24] [PASSED] VGA
[10:57:24] [PASSED] DVI-I
[10:57:24] [PASSED] DVI-D
[10:57:24] [PASSED] DVI-A
[10:57:24] [PASSED] Composite
[10:57:24] [PASSED] SVIDEO
[10:57:24] [PASSED] LVDS
[10:57:24] [PASSED] Component
[10:57:24] [PASSED] DIN
[10:57:24] [PASSED] DP
[10:57:24] [PASSED] TV
[10:57:24] [PASSED] eDP
[10:57:24] [PASSED] Virtual
[10:57:24] [PASSED] DSI
[10:57:24] [PASSED] DPI
[10:57:24] [PASSED] Writeback
[10:57:24] [PASSED] SPI
[10:57:24] [PASSED] USB
[10:57:24] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[10:57:24] ============ [PASSED] drmm_connector_hdmi_init =============
[10:57:24] ============= drmm_connector_init (3 subtests) =============
[10:57:24] [PASSED] drm_test_drmm_connector_init
[10:57:24] [PASSED] drm_test_drmm_connector_init_null_ddc
[10:57:24] ========= drm_test_drmm_connector_init_type_valid =========
[10:57:24] [PASSED] Unknown
[10:57:24] [PASSED] VGA
[10:57:24] [PASSED] DVI-I
[10:57:24] [PASSED] DVI-D
[10:57:24] [PASSED] DVI-A
[10:57:24] [PASSED] Composite
[10:57:24] [PASSED] SVIDEO
[10:57:24] [PASSED] LVDS
[10:57:24] [PASSED] Component
[10:57:24] [PASSED] DIN
[10:57:24] [PASSED] DP
[10:57:24] [PASSED] HDMI-A
[10:57:24] [PASSED] HDMI-B
[10:57:24] [PASSED] TV
[10:57:24] [PASSED] eDP
[10:57:24] [PASSED] Virtual
[10:57:24] [PASSED] DSI
[10:57:24] [PASSED] DPI
[10:57:24] [PASSED] Writeback
[10:57:24] [PASSED] SPI
[10:57:24] [PASSED] USB
[10:57:24] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[10:57:24] =============== [PASSED] drmm_connector_init ===============
[10:57:24] ========= drm_connector_dynamic_init (6 subtests) ==========
[10:57:24] [PASSED] drm_test_drm_connector_dynamic_init
[10:57:24] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[10:57:24] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[10:57:24] [PASSED] drm_test_drm_connector_dynamic_init_properties
[10:57:24] ===== drm_test_drm_connector_dynamic_init_type_valid ======
[10:57:24] [PASSED] Unknown
[10:57:24] [PASSED] VGA
[10:57:24] [PASSED] DVI-I
[10:57:24] [PASSED] DVI-D
[10:57:24] [PASSED] DVI-A
[10:57:24] [PASSED] Composite
[10:57:24] [PASSED] SVIDEO
[10:57:24] [PASSED] LVDS
[10:57:24] [PASSED] Component
[10:57:24] [PASSED] DIN
[10:57:24] [PASSED] DP
[10:57:24] [PASSED] HDMI-A
[10:57:24] [PASSED] HDMI-B
[10:57:24] [PASSED] TV
[10:57:24] [PASSED] eDP
[10:57:24] [PASSED] Virtual
[10:57:24] [PASSED] DSI
[10:57:24] [PASSED] DPI
[10:57:24] [PASSED] Writeback
[10:57:24] [PASSED] SPI
[10:57:24] [PASSED] USB
[10:57:24] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[10:57:24] ======== drm_test_drm_connector_dynamic_init_name =========
[10:57:24] [PASSED] Unknown
[10:57:24] [PASSED] VGA
[10:57:24] [PASSED] DVI-I
[10:57:24] [PASSED] DVI-D
[10:57:24] [PASSED] DVI-A
[10:57:24] [PASSED] Composite
[10:57:24] [PASSED] SVIDEO
[10:57:24] [PASSED] LVDS
[10:57:24] [PASSED] Component
[10:57:24] [PASSED] DIN
[10:57:24] [PASSED] DP
[10:57:24] [PASSED] HDMI-A
[10:57:24] [PASSED] HDMI-B
[10:57:24] [PASSED] TV
[10:57:24] [PASSED] eDP
[10:57:24] [PASSED] Virtual
[10:57:24] [PASSED] DSI
[10:57:24] [PASSED] DPI
[10:57:24] [PASSED] Writeback
[10:57:24] [PASSED] SPI
[10:57:24] [PASSED] USB
[10:57:24] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[10:57:24] =========== [PASSED] drm_connector_dynamic_init ============
[10:57:24] ==== drm_connector_dynamic_register_early (4 subtests) =====
[10:57:24] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[10:57:24] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[10:57:24] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[10:57:24] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[10:57:24] ====== [PASSED] drm_connector_dynamic_register_early =======
[10:57:24] ======= drm_connector_dynamic_register (7 subtests) ========
[10:57:24] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[10:57:24] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[10:57:24] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[10:57:24] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[10:57:24] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[10:57:24] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[10:57:24] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[10:57:24] ========= [PASSED] drm_connector_dynamic_register ==========
[10:57:24] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[10:57:24] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[10:57:24] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[10:57:24] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[10:57:24] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[10:57:24] ========== drm_test_get_tv_mode_from_name_valid ===========
[10:57:24] [PASSED] NTSC
[10:57:24] [PASSED] NTSC-443
[10:57:24] [PASSED] NTSC-J
[10:57:24] [PASSED] PAL
[10:57:24] [PASSED] PAL-M
[10:57:24] [PASSED] PAL-N
[10:57:24] [PASSED] SECAM
[10:57:24] [PASSED] Mono
[10:57:24] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[10:57:24] [PASSED] drm_test_get_tv_mode_from_name_truncated
[10:57:24] ============ [PASSED] drm_get_tv_mode_from_name ============
[10:57:24] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[10:57:24] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[10:57:24] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[10:57:24] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[10:57:24] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[10:57:24] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[10:57:24] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[10:57:24] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[10:57:24] [PASSED] VIC 96
[10:57:24] [PASSED] VIC 97
[10:57:24] [PASSED] VIC 101
[10:57:24] [PASSED] VIC 102
[10:57:24] [PASSED] VIC 106
[10:57:24] [PASSED] VIC 107
[10:57:24] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[10:57:24] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[10:57:24] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[10:57:24] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[10:57:24] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[10:57:24] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[10:57:24] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[10:57:24] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[10:57:24] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[10:57:24] [PASSED] Automatic
[10:57:24] [PASSED] Full
[10:57:24] [PASSED] Limited 16:235
[10:57:24] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[10:57:24] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[10:57:24] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[10:57:24] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[10:57:24] === drm_test_drm_hdmi_connector_get_output_format_name ====
[10:57:24] [PASSED] RGB
[10:57:24] [PASSED] YUV 4:2:0
[10:57:24] [PASSED] YUV 4:2:2
[10:57:24] [PASSED] YUV 4:4:4
[10:57:24] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[10:57:24] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[10:57:24] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[10:57:24] ============= drm_damage_helper (21 subtests) ==============
[10:57:24] [PASSED] drm_test_damage_iter_no_damage
[10:57:24] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[10:57:24] [PASSED] drm_test_damage_iter_no_damage_src_moved
[10:57:24] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[10:57:24] [PASSED] drm_test_damage_iter_no_damage_not_visible
[10:57:24] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[10:57:24] [PASSED] drm_test_damage_iter_no_damage_no_fb
[10:57:24] [PASSED] drm_test_damage_iter_simple_damage
[10:57:24] [PASSED] drm_test_damage_iter_single_damage
[10:57:24] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[10:57:24] [PASSED] drm_test_damage_iter_single_damage_outside_src
[10:57:24] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[10:57:24] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[10:57:24] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[10:57:24] [PASSED] drm_test_damage_iter_single_damage_src_moved
[10:57:24] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[10:57:24] [PASSED] drm_test_damage_iter_damage
[10:57:24] [PASSED] drm_test_damage_iter_damage_one_intersect
[10:57:24] [PASSED] drm_test_damage_iter_damage_one_outside
[10:57:24] [PASSED] drm_test_damage_iter_damage_src_moved
[10:57:24] [PASSED] drm_test_damage_iter_damage_not_visible
[10:57:24] ================ [PASSED] drm_damage_helper ================
[10:57:24] ============== drm_dp_mst_helper (3 subtests) ==============
[10:57:24] ============== drm_test_dp_mst_calc_pbn_mode ==============
[10:57:24] [PASSED] Clock 154000 BPP 30 DSC disabled
[10:57:24] [PASSED] Clock 234000 BPP 30 DSC disabled
[10:57:24] [PASSED] Clock 297000 BPP 24 DSC disabled
[10:57:24] [PASSED] Clock 332880 BPP 24 DSC enabled
[10:57:24] [PASSED] Clock 324540 BPP 24 DSC enabled
[10:57:24] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[10:57:24] ============== drm_test_dp_mst_calc_pbn_div ===============
[10:57:24] [PASSED] Link rate 2000000 lane count 4
[10:57:24] [PASSED] Link rate 2000000 lane count 2
[10:57:24] [PASSED] Link rate 2000000 lane count 1
[10:57:24] [PASSED] Link rate 1350000 lane count 4
[10:57:24] [PASSED] Link rate 1350000 lane count 2
[10:57:24] [PASSED] Link rate 1350000 lane count 1
[10:57:24] [PASSED] Link rate 1000000 lane count 4
[10:57:24] [PASSED] Link rate 1000000 lane count 2
[10:57:24] [PASSED] Link rate 1000000 lane count 1
[10:57:24] [PASSED] Link rate 810000 lane count 4
[10:57:24] [PASSED] Link rate 810000 lane count 2
[10:57:24] [PASSED] Link rate 810000 lane count 1
[10:57:24] [PASSED] Link rate 540000 lane count 4
[10:57:24] [PASSED] Link rate 540000 lane count 2
[10:57:24] [PASSED] Link rate 540000 lane count 1
[10:57:24] [PASSED] Link rate 270000 lane count 4
[10:57:24] [PASSED] Link rate 270000 lane count 2
[10:57:24] [PASSED] Link rate 270000 lane count 1
[10:57:24] [PASSED] Link rate 162000 lane count 4
[10:57:24] [PASSED] Link rate 162000 lane count 2
[10:57:24] [PASSED] Link rate 162000 lane count 1
[10:57:24] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[10:57:24] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[10:57:24] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[10:57:24] [PASSED] DP_POWER_UP_PHY with port number
[10:57:24] [PASSED] DP_POWER_DOWN_PHY with port number
[10:57:24] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[10:57:24] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[10:57:24] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[10:57:24] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[10:57:24] [PASSED] DP_QUERY_PAYLOAD with port number
[10:57:24] [PASSED] DP_QUERY_PAYLOAD with VCPI
[10:57:24] [PASSED] DP_REMOTE_DPCD_READ with port number
[10:57:24] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[10:57:24] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[10:57:24] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[10:57:24] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[10:57:24] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[10:57:24] [PASSED] DP_REMOTE_I2C_READ with port number
[10:57:24] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[10:57:24] [PASSED] DP_REMOTE_I2C_READ with transactions array
[10:57:24] [PASSED] DP_REMOTE_I2C_WRITE with port number
[10:57:24] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[10:57:24] [PASSED] DP_REMOTE_I2C_WRITE with data array
[10:57:24] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[10:57:24] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[10:57:24] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[10:57:24] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[10:57:24] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[10:57:24] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[10:57:24] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[10:57:24] ================ [PASSED] drm_dp_mst_helper ================
[10:57:24] ================== drm_exec (7 subtests) ===================
[10:57:24] [PASSED] sanitycheck
[10:57:24] [PASSED] test_lock
[10:57:24] [PASSED] test_lock_unlock
[10:57:24] [PASSED] test_duplicates
[10:57:24] [PASSED] test_prepare
[10:57:24] [PASSED] test_prepare_array
[10:57:24] [PASSED] test_multiple_loops
[10:57:24] ==================== [PASSED] drm_exec =====================
[10:57:24] =========== drm_format_helper_test (17 subtests) ===========
[10:57:24] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[10:57:24] [PASSED] single_pixel_source_buffer
[10:57:24] [PASSED] single_pixel_clip_rectangle
[10:57:24] [PASSED] well_known_colors
[10:57:24] [PASSED] destination_pitch
[10:57:24] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[10:57:24] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[10:57:24] [PASSED] single_pixel_source_buffer
[10:57:24] [PASSED] single_pixel_clip_rectangle
[10:57:24] [PASSED] well_known_colors
[10:57:24] [PASSED] destination_pitch
[10:57:24] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[10:57:24] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[10:57:24] [PASSED] single_pixel_source_buffer
[10:57:24] [PASSED] single_pixel_clip_rectangle
[10:57:24] [PASSED] well_known_colors
[10:57:24] [PASSED] destination_pitch
[10:57:24] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[10:57:24] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[10:57:24] [PASSED] single_pixel_source_buffer
[10:57:24] [PASSED] single_pixel_clip_rectangle
[10:57:24] [PASSED] well_known_colors
[10:57:24] [PASSED] destination_pitch
[10:57:24] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[10:57:24] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[10:57:24] [PASSED] single_pixel_source_buffer
[10:57:24] [PASSED] single_pixel_clip_rectangle
[10:57:24] [PASSED] well_known_colors
[10:57:24] [PASSED] destination_pitch
[10:57:24] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[10:57:24] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[10:57:24] [PASSED] single_pixel_source_buffer
[10:57:24] [PASSED] single_pixel_clip_rectangle
[10:57:24] [PASSED] well_known_colors
[10:57:24] [PASSED] destination_pitch
[10:57:24] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[10:57:24] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[10:57:24] [PASSED] single_pixel_source_buffer
[10:57:24] [PASSED] single_pixel_clip_rectangle
[10:57:24] [PASSED] well_known_colors
[10:57:24] [PASSED] destination_pitch
[10:57:24] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[10:57:24] ============= drm_test_fb_xrgb8888_to_bgr888 ==============
[10:57:24] [PASSED] single_pixel_source_buffer
[10:57:24] [PASSED] single_pixel_clip_rectangle
[10:57:24] [PASSED] well_known_colors
[10:57:24] [PASSED] destination_pitch
[10:57:24] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[10:57:24] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[10:57:24] [PASSED] single_pixel_source_buffer
[10:57:24] [PASSED] single_pixel_clip_rectangle
[10:57:24] [PASSED] well_known_colors
[10:57:24] [PASSED] destination_pitch
[10:57:24] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[10:57:24] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[10:57:24] [PASSED] single_pixel_source_buffer
[10:57:24] [PASSED] single_pixel_clip_rectangle
[10:57:24] [PASSED] well_known_colors
[10:57:24] [PASSED] destination_pitch
[10:57:24] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[10:57:24] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[10:57:24] [PASSED] single_pixel_source_buffer
[10:57:24] [PASSED] single_pixel_clip_rectangle
[10:57:24] [PASSED] well_known_colors
[10:57:24] [PASSED] destination_pitch
[10:57:24] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[10:57:24] ============== drm_test_fb_xrgb8888_to_mono ===============
[10:57:24] [PASSED] single_pixel_source_buffer
[10:57:24] [PASSED] single_pixel_clip_rectangle
[10:57:24] [PASSED] well_known_colors
[10:57:24] [PASSED] destination_pitch
[10:57:24] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[10:57:24] ==================== drm_test_fb_swab =====================
[10:57:24] [PASSED] single_pixel_source_buffer
[10:57:24] [PASSED] single_pixel_clip_rectangle
[10:57:24] [PASSED] well_known_colors
[10:57:24] [PASSED] destination_pitch
[10:57:24] ================ [PASSED] drm_test_fb_swab =================
[10:57:24] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[10:57:24] [PASSED] single_pixel_source_buffer
[10:57:24] [PASSED] single_pixel_clip_rectangle
[10:57:24] [PASSED] well_known_colors
[10:57:24] [PASSED] destination_pitch
[10:57:24] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[10:57:24] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[10:57:24] [PASSED] single_pixel_source_buffer
[10:57:24] [PASSED] single_pixel_clip_rectangle
[10:57:24] [PASSED] well_known_colors
[10:57:24] [PASSED] destination_pitch
[10:57:24] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[10:57:24] ================= drm_test_fb_clip_offset =================
[10:57:24] [PASSED] pass through
[10:57:24] [PASSED] horizontal offset
[10:57:24] [PASSED] vertical offset
[10:57:24] [PASSED] horizontal and vertical offset
[10:57:24] [PASSED] horizontal offset (custom pitch)
[10:57:24] [PASSED] vertical offset (custom pitch)
[10:57:24] [PASSED] horizontal and vertical offset (custom pitch)
[10:57:24] ============= [PASSED] drm_test_fb_clip_offset =============
[10:57:24] =================== drm_test_fb_memcpy ====================
[10:57:24] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[10:57:24] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[10:57:24] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[10:57:24] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[10:57:24] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[10:57:24] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[10:57:24] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[10:57:24] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[10:57:24] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[10:57:24] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[10:57:24] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[10:57:24] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[10:57:24] =============== [PASSED] drm_test_fb_memcpy ================
[10:57:24] ============= [PASSED] drm_format_helper_test ==============
[10:57:24] ================= drm_format (18 subtests) =================
[10:57:24] [PASSED] drm_test_format_block_width_invalid
[10:57:24] [PASSED] drm_test_format_block_width_one_plane
[10:57:24] [PASSED] drm_test_format_block_width_two_plane
[10:57:24] [PASSED] drm_test_format_block_width_three_plane
[10:57:24] [PASSED] drm_test_format_block_width_tiled
[10:57:24] [PASSED] drm_test_format_block_height_invalid
[10:57:24] [PASSED] drm_test_format_block_height_one_plane
[10:57:24] [PASSED] drm_test_format_block_height_two_plane
[10:57:24] [PASSED] drm_test_format_block_height_three_plane
[10:57:24] [PASSED] drm_test_format_block_height_tiled
[10:57:24] [PASSED] drm_test_format_min_pitch_invalid
[10:57:24] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[10:57:24] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[10:57:24] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[10:57:24] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[10:57:24] [PASSED] drm_test_format_min_pitch_two_plane
[10:57:24] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[10:57:24] [PASSED] drm_test_format_min_pitch_tiled
[10:57:24] =================== [PASSED] drm_format ====================
[10:57:24] ============== drm_framebuffer (10 subtests) ===============
[10:57:24] ========== drm_test_framebuffer_check_src_coords ==========
[10:57:24] [PASSED] Success: source fits into fb
[10:57:24] [PASSED] Fail: overflowing fb with x-axis coordinate
[10:57:24] [PASSED] Fail: overflowing fb with y-axis coordinate
[10:57:24] [PASSED] Fail: overflowing fb with source width
[10:57:24] [PASSED] Fail: overflowing fb with source height
[10:57:24] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[10:57:24] [PASSED] drm_test_framebuffer_cleanup
[10:57:24] =============== drm_test_framebuffer_create ===============
[10:57:24] [PASSED] ABGR8888 normal sizes
[10:57:24] [PASSED] ABGR8888 max sizes
[10:57:24] [PASSED] ABGR8888 pitch greater than min required
[10:57:24] [PASSED] ABGR8888 pitch less than min required
[10:57:24] [PASSED] ABGR8888 Invalid width
[10:57:24] [PASSED] ABGR8888 Invalid buffer handle
[10:57:24] [PASSED] No pixel format
[10:57:24] [PASSED] ABGR8888 Width 0
[10:57:24] [PASSED] ABGR8888 Height 0
[10:57:24] [PASSED] ABGR8888 Out of bound height * pitch combination
[10:57:24] [PASSED] ABGR8888 Large buffer offset
[10:57:24] [PASSED] ABGR8888 Buffer offset for inexistent plane
[10:57:24] [PASSED] ABGR8888 Invalid flag
[10:57:24] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[10:57:24] [PASSED] ABGR8888 Valid buffer modifier
[10:57:24] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[10:57:24] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[10:57:24] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[10:57:24] [PASSED] NV12 Normal sizes
[10:57:24] [PASSED] NV12 Max sizes
[10:57:24] [PASSED] NV12 Invalid pitch
[10:57:24] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[10:57:24] [PASSED] NV12 different modifier per-plane
[10:57:24] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[10:57:24] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[10:57:24] [PASSED] NV12 Modifier for inexistent plane
[10:57:24] [PASSED] NV12 Handle for inexistent plane
[10:57:24] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[10:57:24] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[10:57:24] [PASSED] YVU420 Normal sizes
[10:57:24] [PASSED] YVU420 Max sizes
[10:57:24] [PASSED] YVU420 Invalid pitch
[10:57:24] [PASSED] YVU420 Different pitches
[10:57:24] [PASSED] YVU420 Different buffer offsets/pitches
[10:57:24] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[10:57:24] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[10:57:24] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[10:57:24] [PASSED] YVU420 Valid modifier
[10:57:24] [PASSED] YVU420 Different modifiers per plane
[10:57:24] [PASSED] YVU420 Modifier for inexistent plane
[10:57:24] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[10:57:24] [PASSED] X0L2 Normal sizes
[10:57:24] [PASSED] X0L2 Max sizes
[10:57:24] [PASSED] X0L2 Invalid pitch
[10:57:24] [PASSED] X0L2 Pitch greater than minimum required
[10:57:24] [PASSED] X0L2 Handle for inexistent plane
[10:57:24] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[10:57:24] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[10:57:24] [PASSED] X0L2 Valid modifier
[10:57:24] [PASSED] X0L2 Modifier for inexistent plane
[10:57:24] =========== [PASSED] drm_test_framebuffer_create ===========
[10:57:24] [PASSED] drm_test_framebuffer_free
[10:57:24] [PASSED] drm_test_framebuffer_init
[10:57:24] [PASSED] drm_test_framebuffer_init_bad_format
[10:57:24] [PASSED] drm_test_framebuffer_init_dev_mismatch
[10:57:24] [PASSED] drm_test_framebuffer_lookup
[10:57:24] [PASSED] drm_test_framebuffer_lookup_inexistent
[10:57:24] [PASSED] drm_test_framebuffer_modifiers_not_supported
[10:57:24] ================= [PASSED] drm_framebuffer =================
[10:57:24] ================ drm_gem_shmem (8 subtests) ================
[10:57:24] [PASSED] drm_gem_shmem_test_obj_create
[10:57:24] [PASSED] drm_gem_shmem_test_obj_create_private
[10:57:24] [PASSED] drm_gem_shmem_test_pin_pages
[10:57:24] [PASSED] drm_gem_shmem_test_vmap
[10:57:24] [PASSED] drm_gem_shmem_test_get_sg_table
[10:57:24] [PASSED] drm_gem_shmem_test_get_pages_sgt
[10:57:24] [PASSED] drm_gem_shmem_test_madvise
[10:57:24] [PASSED] drm_gem_shmem_test_purge
[10:57:24] ================== [PASSED] drm_gem_shmem ==================
[10:57:24] === drm_atomic_helper_connector_hdmi_check (29 subtests) ===
[10:57:24] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[10:57:24] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[10:57:24] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[10:57:24] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[10:57:24] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[10:57:24] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[10:57:24] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 =======
[10:57:24] [PASSED] Automatic
[10:57:24] [PASSED] Full
[10:57:24] [PASSED] Limited 16:235
[10:57:24] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[10:57:24] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[10:57:24] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[10:57:24] [PASSED] drm_test_check_disable_connector
[10:57:24] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[10:57:24] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[10:57:24] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[10:57:24] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[10:57:24] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[10:57:24] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[10:57:24] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[10:57:24] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[10:57:24] [PASSED] drm_test_check_output_bpc_dvi
[10:57:24] [PASSED] drm_test_check_output_bpc_format_vic_1
[10:57:24] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[10:57:24] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[10:57:24] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[10:57:24] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[10:57:24] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[10:57:24] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[10:57:24] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[10:57:24] ============ drm_test_check_hdmi_color_format =============
[10:57:24] [PASSED] AUTO -> RGB
[10:57:24] [PASSED] YCBCR422 -> YUV422
[10:57:24] [PASSED] YCBCR420 -> YUV420
[10:57:24] [PASSED] YCBCR444 -> YUV444
[10:57:24] [PASSED] RGB -> RGB
[10:57:24] ======== [PASSED] drm_test_check_hdmi_color_format =========
[10:57:24] ======== drm_test_check_hdmi_color_format_420_only ========
[10:57:24] [PASSED] RGB should fail
[10:57:24] [PASSED] YUV444 should fail
[10:57:24] [PASSED] YUV422 should fail
[10:57:24] [PASSED] YUV420 should work
[10:57:24] ==== [PASSED] drm_test_check_hdmi_color_format_420_only ====
[10:57:24] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[10:57:24] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[10:57:24] [PASSED] drm_test_check_broadcast_rgb_value
[10:57:24] [PASSED] drm_test_check_bpc_8_value
[10:57:24] [PASSED] drm_test_check_bpc_10_value
[10:57:24] [PASSED] drm_test_check_bpc_12_value
[10:57:24] [PASSED] drm_test_check_format_value
[10:57:24] [PASSED] drm_test_check_tmds_char_value
[10:57:24] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[10:57:24] = drm_atomic_helper_connector_hdmi_mode_valid (7 subtests) =
[10:57:24] [PASSED] drm_test_check_mode_valid
[10:57:24] [PASSED] drm_test_check_mode_valid_reject
[10:57:24] [PASSED] drm_test_check_mode_valid_reject_rate
[10:57:24] [PASSED] drm_test_check_mode_valid_reject_max_clock
[10:57:24] [PASSED] drm_test_check_mode_valid_yuv420_only_max_clock
[10:57:24] [PASSED] drm_test_check_mode_valid_reject_yuv420_only_connector
[10:57:24] [PASSED] drm_test_check_mode_valid_accept_yuv420_also_connector_rgb
[10:57:24] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[10:57:24] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[10:57:24] [PASSED] drm_test_check_infoframes
[10:57:24] [PASSED] drm_test_check_reject_avi_infoframe
[10:57:24] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[10:57:24] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[10:57:24] [PASSED] drm_test_check_reject_audio_infoframe
[10:57:24] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[10:57:24] ================= drm_managed (2 subtests) =================
[10:57:24] [PASSED] drm_test_managed_release_action
[10:57:24] [PASSED] drm_test_managed_run_action
[10:57:24] =================== [PASSED] drm_managed ===================
[10:57:24] =================== drm_mm (6 subtests) ====================
[10:57:24] [PASSED] drm_test_mm_init
[10:57:24] [PASSED] drm_test_mm_debug
[10:57:24] [PASSED] drm_test_mm_align32
[10:57:24] [PASSED] drm_test_mm_align64
[10:57:24] [PASSED] drm_test_mm_lowest
[10:57:24] [PASSED] drm_test_mm_highest
[10:57:24] ===================== [PASSED] drm_mm ======================
[10:57:24] ============= drm_modes_analog_tv (5 subtests) =============
[10:57:24] [PASSED] drm_test_modes_analog_tv_mono_576i
[10:57:24] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[10:57:24] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[10:57:24] [PASSED] drm_test_modes_analog_tv_pal_576i
[10:57:24] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[10:57:24] =============== [PASSED] drm_modes_analog_tv ===============
[10:57:24] ============== drm_plane_helper (2 subtests) ===============
[10:57:24] =============== drm_test_check_plane_state ================
[10:57:24] [PASSED] clipping_simple
[10:57:24] [PASSED] clipping_rotate_reflect
[10:57:24] [PASSED] positioning_simple
[10:57:24] [PASSED] upscaling
[10:57:24] [PASSED] downscaling
[10:57:24] [PASSED] rounding1
[10:57:24] [PASSED] rounding2
[10:57:24] [PASSED] rounding3
[10:57:24] [PASSED] rounding4
[10:57:24] =========== [PASSED] drm_test_check_plane_state ============
[10:57:24] =========== drm_test_check_invalid_plane_state ============
[10:57:24] [PASSED] positioning_invalid
[10:57:24] [PASSED] upscaling_invalid
[10:57:24] [PASSED] downscaling_invalid
[10:57:24] ======= [PASSED] drm_test_check_invalid_plane_state ========
[10:57:24] ================ [PASSED] drm_plane_helper =================
[10:57:24] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[10:57:24] ====== drm_test_connector_helper_tv_get_modes_check =======
[10:57:24] [PASSED] None
[10:57:24] [PASSED] PAL
[10:57:24] [PASSED] NTSC
[10:57:24] [PASSED] Both, NTSC Default
[10:57:24] [PASSED] Both, PAL Default
[10:57:24] [PASSED] Both, NTSC Default, with PAL on command-line
[10:57:24] [PASSED] Both, PAL Default, with NTSC on command-line
[10:57:24] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[10:57:24] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[10:57:24] ================== drm_rect (9 subtests) ===================
[10:57:24] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[10:57:24] [PASSED] drm_test_rect_clip_scaled_not_clipped
[10:57:24] [PASSED] drm_test_rect_clip_scaled_clipped
[10:57:24] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[10:57:24] ================= drm_test_rect_intersect =================
[10:57:24] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[10:57:24] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[10:57:24] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[10:57:24] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[10:57:24] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[10:57:24] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[10:57:24] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[10:57:24] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[10:57:24] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[10:57:24] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[10:57:24] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[10:57:24] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[10:57:24] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[10:57:24] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[10:57:24] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[10:57:24] ============= [PASSED] drm_test_rect_intersect =============
[10:57:24] ================ drm_test_rect_calc_hscale ================
[10:57:24] [PASSED] normal use
[10:57:24] [PASSED] out of max range
[10:57:24] [PASSED] out of min range
[10:57:24] [PASSED] zero dst
[10:57:24] [PASSED] negative src
[10:57:24] [PASSED] negative dst
[10:57:24] ============ [PASSED] drm_test_rect_calc_hscale ============
[10:57:24] ================ drm_test_rect_calc_vscale ================
[10:57:24] [PASSED] normal use
[10:57:24] [PASSED] out of max range
[10:57:24] [PASSED] out of min range
[10:57:24] [PASSED] zero dst
[10:57:24] [PASSED] negative src
[10:57:24] [PASSED] negative dst
[10:57:24] ============ [PASSED] drm_test_rect_calc_vscale ============
[10:57:24] ================== drm_test_rect_rotate ===================
[10:57:24] [PASSED] reflect-x
[10:57:24] [PASSED] reflect-y
[10:57:24] [PASSED] rotate-0
[10:57:24] [PASSED] rotate-90
[10:57:24] [PASSED] rotate-180
[10:57:24] [PASSED] rotate-270
[10:57:24] ============== [PASSED] drm_test_rect_rotate ===============
[10:57:24] ================ drm_test_rect_rotate_inv =================
[10:57:24] [PASSED] reflect-x
[10:57:24] [PASSED] reflect-y
[10:57:24] [PASSED] rotate-0
[10:57:24] [PASSED] rotate-90
[10:57:24] [PASSED] rotate-180
[10:57:24] [PASSED] rotate-270
[10:57:24] ============ [PASSED] drm_test_rect_rotate_inv =============
[10:57:24] ==================== [PASSED] drm_rect =====================
[10:57:24] ============ drm_sysfb_modeset_test (1 subtest) ============
[10:57:24] ============ drm_test_sysfb_build_fourcc_list =============
[10:57:24] [PASSED] no native formats
[10:57:24] [PASSED] XRGB8888 as native format
[10:57:24] [PASSED] remove duplicates
[10:57:24] [PASSED] convert alpha formats
[10:57:24] [PASSED] random formats
[10:57:24] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[10:57:24] ============= [PASSED] drm_sysfb_modeset_test ==============
[10:57:24] ================== drm_fixp (2 subtests) ===================
[10:57:24] [PASSED] drm_test_int2fixp
[10:57:24] [PASSED] drm_test_sm2fixp
[10:57:24] ==================== [PASSED] drm_fixp =====================
[10:57:24] ============================================================
[10:57:24] Testing complete. Ran 639 tests: passed: 639
[10:57:24] Elapsed time: 26.236s total, 1.788s configuring, 24.233s building, 0.182s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[10:57:24] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[10:57:26] 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
[10:57:36] Starting KUnit Kernel (1/1)...
[10:57:36] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[10:57:36] ================= ttm_device (5 subtests) ==================
[10:57:36] [PASSED] ttm_device_init_basic
[10:57:36] [PASSED] ttm_device_init_multiple
[10:57:36] [PASSED] ttm_device_fini_basic
[10:57:36] [PASSED] ttm_device_init_no_vma_man
[10:57:36] ================== ttm_device_init_pools ==================
[10:57:36] [PASSED] No DMA allocations, no DMA32 required
[10:57:36] [PASSED] DMA allocations, DMA32 required
[10:57:36] [PASSED] No DMA allocations, DMA32 required
[10:57:36] [PASSED] DMA allocations, no DMA32 required
[10:57:36] ============== [PASSED] ttm_device_init_pools ==============
[10:57:36] =================== [PASSED] ttm_device ====================
[10:57:36] ================== ttm_pool (8 subtests) ===================
[10:57:36] ================== ttm_pool_alloc_basic ===================
[10:57:36] [PASSED] One page
[10:57:36] [PASSED] More than one page
[10:57:36] [PASSED] Above the allocation limit
[10:57:36] [PASSED] One page, with coherent DMA mappings enabled
[10:57:36] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[10:57:36] ============== [PASSED] ttm_pool_alloc_basic ===============
[10:57:36] ============== ttm_pool_alloc_basic_dma_addr ==============
[10:57:36] [PASSED] One page
[10:57:36] [PASSED] More than one page
[10:57:36] [PASSED] Above the allocation limit
[10:57:36] [PASSED] One page, with coherent DMA mappings enabled
[10:57:36] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[10:57:36] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[10:57:36] [PASSED] ttm_pool_alloc_order_caching_match
[10:57:36] [PASSED] ttm_pool_alloc_caching_mismatch
[10:57:36] [PASSED] ttm_pool_alloc_order_mismatch
[10:57:36] [PASSED] ttm_pool_free_dma_alloc
[10:57:36] [PASSED] ttm_pool_free_no_dma_alloc
[10:57:36] [PASSED] ttm_pool_fini_basic
[10:57:36] ==================== [PASSED] ttm_pool =====================
[10:57:36] ================ ttm_resource (8 subtests) =================
[10:57:36] ================= ttm_resource_init_basic =================
[10:57:36] [PASSED] Init resource in TTM_PL_SYSTEM
[10:57:36] [PASSED] Init resource in TTM_PL_VRAM
[10:57:36] [PASSED] Init resource in a private placement
[10:57:36] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[10:57:36] ============= [PASSED] ttm_resource_init_basic =============
[10:57:36] [PASSED] ttm_resource_init_pinned
[10:57:36] [PASSED] ttm_resource_fini_basic
[10:57:36] [PASSED] ttm_resource_manager_init_basic
[10:57:36] [PASSED] ttm_resource_manager_usage_basic
[10:57:36] [PASSED] ttm_resource_manager_set_used_basic
[10:57:36] [PASSED] ttm_sys_man_alloc_basic
[10:57:36] [PASSED] ttm_sys_man_free_basic
[10:57:36] ================== [PASSED] ttm_resource ===================
[10:57:36] =================== ttm_tt (15 subtests) ===================
[10:57:36] ==================== ttm_tt_init_basic ====================
[10:57:36] [PASSED] Page-aligned size
[10:57:36] [PASSED] Extra pages requested
[10:57:36] ================ [PASSED] ttm_tt_init_basic ================
[10:57:36] [PASSED] ttm_tt_init_misaligned
[10:57:36] [PASSED] ttm_tt_fini_basic
[10:57:36] [PASSED] ttm_tt_fini_sg
[10:57:36] [PASSED] ttm_tt_fini_shmem
[10:57:36] [PASSED] ttm_tt_create_basic
[10:57:36] [PASSED] ttm_tt_create_invalid_bo_type
[10:57:36] [PASSED] ttm_tt_create_ttm_exists
[10:57:36] [PASSED] ttm_tt_create_failed
[10:57:36] [PASSED] ttm_tt_destroy_basic
[10:57:36] [PASSED] ttm_tt_populate_null_ttm
[10:57:36] [PASSED] ttm_tt_populate_populated_ttm
[10:57:36] [PASSED] ttm_tt_unpopulate_basic
[10:57:36] [PASSED] ttm_tt_unpopulate_empty_ttm
[10:57:36] [PASSED] ttm_tt_swapin_basic
[10:57:36] ===================== [PASSED] ttm_tt ======================
[10:57:36] =================== ttm_bo (14 subtests) ===================
[10:57:36] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[10:57:36] [PASSED] Cannot be interrupted and sleeps
[10:57:36] [PASSED] Cannot be interrupted, locks straight away
[10:57:36] [PASSED] Can be interrupted, sleeps
[10:57:36] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[10:57:36] [PASSED] ttm_bo_reserve_locked_no_sleep
[10:57:36] [PASSED] ttm_bo_reserve_no_wait_ticket
[10:57:36] [PASSED] ttm_bo_reserve_double_resv
[10:57:36] [PASSED] ttm_bo_reserve_interrupted
[10:57:36] [PASSED] ttm_bo_reserve_deadlock
[10:57:36] [PASSED] ttm_bo_unreserve_basic
[10:57:36] [PASSED] ttm_bo_unreserve_pinned
[10:57:36] [PASSED] ttm_bo_unreserve_bulk
[10:57:36] [PASSED] ttm_bo_fini_basic
[10:57:36] [PASSED] ttm_bo_fini_shared_resv
[10:57:36] [PASSED] ttm_bo_pin_basic
[10:57:36] [PASSED] ttm_bo_pin_unpin_resource
[10:57:36] [PASSED] ttm_bo_multiple_pin_one_unpin
[10:57:36] ===================== [PASSED] ttm_bo ======================
[10:57:36] ============== ttm_bo_validate (22 subtests) ===============
[10:57:36] ============== ttm_bo_init_reserved_sys_man ===============
[10:57:36] [PASSED] Buffer object for userspace
[10:57:36] [PASSED] Kernel buffer object
[10:57:36] [PASSED] Shared buffer object
[10:57:36] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[10:57:36] ============== ttm_bo_init_reserved_mock_man ==============
[10:57:36] [PASSED] Buffer object for userspace
[10:57:36] [PASSED] Kernel buffer object
[10:57:36] [PASSED] Shared buffer object
[10:57:36] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[10:57:36] [PASSED] ttm_bo_init_reserved_resv
[10:57:36] ================== ttm_bo_validate_basic ==================
[10:57:36] [PASSED] Buffer object for userspace
[10:57:36] [PASSED] Kernel buffer object
[10:57:36] [PASSED] Shared buffer object
[10:57:36] ============== [PASSED] ttm_bo_validate_basic ==============
[10:57:36] [PASSED] ttm_bo_validate_invalid_placement
[10:57:36] ============= ttm_bo_validate_same_placement ==============
[10:57:36] [PASSED] System manager
[10:57:36] [PASSED] VRAM manager
[10:57:36] ========= [PASSED] ttm_bo_validate_same_placement ==========
[10:57:36] [PASSED] ttm_bo_validate_failed_alloc
[10:57:36] [PASSED] ttm_bo_validate_pinned
[10:57:36] [PASSED] ttm_bo_validate_busy_placement
[10:57:36] ================ ttm_bo_validate_multihop =================
[10:57:36] [PASSED] Buffer object for userspace
[10:57:36] [PASSED] Kernel buffer object
[10:57:36] [PASSED] Shared buffer object
[10:57:36] ============ [PASSED] ttm_bo_validate_multihop =============
[10:57:36] ========== ttm_bo_validate_no_placement_signaled ==========
[10:57:36] [PASSED] Buffer object in system domain, no page vector
[10:57:36] [PASSED] Buffer object in system domain with an existing page vector
[10:57:36] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[10:57:36] ======== ttm_bo_validate_no_placement_not_signaled ========
[10:57:36] [PASSED] Buffer object for userspace
[10:57:36] [PASSED] Kernel buffer object
[10:57:36] [PASSED] Shared buffer object
[10:57:36] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[10:57:36] [PASSED] ttm_bo_validate_move_fence_signaled
[10:57:36] ========= ttm_bo_validate_move_fence_not_signaled =========
[10:57:36] [PASSED] Waits for GPU
[10:57:36] [PASSED] Tries to lock straight away
[10:57:36] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[10:57:36] [PASSED] ttm_bo_validate_swapout
[10:57:36] [PASSED] ttm_bo_validate_happy_evict
[10:57:36] [PASSED] ttm_bo_validate_all_pinned_evict
[10:57:36] [PASSED] ttm_bo_validate_allowed_only_evict
[10:57:36] [PASSED] ttm_bo_validate_deleted_evict
[10:57:36] [PASSED] ttm_bo_validate_busy_domain_evict
[10:57:36] [PASSED] ttm_bo_validate_evict_gutting
[10:57:36] [PASSED] ttm_bo_validate_recrusive_evict
[10:57:36] ================= [PASSED] ttm_bo_validate =================
[10:57:36] ============================================================
[10:57:36] Testing complete. Ran 102 tests: passed: 102
[10:57:36] Elapsed time: 11.556s total, 1.798s configuring, 9.544s building, 0.180s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 14+ messages in thread* ✓ Xe.CI.BAT: success for Introduce error threshold to drm_ras (rev4)
2026-06-23 10:09 [PATCH v4 0/5] Introduce error threshold to drm_ras Raag Jadav
` (6 preceding siblings ...)
2026-06-23 10:57 ` ✓ CI.KUnit: success " Patchwork
@ 2026-06-23 12:24 ` Patchwork
2026-06-23 14:14 ` ✓ Xe.CI.FULL: " Patchwork
8 siblings, 0 replies; 14+ messages in thread
From: Patchwork @ 2026-06-23 12:24 UTC (permalink / raw)
To: Raag Jadav; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 866 bytes --]
== Series Details ==
Series: Introduce error threshold to drm_ras (rev4)
URL : https://patchwork.freedesktop.org/series/165091/
State : success
== Summary ==
CI Bug Log - changes from xe-5288-60326b17f877e12846167bf8ef83680b9875218a_BAT -> xe-pw-165091v4_BAT
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (13 -> 13)
------------------------------
No changes in participating hosts
Changes
-------
No changes found
Build changes
-------------
* Linux: xe-5288-60326b17f877e12846167bf8ef83680b9875218a -> xe-pw-165091v4
IGT_8979: 8979
xe-5288-60326b17f877e12846167bf8ef83680b9875218a: 60326b17f877e12846167bf8ef83680b9875218a
xe-pw-165091v4: 165091v4
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v4/index.html
[-- Attachment #2: Type: text/html, Size: 1414 bytes --]
^ permalink raw reply [flat|nested] 14+ messages in thread* ✓ Xe.CI.FULL: success for Introduce error threshold to drm_ras (rev4)
2026-06-23 10:09 [PATCH v4 0/5] Introduce error threshold to drm_ras Raag Jadav
` (7 preceding siblings ...)
2026-06-23 12:24 ` ✓ Xe.CI.BAT: " Patchwork
@ 2026-06-23 14:14 ` Patchwork
8 siblings, 0 replies; 14+ messages in thread
From: Patchwork @ 2026-06-23 14:14 UTC (permalink / raw)
To: Raag Jadav; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 11275 bytes --]
== Series Details ==
Series: Introduce error threshold to drm_ras (rev4)
URL : https://patchwork.freedesktop.org/series/165091/
State : success
== Summary ==
CI Bug Log - changes from xe-5288-60326b17f877e12846167bf8ef83680b9875218a_FULL -> xe-pw-165091v4_FULL
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (2 -> 2)
------------------------------
No changes in participating hosts
New tests
---------
New tests have been introduced between xe-5288-60326b17f877e12846167bf8ef83680b9875218a_FULL and xe-pw-165091v4_FULL:
### New IGT tests (29) ###
* igt@kms_pipe_crc_basic@hang-read-crc@pipe-a-edp-1:
- Statuses : 1 pass(s)
- Exec time: [2.49] s
* igt@kms_pipe_crc_basic@hang-read-crc@pipe-b-edp-1:
- Statuses : 1 pass(s)
- Exec time: [3.13] s
* igt@kms_pipe_crc_basic@hang-read-crc@pipe-c-dp-2:
- Statuses : 1 pass(s)
- Exec time: [1.14] s
* igt@kms_pipe_crc_basic@hang-read-crc@pipe-c-edp-1:
- Statuses : 1 pass(s)
- Exec time: [3.15] s
* igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence@pipe-a-edp-1:
- Statuses : 1 pass(s)
- Exec time: [1.02] s
* igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence@pipe-b-edp-1:
- Statuses : 1 pass(s)
- Exec time: [1.69] s
* igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence@pipe-c-dp-2:
- Statuses : 1 pass(s)
- Exec time: [0.64] s
* igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence@pipe-c-edp-1:
- Statuses : 1 pass(s)
- Exec time: [1.61] s
* igt@kms_pipe_crc_basic@nonblocking-crc@pipe-a-edp-1:
- Statuses : 1 pass(s)
- Exec time: [0.96] s
* igt@kms_pipe_crc_basic@nonblocking-crc@pipe-b-edp-1:
- Statuses : 1 pass(s)
- Exec time: [1.70] s
* igt@kms_pipe_crc_basic@nonblocking-crc@pipe-c-edp-1:
- Statuses : 1 pass(s)
- Exec time: [1.61] s
* igt@kms_pipe_crc_basic@read-crc-frame-sequence@pipe-a-edp-1:
- Statuses : 1 pass(s)
- Exec time: [0.89] s
* igt@kms_pipe_crc_basic@read-crc-frame-sequence@pipe-b-edp-1:
- Statuses : 1 pass(s)
- Exec time: [1.63] s
* igt@kms_pipe_crc_basic@read-crc-frame-sequence@pipe-c-dp-2:
- Statuses : 1 pass(s)
- Exec time: [0.55] s
* igt@kms_pipe_crc_basic@read-crc-frame-sequence@pipe-c-edp-1:
- Statuses : 1 pass(s)
- Exec time: [1.57] s
* igt@kms_pipe_crc_basic@read-crc@pipe-a-edp-1:
- Statuses : 1 pass(s)
- Exec time: [0.85] s
* igt@kms_pipe_crc_basic@read-crc@pipe-b-edp-1:
- Statuses : 1 pass(s)
- Exec time: [1.55] s
* igt@kms_pipe_crc_basic@read-crc@pipe-c-edp-1:
- Statuses : 1 pass(s)
- Exec time: [1.59] s
* igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-edp-1:
- Statuses : 1 pass(s)
- Exec time: [3.19] s
* igt@kms_pipe_crc_basic@suspend-read-crc@pipe-b-edp-1:
- Statuses : 1 pass(s)
- Exec time: [3.68] s
* igt@kms_pipe_crc_basic@suspend-read-crc@pipe-c-edp-1:
- Statuses : 1 pass(s)
- Exec time: [3.70] s
* igt@kms_plane_lowres@tiling-none@pipe-a-hdmi-a-3:
- Statuses : 1 pass(s)
- Exec time: [9.15] s
* igt@kms_plane_lowres@tiling-none@pipe-b-hdmi-a-3:
- Statuses : 1 pass(s)
- Exec time: [9.06] s
* igt@kms_plane_lowres@tiling-none@pipe-c-hdmi-a-3:
- Statuses : 1 pass(s)
- Exec time: [9.08] s
* igt@kms_plane_lowres@tiling-none@pipe-d-hdmi-a-3:
- Statuses : 1 pass(s)
- Exec time: [9.08] s
* igt@kms_plane_lowres@tiling-x@pipe-a-hdmi-a-3:
- Statuses : 1 pass(s)
- Exec time: [9.08] s
* igt@kms_plane_lowres@tiling-x@pipe-b-hdmi-a-3:
- Statuses : 1 pass(s)
- Exec time: [9.14] s
* igt@kms_plane_lowres@tiling-x@pipe-c-hdmi-a-3:
- Statuses : 1 pass(s)
- Exec time: [9.04] s
* igt@kms_plane_lowres@tiling-x@pipe-d-hdmi-a-3:
- Statuses : 1 pass(s)
- Exec time: [9.10] s
Known issues
------------
Here are the changes found in xe-pw-165091v4_FULL that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs:
- shard-bmg: [PASS][1] -> [INCOMPLETE][2] ([Intel XE#7084] / [Intel XE#8150]) +1 other test incomplete
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5288-60326b17f877e12846167bf8ef83680b9875218a/shard-bmg-10/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v4/shard-bmg-6/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html
* igt@kms_flip@2x-flip-vs-expired-vblank@bd-dp2-hdmi-a3:
- shard-bmg: [PASS][3] -> [FAIL][4] ([Intel XE#3321]) +1 other test fail
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5288-60326b17f877e12846167bf8ef83680b9875218a/shard-bmg-1/igt@kms_flip@2x-flip-vs-expired-vblank@bd-dp2-hdmi-a3.html
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v4/shard-bmg-7/igt@kms_flip@2x-flip-vs-expired-vblank@bd-dp2-hdmi-a3.html
* igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1:
- shard-lnl: [PASS][5] -> [FAIL][6] ([Intel XE#301] / [Intel XE#3149])
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5288-60326b17f877e12846167bf8ef83680b9875218a/shard-lnl-7/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1.html
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v4/shard-lnl-4/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1.html
* igt@kms_flip@flip-vs-expired-vblank@b-edp1:
- shard-lnl: [PASS][7] -> [FAIL][8] ([Intel XE#301])
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5288-60326b17f877e12846167bf8ef83680b9875218a/shard-lnl-2/igt@kms_flip@flip-vs-expired-vblank@b-edp1.html
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v4/shard-lnl-5/igt@kms_flip@flip-vs-expired-vblank@b-edp1.html
* igt@kms_pm_dc@deep-pkgc:
- shard-lnl: [PASS][9] -> [FAIL][10] ([Intel XE#2029] / [Intel XE#7395])
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5288-60326b17f877e12846167bf8ef83680b9875218a/shard-lnl-3/igt@kms_pm_dc@deep-pkgc.html
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v4/shard-lnl-8/igt@kms_pm_dc@deep-pkgc.html
* igt@xe_eudebug@basic-close:
- shard-bmg: NOTRUN -> [SKIP][11] ([Intel XE#7636])
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v4/shard-bmg-8/igt@xe_eudebug@basic-close.html
* igt@xe_exec_basic@multigpu-once-userptr-invalidate-race:
- shard-bmg: NOTRUN -> [SKIP][12] ([Intel XE#2322] / [Intel XE#7372])
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v4/shard-bmg-8/igt@xe_exec_basic@multigpu-once-userptr-invalidate-race.html
* igt@xe_wedged@wedged-mode-toggle:
- shard-lnl: [PASS][13] -> [ABORT][14] ([Intel XE#8007])
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5288-60326b17f877e12846167bf8ef83680b9875218a/shard-lnl-5/igt@xe_wedged@wedged-mode-toggle.html
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v4/shard-lnl-4/igt@xe_wedged@wedged-mode-toggle.html
#### Possible fixes ####
* igt@kms_cursor_legacy@flip-vs-cursor-legacy:
- shard-bmg: [FAIL][15] ([Intel XE#7571]) -> [PASS][16]
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5288-60326b17f877e12846167bf8ef83680b9875218a/shard-bmg-6/igt@kms_cursor_legacy@flip-vs-cursor-legacy.html
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v4/shard-bmg-10/igt@kms_cursor_legacy@flip-vs-cursor-legacy.html
* igt@kms_flip@single-buffer-flip-vs-dpms-off-vs-modeset-interruptible:
- shard-bmg: [INCOMPLETE][17] ([Intel XE#4760] / [Intel XE#8155]) -> [PASS][18] +1 other test pass
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5288-60326b17f877e12846167bf8ef83680b9875218a/shard-bmg-3/igt@kms_flip@single-buffer-flip-vs-dpms-off-vs-modeset-interruptible.html
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v4/shard-bmg-8/igt@kms_flip@single-buffer-flip-vs-dpms-off-vs-modeset-interruptible.html
#### Warnings ####
* igt@kms_flip@flip-vs-expired-vblank-interruptible:
- shard-lnl: [FAIL][19] ([Intel XE#301]) -> [FAIL][20] ([Intel XE#301] / [Intel XE#3149])
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5288-60326b17f877e12846167bf8ef83680b9875218a/shard-lnl-7/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v4/shard-lnl-4/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
* igt@kms_hdr@brightness-with-hdr:
- shard-bmg: [SKIP][21] ([Intel XE#3374] / [Intel XE#3544]) -> [SKIP][22] ([Intel XE#3544])
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5288-60326b17f877e12846167bf8ef83680b9875218a/shard-bmg-8/igt@kms_hdr@brightness-with-hdr.html
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v4/shard-bmg-4/igt@kms_hdr@brightness-with-hdr.html
* igt@kms_tiled_display@basic-test-pattern-with-chamelium:
- shard-bmg: [SKIP][23] ([Intel XE#2509] / [Intel XE#7437]) -> [SKIP][24] ([Intel XE#2426] / [Intel XE#5848])
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5288-60326b17f877e12846167bf8ef83680b9875218a/shard-bmg-1/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v4/shard-bmg-7/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
[Intel XE#2029]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2029
[Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
[Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
[Intel XE#2509]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2509
[Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
[Intel XE#3149]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3149
[Intel XE#3321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3321
[Intel XE#3374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3374
[Intel XE#3544]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3544
[Intel XE#4760]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4760
[Intel XE#5848]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5848
[Intel XE#7084]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7084
[Intel XE#7372]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7372
[Intel XE#7395]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7395
[Intel XE#7437]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7437
[Intel XE#7571]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7571
[Intel XE#7636]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7636
[Intel XE#8007]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8007
[Intel XE#8150]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8150
[Intel XE#8155]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8155
Build changes
-------------
* Linux: xe-5288-60326b17f877e12846167bf8ef83680b9875218a -> xe-pw-165091v4
IGT_8979: 8979
xe-5288-60326b17f877e12846167bf8ef83680b9875218a: 60326b17f877e12846167bf8ef83680b9875218a
xe-pw-165091v4: 165091v4
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v4/index.html
[-- Attachment #2: Type: text/html, Size: 13302 bytes --]
^ permalink raw reply [flat|nested] 14+ messages in thread