* [PATCH v1 01/11] drm/ras: Update counter helpers with counter naming
2026-04-17 21:16 [PATCH v1 00/11] Introduce error threshold to drm_ras Raag Jadav
@ 2026-04-17 21:16 ` Raag Jadav
2026-04-17 21:16 ` [PATCH v1 02/11] drm/ras: Introduce get-error-threshold Raag Jadav
` (13 subsequent siblings)
14 siblings, 0 replies; 21+ messages in thread
From: Raag Jadav @ 2026-04-17 21:16 UTC (permalink / raw)
To: intel-xe, dri-devel, netdev
Cc: simona.vetter, airlied, kuba, lijo.lazar, Hawking.Zhang, davem,
pabeni, edumazet, maarten, zachary.mckevitt, rodrigo.vivi,
riana.tauro, michal.wajdeczko, matthew.d.roper,
umesh.nerlige.ramappa, mallesh.koujalagi, soham.purkait,
anoop.c.vijay, aravind.iddamsetty, Raag Jadav
Counter helpers deal with counter values. Use the appropriate naming to
match with their functionality.
Signed-off-by: Raag Jadav <raag.jadav@intel.com>
---
drivers/gpu/drm/drm_ras.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/drm_ras.c b/drivers/gpu/drm/drm_ras.c
index b2fa5ab86d87..1f7435d60f11 100644
--- a/drivers/gpu/drm/drm_ras.c
+++ b/drivers/gpu/drm/drm_ras.c
@@ -162,8 +162,8 @@ static int get_node_error_counter(u32 node_id, u32 error_id,
return node->query_error_counter(node, error_id, name, value);
}
-static int msg_reply_value(struct sk_buff *msg, u32 error_id,
- const char *error_name, u32 value)
+static int msg_reply_counter_value(struct sk_buff *msg, u32 error_id,
+ const char *error_name, u32 value)
{
int ret;
@@ -180,8 +180,8 @@ static int msg_reply_value(struct sk_buff *msg, u32 error_id,
value);
}
-static int doit_reply_value(struct genl_info *info, u32 node_id,
- u32 error_id)
+static int doit_reply_counter_value(struct genl_info *info, u32 node_id,
+ u32 error_id)
{
struct sk_buff *msg;
struct nlattr *hdr;
@@ -204,7 +204,7 @@ static int doit_reply_value(struct genl_info *info, u32 node_id,
if (ret)
return ret;
- ret = msg_reply_value(msg, error_id, error_name, value);
+ ret = msg_reply_counter_value(msg, error_id, error_name, value);
if (ret) {
genlmsg_cancel(msg, hdr);
nlmsg_free(msg);
@@ -272,7 +272,7 @@ int drm_ras_nl_get_error_counter_dumpit(struct sk_buff *skb,
break;
}
- ret = msg_reply_value(skb, error_id, error_name, value);
+ ret = msg_reply_counter_value(skb, error_id, error_name, value);
if (ret) {
genlmsg_cancel(skb, hdr);
break;
@@ -311,7 +311,7 @@ int drm_ras_nl_get_error_counter_doit(struct sk_buff *skb,
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_value(info, node_id, error_id);
+ return doit_reply_counter_value(info, node_id, error_id);
}
/**
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread* [PATCH v1 02/11] drm/ras: Introduce get-error-threshold
2026-04-17 21:16 [PATCH v1 00/11] Introduce error threshold to drm_ras Raag Jadav
2026-04-17 21:16 ` [PATCH v1 01/11] drm/ras: Update counter helpers with counter naming Raag Jadav
@ 2026-04-17 21:16 ` Raag Jadav
2026-04-22 5:49 ` Tauro, Riana
2026-04-17 21:16 ` [PATCH v1 03/11] drm/ras: Introduce set-error-threshold Raag Jadav
` (12 subsequent siblings)
14 siblings, 1 reply; 21+ messages in thread
From: Raag Jadav @ 2026-04-17 21:16 UTC (permalink / raw)
To: intel-xe, dri-devel, netdev
Cc: simona.vetter, airlied, kuba, lijo.lazar, Hawking.Zhang, davem,
pabeni, edumazet, maarten, zachary.mckevitt, rodrigo.vivi,
riana.tauro, michal.wajdeczko, matthew.d.roper,
umesh.nerlige.ramappa, mallesh.koujalagi, soham.purkait,
anoop.c.vijay, aravind.iddamsetty, Raag Jadav
Add get-error-threshold command support which allows querying threshold
value of the error. 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>
---
Documentation/gpu/drm-ras.rst | 8 ++
Documentation/netlink/specs/drm_ras.yaml | 37 ++++++++
drivers/gpu/drm/drm_ras.c | 103 +++++++++++++++++++++++
drivers/gpu/drm/drm_ras_nl.c | 13 +++
drivers/gpu/drm/drm_ras_nl.h | 2 +
include/drm/drm_ras.h | 14 +++
include/uapi/drm/drm_ras.h | 11 +++
7 files changed, 188 insertions(+)
diff --git a/Documentation/gpu/drm-ras.rst b/Documentation/gpu/drm-ras.rst
index 70b246a78fc8..6443dfd1677f 100644
--- a/Documentation/gpu/drm-ras.rst
+++ b/Documentation/gpu/drm-ras.rst
@@ -52,6 +52,8 @@ User space tools can:
as a parameter.
* Query specific error counter values with the ``get-error-counter`` command, using both
``node-id`` and ``error-id`` as parameters.
+* Query specific error threshold value with the ``get-error-threshold`` command, using both
+ ``node-id`` and ``error-id`` as parameters.
YAML-based Interface
--------------------
@@ -101,3 +103,9 @@ Example: Query an error counter for a given node
sudo ynl --family drm_ras --do get-error-counter --json '{"node-id":0, "error-id":1}'
{'error-id': 1, 'error-name': 'error_name1', 'error-value': 0}
+Example: Query threshold value of a given error
+
+.. 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': 0}
diff --git a/Documentation/netlink/specs/drm_ras.yaml b/Documentation/netlink/specs/drm_ras.yaml
index 79af25dac3c5..95a939fb987d 100644
--- a/Documentation/netlink/specs/drm_ras.yaml
+++ b/Documentation/netlink/specs/drm_ras.yaml
@@ -69,6 +69,25 @@ attribute-sets:
name: error-value
type: u32
doc: Current value of the requested error counter.
+ -
+ name: error-threshold-attrs
+ attributes:
+ -
+ name: node-id
+ type: u32
+ doc: Node ID targeted by this operation.
+ -
+ name: error-id
+ type: u32
+ doc: Unique identifier for a specific error within the node.
+ -
+ name: error-name
+ type: string
+ doc: Name of the error.
+ -
+ name: error-threshold
+ type: u32
+ doc: Threshold value of the error.
operations:
list:
@@ -113,3 +132,21 @@ operations:
- node-id
reply:
attributes: *errorinfo
+ -
+ name: get-error-threshold
+ doc: >-
+ Retrieve threshold value of the error.
+ The response includes the id, the name, and current threshold
+ value of the error.
+ attribute-set: error-threshold-attrs
+ flags: [admin-perm]
+ do:
+ request:
+ attributes:
+ - node-id
+ - error-id
+ reply:
+ attributes:
+ - error-id
+ - error-name
+ - error-threshold
diff --git a/drivers/gpu/drm/drm_ras.c b/drivers/gpu/drm/drm_ras.c
index 1f7435d60f11..d2d853d5d69c 100644
--- a/drivers/gpu/drm/drm_ras.c
+++ b/drivers/gpu/drm/drm_ras.c
@@ -37,6 +37,10 @@
* Returns all counters of a node if only Node ID is provided or specific
* error counters.
*
+ * 3. GET_ERROR_THRESHOLD: Query threshold value of the error.
+ * Userspace must provide Node ID and Error ID.
+ * Returns the threshold value of a specific error.
+ *
* Node registration:
*
* - drm_ras_node_register(): Registers a new node and assigns
@@ -66,6 +70,8 @@
* operation, fetching all counters from a specific node.
* - drm_ras_nl_get_error_counter_doit(): Implements the GET_ERROR_COUNTER doit
* operation, fetching a counter value from a specific node.
+ * - drm_ras_nl_get_error_threshold_doit(): Implements the GET_ERROR_THRESHOLD doit
+ * operation, fetching the threshold value of a specific error.
*/
static DEFINE_XARRAY_ALLOC(drm_ras_xa);
@@ -162,6 +168,22 @@ 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 *value)
+{
+ struct drm_ras_node *node;
+
+ node = xa_load(&drm_ras_xa, node_id);
+ if (!node || !node->query_error_threshold)
+ return -ENOENT;
+
+ 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, value);
+}
+
static int msg_reply_counter_value(struct sk_buff *msg, u32 error_id,
const char *error_name, u32 value)
{
@@ -180,6 +202,24 @@ static int msg_reply_counter_value(struct sk_buff *msg, u32 error_id,
value);
}
+static int msg_reply_threshold_value(struct sk_buff *msg, u32 error_id,
+ const char *error_name, u32 value)
+{
+ int ret;
+
+ ret = nla_put_u32(msg, DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_ID, error_id);
+ if (ret)
+ return ret;
+
+ ret = nla_put_string(msg, DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_NAME,
+ error_name);
+ if (ret)
+ return ret;
+
+ return nla_put_u32(msg, DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_THRESHOLD,
+ value);
+}
+
static int doit_reply_counter_value(struct genl_info *info, u32 node_id,
u32 error_id)
{
@@ -216,6 +256,42 @@ static int doit_reply_counter_value(struct genl_info *info, u32 node_id,
return genlmsg_reply(msg, info);
}
+static int doit_reply_threshold_value(struct genl_info *info, u32 node_id,
+ u32 error_id)
+{
+ struct sk_buff *msg;
+ struct nlattr *hdr;
+ const char *error_name;
+ u32 value;
+ int ret;
+
+ msg = genlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
+ if (!msg)
+ return -ENOMEM;
+
+ hdr = genlmsg_iput(msg, info);
+ if (!hdr) {
+ nlmsg_free(msg);
+ return -EMSGSIZE;
+ }
+
+ ret = get_node_error_threshold(node_id, error_id,
+ &error_name, &value);
+ if (ret)
+ return ret;
+
+ ret = msg_reply_threshold_value(msg, error_id, error_name, value);
+ if (ret) {
+ genlmsg_cancel(msg, hdr);
+ nlmsg_free(msg);
+ return ret;
+ }
+
+ genlmsg_end(msg, hdr);
+
+ return genlmsg_reply(msg, info);
+}
+
/**
* drm_ras_nl_get_error_counter_dumpit() - Dump all Error Counters
* @skb: Netlink message buffer
@@ -314,6 +390,33 @@ int drm_ras_nl_get_error_counter_doit(struct sk_buff *skb,
return doit_reply_counter_value(info, node_id, error_id);
}
+/**
+ * drm_ras_nl_get_error_threshold_doit() - Query threshold value of the error
+ * @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 current threshold of the corresponding error. 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_THRESHOLD_ATTRS_NODE_ID) ||
+ GENL_REQ_ATTR_CHECK(info, DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_ID))
+ return -EINVAL;
+
+ node_id = nla_get_u32(info->attrs[DRM_RAS_A_ERROR_THRESHOLD_ATTRS_NODE_ID]);
+ error_id = nla_get_u32(info->attrs[DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_ID]);
+
+ return doit_reply_threshold_value(info, node_id, error_id);
+}
+
/**
* 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 16803d0c4a44..48e231734f4d 100644
--- a/drivers/gpu/drm/drm_ras_nl.c
+++ b/drivers/gpu/drm/drm_ras_nl.c
@@ -22,6 +22,12 @@ static const struct nla_policy drm_ras_get_error_counter_dump_nl_policy[DRM_RAS_
[DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_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_THRESHOLD_ATTRS_ERROR_ID + 1] = {
+ [DRM_RAS_A_ERROR_THRESHOLD_ATTRS_NODE_ID] = { .type = NLA_U32, },
+ [DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_ID] = { .type = NLA_U32, },
+};
+
/* Ops table for drm_ras */
static const struct genl_split_ops drm_ras_nl_ops[] = {
{
@@ -43,6 +49,13 @@ static const struct genl_split_ops drm_ras_nl_ops[] = {
.maxattr = DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID,
.flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DUMP,
},
+ {
+ .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_THRESHOLD_ATTRS_ERROR_ID,
+ .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 06ccd9342773..540fe22e2312 100644
--- a/drivers/gpu/drm/drm_ras_nl.h
+++ b/drivers/gpu/drm/drm_ras_nl.h
@@ -18,6 +18,8 @@ int drm_ras_nl_get_error_counter_doit(struct sk_buff *skb,
struct genl_info *info);
int drm_ras_nl_get_error_counter_dumpit(struct sk_buff *skb,
struct netlink_callback *cb);
+int drm_ras_nl_get_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 5d50209e51db..50cee70bd065 100644
--- a/include/drm/drm_ras.h
+++ b/include/drm/drm_ras.h
@@ -57,6 +57,20 @@ struct drm_ras_node {
*/
int (*query_error_counter)(struct drm_ras_node *node, u32 error_id,
const char **name, u32 *val);
+ /**
+ * @query_error_threshold:
+ *
+ * This callback is used by drm-ras to query threshold value of a
+ * specific error.
+ *
+ * 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 *val);
/** @priv: Driver private data */
void *priv;
diff --git a/include/uapi/drm/drm_ras.h b/include/uapi/drm/drm_ras.h
index 5f40fa5b869d..49c5ca497d73 100644
--- a/include/uapi/drm/drm_ras.h
+++ b/include/uapi/drm/drm_ras.h
@@ -38,9 +38,20 @@ enum {
DRM_RAS_A_ERROR_COUNTER_ATTRS_MAX = (__DRM_RAS_A_ERROR_COUNTER_ATTRS_MAX - 1)
};
+enum {
+ DRM_RAS_A_ERROR_THRESHOLD_ATTRS_NODE_ID = 1,
+ DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_ID,
+ DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_NAME,
+ DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_THRESHOLD,
+
+ __DRM_RAS_A_ERROR_THRESHOLD_ATTRS_MAX,
+ DRM_RAS_A_ERROR_THRESHOLD_ATTRS_MAX = (__DRM_RAS_A_ERROR_THRESHOLD_ATTRS_MAX - 1)
+};
+
enum {
DRM_RAS_CMD_LIST_NODES = 1,
DRM_RAS_CMD_GET_ERROR_COUNTER,
+ DRM_RAS_CMD_GET_ERROR_THRESHOLD,
__DRM_RAS_CMD_MAX,
DRM_RAS_CMD_MAX = (__DRM_RAS_CMD_MAX - 1)
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread* Re: [PATCH v1 02/11] drm/ras: Introduce get-error-threshold
2026-04-17 21:16 ` [PATCH v1 02/11] drm/ras: Introduce get-error-threshold Raag Jadav
@ 2026-04-22 5:49 ` Tauro, Riana
2026-04-22 6:21 ` Raag Jadav
0 siblings, 1 reply; 21+ messages in thread
From: Tauro, Riana @ 2026-04-22 5:49 UTC (permalink / raw)
To: Raag Jadav, intel-xe, dri-devel, netdev
Cc: simona.vetter, airlied, kuba, lijo.lazar, Hawking.Zhang, davem,
pabeni, edumazet, maarten, zachary.mckevitt, rodrigo.vivi,
michal.wajdeczko, matthew.d.roper, umesh.nerlige.ramappa,
mallesh.koujalagi, soham.purkait, anoop.c.vijay,
aravind.iddamsetty
On 4/18/2026 2:46 AM, Raag Jadav wrote:
> Add get-error-threshold command support which allows querying threshold
> value of the error. 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>
> ---
> Documentation/gpu/drm-ras.rst | 8 ++
> Documentation/netlink/specs/drm_ras.yaml | 37 ++++++++
> drivers/gpu/drm/drm_ras.c | 103 +++++++++++++++++++++++
> drivers/gpu/drm/drm_ras_nl.c | 13 +++
> drivers/gpu/drm/drm_ras_nl.h | 2 +
> include/drm/drm_ras.h | 14 +++
> include/uapi/drm/drm_ras.h | 11 +++
> 7 files changed, 188 insertions(+)
>
> diff --git a/Documentation/gpu/drm-ras.rst b/Documentation/gpu/drm-ras.rst
> index 70b246a78fc8..6443dfd1677f 100644
> --- a/Documentation/gpu/drm-ras.rst
> +++ b/Documentation/gpu/drm-ras.rst
> @@ -52,6 +52,8 @@ User space tools can:
> as a parameter.
> * Query specific error counter values with the ``get-error-counter`` command, using both
> ``node-id`` and ``error-id`` as parameters.
> +* Query specific error threshold value with the ``get-error-threshold`` command, using both
> + ``node-id`` and ``error-id`` as parameters.
Also define what is a thresold. How can it be used?
>
> YAML-based Interface
> --------------------
> @@ -101,3 +103,9 @@ Example: Query an error counter for a given node
> sudo ynl --family drm_ras --do get-error-counter --json '{"node-id":0, "error-id":1}'
> {'error-id': 1, 'error-name': 'error_name1', 'error-value': 0}
>
> +Example: Query threshold value of a given error
> +
> +.. 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': 0}
> diff --git a/Documentation/netlink/specs/drm_ras.yaml b/Documentation/netlink/specs/drm_ras.yaml
> index 79af25dac3c5..95a939fb987d 100644
> --- a/Documentation/netlink/specs/drm_ras.yaml
> +++ b/Documentation/netlink/specs/drm_ras.yaml
> @@ -69,6 +69,25 @@ attribute-sets:
> name: error-value
> type: u32
> doc: Current value of the requested error counter.
> + -
> + name: error-threshold-attrs
> + attributes:
> + -
> + name: node-id
> + type: u32
> + doc: Node ID targeted by this operation.
> + -
> + name: error-id
> + type: u32
> + doc: Unique identifier for a specific error within the node.
> + -
> + name: error-name
> + type: string
> + doc: Name of the error.
> + -
> + name: error-threshold
> + type: u32
> + doc: Threshold value of the error.
>
> operations:
> list:
> @@ -113,3 +132,21 @@ operations:
> - node-id
> reply:
> attributes: *errorinfo
> + -
> + name: get-error-threshold
> + doc: >-
> + Retrieve threshold value of the error.
> + The response includes the id, the name, and current threshold
> + value of the error.
> + attribute-set: error-threshold-attrs
> + flags: [admin-perm]
> + do:
> + request:
> + attributes:
> + - node-id
> + - error-id
> + reply:
> + attributes:
> + - error-id
> + - error-name
> + - error-threshold
> diff --git a/drivers/gpu/drm/drm_ras.c b/drivers/gpu/drm/drm_ras.c
> index 1f7435d60f11..d2d853d5d69c 100644
> --- a/drivers/gpu/drm/drm_ras.c
> +++ b/drivers/gpu/drm/drm_ras.c
> @@ -37,6 +37,10 @@
> * Returns all counters of a node if only Node ID is provided or specific
> * error counters.
> *
> + * 3. GET_ERROR_THRESHOLD: Query threshold value of the error.
> + * Userspace must provide Node ID and Error ID.
> + * Returns the threshold value of a specific error.
> + *
> * Node registration:
> *
> * - drm_ras_node_register(): Registers a new node and assigns
> @@ -66,6 +70,8 @@
> * operation, fetching all counters from a specific node.
> * - drm_ras_nl_get_error_counter_doit(): Implements the GET_ERROR_COUNTER doit
> * operation, fetching a counter value from a specific node.
> + * - drm_ras_nl_get_error_threshold_doit(): Implements the GET_ERROR_THRESHOLD doit
> + * operation, fetching the threshold value of a specific error.
> */
>
> static DEFINE_XARRAY_ALLOC(drm_ras_xa);
> @@ -162,6 +168,22 @@ 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 *value)
> +{
> + struct drm_ras_node *node;
> +
> + node = xa_load(&drm_ras_xa, node_id);
> + if (!node || !node->query_error_threshold)
> + return -ENOENT;
For the absence of the function, 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, value);
> +}
> +
> static int msg_reply_counter_value(struct sk_buff *msg, u32 error_id,
> const char *error_name, u32 value)
> {
> @@ -180,6 +202,24 @@ static int msg_reply_counter_value(struct sk_buff *msg, u32 error_id,
> value);
> }
>
> +static int msg_reply_threshold_value(struct sk_buff *msg, u32 error_id,
> + const char *error_name, u32 value)
> +{
> + int ret;
> +
> + ret = nla_put_u32(msg, DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_ID, error_id);
> + if (ret)
> + return ret;
> +
> + ret = nla_put_string(msg, DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_NAME,
> + error_name);
> + if (ret)
> + return ret;
> +
> + return nla_put_u32(msg, DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_THRESHOLD,
> + value);
> +}
> +
> static int doit_reply_counter_value(struct genl_info *info, u32 node_id,
> u32 error_id)
> {
> @@ -216,6 +256,42 @@ static int doit_reply_counter_value(struct genl_info *info, u32 node_id,
> return genlmsg_reply(msg, info);
> }
>
> +static int doit_reply_threshold_value(struct genl_info *info, u32 node_id,
> + u32 error_id)
> +{
> + struct sk_buff *msg;
> + struct nlattr *hdr;
> + const char *error_name;
> + u32 value;
> + int ret;
> +
> + msg = genlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
> + if (!msg)
> + return -ENOMEM;
> +
> + hdr = genlmsg_iput(msg, info);
> + if (!hdr) {
> + nlmsg_free(msg);
> + return -EMSGSIZE;
> + }
> +
> + ret = get_node_error_threshold(node_id, error_id,
> + &error_name, &value);
> + if (ret)
> + return ret;
You have to cancel and free genlmsg here.
Looks like the counter patch also has the same issue. Will send out a fix.
> +
> + ret = msg_reply_threshold_value(msg, error_id, error_name, value);
> + if (ret) {
> + genlmsg_cancel(msg, hdr);
> + nlmsg_free(msg);
> + return ret;
> + }
> +
> + genlmsg_end(msg, hdr);
> +
> + return genlmsg_reply(msg, info);
> +}
> +
> /**
> * drm_ras_nl_get_error_counter_dumpit() - Dump all Error Counters
> * @skb: Netlink message buffer
> @@ -314,6 +390,33 @@ int drm_ras_nl_get_error_counter_doit(struct sk_buff *skb,
> return doit_reply_counter_value(info, node_id, error_id);
> }
>
> +/**
> + * drm_ras_nl_get_error_threshold_doit() - Query threshold value of the error
Nit: an
Thanks
Riana
> + * @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 current threshold of the corresponding error. 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_THRESHOLD_ATTRS_NODE_ID) ||
> + GENL_REQ_ATTR_CHECK(info, DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_ID))
> + return -EINVAL;
> +
> + node_id = nla_get_u32(info->attrs[DRM_RAS_A_ERROR_THRESHOLD_ATTRS_NODE_ID]);
> + error_id = nla_get_u32(info->attrs[DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_ID]);
> +
> + return doit_reply_threshold_value(info, node_id, error_id);
> +}
> +
> /**
> * 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 16803d0c4a44..48e231734f4d 100644
> --- a/drivers/gpu/drm/drm_ras_nl.c
> +++ b/drivers/gpu/drm/drm_ras_nl.c
> @@ -22,6 +22,12 @@ static const struct nla_policy drm_ras_get_error_counter_dump_nl_policy[DRM_RAS_
> [DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_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_THRESHOLD_ATTRS_ERROR_ID + 1] = {
> + [DRM_RAS_A_ERROR_THRESHOLD_ATTRS_NODE_ID] = { .type = NLA_U32, },
> + [DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_ID] = { .type = NLA_U32, },
> +};
> +
> /* Ops table for drm_ras */
> static const struct genl_split_ops drm_ras_nl_ops[] = {
> {
> @@ -43,6 +49,13 @@ static const struct genl_split_ops drm_ras_nl_ops[] = {
> .maxattr = DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID,
> .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DUMP,
> },
> + {
> + .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_THRESHOLD_ATTRS_ERROR_ID,
> + .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 06ccd9342773..540fe22e2312 100644
> --- a/drivers/gpu/drm/drm_ras_nl.h
> +++ b/drivers/gpu/drm/drm_ras_nl.h
> @@ -18,6 +18,8 @@ int drm_ras_nl_get_error_counter_doit(struct sk_buff *skb,
> struct genl_info *info);
> int drm_ras_nl_get_error_counter_dumpit(struct sk_buff *skb,
> struct netlink_callback *cb);
> +int drm_ras_nl_get_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 5d50209e51db..50cee70bd065 100644
> --- a/include/drm/drm_ras.h
> +++ b/include/drm/drm_ras.h
> @@ -57,6 +57,20 @@ struct drm_ras_node {
> */
> int (*query_error_counter)(struct drm_ras_node *node, u32 error_id,
> const char **name, u32 *val);
> + /**
> + * @query_error_threshold:
> + *
> + * This callback is used by drm-ras to query threshold value of a
> + * specific error.
> + *
> + * 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 *val);
>
> /** @priv: Driver private data */
> void *priv;
> diff --git a/include/uapi/drm/drm_ras.h b/include/uapi/drm/drm_ras.h
> index 5f40fa5b869d..49c5ca497d73 100644
> --- a/include/uapi/drm/drm_ras.h
> +++ b/include/uapi/drm/drm_ras.h
> @@ -38,9 +38,20 @@ enum {
> DRM_RAS_A_ERROR_COUNTER_ATTRS_MAX = (__DRM_RAS_A_ERROR_COUNTER_ATTRS_MAX - 1)
> };
>
> +enum {
> + DRM_RAS_A_ERROR_THRESHOLD_ATTRS_NODE_ID = 1,
> + DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_ID,
> + DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_NAME,
> + DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_THRESHOLD,
> +
> + __DRM_RAS_A_ERROR_THRESHOLD_ATTRS_MAX,
> + DRM_RAS_A_ERROR_THRESHOLD_ATTRS_MAX = (__DRM_RAS_A_ERROR_THRESHOLD_ATTRS_MAX - 1)
> +};
> +
> enum {
> DRM_RAS_CMD_LIST_NODES = 1,
> DRM_RAS_CMD_GET_ERROR_COUNTER,
> + DRM_RAS_CMD_GET_ERROR_THRESHOLD,
>
> __DRM_RAS_CMD_MAX,
> DRM_RAS_CMD_MAX = (__DRM_RAS_CMD_MAX - 1)
^ permalink raw reply [flat|nested] 21+ messages in thread* Re: [PATCH v1 02/11] drm/ras: Introduce get-error-threshold
2026-04-22 5:49 ` Tauro, Riana
@ 2026-04-22 6:21 ` Raag Jadav
0 siblings, 0 replies; 21+ messages in thread
From: Raag Jadav @ 2026-04-22 6:21 UTC (permalink / raw)
To: Tauro, Riana
Cc: intel-xe, dri-devel, netdev, simona.vetter, airlied, kuba,
lijo.lazar, Hawking.Zhang, davem, pabeni, edumazet, maarten,
zachary.mckevitt, rodrigo.vivi, michal.wajdeczko, matthew.d.roper,
umesh.nerlige.ramappa, mallesh.koujalagi, soham.purkait,
anoop.c.vijay, aravind.iddamsetty
On Wed, Apr 22, 2026 at 11:19:36AM +0530, Tauro, Riana wrote:
> On 4/18/2026 2:46 AM, Raag Jadav wrote:
> > Add get-error-threshold command support which allows querying threshold
> > value of the error. 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>
> > ---
> > Documentation/gpu/drm-ras.rst | 8 ++
> > Documentation/netlink/specs/drm_ras.yaml | 37 ++++++++
> > drivers/gpu/drm/drm_ras.c | 103 +++++++++++++++++++++++
> > drivers/gpu/drm/drm_ras_nl.c | 13 +++
> > drivers/gpu/drm/drm_ras_nl.h | 2 +
> > include/drm/drm_ras.h | 14 +++
> > include/uapi/drm/drm_ras.h | 11 +++
> > 7 files changed, 188 insertions(+)
> >
> > diff --git a/Documentation/gpu/drm-ras.rst b/Documentation/gpu/drm-ras.rst
> > index 70b246a78fc8..6443dfd1677f 100644
> > --- a/Documentation/gpu/drm-ras.rst
> > +++ b/Documentation/gpu/drm-ras.rst
> > @@ -52,6 +52,8 @@ User space tools can:
> > as a parameter.
> > * Query specific error counter values with the ``get-error-counter`` command, using both
> > ``node-id`` and ``error-id`` as parameters.
> > +* Query specific error threshold value with the ``get-error-threshold`` command, using both
> > + ``node-id`` and ``error-id`` as parameters.
> Also define what is a thresold. How can it be used?
Sure, I'll append commit message description here.
> > YAML-based Interface
> > --------------------
> > @@ -101,3 +103,9 @@ Example: Query an error counter for a given node
> > sudo ynl --family drm_ras --do get-error-counter --json '{"node-id":0, "error-id":1}'
> > {'error-id': 1, 'error-name': 'error_name1', 'error-value': 0}
> > +Example: Query threshold value of a given error
> > +
> > +.. 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': 0}
> > diff --git a/Documentation/netlink/specs/drm_ras.yaml b/Documentation/netlink/specs/drm_ras.yaml
> > index 79af25dac3c5..95a939fb987d 100644
> > --- a/Documentation/netlink/specs/drm_ras.yaml
> > +++ b/Documentation/netlink/specs/drm_ras.yaml
> > @@ -69,6 +69,25 @@ attribute-sets:
> > name: error-value
> > type: u32
> > doc: Current value of the requested error counter.
> > + -
> > + name: error-threshold-attrs
> > + attributes:
> > + -
> > + name: node-id
> > + type: u32
> > + doc: Node ID targeted by this operation.
> > + -
> > + name: error-id
> > + type: u32
> > + doc: Unique identifier for a specific error within the node.
> > + -
> > + name: error-name
> > + type: string
> > + doc: Name of the error.
> > + -
> > + name: error-threshold
> > + type: u32
> > + doc: Threshold value of the error.
> > operations:
> > list:
> > @@ -113,3 +132,21 @@ operations:
> > - node-id
> > reply:
> > attributes: *errorinfo
> > + -
> > + name: get-error-threshold
> > + doc: >-
> > + Retrieve threshold value of the error.
> > + The response includes the id, the name, and current threshold
> > + value of the error.
> > + attribute-set: error-threshold-attrs
> > + flags: [admin-perm]
> > + do:
> > + request:
> > + attributes:
> > + - node-id
> > + - error-id
> > + reply:
> > + attributes:
> > + - error-id
> > + - error-name
> > + - error-threshold
> > diff --git a/drivers/gpu/drm/drm_ras.c b/drivers/gpu/drm/drm_ras.c
> > index 1f7435d60f11..d2d853d5d69c 100644
> > --- a/drivers/gpu/drm/drm_ras.c
> > +++ b/drivers/gpu/drm/drm_ras.c
> > @@ -37,6 +37,10 @@
> > * Returns all counters of a node if only Node ID is provided or specific
> > * error counters.
> > *
> > + * 3. GET_ERROR_THRESHOLD: Query threshold value of the error.
> > + * Userspace must provide Node ID and Error ID.
> > + * Returns the threshold value of a specific error.
> > + *
> > * Node registration:
> > *
> > * - drm_ras_node_register(): Registers a new node and assigns
> > @@ -66,6 +70,8 @@
> > * operation, fetching all counters from a specific node.
> > * - drm_ras_nl_get_error_counter_doit(): Implements the GET_ERROR_COUNTER doit
> > * operation, fetching a counter value from a specific node.
> > + * - drm_ras_nl_get_error_threshold_doit(): Implements the GET_ERROR_THRESHOLD doit
> > + * operation, fetching the threshold value of a specific error.
> > */
> > static DEFINE_XARRAY_ALLOC(drm_ras_xa);
> > @@ -162,6 +168,22 @@ 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 *value)
> > +{
> > + struct drm_ras_node *node;
> > +
> > + node = xa_load(&drm_ras_xa, node_id);
> > + if (!node || !node->query_error_threshold)
> > + return -ENOENT;
>
> For the absence of the function, return -EOPNOTSUPP
Works for me, but then it should be consistent for all commands.
> > +
> > + 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, value);
> > +}
> > +
> > static int msg_reply_counter_value(struct sk_buff *msg, u32 error_id,
> > const char *error_name, u32 value)
> > {
> > @@ -180,6 +202,24 @@ static int msg_reply_counter_value(struct sk_buff *msg, u32 error_id,
> > value);
> > }
> > +static int msg_reply_threshold_value(struct sk_buff *msg, u32 error_id,
> > + const char *error_name, u32 value)
> > +{
> > + int ret;
> > +
> > + ret = nla_put_u32(msg, DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_ID, error_id);
> > + if (ret)
> > + return ret;
> > +
> > + ret = nla_put_string(msg, DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_NAME,
> > + error_name);
> > + if (ret)
> > + return ret;
> > +
> > + return nla_put_u32(msg, DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_THRESHOLD,
> > + value);
> > +}
> > +
> > static int doit_reply_counter_value(struct genl_info *info, u32 node_id,
> > u32 error_id)
> > {
> > @@ -216,6 +256,42 @@ static int doit_reply_counter_value(struct genl_info *info, u32 node_id,
> > return genlmsg_reply(msg, info);
> > }
> > +static int doit_reply_threshold_value(struct genl_info *info, u32 node_id,
> > + u32 error_id)
> > +{
> > + struct sk_buff *msg;
> > + struct nlattr *hdr;
> > + const char *error_name;
> > + u32 value;
> > + int ret;
> > +
> > + msg = genlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
> > + if (!msg)
> > + return -ENOMEM;
> > +
> > + hdr = genlmsg_iput(msg, info);
> > + if (!hdr) {
> > + nlmsg_free(msg);
> > + return -EMSGSIZE;
> > + }
> > +
> > + ret = get_node_error_threshold(node_id, error_id,
> > + &error_name, &value);
> > + if (ret)
> > + return ret;
>
> You have to cancel and free genlmsg here.
> Looks like the counter patch also has the same issue. Will send out a fix.
Yeah, failed attempt at stealing your code :(
Raag
> > + ret = msg_reply_threshold_value(msg, error_id, error_name, value);
> > + if (ret) {
> > + genlmsg_cancel(msg, hdr);
> > + nlmsg_free(msg);
> > + return ret;
> > + }
> > +
> > + genlmsg_end(msg, hdr);
> > +
> > + return genlmsg_reply(msg, info);
> > +}
> > +
> > /**
> > * drm_ras_nl_get_error_counter_dumpit() - Dump all Error Counters
> > * @skb: Netlink message buffer
> > @@ -314,6 +390,33 @@ int drm_ras_nl_get_error_counter_doit(struct sk_buff *skb,
> > return doit_reply_counter_value(info, node_id, error_id);
> > }
> > +/**
> > + * drm_ras_nl_get_error_threshold_doit() - Query threshold value of the error
> Nit: an
>
> Thanks
> Riana
> > + * @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 current threshold of the corresponding error. 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_THRESHOLD_ATTRS_NODE_ID) ||
> > + GENL_REQ_ATTR_CHECK(info, DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_ID))
> > + return -EINVAL;
> > +
> > + node_id = nla_get_u32(info->attrs[DRM_RAS_A_ERROR_THRESHOLD_ATTRS_NODE_ID]);
> > + error_id = nla_get_u32(info->attrs[DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_ID]);
> > +
> > + return doit_reply_threshold_value(info, node_id, error_id);
> > +}
> > +
> > /**
> > * 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 16803d0c4a44..48e231734f4d 100644
> > --- a/drivers/gpu/drm/drm_ras_nl.c
> > +++ b/drivers/gpu/drm/drm_ras_nl.c
> > @@ -22,6 +22,12 @@ static const struct nla_policy drm_ras_get_error_counter_dump_nl_policy[DRM_RAS_
> > [DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_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_THRESHOLD_ATTRS_ERROR_ID + 1] = {
> > + [DRM_RAS_A_ERROR_THRESHOLD_ATTRS_NODE_ID] = { .type = NLA_U32, },
> > + [DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_ID] = { .type = NLA_U32, },
> > +};
> > +
> > /* Ops table for drm_ras */
> > static const struct genl_split_ops drm_ras_nl_ops[] = {
> > {
> > @@ -43,6 +49,13 @@ static const struct genl_split_ops drm_ras_nl_ops[] = {
> > .maxattr = DRM_RAS_A_ERROR_COUNTER_ATTRS_NODE_ID,
> > .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_DUMP,
> > },
> > + {
> > + .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_THRESHOLD_ATTRS_ERROR_ID,
> > + .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 06ccd9342773..540fe22e2312 100644
> > --- a/drivers/gpu/drm/drm_ras_nl.h
> > +++ b/drivers/gpu/drm/drm_ras_nl.h
> > @@ -18,6 +18,8 @@ int drm_ras_nl_get_error_counter_doit(struct sk_buff *skb,
> > struct genl_info *info);
> > int drm_ras_nl_get_error_counter_dumpit(struct sk_buff *skb,
> > struct netlink_callback *cb);
> > +int drm_ras_nl_get_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 5d50209e51db..50cee70bd065 100644
> > --- a/include/drm/drm_ras.h
> > +++ b/include/drm/drm_ras.h
> > @@ -57,6 +57,20 @@ struct drm_ras_node {
> > */
> > int (*query_error_counter)(struct drm_ras_node *node, u32 error_id,
> > const char **name, u32 *val);
> > + /**
> > + * @query_error_threshold:
> > + *
> > + * This callback is used by drm-ras to query threshold value of a
> > + * specific error.
> > + *
> > + * 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 *val);
> > /** @priv: Driver private data */
> > void *priv;
> > diff --git a/include/uapi/drm/drm_ras.h b/include/uapi/drm/drm_ras.h
> > index 5f40fa5b869d..49c5ca497d73 100644
> > --- a/include/uapi/drm/drm_ras.h
> > +++ b/include/uapi/drm/drm_ras.h
> > @@ -38,9 +38,20 @@ enum {
> > DRM_RAS_A_ERROR_COUNTER_ATTRS_MAX = (__DRM_RAS_A_ERROR_COUNTER_ATTRS_MAX - 1)
> > };
> > +enum {
> > + DRM_RAS_A_ERROR_THRESHOLD_ATTRS_NODE_ID = 1,
> > + DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_ID,
> > + DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_NAME,
> > + DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_THRESHOLD,
> > +
> > + __DRM_RAS_A_ERROR_THRESHOLD_ATTRS_MAX,
> > + DRM_RAS_A_ERROR_THRESHOLD_ATTRS_MAX = (__DRM_RAS_A_ERROR_THRESHOLD_ATTRS_MAX - 1)
> > +};
> > +
> > enum {
> > DRM_RAS_CMD_LIST_NODES = 1,
> > DRM_RAS_CMD_GET_ERROR_COUNTER,
> > + DRM_RAS_CMD_GET_ERROR_THRESHOLD,
> > __DRM_RAS_CMD_MAX,
> > DRM_RAS_CMD_MAX = (__DRM_RAS_CMD_MAX - 1)
^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH v1 03/11] drm/ras: Introduce set-error-threshold
2026-04-17 21:16 [PATCH v1 00/11] Introduce error threshold to drm_ras Raag Jadav
2026-04-17 21:16 ` [PATCH v1 01/11] drm/ras: Update counter helpers with counter naming Raag Jadav
2026-04-17 21:16 ` [PATCH v1 02/11] drm/ras: Introduce get-error-threshold Raag Jadav
@ 2026-04-17 21:16 ` Raag Jadav
2026-04-22 6:12 ` Tauro, Riana
2026-04-17 21:16 ` [PATCH v1 04/11] drm/xe/uapi: Add additional error components to XE drm_ras Raag Jadav
` (11 subsequent siblings)
14 siblings, 1 reply; 21+ messages in thread
From: Raag Jadav @ 2026-04-17 21:16 UTC (permalink / raw)
To: intel-xe, dri-devel, netdev
Cc: simona.vetter, airlied, kuba, lijo.lazar, Hawking.Zhang, davem,
pabeni, edumazet, maarten, zachary.mckevitt, rodrigo.vivi,
riana.tauro, michal.wajdeczko, matthew.d.roper,
umesh.nerlige.ramappa, mallesh.koujalagi, soham.purkait,
anoop.c.vijay, aravind.iddamsetty, Raag Jadav
Add set-error-threshold command support which allows setting threshold
value of the error. 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>
---
Documentation/gpu/drm-ras.rst | 9 +++++
Documentation/netlink/specs/drm_ras.yaml | 12 ++++++
drivers/gpu/drm/drm_ras.c | 48 ++++++++++++++++++++++++
drivers/gpu/drm/drm_ras_nl.c | 14 +++++++
drivers/gpu/drm/drm_ras_nl.h | 2 +
include/drm/drm_ras.h | 13 +++++++
include/uapi/drm/drm_ras.h | 1 +
7 files changed, 99 insertions(+)
diff --git a/Documentation/gpu/drm-ras.rst b/Documentation/gpu/drm-ras.rst
index 6443dfd1677f..a819aa150604 100644
--- a/Documentation/gpu/drm-ras.rst
+++ b/Documentation/gpu/drm-ras.rst
@@ -54,6 +54,8 @@ User space tools can:
``node-id`` and ``error-id`` as parameters.
* Query specific error threshold value with the ``get-error-threshold`` command, using both
``node-id`` and ``error-id`` as parameters.
+* Set specific error threshold value with the ``set-error-threshold`` command, using
+ ``node-id``, ``error-id`` and ``error-threshold`` as parameters.
YAML-based Interface
--------------------
@@ -109,3 +111,10 @@ Example: Query threshold value of a given error
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': 0}
+
+Example: Set threshold value of a given error
+
+.. 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 95a939fb987d..09824309cdff 100644
--- a/Documentation/netlink/specs/drm_ras.yaml
+++ b/Documentation/netlink/specs/drm_ras.yaml
@@ -150,3 +150,15 @@ operations:
- error-id
- error-name
- error-threshold
+ -
+ name: set-error-threshold
+ doc: >-
+ Set threshold value of the error.
+ attribute-set: error-threshold-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 d2d853d5d69c..e4ff6d87f824 100644
--- a/drivers/gpu/drm/drm_ras.c
+++ b/drivers/gpu/drm/drm_ras.c
@@ -41,6 +41,9 @@
* Userspace must provide Node ID and Error ID.
* Returns the threshold value of a specific error.
*
+ * 4. SET_ERROR_THRESHOLD: Set threshold value of the error.
+ * Userspace must provide Node ID, Error ID and Threshold value to be set.
+ *
* Node registration:
*
* - drm_ras_node_register(): Registers a new node and assigns
@@ -72,6 +75,8 @@
* operation, fetching a counter value from a specific node.
* - drm_ras_nl_get_error_threshold_doit(): Implements the GET_ERROR_THRESHOLD doit
* operation, fetching the threshold value of a specific error.
+ * - drm_ras_nl_set_error_threshold_doit(): Implements the SET_ERROR_THRESHOLD doit
+ * operation, setting the threshold value of a specific error.
*/
static DEFINE_XARRAY_ALLOC(drm_ras_xa);
@@ -184,6 +189,21 @@ static int get_node_error_threshold(u32 node_id, u32 error_id,
return node->query_error_threshold(node, error_id, name, value);
}
+static int set_node_error_threshold(u32 node_id, u32 error_id, u32 value)
+{
+ struct drm_ras_node *node;
+
+ node = xa_load(&drm_ras_xa, node_id);
+ if (!node || !node->set_error_threshold)
+ return -ENOENT;
+
+ 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, value);
+}
+
static int msg_reply_counter_value(struct sk_buff *msg, u32 error_id,
const char *error_name, u32 value)
{
@@ -417,6 +437,34 @@ int drm_ras_nl_get_error_threshold_doit(struct sk_buff *skb,
return doit_reply_threshold_value(info, node_id, error_id);
}
+/**
+ * drm_ras_nl_set_error_threshold_doit() - Set threshold value of the error
+ * @skb: Netlink message buffer
+ * @info: Generic Netlink info containing attributes of the request
+ *
+ * Extracts the node ID, error ID and threshold value from the netlink attributes
+ * and sets the threshold of the corresponding error.
+ *
+ * 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, value;
+
+ if (!info->attrs ||
+ GENL_REQ_ATTR_CHECK(info, DRM_RAS_A_ERROR_THRESHOLD_ATTRS_NODE_ID) ||
+ GENL_REQ_ATTR_CHECK(info, DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_ID) ||
+ GENL_REQ_ATTR_CHECK(info, DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_THRESHOLD))
+ return -EINVAL;
+
+ node_id = nla_get_u32(info->attrs[DRM_RAS_A_ERROR_THRESHOLD_ATTRS_NODE_ID]);
+ error_id = nla_get_u32(info->attrs[DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_ID]);
+ value = nla_get_u32(info->attrs[DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_THRESHOLD]);
+
+ return set_node_error_threshold(node_id, error_id, value);
+}
+
/**
* 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 48e231734f4d..8b202d773dac 100644
--- a/drivers/gpu/drm/drm_ras_nl.c
+++ b/drivers/gpu/drm/drm_ras_nl.c
@@ -28,6 +28,13 @@ static const struct nla_policy drm_ras_get_error_threshold_nl_policy[DRM_RAS_A_E
[DRM_RAS_A_ERROR_THRESHOLD_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_THRESHOLD_ATTRS_ERROR_THRESHOLD + 1] = {
+ [DRM_RAS_A_ERROR_THRESHOLD_ATTRS_NODE_ID] = { .type = NLA_U32, },
+ [DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_ID] = { .type = NLA_U32, },
+ [DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_THRESHOLD] = { .type = NLA_U32, },
+};
+
/* Ops table for drm_ras */
static const struct genl_split_ops drm_ras_nl_ops[] = {
{
@@ -56,6 +63,13 @@ static const struct genl_split_ops drm_ras_nl_ops[] = {
.maxattr = DRM_RAS_A_ERROR_THRESHOLD_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_THRESHOLD_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 540fe22e2312..9db7f5d00201 100644
--- a/drivers/gpu/drm/drm_ras_nl.h
+++ b/drivers/gpu/drm/drm_ras_nl.h
@@ -20,6 +20,8 @@ int drm_ras_nl_get_error_counter_dumpit(struct sk_buff *skb,
struct netlink_callback *cb);
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 50cee70bd065..7a69821b8b78 100644
--- a/include/drm/drm_ras.h
+++ b/include/drm/drm_ras.h
@@ -71,6 +71,19 @@ struct drm_ras_node {
*/
int (*query_error_threshold)(struct drm_ras_node *node, u32 error_id,
const char **name, u32 *val);
+ /**
+ * @set_error_threshold:
+ *
+ * This callback is used by drm-ras to set threshold value of a specific
+ * error.
+ *
+ * Driver should expect set_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 (*set_error_threshold)(struct drm_ras_node *node, u32 error_id,
+ u32 val);
/** @priv: Driver private data */
void *priv;
diff --git a/include/uapi/drm/drm_ras.h b/include/uapi/drm/drm_ras.h
index 49c5ca497d73..8ff0311d0d63 100644
--- a/include/uapi/drm/drm_ras.h
+++ b/include/uapi/drm/drm_ras.h
@@ -52,6 +52,7 @@ enum {
DRM_RAS_CMD_LIST_NODES = 1,
DRM_RAS_CMD_GET_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] 21+ messages in thread* Re: [PATCH v1 03/11] drm/ras: Introduce set-error-threshold
2026-04-17 21:16 ` [PATCH v1 03/11] drm/ras: Introduce set-error-threshold Raag Jadav
@ 2026-04-22 6:12 ` Tauro, Riana
0 siblings, 0 replies; 21+ messages in thread
From: Tauro, Riana @ 2026-04-22 6:12 UTC (permalink / raw)
To: Raag Jadav, intel-xe, dri-devel, netdev
Cc: simona.vetter, airlied, kuba, lijo.lazar, Hawking.Zhang, davem,
pabeni, edumazet, maarten, zachary.mckevitt, rodrigo.vivi,
michal.wajdeczko, matthew.d.roper, umesh.nerlige.ramappa,
mallesh.koujalagi, soham.purkait, anoop.c.vijay,
aravind.iddamsetty
On 4/18/2026 2:46 AM, Raag Jadav wrote:
> Add set-error-threshold command support which allows setting threshold
> value of the error. 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>
> ---
> Documentation/gpu/drm-ras.rst | 9 +++++
> Documentation/netlink/specs/drm_ras.yaml | 12 ++++++
> drivers/gpu/drm/drm_ras.c | 48 ++++++++++++++++++++++++
> drivers/gpu/drm/drm_ras_nl.c | 14 +++++++
> drivers/gpu/drm/drm_ras_nl.h | 2 +
> include/drm/drm_ras.h | 13 +++++++
> include/uapi/drm/drm_ras.h | 1 +
> 7 files changed, 99 insertions(+)
>
> diff --git a/Documentation/gpu/drm-ras.rst b/Documentation/gpu/drm-ras.rst
> index 6443dfd1677f..a819aa150604 100644
> --- a/Documentation/gpu/drm-ras.rst
> +++ b/Documentation/gpu/drm-ras.rst
> @@ -54,6 +54,8 @@ User space tools can:
> ``node-id`` and ``error-id`` as parameters.
> * Query specific error threshold value with the ``get-error-threshold`` command, using both
> ``node-id`` and ``error-id`` as parameters.
> +* Set specific error threshold value with the ``set-error-threshold`` command, using
> + ``node-id``, ``error-id`` and ``error-threshold`` as parameters.
>
> YAML-based Interface
> --------------------
> @@ -109,3 +111,10 @@ Example: Query threshold value of a given error
>
> 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': 0}
> +
> +Example: Set threshold value of a given error
> +
> +.. 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 95a939fb987d..09824309cdff 100644
> --- a/Documentation/netlink/specs/drm_ras.yaml
> +++ b/Documentation/netlink/specs/drm_ras.yaml
> @@ -150,3 +150,15 @@ operations:
> - error-id
> - error-name
> - error-threshold
> + -
> + name: set-error-threshold
> + doc: >-
> + Set threshold value of the error.
> + attribute-set: error-threshold-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 d2d853d5d69c..e4ff6d87f824 100644
> --- a/drivers/gpu/drm/drm_ras.c
> +++ b/drivers/gpu/drm/drm_ras.c
> @@ -41,6 +41,9 @@
> * Userspace must provide Node ID and Error ID.
> * Returns the threshold value of a specific error.
> *
> + * 4. SET_ERROR_THRESHOLD: Set threshold value of the error.
> + * Userspace must provide Node ID, Error ID and Threshold value to be set.
> + *
> * Node registration:
> *
> * - drm_ras_node_register(): Registers a new node and assigns
> @@ -72,6 +75,8 @@
> * operation, fetching a counter value from a specific node.
> * - drm_ras_nl_get_error_threshold_doit(): Implements the GET_ERROR_THRESHOLD doit
> * operation, fetching the threshold value of a specific error.
> + * - drm_ras_nl_set_error_threshold_doit(): Implements the SET_ERROR_THRESHOLD doit
> + * operation, setting the threshold value of a specific error.
> */
>
> static DEFINE_XARRAY_ALLOC(drm_ras_xa);
> @@ -184,6 +189,21 @@ static int get_node_error_threshold(u32 node_id, u32 error_id,
> return node->query_error_threshold(node, error_id, name, value);
> }
>
> +static int set_node_error_threshold(u32 node_id, u32 error_id, u32 value)
> +{
> + struct drm_ras_node *node;
> +
> + node = xa_load(&drm_ras_xa, node_id);
> + if (!node || !node->set_error_threshold)
> + return -ENOENT;
Use -EOPNOTSUPP for absence of function
> +
> + 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, value);
> +}
> +
> static int msg_reply_counter_value(struct sk_buff *msg, u32 error_id,
> const char *error_name, u32 value)
> {
> @@ -417,6 +437,34 @@ int drm_ras_nl_get_error_threshold_doit(struct sk_buff *skb,
> return doit_reply_threshold_value(info, node_id, error_id);
> }
>
> +/**
> + * drm_ras_nl_set_error_threshold_doit() - Set threshold value of the error
> + * @skb: Netlink message buffer
> + * @info: Generic Netlink info containing attributes of the request
> + *
> + * Extracts the node ID, error ID and threshold value from the netlink attributes
> + * and sets the threshold of the corresponding error.
> + *
> + * 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, value;
> +
> + if (!info->attrs ||
> + GENL_REQ_ATTR_CHECK(info, DRM_RAS_A_ERROR_THRESHOLD_ATTRS_NODE_ID) ||
> + GENL_REQ_ATTR_CHECK(info, DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_ID) ||
> + GENL_REQ_ATTR_CHECK(info, DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_THRESHOLD))
> + return -EINVAL;
> +
> + node_id = nla_get_u32(info->attrs[DRM_RAS_A_ERROR_THRESHOLD_ATTRS_NODE_ID]);
> + error_id = nla_get_u32(info->attrs[DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_ID]);
> + value = nla_get_u32(info->attrs[DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_THRESHOLD]);
do we need a check for max threshold here? Probably configured by drivers?
Or is it upto the driver to check? If its upto the driver, please add it
in the document
Thanks
Riana
> +
> + return set_node_error_threshold(node_id, error_id, value);
> +}
> +
> /**
> * 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 48e231734f4d..8b202d773dac 100644
> --- a/drivers/gpu/drm/drm_ras_nl.c
> +++ b/drivers/gpu/drm/drm_ras_nl.c
> @@ -28,6 +28,13 @@ static const struct nla_policy drm_ras_get_error_threshold_nl_policy[DRM_RAS_A_E
> [DRM_RAS_A_ERROR_THRESHOLD_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_THRESHOLD_ATTRS_ERROR_THRESHOLD + 1] = {
> + [DRM_RAS_A_ERROR_THRESHOLD_ATTRS_NODE_ID] = { .type = NLA_U32, },
> + [DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_ID] = { .type = NLA_U32, },
> + [DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_THRESHOLD] = { .type = NLA_U32, },
> +};
> +
> /* Ops table for drm_ras */
> static const struct genl_split_ops drm_ras_nl_ops[] = {
> {
> @@ -56,6 +63,13 @@ static const struct genl_split_ops drm_ras_nl_ops[] = {
> .maxattr = DRM_RAS_A_ERROR_THRESHOLD_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_THRESHOLD_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 540fe22e2312..9db7f5d00201 100644
> --- a/drivers/gpu/drm/drm_ras_nl.h
> +++ b/drivers/gpu/drm/drm_ras_nl.h
> @@ -20,6 +20,8 @@ int drm_ras_nl_get_error_counter_dumpit(struct sk_buff *skb,
> struct netlink_callback *cb);
> 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 50cee70bd065..7a69821b8b78 100644
> --- a/include/drm/drm_ras.h
> +++ b/include/drm/drm_ras.h
> @@ -71,6 +71,19 @@ struct drm_ras_node {
> */
> int (*query_error_threshold)(struct drm_ras_node *node, u32 error_id,
> const char **name, u32 *val);
> + /**
> + * @set_error_threshold:
> + *
> + * This callback is used by drm-ras to set threshold value of a specific
> + * error.
> + *
> + * Driver should expect set_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 (*set_error_threshold)(struct drm_ras_node *node, u32 error_id,
> + u32 val);
>
> /** @priv: Driver private data */
> void *priv;
> diff --git a/include/uapi/drm/drm_ras.h b/include/uapi/drm/drm_ras.h
> index 49c5ca497d73..8ff0311d0d63 100644
> --- a/include/uapi/drm/drm_ras.h
> +++ b/include/uapi/drm/drm_ras.h
> @@ -52,6 +52,7 @@ enum {
> DRM_RAS_CMD_LIST_NODES = 1,
> DRM_RAS_CMD_GET_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)
^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH v1 04/11] drm/xe/uapi: Add additional error components to XE drm_ras
2026-04-17 21:16 [PATCH v1 00/11] Introduce error threshold to drm_ras Raag Jadav
` (2 preceding siblings ...)
2026-04-17 21:16 ` [PATCH v1 03/11] drm/ras: Introduce set-error-threshold Raag Jadav
@ 2026-04-17 21:16 ` Raag Jadav
2026-04-17 21:16 ` [PATCH v1 05/11] drm/xe/sysctrl: Add system controller interrupt handler Raag Jadav
` (10 subsequent siblings)
14 siblings, 0 replies; 21+ messages in thread
From: Raag Jadav @ 2026-04-17 21:16 UTC (permalink / raw)
To: intel-xe, dri-devel, netdev
Cc: simona.vetter, airlied, kuba, lijo.lazar, Hawking.Zhang, davem,
pabeni, edumazet, maarten, zachary.mckevitt, rodrigo.vivi,
riana.tauro, michal.wajdeczko, matthew.d.roper,
umesh.nerlige.ramappa, mallesh.koujalagi, soham.purkait,
anoop.c.vijay, aravind.iddamsetty, Raag Jadav
From: Riana Tauro <riana.tauro@intel.com>
Add additional Error components supported by XE RAS (Reliability,
Availability and Serviceability).
Signed-off-by: Riana Tauro <riana.tauro@intel.com>
Reviewed-by: Aravind Iddamsetty <aravind.iddamsetty@linux.intel.com>
---
include/uapi/drm/xe_drm.h | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
index 48e9f1fdb78d..50c80af4ad4e 100644
--- a/include/uapi/drm/xe_drm.h
+++ b/include/uapi/drm/xe_drm.h
@@ -2589,6 +2589,12 @@ enum drm_xe_ras_error_component {
DRM_XE_RAS_ERR_COMP_CORE_COMPUTE = 1,
/** @DRM_XE_RAS_ERR_COMP_SOC_INTERNAL: SoC Internal Error */
DRM_XE_RAS_ERR_COMP_SOC_INTERNAL,
+ /** @DRM_XE_RAS_ERR_COMP_DEVICE_MEMORY: Device Memory Error */
+ DRM_XE_RAS_ERR_COMP_DEVICE_MEMORY,
+ /** @DRM_XE_RAS_ERR_COMP_PCIE: PCIe Subsystem Error */
+ DRM_XE_RAS_ERR_COMP_PCIE,
+ /** @DRM_XE_RAS_ERR_COMP_FABRIC: Fabric Subsystem Error */
+ DRM_XE_RAS_ERR_COMP_FABRIC,
/** @DRM_XE_RAS_ERR_COMP_MAX: Max Error */
DRM_XE_RAS_ERR_COMP_MAX /* non-ABI */
};
@@ -2606,7 +2612,10 @@ enum drm_xe_ras_error_component {
*/
#define DRM_XE_RAS_ERROR_COMPONENT_NAMES { \
[DRM_XE_RAS_ERR_COMP_CORE_COMPUTE] = "core-compute", \
- [DRM_XE_RAS_ERR_COMP_SOC_INTERNAL] = "soc-internal" \
+ [DRM_XE_RAS_ERR_COMP_SOC_INTERNAL] = "soc-internal", \
+ [DRM_XE_RAS_ERR_COMP_DEVICE_MEMORY] = "device-memory", \
+ [DRM_XE_RAS_ERR_COMP_PCIE] = "pcie", \
+ [DRM_XE_RAS_ERR_COMP_FABRIC] = "fabric", \
}
#if defined(__cplusplus)
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread* [PATCH v1 05/11] drm/xe/sysctrl: Add system controller interrupt handler
2026-04-17 21:16 [PATCH v1 00/11] Introduce error threshold to drm_ras Raag Jadav
` (3 preceding siblings ...)
2026-04-17 21:16 ` [PATCH v1 04/11] drm/xe/uapi: Add additional error components to XE drm_ras Raag Jadav
@ 2026-04-17 21:16 ` Raag Jadav
2026-04-22 5:55 ` Tauro, Riana
2026-04-17 21:16 ` [PATCH v1 06/11] drm/xe/sysctrl: Add system controller event support Raag Jadav
` (9 subsequent siblings)
14 siblings, 1 reply; 21+ messages in thread
From: Raag Jadav @ 2026-04-17 21:16 UTC (permalink / raw)
To: intel-xe, dri-devel, netdev
Cc: simona.vetter, airlied, kuba, lijo.lazar, Hawking.Zhang, davem,
pabeni, edumazet, maarten, zachary.mckevitt, rodrigo.vivi,
riana.tauro, michal.wajdeczko, matthew.d.roper,
umesh.nerlige.ramappa, mallesh.koujalagi, soham.purkait,
anoop.c.vijay, aravind.iddamsetty, Raag Jadav
Add system controller interrupt handler which is denoted by 11th bit in
GFX master interrupt register. While at it, add worker for scheduling
system controller work.
Co-developed-by: Soham Purkait <soham.purkait@intel.com>
Signed-off-by: Soham Purkait <soham.purkait@intel.com>
Signed-off-by: Raag Jadav <raag.jadav@intel.com>
Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
Reviewed-by: Riana Tauro <riana.tauro@intel.com>
---
drivers/gpu/drm/xe/regs/xe_irq_regs.h | 1 +
drivers/gpu/drm/xe/xe_irq.c | 2 ++
drivers/gpu/drm/xe/xe_sysctrl.c | 35 +++++++++++++++++++++------
drivers/gpu/drm/xe/xe_sysctrl.h | 1 +
drivers/gpu/drm/xe/xe_sysctrl_types.h | 4 +++
5 files changed, 36 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/xe/regs/xe_irq_regs.h b/drivers/gpu/drm/xe/regs/xe_irq_regs.h
index 9d74f454d3ff..1d6b976c4de0 100644
--- a/drivers/gpu/drm/xe/regs/xe_irq_regs.h
+++ b/drivers/gpu/drm/xe/regs/xe_irq_regs.h
@@ -22,6 +22,7 @@
#define DISPLAY_IRQ REG_BIT(16)
#define SOC_H2DMEMINT_IRQ REG_BIT(13)
#define I2C_IRQ REG_BIT(12)
+#define SYSCTRL_IRQ REG_BIT(11)
#define GT_DW_IRQ(x) REG_BIT(x)
/*
diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c
index 9a775c6588dc..e9f0b3cad06d 100644
--- a/drivers/gpu/drm/xe/xe_irq.c
+++ b/drivers/gpu/drm/xe/xe_irq.c
@@ -24,6 +24,7 @@
#include "xe_mmio.h"
#include "xe_pxp.h"
#include "xe_sriov.h"
+#include "xe_sysctrl.h"
#include "xe_tile.h"
/*
@@ -525,6 +526,7 @@ static irqreturn_t dg1_irq_handler(int irq, void *arg)
xe_heci_csc_irq_handler(xe, master_ctl);
xe_display_irq_handler(xe, master_ctl);
xe_i2c_irq_handler(xe, master_ctl);
+ xe_sysctrl_irq_handler(xe, master_ctl);
xe_mert_irq_handler(xe, master_ctl);
gu_misc_iir = gu_misc_irq_ack(xe, master_ctl);
}
diff --git a/drivers/gpu/drm/xe/xe_sysctrl.c b/drivers/gpu/drm/xe/xe_sysctrl.c
index 2bcef304eb9a..7de3e73bd8e0 100644
--- a/drivers/gpu/drm/xe/xe_sysctrl.c
+++ b/drivers/gpu/drm/xe/xe_sysctrl.c
@@ -8,6 +8,7 @@
#include <drm/drm_managed.h>
+#include "regs/xe_irq_regs.h"
#include "regs/xe_sysctrl_regs.h"
#include "xe_device.h"
#include "xe_mmio.h"
@@ -30,10 +31,16 @@
static void sysctrl_fini(void *arg)
{
struct xe_device *xe = arg;
+ struct xe_sysctrl *sc = &xe->sc;
+ disable_work_sync(&sc->work);
xe->soc_remapper.set_sysctrl_region(xe, 0);
}
+static void xe_sysctrl_work(struct work_struct *work)
+{
+}
+
/**
* xe_sysctrl_init() - Initialize System Controller subsystem
* @xe: xe device instance
@@ -55,12 +62,6 @@ int xe_sysctrl_init(struct xe_device *xe)
if (!xe->info.has_sysctrl)
return 0;
- xe->soc_remapper.set_sysctrl_region(xe, SYSCTRL_MAILBOX_INDEX);
-
- ret = devm_add_action_or_reset(xe->drm.dev, sysctrl_fini, xe);
- if (ret)
- return ret;
-
sc->mmio = devm_kzalloc(xe->drm.dev, sizeof(*sc->mmio), GFP_KERNEL);
if (!sc->mmio)
return -ENOMEM;
@@ -73,9 +74,29 @@ int xe_sysctrl_init(struct xe_device *xe)
if (ret)
return ret;
+ xe->soc_remapper.set_sysctrl_region(xe, SYSCTRL_MAILBOX_INDEX);
xe_sysctrl_mailbox_init(sc);
+ INIT_WORK(&sc->work, xe_sysctrl_work);
- return 0;
+ return devm_add_action_or_reset(xe->drm.dev, sysctrl_fini, xe);
+}
+
+/**
+ * xe_sysctrl_irq_handler() - Handler for System Controller interrupts
+ * @xe: xe device instance
+ * @master_ctl: interrupt register
+ *
+ * Handle interrupts generated by System Controller.
+ */
+void xe_sysctrl_irq_handler(struct xe_device *xe, u32 master_ctl)
+{
+ struct xe_sysctrl *sc = &xe->sc;
+
+ if (!xe->info.has_sysctrl || !sc->work.func)
+ return;
+
+ if (master_ctl & SYSCTRL_IRQ)
+ schedule_work(&sc->work);
}
/**
diff --git a/drivers/gpu/drm/xe/xe_sysctrl.h b/drivers/gpu/drm/xe/xe_sysctrl.h
index f3b0f3716b2f..f7469bfc9324 100644
--- a/drivers/gpu/drm/xe/xe_sysctrl.h
+++ b/drivers/gpu/drm/xe/xe_sysctrl.h
@@ -17,6 +17,7 @@ static inline struct xe_device *sc_to_xe(struct xe_sysctrl *sc)
}
int xe_sysctrl_init(struct xe_device *xe);
+void xe_sysctrl_irq_handler(struct xe_device *xe, u32 master_ctl);
void xe_sysctrl_pm_resume(struct xe_device *xe);
#endif
diff --git a/drivers/gpu/drm/xe/xe_sysctrl_types.h b/drivers/gpu/drm/xe/xe_sysctrl_types.h
index 8217f6befe70..5f408d6491ef 100644
--- a/drivers/gpu/drm/xe/xe_sysctrl_types.h
+++ b/drivers/gpu/drm/xe/xe_sysctrl_types.h
@@ -8,6 +8,7 @@
#include <linux/mutex.h>
#include <linux/types.h>
+#include <linux/workqueue_types.h>
struct xe_mmio;
@@ -27,6 +28,9 @@ struct xe_sysctrl {
/** @phase_bit: Message boundary phase toggle bit (0 or 1) */
bool phase_bit;
+
+ /** @work: Pending events worker */
+ struct work_struct work;
};
#endif
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread* Re: [PATCH v1 05/11] drm/xe/sysctrl: Add system controller interrupt handler
2026-04-17 21:16 ` [PATCH v1 05/11] drm/xe/sysctrl: Add system controller interrupt handler Raag Jadav
@ 2026-04-22 5:55 ` Tauro, Riana
2026-04-22 6:25 ` Raag Jadav
0 siblings, 1 reply; 21+ messages in thread
From: Tauro, Riana @ 2026-04-22 5:55 UTC (permalink / raw)
To: Raag Jadav, intel-xe, dri-devel, netdev
Cc: simona.vetter, airlied, kuba, lijo.lazar, Hawking.Zhang, davem,
pabeni, edumazet, maarten, zachary.mckevitt, rodrigo.vivi,
michal.wajdeczko, matthew.d.roper, umesh.nerlige.ramappa,
mallesh.koujalagi, soham.purkait, anoop.c.vijay,
aravind.iddamsetty
On 4/18/2026 2:46 AM, Raag Jadav wrote:
> Add system controller interrupt handler which is denoted by 11th bit in
> GFX master interrupt register. While at it, add worker for scheduling
> system controller work.
Why do we need this series in the threshold patch. From what i see, we
need only structures
Can't we only redefine those here?
I know you will have to rebase again once any patch is merged. But this
is unnecessary noise
for the drm patch.
Thanks
Riana
>
> Co-developed-by: Soham Purkait <soham.purkait@intel.com>
> Signed-off-by: Soham Purkait <soham.purkait@intel.com>
> Signed-off-by: Raag Jadav <raag.jadav@intel.com>
> Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
> Reviewed-by: Riana Tauro <riana.tauro@intel.com>
> ---
> drivers/gpu/drm/xe/regs/xe_irq_regs.h | 1 +
> drivers/gpu/drm/xe/xe_irq.c | 2 ++
> drivers/gpu/drm/xe/xe_sysctrl.c | 35 +++++++++++++++++++++------
> drivers/gpu/drm/xe/xe_sysctrl.h | 1 +
> drivers/gpu/drm/xe/xe_sysctrl_types.h | 4 +++
> 5 files changed, 36 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/regs/xe_irq_regs.h b/drivers/gpu/drm/xe/regs/xe_irq_regs.h
> index 9d74f454d3ff..1d6b976c4de0 100644
> --- a/drivers/gpu/drm/xe/regs/xe_irq_regs.h
> +++ b/drivers/gpu/drm/xe/regs/xe_irq_regs.h
> @@ -22,6 +22,7 @@
> #define DISPLAY_IRQ REG_BIT(16)
> #define SOC_H2DMEMINT_IRQ REG_BIT(13)
> #define I2C_IRQ REG_BIT(12)
> +#define SYSCTRL_IRQ REG_BIT(11)
> #define GT_DW_IRQ(x) REG_BIT(x)
>
> /*
> diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c
> index 9a775c6588dc..e9f0b3cad06d 100644
> --- a/drivers/gpu/drm/xe/xe_irq.c
> +++ b/drivers/gpu/drm/xe/xe_irq.c
> @@ -24,6 +24,7 @@
> #include "xe_mmio.h"
> #include "xe_pxp.h"
> #include "xe_sriov.h"
> +#include "xe_sysctrl.h"
> #include "xe_tile.h"
>
> /*
> @@ -525,6 +526,7 @@ static irqreturn_t dg1_irq_handler(int irq, void *arg)
> xe_heci_csc_irq_handler(xe, master_ctl);
> xe_display_irq_handler(xe, master_ctl);
> xe_i2c_irq_handler(xe, master_ctl);
> + xe_sysctrl_irq_handler(xe, master_ctl);
> xe_mert_irq_handler(xe, master_ctl);
> gu_misc_iir = gu_misc_irq_ack(xe, master_ctl);
> }
> diff --git a/drivers/gpu/drm/xe/xe_sysctrl.c b/drivers/gpu/drm/xe/xe_sysctrl.c
> index 2bcef304eb9a..7de3e73bd8e0 100644
> --- a/drivers/gpu/drm/xe/xe_sysctrl.c
> +++ b/drivers/gpu/drm/xe/xe_sysctrl.c
> @@ -8,6 +8,7 @@
>
> #include <drm/drm_managed.h>
>
> +#include "regs/xe_irq_regs.h"
> #include "regs/xe_sysctrl_regs.h"
> #include "xe_device.h"
> #include "xe_mmio.h"
> @@ -30,10 +31,16 @@
> static void sysctrl_fini(void *arg)
> {
> struct xe_device *xe = arg;
> + struct xe_sysctrl *sc = &xe->sc;
>
> + disable_work_sync(&sc->work);
> xe->soc_remapper.set_sysctrl_region(xe, 0);
> }
>
> +static void xe_sysctrl_work(struct work_struct *work)
> +{
> +}
> +
> /**
> * xe_sysctrl_init() - Initialize System Controller subsystem
> * @xe: xe device instance
> @@ -55,12 +62,6 @@ int xe_sysctrl_init(struct xe_device *xe)
> if (!xe->info.has_sysctrl)
> return 0;
>
> - xe->soc_remapper.set_sysctrl_region(xe, SYSCTRL_MAILBOX_INDEX);
> -
> - ret = devm_add_action_or_reset(xe->drm.dev, sysctrl_fini, xe);
> - if (ret)
> - return ret;
> -
> sc->mmio = devm_kzalloc(xe->drm.dev, sizeof(*sc->mmio), GFP_KERNEL);
> if (!sc->mmio)
> return -ENOMEM;
> @@ -73,9 +74,29 @@ int xe_sysctrl_init(struct xe_device *xe)
> if (ret)
> return ret;
>
> + xe->soc_remapper.set_sysctrl_region(xe, SYSCTRL_MAILBOX_INDEX);
> xe_sysctrl_mailbox_init(sc);
> + INIT_WORK(&sc->work, xe_sysctrl_work);
>
> - return 0;
> + return devm_add_action_or_reset(xe->drm.dev, sysctrl_fini, xe);
> +}
> +
> +/**
> + * xe_sysctrl_irq_handler() - Handler for System Controller interrupts
> + * @xe: xe device instance
> + * @master_ctl: interrupt register
> + *
> + * Handle interrupts generated by System Controller.
> + */
> +void xe_sysctrl_irq_handler(struct xe_device *xe, u32 master_ctl)
> +{
> + struct xe_sysctrl *sc = &xe->sc;
> +
> + if (!xe->info.has_sysctrl || !sc->work.func)
> + return;
> +
> + if (master_ctl & SYSCTRL_IRQ)
> + schedule_work(&sc->work);
> }
>
> /**
> diff --git a/drivers/gpu/drm/xe/xe_sysctrl.h b/drivers/gpu/drm/xe/xe_sysctrl.h
> index f3b0f3716b2f..f7469bfc9324 100644
> --- a/drivers/gpu/drm/xe/xe_sysctrl.h
> +++ b/drivers/gpu/drm/xe/xe_sysctrl.h
> @@ -17,6 +17,7 @@ static inline struct xe_device *sc_to_xe(struct xe_sysctrl *sc)
> }
>
> int xe_sysctrl_init(struct xe_device *xe);
> +void xe_sysctrl_irq_handler(struct xe_device *xe, u32 master_ctl);
> void xe_sysctrl_pm_resume(struct xe_device *xe);
>
> #endif
> diff --git a/drivers/gpu/drm/xe/xe_sysctrl_types.h b/drivers/gpu/drm/xe/xe_sysctrl_types.h
> index 8217f6befe70..5f408d6491ef 100644
> --- a/drivers/gpu/drm/xe/xe_sysctrl_types.h
> +++ b/drivers/gpu/drm/xe/xe_sysctrl_types.h
> @@ -8,6 +8,7 @@
>
> #include <linux/mutex.h>
> #include <linux/types.h>
> +#include <linux/workqueue_types.h>
>
> struct xe_mmio;
>
> @@ -27,6 +28,9 @@ struct xe_sysctrl {
>
> /** @phase_bit: Message boundary phase toggle bit (0 or 1) */
> bool phase_bit;
> +
> + /** @work: Pending events worker */
> + struct work_struct work;
> };
>
> #endif
^ permalink raw reply [flat|nested] 21+ messages in thread* Re: [PATCH v1 05/11] drm/xe/sysctrl: Add system controller interrupt handler
2026-04-22 5:55 ` Tauro, Riana
@ 2026-04-22 6:25 ` Raag Jadav
0 siblings, 0 replies; 21+ messages in thread
From: Raag Jadav @ 2026-04-22 6:25 UTC (permalink / raw)
To: Tauro, Riana
Cc: intel-xe, dri-devel, netdev, simona.vetter, airlied, kuba,
lijo.lazar, Hawking.Zhang, davem, pabeni, edumazet, maarten,
zachary.mckevitt, rodrigo.vivi, michal.wajdeczko, matthew.d.roper,
umesh.nerlige.ramappa, mallesh.koujalagi, soham.purkait,
anoop.c.vijay, aravind.iddamsetty
On Wed, Apr 22, 2026 at 11:25:44AM +0530, Tauro, Riana wrote:
> On 4/18/2026 2:46 AM, Raag Jadav wrote:
> > Add system controller interrupt handler which is denoted by 11th bit in
> > GFX master interrupt register. While at it, add worker for scheduling
> > system controller work.
>
> Why do we need this series in the threshold patch. From what i see, we need
> only structures
> Can't we only redefine those here?
>
> I know you will have to rebase again once any patch is merged. But this is
> unnecessary noise
> for the drm patch.
We have threshold crossed event so I thought it was relevant here. We can
merge it independently if you're okay with it.
Raag
> > Co-developed-by: Soham Purkait <soham.purkait@intel.com>
> > Signed-off-by: Soham Purkait <soham.purkait@intel.com>
> > Signed-off-by: Raag Jadav <raag.jadav@intel.com>
> > Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
> > Reviewed-by: Riana Tauro <riana.tauro@intel.com>
> > ---
> > drivers/gpu/drm/xe/regs/xe_irq_regs.h | 1 +
> > drivers/gpu/drm/xe/xe_irq.c | 2 ++
> > drivers/gpu/drm/xe/xe_sysctrl.c | 35 +++++++++++++++++++++------
> > drivers/gpu/drm/xe/xe_sysctrl.h | 1 +
> > drivers/gpu/drm/xe/xe_sysctrl_types.h | 4 +++
> > 5 files changed, 36 insertions(+), 7 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/xe/regs/xe_irq_regs.h b/drivers/gpu/drm/xe/regs/xe_irq_regs.h
> > index 9d74f454d3ff..1d6b976c4de0 100644
> > --- a/drivers/gpu/drm/xe/regs/xe_irq_regs.h
> > +++ b/drivers/gpu/drm/xe/regs/xe_irq_regs.h
> > @@ -22,6 +22,7 @@
> > #define DISPLAY_IRQ REG_BIT(16)
> > #define SOC_H2DMEMINT_IRQ REG_BIT(13)
> > #define I2C_IRQ REG_BIT(12)
> > +#define SYSCTRL_IRQ REG_BIT(11)
> > #define GT_DW_IRQ(x) REG_BIT(x)
> > /*
> > diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c
> > index 9a775c6588dc..e9f0b3cad06d 100644
> > --- a/drivers/gpu/drm/xe/xe_irq.c
> > +++ b/drivers/gpu/drm/xe/xe_irq.c
> > @@ -24,6 +24,7 @@
> > #include "xe_mmio.h"
> > #include "xe_pxp.h"
> > #include "xe_sriov.h"
> > +#include "xe_sysctrl.h"
> > #include "xe_tile.h"
> > /*
> > @@ -525,6 +526,7 @@ static irqreturn_t dg1_irq_handler(int irq, void *arg)
> > xe_heci_csc_irq_handler(xe, master_ctl);
> > xe_display_irq_handler(xe, master_ctl);
> > xe_i2c_irq_handler(xe, master_ctl);
> > + xe_sysctrl_irq_handler(xe, master_ctl);
> > xe_mert_irq_handler(xe, master_ctl);
> > gu_misc_iir = gu_misc_irq_ack(xe, master_ctl);
> > }
> > diff --git a/drivers/gpu/drm/xe/xe_sysctrl.c b/drivers/gpu/drm/xe/xe_sysctrl.c
> > index 2bcef304eb9a..7de3e73bd8e0 100644
> > --- a/drivers/gpu/drm/xe/xe_sysctrl.c
> > +++ b/drivers/gpu/drm/xe/xe_sysctrl.c
> > @@ -8,6 +8,7 @@
> > #include <drm/drm_managed.h>
> > +#include "regs/xe_irq_regs.h"
> > #include "regs/xe_sysctrl_regs.h"
> > #include "xe_device.h"
> > #include "xe_mmio.h"
> > @@ -30,10 +31,16 @@
> > static void sysctrl_fini(void *arg)
> > {
> > struct xe_device *xe = arg;
> > + struct xe_sysctrl *sc = &xe->sc;
> > + disable_work_sync(&sc->work);
> > xe->soc_remapper.set_sysctrl_region(xe, 0);
> > }
> > +static void xe_sysctrl_work(struct work_struct *work)
> > +{
> > +}
> > +
> > /**
> > * xe_sysctrl_init() - Initialize System Controller subsystem
> > * @xe: xe device instance
> > @@ -55,12 +62,6 @@ int xe_sysctrl_init(struct xe_device *xe)
> > if (!xe->info.has_sysctrl)
> > return 0;
> > - xe->soc_remapper.set_sysctrl_region(xe, SYSCTRL_MAILBOX_INDEX);
> > -
> > - ret = devm_add_action_or_reset(xe->drm.dev, sysctrl_fini, xe);
> > - if (ret)
> > - return ret;
> > -
> > sc->mmio = devm_kzalloc(xe->drm.dev, sizeof(*sc->mmio), GFP_KERNEL);
> > if (!sc->mmio)
> > return -ENOMEM;
> > @@ -73,9 +74,29 @@ int xe_sysctrl_init(struct xe_device *xe)
> > if (ret)
> > return ret;
> > + xe->soc_remapper.set_sysctrl_region(xe, SYSCTRL_MAILBOX_INDEX);
> > xe_sysctrl_mailbox_init(sc);
> > + INIT_WORK(&sc->work, xe_sysctrl_work);
> > - return 0;
> > + return devm_add_action_or_reset(xe->drm.dev, sysctrl_fini, xe);
> > +}
> > +
> > +/**
> > + * xe_sysctrl_irq_handler() - Handler for System Controller interrupts
> > + * @xe: xe device instance
> > + * @master_ctl: interrupt register
> > + *
> > + * Handle interrupts generated by System Controller.
> > + */
> > +void xe_sysctrl_irq_handler(struct xe_device *xe, u32 master_ctl)
> > +{
> > + struct xe_sysctrl *sc = &xe->sc;
> > +
> > + if (!xe->info.has_sysctrl || !sc->work.func)
> > + return;
> > +
> > + if (master_ctl & SYSCTRL_IRQ)
> > + schedule_work(&sc->work);
> > }
> > /**
> > diff --git a/drivers/gpu/drm/xe/xe_sysctrl.h b/drivers/gpu/drm/xe/xe_sysctrl.h
> > index f3b0f3716b2f..f7469bfc9324 100644
> > --- a/drivers/gpu/drm/xe/xe_sysctrl.h
> > +++ b/drivers/gpu/drm/xe/xe_sysctrl.h
> > @@ -17,6 +17,7 @@ static inline struct xe_device *sc_to_xe(struct xe_sysctrl *sc)
> > }
> > int xe_sysctrl_init(struct xe_device *xe);
> > +void xe_sysctrl_irq_handler(struct xe_device *xe, u32 master_ctl);
> > void xe_sysctrl_pm_resume(struct xe_device *xe);
> > #endif
> > diff --git a/drivers/gpu/drm/xe/xe_sysctrl_types.h b/drivers/gpu/drm/xe/xe_sysctrl_types.h
> > index 8217f6befe70..5f408d6491ef 100644
> > --- a/drivers/gpu/drm/xe/xe_sysctrl_types.h
> > +++ b/drivers/gpu/drm/xe/xe_sysctrl_types.h
> > @@ -8,6 +8,7 @@
> > #include <linux/mutex.h>
> > #include <linux/types.h>
> > +#include <linux/workqueue_types.h>
> > struct xe_mmio;
> > @@ -27,6 +28,9 @@ struct xe_sysctrl {
> > /** @phase_bit: Message boundary phase toggle bit (0 or 1) */
> > bool phase_bit;
> > +
> > + /** @work: Pending events worker */
> > + struct work_struct work;
> > };
> > #endif
^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH v1 06/11] drm/xe/sysctrl: Add system controller event support
2026-04-17 21:16 [PATCH v1 00/11] Introduce error threshold to drm_ras Raag Jadav
` (4 preceding siblings ...)
2026-04-17 21:16 ` [PATCH v1 05/11] drm/xe/sysctrl: Add system controller interrupt handler Raag Jadav
@ 2026-04-17 21:16 ` Raag Jadav
2026-04-17 21:16 ` [PATCH v1 07/11] drm/xe/ras: Introduce correctable error handling Raag Jadav
` (8 subsequent siblings)
14 siblings, 0 replies; 21+ messages in thread
From: Raag Jadav @ 2026-04-17 21:16 UTC (permalink / raw)
To: intel-xe, dri-devel, netdev
Cc: simona.vetter, airlied, kuba, lijo.lazar, Hawking.Zhang, davem,
pabeni, edumazet, maarten, zachary.mckevitt, rodrigo.vivi,
riana.tauro, michal.wajdeczko, matthew.d.roper,
umesh.nerlige.ramappa, mallesh.koujalagi, soham.purkait,
anoop.c.vijay, aravind.iddamsetty, Raag Jadav
System controller reports different types of events to GFX endpoint for
different usecases, add initial support for them. This will be further
extended to service those usecases.
Signed-off-by: Raag Jadav <raag.jadav@intel.com>
Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
drivers/gpu/drm/xe/Makefile | 1 +
drivers/gpu/drm/xe/xe_sysctrl.c | 11 +++
drivers/gpu/drm/xe/xe_sysctrl.h | 1 +
drivers/gpu/drm/xe/xe_sysctrl_event.c | 86 +++++++++++++++++++
drivers/gpu/drm/xe/xe_sysctrl_event_types.h | 57 ++++++++++++
drivers/gpu/drm/xe/xe_sysctrl_mailbox_types.h | 18 ++++
drivers/gpu/drm/xe/xe_sysctrl_types.h | 3 +
7 files changed, 177 insertions(+)
create mode 100644 drivers/gpu/drm/xe/xe_sysctrl_event.c
create mode 100644 drivers/gpu/drm/xe/xe_sysctrl_event_types.h
diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
index 3fceda259834..1c863b711ae9 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -126,6 +126,7 @@ xe-y += xe_bb.o \
xe_survivability_mode.o \
xe_sync.o \
xe_sysctrl.o \
+ xe_sysctrl_event.o \
xe_sysctrl_mailbox.o \
xe_tile.o \
xe_tile_sysfs.o \
diff --git a/drivers/gpu/drm/xe/xe_sysctrl.c b/drivers/gpu/drm/xe/xe_sysctrl.c
index 7de3e73bd8e0..6a7da5d2794a 100644
--- a/drivers/gpu/drm/xe/xe_sysctrl.c
+++ b/drivers/gpu/drm/xe/xe_sysctrl.c
@@ -12,6 +12,7 @@
#include "regs/xe_sysctrl_regs.h"
#include "xe_device.h"
#include "xe_mmio.h"
+#include "xe_pm.h"
#include "xe_soc_remapper.h"
#include "xe_sysctrl.h"
#include "xe_sysctrl_mailbox.h"
@@ -39,6 +40,12 @@ static void sysctrl_fini(void *arg)
static void xe_sysctrl_work(struct work_struct *work)
{
+ struct xe_sysctrl *sc = container_of(work, struct xe_sysctrl, work);
+ struct xe_device *xe = sc_to_xe(sc);
+
+ guard(xe_pm_runtime)(xe);
+ guard(mutex)(&sc->work_lock);
+ xe_sysctrl_event(sc);
}
/**
@@ -74,6 +81,10 @@ int xe_sysctrl_init(struct xe_device *xe)
if (ret)
return ret;
+ ret = devm_mutex_init(xe->drm.dev, &sc->work_lock);
+ if (ret)
+ return ret;
+
xe->soc_remapper.set_sysctrl_region(xe, SYSCTRL_MAILBOX_INDEX);
xe_sysctrl_mailbox_init(sc);
INIT_WORK(&sc->work, xe_sysctrl_work);
diff --git a/drivers/gpu/drm/xe/xe_sysctrl.h b/drivers/gpu/drm/xe/xe_sysctrl.h
index f7469bfc9324..090dffb6d55f 100644
--- a/drivers/gpu/drm/xe/xe_sysctrl.h
+++ b/drivers/gpu/drm/xe/xe_sysctrl.h
@@ -16,6 +16,7 @@ static inline struct xe_device *sc_to_xe(struct xe_sysctrl *sc)
return container_of(sc, struct xe_device, sc);
}
+void xe_sysctrl_event(struct xe_sysctrl *sc);
int xe_sysctrl_init(struct xe_device *xe);
void xe_sysctrl_irq_handler(struct xe_device *xe, u32 master_ctl);
void xe_sysctrl_pm_resume(struct xe_device *xe);
diff --git a/drivers/gpu/drm/xe/xe_sysctrl_event.c b/drivers/gpu/drm/xe/xe_sysctrl_event.c
new file mode 100644
index 000000000000..74163e0bafe2
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_sysctrl_event.c
@@ -0,0 +1,86 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2026 Intel Corporation
+ */
+
+#include "xe_device.h"
+#include "xe_irq.h"
+#include "xe_printk.h"
+#include "xe_sysctrl.h"
+#include "xe_sysctrl_event_types.h"
+#include "xe_sysctrl_mailbox.h"
+#include "xe_sysctrl_mailbox_types.h"
+
+static void get_pending_event(struct xe_sysctrl *sc, struct xe_sysctrl_mailbox_command *command)
+{
+ struct xe_sysctrl_event_response *response = command->data_out;
+ struct xe_device *xe = sc_to_xe(sc);
+ u32 count = XE_SYSCTRL_EVENT_FLOOD;
+ size_t len;
+ int ret;
+
+ do {
+ memset(response, 0, sizeof(*response));
+
+ ret = xe_sysctrl_send_command(sc, command, &len);
+ if (ret) {
+ xe_err(xe, "sysctrl: failed to get pending event %d\n", ret);
+ return;
+ }
+
+ if (len != sizeof(*response)) {
+ xe_err(xe, "sysctrl: unexpected event response length %zu (expected %zu)\n",
+ len, sizeof(*response));
+ return;
+ }
+
+ if (response->event == XE_SYSCTRL_EVENT_THRESHOLD_CROSSED)
+ xe_warn(xe, "[RAS]: counter threshold crossed\n");
+ else
+ xe_err(xe, "sysctrl: unexpected event %#x\n", response->event);
+
+ if (!--count) {
+ xe_err(xe, "sysctrl: event flooding\n");
+ return;
+ }
+
+ xe_dbg(xe, "sysctrl: %u events pending\n", response->count);
+ } 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
+ *
+ * Handle events generated by System Controller.
+ */
+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 = {};
+
+ xe_device_assert_mem_access(sc_to_xe(sc));
+ event_request_prepare(sc_to_xe(sc), &header, &request);
+
+ command.header = header;
+ command.data_in = &request;
+ command.data_in_len = sizeof(request);
+ command.data_out = &response;
+ command.data_out_len = sizeof(response);
+
+ get_pending_event(sc, &command);
+}
diff --git a/drivers/gpu/drm/xe/xe_sysctrl_event_types.h b/drivers/gpu/drm/xe/xe_sysctrl_event_types.h
new file mode 100644
index 000000000000..4d444ba40b9b
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_sysctrl_event_types.h
@@ -0,0 +1,57 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2026 Intel Corporation
+ */
+
+#ifndef _XE_SYSCTRL_EVENT_TYPES_H_
+#define _XE_SYSCTRL_EVENT_TYPES_H_
+
+#include <linux/types.h>
+
+#define XE_SYSCTRL_EVENT_DATA_LEN 59
+
+/* Modify as needed */
+#define XE_SYSCTRL_EVENT_FLOOD 16
+
+/**
+ * enum xe_sysctrl_event - Events reported by System Controller
+ *
+ * @XE_SYSCTRL_EVENT_THRESHOLD_CROSSED: Error counter threshold crossed
+ */
+enum xe_sysctrl_event {
+ XE_SYSCTRL_EVENT_THRESHOLD_CROSSED = 0x01,
+};
+
+/**
+ * struct xe_sysctrl_event_request - Request structure for pending event
+ */
+struct xe_sysctrl_event_request {
+ /** @vector: MSI-X vector that was triggered */
+ u32 vector;
+ /** @fn: Function index (0-7) of PCIe device */
+ u32 fn:8;
+ /** @reserved: Reserved for future use */
+ u32 reserved:24;
+ /** @reserved2: Reserved for future use */
+ u32 reserved2[2];
+} __packed;
+
+/**
+ * struct xe_sysctrl_event_response - Response structure for pending event
+ */
+struct xe_sysctrl_event_response {
+ /** @count: Pending event count, decremented by fw on each response */
+ u32 count;
+ /** @event: Pending event type */
+ u32 event;
+ /** @timestamp: Timestamp of most recent event */
+ u64 timestamp;
+ /** @extended: Event has extended payload */
+ u32 extended:1;
+ /** @reserved: Reserved for future use */
+ u32 reserved:31;
+ /** @data: Generic event data */
+ u32 data[XE_SYSCTRL_EVENT_DATA_LEN];
+} __packed;
+
+#endif /* _XE_SYSCTRL_EVENT_TYPES_H_ */
diff --git a/drivers/gpu/drm/xe/xe_sysctrl_mailbox_types.h b/drivers/gpu/drm/xe/xe_sysctrl_mailbox_types.h
index 89456aec6097..84d7c647e743 100644
--- a/drivers/gpu/drm/xe/xe_sysctrl_mailbox_types.h
+++ b/drivers/gpu/drm/xe/xe_sysctrl_mailbox_types.h
@@ -10,6 +10,24 @@
#include "abi/xe_sysctrl_abi.h"
+/**
+ * enum xe_sysctrl_group - System Controller command groups
+ *
+ * @XE_SYSCTRL_GROUP_GFSP: GFSP group
+ */
+enum xe_sysctrl_group {
+ XE_SYSCTRL_GROUP_GFSP = 0x01,
+};
+
+/**
+ * enum xe_sysctrl_gfsp_cmd - Commands supported by GFSP group
+ *
+ * @XE_SYSCTRL_CMD_GET_PENDING_EVENT: Retrieve pending event
+ */
+enum xe_sysctrl_gfsp_cmd {
+ XE_SYSCTRL_CMD_GET_PENDING_EVENT = 0x07,
+};
+
/**
* struct xe_sysctrl_mailbox_command - System Controller mailbox command
*/
diff --git a/drivers/gpu/drm/xe/xe_sysctrl_types.h b/drivers/gpu/drm/xe/xe_sysctrl_types.h
index 5f408d6491ef..95359af691c9 100644
--- a/drivers/gpu/drm/xe/xe_sysctrl_types.h
+++ b/drivers/gpu/drm/xe/xe_sysctrl_types.h
@@ -31,6 +31,9 @@ struct xe_sysctrl {
/** @work: Pending events worker */
struct work_struct work;
+
+ /** @work_lock: Mutex protecting pending events */
+ struct mutex work_lock;
};
#endif
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread* [PATCH v1 07/11] drm/xe/ras: Introduce correctable error handling
2026-04-17 21:16 [PATCH v1 00/11] Introduce error threshold to drm_ras Raag Jadav
` (5 preceding siblings ...)
2026-04-17 21:16 ` [PATCH v1 06/11] drm/xe/sysctrl: Add system controller event support Raag Jadav
@ 2026-04-17 21:16 ` Raag Jadav
2026-04-17 21:16 ` [PATCH v1 08/11] drm/xe/ras: Get error threshold support Raag Jadav
` (7 subsequent siblings)
14 siblings, 0 replies; 21+ messages in thread
From: Raag Jadav @ 2026-04-17 21:16 UTC (permalink / raw)
To: intel-xe, dri-devel, netdev
Cc: simona.vetter, airlied, kuba, lijo.lazar, Hawking.Zhang, davem,
pabeni, edumazet, maarten, zachary.mckevitt, rodrigo.vivi,
riana.tauro, michal.wajdeczko, matthew.d.roper,
umesh.nerlige.ramappa, mallesh.koujalagi, soham.purkait,
anoop.c.vijay, aravind.iddamsetty, Raag Jadav
Add initial support for correctable error handling which is serviced
using system controller event. Currently we only log the errors in
dmesg but this serves as a foundation for RAS infrastructure and will
be further extended to facilitate other RAS features.
Signed-off-by: Raag Jadav <raag.jadav@intel.com>
Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
drivers/gpu/drm/xe/Makefile | 1 +
drivers/gpu/drm/xe/xe_ras.c | 92 +++++++++++++++++++++++++++
drivers/gpu/drm/xe/xe_ras.h | 15 +++++
drivers/gpu/drm/xe/xe_ras_types.h | 73 +++++++++++++++++++++
drivers/gpu/drm/xe/xe_sysctrl_event.c | 3 +-
5 files changed, 183 insertions(+), 1 deletion(-)
create mode 100644 drivers/gpu/drm/xe/xe_ras.c
create mode 100644 drivers/gpu/drm/xe/xe_ras.h
create mode 100644 drivers/gpu/drm/xe/xe_ras_types.h
diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
index 1c863b711ae9..22f17bd1082d 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -114,6 +114,7 @@ xe-y += xe_bb.o \
xe_pxp_submit.o \
xe_query.o \
xe_range_fence.o \
+ xe_ras.o \
xe_reg_sr.o \
xe_reg_whitelist.o \
xe_ring_ops.o \
diff --git a/drivers/gpu/drm/xe/xe_ras.c b/drivers/gpu/drm/xe/xe_ras.c
new file mode 100644
index 000000000000..08e91348c459
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_ras.c
@@ -0,0 +1,92 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2026 Intel Corporation
+ */
+
+#include "xe_printk.h"
+#include "xe_ras.h"
+#include "xe_ras_types.h"
+#include "xe_sysctrl.h"
+#include "xe_sysctrl_event_types.h"
+
+/* Severity of detected errors */
+enum xe_ras_severity {
+ XE_RAS_SEV_NOT_SUPPORTED = 0,
+ XE_RAS_SEV_CORRECTABLE,
+ XE_RAS_SEV_UNCORRECTABLE,
+ XE_RAS_SEV_INFORMATIONAL,
+ XE_RAS_SEV_MAX
+};
+
+/* Major IP blocks/components where errors can originate */
+enum xe_ras_component {
+ XE_RAS_COMP_NOT_SUPPORTED = 0,
+ XE_RAS_COMP_DEVICE_MEMORY,
+ XE_RAS_COMP_CORE_COMPUTE,
+ XE_RAS_COMP_RESERVED,
+ XE_RAS_COMP_PCIE,
+ XE_RAS_COMP_FABRIC,
+ XE_RAS_COMP_SOC_INTERNAL,
+ XE_RAS_COMP_MAX
+};
+
+static const char *const xe_ras_severities[] = {
+ [XE_RAS_SEV_NOT_SUPPORTED] = "Not Supported",
+ [XE_RAS_SEV_CORRECTABLE] = "Correctable Error",
+ [XE_RAS_SEV_UNCORRECTABLE] = "Uncorrectable Error",
+ [XE_RAS_SEV_INFORMATIONAL] = "Informational Error",
+};
+static_assert(ARRAY_SIZE(xe_ras_severities) == XE_RAS_SEV_MAX);
+
+static const char *const xe_ras_components[] = {
+ [XE_RAS_COMP_NOT_SUPPORTED] = "Not Supported",
+ [XE_RAS_COMP_DEVICE_MEMORY] = "Device Memory",
+ [XE_RAS_COMP_CORE_COMPUTE] = "Core Compute",
+ [XE_RAS_COMP_RESERVED] = "Reserved",
+ [XE_RAS_COMP_PCIE] = "PCIe",
+ [XE_RAS_COMP_FABRIC] = "Fabric",
+ [XE_RAS_COMP_SOC_INTERNAL] = "SoC Internal",
+};
+static_assert(ARRAY_SIZE(xe_ras_components) == XE_RAS_COMP_MAX);
+
+static inline const char *sev_to_str(u8 sev)
+{
+ if (sev >= XE_RAS_SEV_MAX)
+ sev = XE_RAS_SEV_NOT_SUPPORTED;
+
+ return xe_ras_severities[sev];
+}
+
+static inline const char *comp_to_str(u8 comp)
+{
+ if (comp >= XE_RAS_COMP_MAX)
+ comp = XE_RAS_COMP_NOT_SUPPORTED;
+
+ return xe_ras_components[comp];
+}
+
+void xe_ras_counter_threshold_crossed(struct xe_device *xe,
+ struct xe_sysctrl_event_response *response)
+{
+ struct xe_ras_threshold_crossed *pending = (void *)&response->data;
+ struct xe_ras_error_class *errors = pending->counters;
+ u32 counter_id, ncounters = pending->ncounters;
+
+ if (!ncounters || ncounters > XE_RAS_NUM_COUNTERS) {
+ xe_err(xe, "sysctrl: unexpected counter threshold crossed %u\n", ncounters);
+ return;
+ }
+
+ BUILD_BUG_ON(sizeof(response->data) < sizeof(*pending));
+ xe_warn(xe, "[RAS]: counter threshold crossed, %u new errors\n", ncounters);
+
+ for (counter_id = 0; counter_id < ncounters; counter_id++) {
+ u8 severity, component;
+
+ severity = errors[counter_id].common.severity;
+ component = errors[counter_id].common.component;
+
+ xe_warn(xe, "[RAS]: %s %s detected\n",
+ comp_to_str(component), sev_to_str(severity));
+ }
+}
diff --git a/drivers/gpu/drm/xe/xe_ras.h b/drivers/gpu/drm/xe/xe_ras.h
new file mode 100644
index 000000000000..ea90593b62dc
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_ras.h
@@ -0,0 +1,15 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2026 Intel Corporation
+ */
+
+#ifndef _XE_RAS_H_
+#define _XE_RAS_H_
+
+struct xe_device;
+struct xe_sysctrl_event_response;
+
+void xe_ras_counter_threshold_crossed(struct xe_device *xe,
+ struct xe_sysctrl_event_response *response);
+
+#endif
diff --git a/drivers/gpu/drm/xe/xe_ras_types.h b/drivers/gpu/drm/xe/xe_ras_types.h
new file mode 100644
index 000000000000..4e63c67f806a
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_ras_types.h
@@ -0,0 +1,73 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2026 Intel Corporation
+ */
+
+#ifndef _XE_RAS_TYPES_H_
+#define _XE_RAS_TYPES_H_
+
+#include <linux/types.h>
+
+#define XE_RAS_NUM_COUNTERS 16
+
+/**
+ * struct xe_ras_error_common - Error fields that are common across all products
+ */
+struct xe_ras_error_common {
+ /** @severity: Error severity */
+ u8 severity;
+ /** @component: IP block where error originated */
+ u8 component;
+} __packed;
+
+/**
+ * struct xe_ras_error_unit - Error unit information
+ */
+struct xe_ras_error_unit {
+ /** @tile: Tile identifier */
+ u8 tile;
+ /** @instance: Instance identifier specific to IP */
+ u32 instance;
+} __packed;
+
+/**
+ * struct xe_ras_error_cause - Error cause information
+ */
+struct xe_ras_error_cause {
+ /** @cause: Cause/checker */
+ u32 cause;
+ /** @reserved: For future use */
+ u8 reserved;
+} __packed;
+
+/**
+ * struct xe_ras_error_product - Error fields that are specific to the product
+ */
+struct xe_ras_error_product {
+ /** @unit: Unit within IP block */
+ struct xe_ras_error_unit unit;
+ /** @cause: Cause/checker */
+ struct xe_ras_error_cause cause;
+} __packed;
+
+/**
+ * struct xe_ras_error_class - Combines common and product-specific parts
+ */
+struct xe_ras_error_class {
+ /** @common: Common error type and component */
+ struct xe_ras_error_common common;
+ /** @product: Product-specific unit and cause */
+ struct xe_ras_error_product product;
+} __packed;
+
+/**
+ * struct xe_ras_threshold_crossed - Data for threshold crossed event
+ */
+struct xe_ras_threshold_crossed {
+ /** @ncounters: Number of error counters that crossed thresholds */
+ u32 ncounters;
+ /** @counters: Array of error counters that crossed threshold */
+ struct xe_ras_error_class counters[XE_RAS_NUM_COUNTERS];
+} __packed;
+
+#endif
diff --git a/drivers/gpu/drm/xe/xe_sysctrl_event.c b/drivers/gpu/drm/xe/xe_sysctrl_event.c
index 74163e0bafe2..e96af8be07a2 100644
--- a/drivers/gpu/drm/xe/xe_sysctrl_event.c
+++ b/drivers/gpu/drm/xe/xe_sysctrl_event.c
@@ -6,6 +6,7 @@
#include "xe_device.h"
#include "xe_irq.h"
#include "xe_printk.h"
+#include "xe_ras.h"
#include "xe_sysctrl.h"
#include "xe_sysctrl_event_types.h"
#include "xe_sysctrl_mailbox.h"
@@ -35,7 +36,7 @@ static void get_pending_event(struct xe_sysctrl *sc, struct xe_sysctrl_mailbox_c
}
if (response->event == XE_SYSCTRL_EVENT_THRESHOLD_CROSSED)
- xe_warn(xe, "[RAS]: counter threshold crossed\n");
+ xe_ras_counter_threshold_crossed(xe, response);
else
xe_err(xe, "sysctrl: unexpected event %#x\n", response->event);
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread* [PATCH v1 08/11] drm/xe/ras: Get error threshold support
2026-04-17 21:16 [PATCH v1 00/11] Introduce error threshold to drm_ras Raag Jadav
` (6 preceding siblings ...)
2026-04-17 21:16 ` [PATCH v1 07/11] drm/xe/ras: Introduce correctable error handling Raag Jadav
@ 2026-04-17 21:16 ` Raag Jadav
2026-04-17 21:16 ` [PATCH v1 09/11] drm/xe/ras: Set " Raag Jadav
` (6 subsequent siblings)
14 siblings, 0 replies; 21+ messages in thread
From: Raag Jadav @ 2026-04-17 21:16 UTC (permalink / raw)
To: intel-xe, dri-devel, netdev
Cc: simona.vetter, airlied, kuba, lijo.lazar, Hawking.Zhang, davem,
pabeni, edumazet, maarten, zachary.mckevitt, rodrigo.vivi,
riana.tauro, michal.wajdeczko, matthew.d.roper,
umesh.nerlige.ramappa, mallesh.koujalagi, soham.purkait,
anoop.c.vijay, aravind.iddamsetty, Raag Jadav
System controller allows programming per error threshold value, which
it uses to raise error events to the driver. Get it using mailbox
command so that it can be exposed to the user.
Signed-off-by: Raag Jadav <raag.jadav@intel.com>
---
drivers/gpu/drm/xe/xe_ras.c | 73 +++++++++++++++++++
drivers/gpu/drm/xe/xe_ras.h | 3 +
drivers/gpu/drm/xe/xe_ras_types.h | 22 ++++++
drivers/gpu/drm/xe/xe_sysctrl_mailbox_types.h | 2 +
4 files changed, 100 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_ras.c b/drivers/gpu/drm/xe/xe_ras.c
index 08e91348c459..3e93f838aa4a 100644
--- a/drivers/gpu/drm/xe/xe_ras.c
+++ b/drivers/gpu/drm/xe/xe_ras.c
@@ -3,11 +3,14 @@
* Copyright © 2026 Intel Corporation
*/
+#include "xe_pm.h"
#include "xe_printk.h"
#include "xe_ras.h"
#include "xe_ras_types.h"
#include "xe_sysctrl.h"
#include "xe_sysctrl_event_types.h"
+#include "xe_sysctrl_mailbox.h"
+#include "xe_sysctrl_mailbox_types.h"
/* Severity of detected errors */
enum xe_ras_severity {
@@ -49,6 +52,23 @@ static const char *const xe_ras_components[] = {
};
static_assert(ARRAY_SIZE(xe_ras_components) == XE_RAS_COMP_MAX);
+/* uAPI mapping */
+static const int drm_to_xe_ras_components[] = {
+ [DRM_XE_RAS_ERR_COMP_CORE_COMPUTE] = XE_RAS_COMP_CORE_COMPUTE,
+ [DRM_XE_RAS_ERR_COMP_SOC_INTERNAL] = XE_RAS_COMP_SOC_INTERNAL,
+ [DRM_XE_RAS_ERR_COMP_DEVICE_MEMORY] = XE_RAS_COMP_DEVICE_MEMORY,
+ [DRM_XE_RAS_ERR_COMP_PCIE] = XE_RAS_COMP_PCIE,
+ [DRM_XE_RAS_ERR_COMP_FABRIC] = XE_RAS_COMP_FABRIC
+};
+static_assert(ARRAY_SIZE(drm_to_xe_ras_components) == DRM_XE_RAS_ERR_COMP_MAX);
+
+/* uAPI mapping */
+static const int drm_to_xe_ras_severities[] = {
+ [DRM_XE_RAS_ERR_SEV_CORRECTABLE] = XE_RAS_SEV_CORRECTABLE,
+ [DRM_XE_RAS_ERR_SEV_UNCORRECTABLE] = XE_RAS_SEV_UNCORRECTABLE
+};
+static_assert(ARRAY_SIZE(drm_to_xe_ras_severities) == DRM_XE_RAS_ERR_SEV_MAX);
+
static inline const char *sev_to_str(u8 sev)
{
if (sev >= XE_RAS_SEV_MAX)
@@ -90,3 +110,56 @@ void xe_ras_counter_threshold_crossed(struct xe_device *xe,
comp_to_str(component), sev_to_str(severity));
}
}
+
+static void ras_command_prepare(struct xe_sysctrl_mailbox_command *command,
+ void *request, size_t request_len, void *response,
+ size_t response_len, u8 hdr_cmd)
+{
+ struct xe_sysctrl_app_msg_hdr header = {};
+
+ header.data = REG_FIELD_PREP(APP_HDR_GROUP_ID_MASK, XE_SYSCTRL_GROUP_GFSP) |
+ REG_FIELD_PREP(APP_HDR_COMMAND_MASK, hdr_cmd);
+
+ command->header = header;
+ command->data_in = request;
+ command->data_in_len = request_len;
+ command->data_out = response;
+ command->data_out_len = response_len;
+}
+
+int xe_ras_get_threshold(struct xe_device *xe, u32 severity, u32 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.common.severity = drm_to_xe_ras_severities[severity];
+ counter.common.component = drm_to_xe_ras_components[component];
+ request.counter = counter;
+
+ ras_command_prepare(&command, &request, sizeof(request), &response,
+ sizeof(response), XE_SYSCTRL_CMD_GET_THRESHOLD);
+
+ 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", response.threshold,
+ comp_to_str(counter.common.component), sev_to_str(counter.common.severity));
+ return 0;
+}
diff --git a/drivers/gpu/drm/xe/xe_ras.h b/drivers/gpu/drm/xe/xe_ras.h
index ea90593b62dc..982bbe61461e 100644
--- a/drivers/gpu/drm/xe/xe_ras.h
+++ b/drivers/gpu/drm/xe/xe_ras.h
@@ -6,10 +6,13 @@
#ifndef _XE_RAS_H_
#define _XE_RAS_H_
+#include <linux/types.h>
+
struct xe_device;
struct xe_sysctrl_event_response;
void xe_ras_counter_threshold_crossed(struct xe_device *xe,
struct xe_sysctrl_event_response *response);
+int xe_ras_get_threshold(struct xe_device *xe, u32 severity, u32 component, u32 *threshold);
#endif
diff --git a/drivers/gpu/drm/xe/xe_ras_types.h b/drivers/gpu/drm/xe/xe_ras_types.h
index 4e63c67f806a..d5da93d65cf5 100644
--- a/drivers/gpu/drm/xe/xe_ras_types.h
+++ b/drivers/gpu/drm/xe/xe_ras_types.h
@@ -70,4 +70,26 @@ struct xe_ras_threshold_crossed {
struct xe_ras_error_class counters[XE_RAS_NUM_COUNTERS];
} __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: Threshold value */
+ u32 threshold;
+ /** @reserved: Reserved for future use */
+ u32 reserved[4];
+} __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 84d7c647e743..a1b71218deca 100644
--- a/drivers/gpu/drm/xe/xe_sysctrl_mailbox_types.h
+++ b/drivers/gpu/drm/xe/xe_sysctrl_mailbox_types.h
@@ -22,9 +22,11 @@ enum xe_sysctrl_group {
/**
* enum xe_sysctrl_gfsp_cmd - Commands supported by GFSP group
*
+ * @XE_SYSCTRL_CMD_GET_THRESHOLD: Retrieve error threshold
* @XE_SYSCTRL_CMD_GET_PENDING_EVENT: Retrieve pending event
*/
enum xe_sysctrl_gfsp_cmd {
+ XE_SYSCTRL_CMD_GET_THRESHOLD = 0x05,
XE_SYSCTRL_CMD_GET_PENDING_EVENT = 0x07,
};
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread* [PATCH v1 09/11] drm/xe/ras: Set error threshold support
2026-04-17 21:16 [PATCH v1 00/11] Introduce error threshold to drm_ras Raag Jadav
` (7 preceding siblings ...)
2026-04-17 21:16 ` [PATCH v1 08/11] drm/xe/ras: Get error threshold support Raag Jadav
@ 2026-04-17 21:16 ` Raag Jadav
2026-04-17 21:16 ` [PATCH v1 10/11] drm/xe/drm_ras: Wire up error threshold callbacks Raag Jadav
` (5 subsequent siblings)
14 siblings, 0 replies; 21+ messages in thread
From: Raag Jadav @ 2026-04-17 21:16 UTC (permalink / raw)
To: intel-xe, dri-devel, netdev
Cc: simona.vetter, airlied, kuba, lijo.lazar, Hawking.Zhang, davem,
pabeni, edumazet, maarten, zachary.mckevitt, rodrigo.vivi,
riana.tauro, michal.wajdeczko, matthew.d.roper,
umesh.nerlige.ramappa, mallesh.koujalagi, soham.purkait,
anoop.c.vijay, aravind.iddamsetty, Raag Jadav
System controller allows programming per error threshold value, which
it uses to raise error events to the driver. Set it using mailbox
command so that it can be programmed by the user.
Signed-off-by: Raag Jadav <raag.jadav@intel.com>
---
drivers/gpu/drm/xe/xe_ras.c | 42 +++++++++++++++++++
drivers/gpu/drm/xe/xe_ras.h | 1 +
drivers/gpu/drm/xe/xe_ras_types.h | 28 +++++++++++++
drivers/gpu/drm/xe/xe_sysctrl_mailbox_types.h | 2 +
4 files changed, 73 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_ras.c b/drivers/gpu/drm/xe/xe_ras.c
index 3e93f838aa4a..26e063166c5f 100644
--- a/drivers/gpu/drm/xe/xe_ras.c
+++ b/drivers/gpu/drm/xe/xe_ras.c
@@ -163,3 +163,45 @@ int xe_ras_get_threshold(struct xe_device *xe, u32 severity, u32 component, u32
comp_to_str(counter.common.component), sev_to_str(counter.common.severity));
return 0;
}
+
+int xe_ras_set_threshold(struct xe_device *xe, u32 severity, u32 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.common.severity = drm_to_xe_ras_severities[severity];
+ counter.common.component = drm_to_xe_ras_components[component];
+ request.counter = counter;
+ request.threshold = threshold;
+
+ ras_command_prepare(&command, &request, sizeof(request), &response,
+ sizeof(response), XE_SYSCTRL_CMD_SET_THRESHOLD);
+
+ 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;
+ }
+
+ if (response.status) {
+ xe_err(xe, "sysctrl: set threshold operation failed %#x\n", response.status);
+ return -EIO;
+ }
+
+ 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;
+}
diff --git a/drivers/gpu/drm/xe/xe_ras.h b/drivers/gpu/drm/xe/xe_ras.h
index 982bbe61461e..d1f71b1de723 100644
--- a/drivers/gpu/drm/xe/xe_ras.h
+++ b/drivers/gpu/drm/xe/xe_ras.h
@@ -14,5 +14,6 @@ struct xe_sysctrl_event_response;
void xe_ras_counter_threshold_crossed(struct xe_device *xe,
struct xe_sysctrl_event_response *response);
int xe_ras_get_threshold(struct xe_device *xe, u32 severity, u32 component, u32 *threshold);
+int xe_ras_set_threshold(struct xe_device *xe, u32 severity, u32 component, u32 threshold);
#endif
diff --git a/drivers/gpu/drm/xe/xe_ras_types.h b/drivers/gpu/drm/xe/xe_ras_types.h
index d5da93d65cf5..d7e4a02a661d 100644
--- a/drivers/gpu/drm/xe/xe_ras_types.h
+++ b/drivers/gpu/drm/xe/xe_ras_types.h
@@ -92,4 +92,32 @@ struct xe_ras_get_threshold_response {
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 value to 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;
+ /** @threshold_old: Old threshold value */
+ u32 threshold_old;
+ /** @threshold: New threshold value */
+ u32 threshold;
+ /** @status: Set threshold operation status */
+ u32 status;
+ /** @reserved: Reserved for future use */
+ u32 reserved[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 a1b71218deca..b865768e903b 100644
--- a/drivers/gpu/drm/xe/xe_sysctrl_mailbox_types.h
+++ b/drivers/gpu/drm/xe/xe_sysctrl_mailbox_types.h
@@ -23,10 +23,12 @@ enum xe_sysctrl_group {
* enum xe_sysctrl_gfsp_cmd - Commands supported by GFSP group
*
* @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_THRESHOLD = 0x05,
+ XE_SYSCTRL_CMD_SET_THRESHOLD = 0x06,
XE_SYSCTRL_CMD_GET_PENDING_EVENT = 0x07,
};
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread* [PATCH v1 10/11] drm/xe/drm_ras: Wire up error threshold callbacks
2026-04-17 21:16 [PATCH v1 00/11] Introduce error threshold to drm_ras Raag Jadav
` (8 preceding siblings ...)
2026-04-17 21:16 ` [PATCH v1 09/11] drm/xe/ras: Set " Raag Jadav
@ 2026-04-17 21:16 ` Raag Jadav
2026-04-17 21:16 ` [PATCH v1 11/11] drm/xe/ras: Add flag for Xe RAS Raag Jadav
` (4 subsequent siblings)
14 siblings, 0 replies; 21+ messages in thread
From: Raag Jadav @ 2026-04-17 21:16 UTC (permalink / raw)
To: intel-xe, dri-devel, netdev
Cc: simona.vetter, airlied, kuba, lijo.lazar, Hawking.Zhang, davem,
pabeni, edumazet, maarten, zachary.mckevitt, rodrigo.vivi,
riana.tauro, michal.wajdeczko, matthew.d.roper,
umesh.nerlige.ramappa, mallesh.koujalagi, soham.purkait,
anoop.c.vijay, aravind.iddamsetty, Raag Jadav
Now that we have get/set error threshold support in xe driver, wire them
up to drm_ras so that the user can make use of both functionalities.
$ 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': 0}
$ 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>
---
drivers/gpu/drm/xe/xe_drm_ras.c | 29 +++++++++++++++++++++++++++--
1 file changed, 27 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_drm_ras.c b/drivers/gpu/drm/xe/xe_drm_ras.c
index e07dc23a155e..824dabd5c29e 100644
--- a/drivers/gpu/drm/xe/xe_drm_ras.c
+++ b/drivers/gpu/drm/xe/xe_drm_ras.c
@@ -11,6 +11,7 @@
#include "xe_device_types.h"
#include "xe_drm_ras.h"
+#include "xe_ras.h"
static const char * const error_components[] = DRM_XE_RAS_ERROR_COMPONENT_NAMES;
static const char * const error_severity[] = DRM_XE_RAS_ERROR_SEVERITY_NAMES;
@@ -47,6 +48,27 @@ static int query_correctable_error_counter(struct drm_ras_node *ep, u32 error_id
return hw_query_error_counter(info, error_id, name, val);
}
+static int query_correctable_error_threshold(struct drm_ras_node *ep, u32 error_id,
+ const char **name, u32 *val)
+{
+ struct xe_device *xe = ep->priv;
+
+ if (!xe->info.has_sysctrl)
+ return -EOPNOTSUPP;
+
+ return xe_ras_get_threshold(xe, DRM_XE_RAS_ERR_SEV_CORRECTABLE, error_id, val);
+}
+
+static int set_correctable_error_threshold(struct drm_ras_node *ep, u32 error_id, u32 val)
+{
+ struct xe_device *xe = ep->priv;
+
+ if (!xe->info.has_sysctrl)
+ return -EOPNOTSUPP;
+
+ return xe_ras_set_threshold(xe, DRM_XE_RAS_ERR_SEV_CORRECTABLE, error_id, val);
+}
+
static struct xe_drm_ras_counter *allocate_and_copy_counters(struct xe_device *xe)
{
struct xe_drm_ras_counter *counter;
@@ -92,10 +114,13 @@ static int assign_node_params(struct xe_device *xe, struct drm_ras_node *node,
if (IS_ERR(ras->info[severity]))
return PTR_ERR(ras->info[severity]);
- if (severity == DRM_XE_RAS_ERR_SEV_CORRECTABLE)
+ if (severity == DRM_XE_RAS_ERR_SEV_CORRECTABLE) {
node->query_error_counter = query_correctable_error_counter;
- else
+ 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;
+ }
return 0;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread* [PATCH v1 11/11] drm/xe/ras: Add flag for Xe RAS
2026-04-17 21:16 [PATCH v1 00/11] Introduce error threshold to drm_ras Raag Jadav
` (9 preceding siblings ...)
2026-04-17 21:16 ` [PATCH v1 10/11] drm/xe/drm_ras: Wire up error threshold callbacks Raag Jadav
@ 2026-04-17 21:16 ` Raag Jadav
2026-04-20 19:51 ` ✗ CI.checkpatch: warning for Introduce error threshold to drm_ras Patchwork
` (3 subsequent siblings)
14 siblings, 0 replies; 21+ messages in thread
From: Raag Jadav @ 2026-04-17 21:16 UTC (permalink / raw)
To: intel-xe, dri-devel, netdev
Cc: simona.vetter, airlied, kuba, lijo.lazar, Hawking.Zhang, davem,
pabeni, edumazet, maarten, zachary.mckevitt, rodrigo.vivi,
riana.tauro, michal.wajdeczko, matthew.d.roper,
umesh.nerlige.ramappa, mallesh.koujalagi, soham.purkait,
anoop.c.vijay, aravind.iddamsetty, Raag Jadav
From: Riana Tauro <riana.tauro@intel.com>
Add a flag for RAS. If enabled, XE driver registers with
drm_ras and exposes supported counters.
Currently this is enabled for PVC and CRI.
Signed-off-by: Riana Tauro <riana.tauro@intel.com>
---
drivers/gpu/drm/xe/xe_device_types.h | 2 ++
drivers/gpu/drm/xe/xe_hw_error.c | 2 +-
drivers/gpu/drm/xe/xe_pci.c | 3 +++
drivers/gpu/drm/xe/xe_pci_types.h | 1 +
4 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index 31df9debcbb0..7a8afd06e6b8 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -191,6 +191,8 @@ struct xe_device {
u8 has_ctx_tlb_inval:1;
/** @info.has_range_tlb_inval: Has range based TLB invalidations */
u8 has_range_tlb_inval:1;
+ /** @info.has_ras: Device supports RAS (Reliability, Availability, Serviceability) */
+ u8 has_ras:1;
/** @info.has_soc_remapper_sysctrl: Has SoC remapper system controller */
u8 has_soc_remapper_sysctrl:1;
/** @info.has_soc_remapper_telem: Has SoC remapper telemetry support */
diff --git a/drivers/gpu/drm/xe/xe_hw_error.c b/drivers/gpu/drm/xe/xe_hw_error.c
index 2a31b430570e..3ab0fceb151f 100644
--- a/drivers/gpu/drm/xe/xe_hw_error.c
+++ b/drivers/gpu/drm/xe/xe_hw_error.c
@@ -520,7 +520,7 @@ void xe_hw_error_irq_handler(struct xe_tile *tile, const u32 master_ctl)
static int hw_error_info_init(struct xe_device *xe)
{
- if (xe->info.platform != XE_PVC)
+ if (!xe->info.has_ras)
return 0;
return xe_drm_ras_init(xe);
diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
index 278c2860a4f6..10ff207affa9 100644
--- a/drivers/gpu/drm/xe/xe_pci.c
+++ b/drivers/gpu/drm/xe/xe_pci.c
@@ -365,6 +365,7 @@ static const __maybe_unused struct xe_device_desc pvc_desc = {
.vm_max_level = 4,
.vram_flags = XE_VRAM_FLAGS_NEED64K,
.has_mbx_power_limits = false,
+ .has_ras = true,
};
static const struct xe_device_desc mtl_desc = {
@@ -472,6 +473,7 @@ static const struct xe_device_desc cri_desc = {
.require_force_probe = true,
.va_bits = 57,
.vm_max_level = 4,
+ .has_ras = true,
};
static const struct xe_device_desc nvlp_desc = {
@@ -761,6 +763,7 @@ static int xe_info_init_early(struct xe_device *xe,
xe->info.has_page_reclaim_hw_assist = desc->has_page_reclaim_hw_assist;
xe->info.has_pre_prod_wa = desc->has_pre_prod_wa;
xe->info.has_pxp = desc->has_pxp;
+ xe->info.has_ras = desc->has_ras;
xe->info.has_soc_remapper_sysctrl = desc->has_soc_remapper_sysctrl;
xe->info.has_soc_remapper_telem = desc->has_soc_remapper_telem;
xe->info.has_sriov = xe_configfs_primary_gt_allowed(to_pci_dev(xe->drm.dev)) &&
diff --git a/drivers/gpu/drm/xe/xe_pci_types.h b/drivers/gpu/drm/xe/xe_pci_types.h
index 5b85e2c24b7b..70a9d4995cbd 100644
--- a/drivers/gpu/drm/xe/xe_pci_types.h
+++ b/drivers/gpu/drm/xe/xe_pci_types.h
@@ -54,6 +54,7 @@ struct xe_device_desc {
u8 has_pre_prod_wa:1;
u8 has_page_reclaim_hw_assist:1;
u8 has_pxp:1;
+ u8 has_ras:1;
u8 has_soc_remapper_sysctrl:1;
u8 has_soc_remapper_telem:1;
u8 has_sriov:1;
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread* ✗ CI.checkpatch: warning for Introduce error threshold to drm_ras
2026-04-17 21:16 [PATCH v1 00/11] Introduce error threshold to drm_ras Raag Jadav
` (10 preceding siblings ...)
2026-04-17 21:16 ` [PATCH v1 11/11] drm/xe/ras: Add flag for Xe RAS Raag Jadav
@ 2026-04-20 19:51 ` Patchwork
2026-04-20 19:52 ` ✓ CI.KUnit: success " Patchwork
` (2 subsequent siblings)
14 siblings, 0 replies; 21+ messages in thread
From: Patchwork @ 2026-04-20 19:51 UTC (permalink / raw)
To: Raag Jadav; +Cc: intel-xe
== Series Details ==
Series: Introduce error threshold to drm_ras
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
1f57ba1afceae32108bd24770069f764d940a0e4
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit b6789ea593d0f7becaf9c7f2f09bfdcbd9c27365
Author: Riana Tauro <riana.tauro@intel.com>
Date: Sat Apr 18 02:46:46 2026 +0530
drm/xe/ras: Add flag for Xe RAS
Add a flag for RAS. If enabled, XE driver registers with
drm_ras and exposes supported counters.
Currently this is enabled for PVC and CRI.
Signed-off-by: Riana Tauro <riana.tauro@intel.com>
+ /mt/dim checkpatch da91cb4e6137507f74e4da41c39d0260b4cd1201 drm-intel
24cb1511b779 drm/ras: Update counter helpers with counter naming
b2b42850a2d7 drm/ras: Introduce get-error-threshold
-:220: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#220: FILE: drivers/gpu/drm/drm_ras.c:405:
+int drm_ras_nl_get_error_threshold_doit(struct sk_buff *skb,
+ struct genl_info *info)
-:247: WARNING:LONG_LINE: line length of 118 exceeds 100 columns
#247: FILE: drivers/gpu/drm/drm_ras_nl.c:26:
+static const struct nla_policy drm_ras_get_error_threshold_nl_policy[DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_ID + 1] = {
total: 0 errors, 1 warnings, 1 checks, 275 lines checked
b14b6b3fdce7 drm/ras: Introduce set-error-threshold
-:118: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#118: FILE: drivers/gpu/drm/drm_ras.c:451:
+int drm_ras_nl_set_error_threshold_doit(struct sk_buff *skb,
+ struct genl_info *info)
-:147: WARNING:LONG_LINE: line length of 125 exceeds 100 columns
#147: FILE: drivers/gpu/drm/drm_ras_nl.c:32:
+static const struct nla_policy drm_ras_set_error_threshold_nl_policy[DRM_RAS_A_ERROR_THRESHOLD_ATTRS_ERROR_THRESHOLD + 1] = {
total: 0 errors, 1 warnings, 1 checks, 165 lines checked
ccf8617bd24c drm/xe/uapi: Add additional error components to XE drm_ras
e3172913553a drm/xe/sysctrl: Add system controller interrupt handler
557b5ee5d8ce drm/xe/sysctrl: Add system controller event support
-:74: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#74:
new file mode 100644
total: 0 errors, 1 warnings, 0 checks, 219 lines checked
28c4e4d1c72f drm/xe/ras: Introduce correctable error handling
-:27: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#27:
new file mode 100644
-:70: CHECK:LINE_SPACING: Please use a blank line after function/struct/union/enum declarations
#70: FILE: drivers/gpu/drm/xe/xe_ras.c:39:
+};
+static_assert(ARRAY_SIZE(xe_ras_severities) == XE_RAS_SEV_MAX);
-:81: CHECK:LINE_SPACING: Please use a blank line after function/struct/union/enum declarations
#81: FILE: drivers/gpu/drm/xe/xe_ras.c:50:
+};
+static_assert(ARRAY_SIZE(xe_ras_components) == XE_RAS_COMP_MAX);
total: 0 errors, 1 warnings, 2 checks, 202 lines checked
3423741adcdc drm/xe/ras: Get error threshold support
-:43: CHECK:LINE_SPACING: Please use a blank line after function/struct/union/enum declarations
#43: FILE: drivers/gpu/drm/xe/xe_ras.c:63:
+};
+static_assert(ARRAY_SIZE(drm_to_xe_ras_components) == DRM_XE_RAS_ERR_COMP_MAX);
-:50: CHECK:LINE_SPACING: Please use a blank line after function/struct/union/enum declarations
#50: FILE: drivers/gpu/drm/xe/xe_ras.c:70:
+};
+static_assert(ARRAY_SIZE(drm_to_xe_ras_severities) == DRM_XE_RAS_ERR_SEV_MAX);
total: 0 errors, 0 warnings, 2 checks, 143 lines checked
753a4612f652 drm/xe/ras: Set error threshold support
8c9e08ab822f drm/xe/drm_ras: Wire up error threshold callbacks
b6789ea593d0 drm/xe/ras: Add flag for Xe RAS
-:21: WARNING:LONG_LINE_COMMENT: line length of 101 exceeds 100 columns
#21: FILE: drivers/gpu/drm/xe/xe_device_types.h:194:
+ /** @info.has_ras: Device supports RAS (Reliability, Availability, Serviceability) */
total: 0 errors, 1 warnings, 0 checks, 44 lines checked
^ permalink raw reply [flat|nested] 21+ messages in thread* ✓ CI.KUnit: success for Introduce error threshold to drm_ras
2026-04-17 21:16 [PATCH v1 00/11] Introduce error threshold to drm_ras Raag Jadav
` (11 preceding siblings ...)
2026-04-20 19:51 ` ✗ CI.checkpatch: warning for Introduce error threshold to drm_ras Patchwork
@ 2026-04-20 19:52 ` Patchwork
2026-04-20 21:04 ` ✓ Xe.CI.BAT: " Patchwork
2026-04-21 0:01 ` ✗ Xe.CI.FULL: failure " Patchwork
14 siblings, 0 replies; 21+ messages in thread
From: Patchwork @ 2026-04-20 19:52 UTC (permalink / raw)
To: Raag Jadav; +Cc: intel-xe
== Series Details ==
Series: Introduce error threshold to drm_ras
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
[19:51:35] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[19:51:39] 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
[19:52:10] Starting KUnit Kernel (1/1)...
[19:52:10] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[19:52:10] ================== guc_buf (11 subtests) ===================
[19:52:10] [PASSED] test_smallest
[19:52:10] [PASSED] test_largest
[19:52:10] [PASSED] test_granular
[19:52:10] [PASSED] test_unique
[19:52:10] [PASSED] test_overlap
[19:52:10] [PASSED] test_reusable
[19:52:10] [PASSED] test_too_big
[19:52:10] [PASSED] test_flush
[19:52:10] [PASSED] test_lookup
[19:52:10] [PASSED] test_data
[19:52:10] [PASSED] test_class
[19:52:10] ===================== [PASSED] guc_buf =====================
[19:52:10] =================== guc_dbm (7 subtests) ===================
[19:52:10] [PASSED] test_empty
[19:52:10] [PASSED] test_default
[19:52:10] ======================== test_size ========================
[19:52:10] [PASSED] 4
[19:52:10] [PASSED] 8
[19:52:10] [PASSED] 32
[19:52:10] [PASSED] 256
[19:52:10] ==================== [PASSED] test_size ====================
[19:52:10] ======================= test_reuse ========================
[19:52:10] [PASSED] 4
[19:52:10] [PASSED] 8
[19:52:10] [PASSED] 32
[19:52:10] [PASSED] 256
[19:52:10] =================== [PASSED] test_reuse ====================
[19:52:10] =================== test_range_overlap ====================
[19:52:10] [PASSED] 4
[19:52:10] [PASSED] 8
[19:52:10] [PASSED] 32
[19:52:10] [PASSED] 256
[19:52:10] =============== [PASSED] test_range_overlap ================
[19:52:10] =================== test_range_compact ====================
[19:52:10] [PASSED] 4
[19:52:10] [PASSED] 8
[19:52:10] [PASSED] 32
[19:52:10] [PASSED] 256
[19:52:10] =============== [PASSED] test_range_compact ================
[19:52:10] ==================== test_range_spare =====================
[19:52:10] [PASSED] 4
[19:52:10] [PASSED] 8
[19:52:10] [PASSED] 32
[19:52:10] [PASSED] 256
[19:52:10] ================ [PASSED] test_range_spare =================
[19:52:10] ===================== [PASSED] guc_dbm =====================
[19:52:10] =================== guc_idm (6 subtests) ===================
[19:52:10] [PASSED] bad_init
[19:52:10] [PASSED] no_init
[19:52:10] [PASSED] init_fini
[19:52:10] [PASSED] check_used
[19:52:10] [PASSED] check_quota
[19:52:10] [PASSED] check_all
[19:52:10] ===================== [PASSED] guc_idm =====================
[19:52:10] ================== no_relay (3 subtests) ===================
[19:52:10] [PASSED] xe_drops_guc2pf_if_not_ready
[19:52:10] [PASSED] xe_drops_guc2vf_if_not_ready
[19:52:10] [PASSED] xe_rejects_send_if_not_ready
[19:52:10] ==================== [PASSED] no_relay =====================
[19:52:10] ================== pf_relay (14 subtests) ==================
[19:52:10] [PASSED] pf_rejects_guc2pf_too_short
[19:52:10] [PASSED] pf_rejects_guc2pf_too_long
[19:52:10] [PASSED] pf_rejects_guc2pf_no_payload
[19:52:10] [PASSED] pf_fails_no_payload
[19:52:10] [PASSED] pf_fails_bad_origin
[19:52:10] [PASSED] pf_fails_bad_type
[19:52:10] [PASSED] pf_txn_reports_error
[19:52:10] [PASSED] pf_txn_sends_pf2guc
[19:52:10] [PASSED] pf_sends_pf2guc
[19:52:10] [SKIPPED] pf_loopback_nop
[19:52:10] [SKIPPED] pf_loopback_echo
[19:52:10] [SKIPPED] pf_loopback_fail
[19:52:10] [SKIPPED] pf_loopback_busy
[19:52:10] [SKIPPED] pf_loopback_retry
[19:52:10] ==================== [PASSED] pf_relay =====================
[19:52:10] ================== vf_relay (3 subtests) ===================
[19:52:10] [PASSED] vf_rejects_guc2vf_too_short
[19:52:10] [PASSED] vf_rejects_guc2vf_too_long
[19:52:10] [PASSED] vf_rejects_guc2vf_no_payload
[19:52:10] ==================== [PASSED] vf_relay =====================
[19:52:10] ================ pf_gt_config (9 subtests) =================
[19:52:10] [PASSED] fair_contexts_1vf
[19:52:10] [PASSED] fair_doorbells_1vf
[19:52:10] [PASSED] fair_ggtt_1vf
[19:52:10] ====================== fair_vram_1vf ======================
[19:52:10] [PASSED] 3.50 GiB
[19:52:10] [PASSED] 11.5 GiB
[19:52:10] [PASSED] 15.5 GiB
[19:52:10] [PASSED] 31.5 GiB
[19:52:10] [PASSED] 63.5 GiB
[19:52:10] [PASSED] 1.91 GiB
[19:52:10] ================== [PASSED] fair_vram_1vf ==================
[19:52:10] ================ fair_vram_1vf_admin_only =================
[19:52:10] [PASSED] 3.50 GiB
[19:52:10] [PASSED] 11.5 GiB
[19:52:10] [PASSED] 15.5 GiB
[19:52:10] [PASSED] 31.5 GiB
[19:52:10] [PASSED] 63.5 GiB
[19:52:10] [PASSED] 1.91 GiB
[19:52:10] ============ [PASSED] fair_vram_1vf_admin_only =============
[19:52:10] ====================== fair_contexts ======================
[19:52:10] [PASSED] 1 VF
[19:52:10] [PASSED] 2 VFs
[19:52:10] [PASSED] 3 VFs
[19:52:10] [PASSED] 4 VFs
[19:52:10] [PASSED] 5 VFs
[19:52:10] [PASSED] 6 VFs
[19:52:10] [PASSED] 7 VFs
[19:52:10] [PASSED] 8 VFs
[19:52:10] [PASSED] 9 VFs
[19:52:10] [PASSED] 10 VFs
[19:52:10] [PASSED] 11 VFs
[19:52:10] [PASSED] 12 VFs
[19:52:10] [PASSED] 13 VFs
[19:52:10] [PASSED] 14 VFs
[19:52:10] [PASSED] 15 VFs
[19:52:10] [PASSED] 16 VFs
[19:52:10] [PASSED] 17 VFs
[19:52:10] [PASSED] 18 VFs
[19:52:10] [PASSED] 19 VFs
[19:52:10] [PASSED] 20 VFs
[19:52:10] [PASSED] 21 VFs
[19:52:10] [PASSED] 22 VFs
[19:52:10] [PASSED] 23 VFs
[19:52:10] [PASSED] 24 VFs
[19:52:10] [PASSED] 25 VFs
[19:52:10] [PASSED] 26 VFs
[19:52:10] [PASSED] 27 VFs
[19:52:10] [PASSED] 28 VFs
[19:52:10] [PASSED] 29 VFs
[19:52:10] [PASSED] 30 VFs
[19:52:10] [PASSED] 31 VFs
[19:52:10] [PASSED] 32 VFs
[19:52:10] [PASSED] 33 VFs
[19:52:10] [PASSED] 34 VFs
[19:52:10] [PASSED] 35 VFs
[19:52:10] [PASSED] 36 VFs
[19:52:10] [PASSED] 37 VFs
[19:52:10] [PASSED] 38 VFs
[19:52:10] [PASSED] 39 VFs
[19:52:10] [PASSED] 40 VFs
[19:52:10] [PASSED] 41 VFs
[19:52:10] [PASSED] 42 VFs
[19:52:10] [PASSED] 43 VFs
[19:52:10] [PASSED] 44 VFs
[19:52:10] [PASSED] 45 VFs
[19:52:10] [PASSED] 46 VFs
[19:52:10] [PASSED] 47 VFs
[19:52:10] [PASSED] 48 VFs
[19:52:10] [PASSED] 49 VFs
[19:52:10] [PASSED] 50 VFs
[19:52:10] [PASSED] 51 VFs
[19:52:10] [PASSED] 52 VFs
[19:52:10] [PASSED] 53 VFs
[19:52:10] [PASSED] 54 VFs
[19:52:10] [PASSED] 55 VFs
[19:52:10] [PASSED] 56 VFs
[19:52:10] [PASSED] 57 VFs
[19:52:10] [PASSED] 58 VFs
[19:52:10] [PASSED] 59 VFs
[19:52:10] [PASSED] 60 VFs
[19:52:10] [PASSED] 61 VFs
[19:52:10] [PASSED] 62 VFs
[19:52:10] [PASSED] 63 VFs
[19:52:10] ================== [PASSED] fair_contexts ==================
[19:52:10] ===================== fair_doorbells ======================
[19:52:10] [PASSED] 1 VF
[19:52:10] [PASSED] 2 VFs
[19:52:10] [PASSED] 3 VFs
[19:52:10] [PASSED] 4 VFs
[19:52:10] [PASSED] 5 VFs
[19:52:10] [PASSED] 6 VFs
[19:52:10] [PASSED] 7 VFs
[19:52:10] [PASSED] 8 VFs
[19:52:10] [PASSED] 9 VFs
[19:52:10] [PASSED] 10 VFs
[19:52:10] [PASSED] 11 VFs
[19:52:10] [PASSED] 12 VFs
[19:52:10] [PASSED] 13 VFs
[19:52:10] [PASSED] 14 VFs
[19:52:10] [PASSED] 15 VFs
[19:52:10] [PASSED] 16 VFs
[19:52:10] [PASSED] 17 VFs
[19:52:10] [PASSED] 18 VFs
[19:52:10] [PASSED] 19 VFs
[19:52:10] [PASSED] 20 VFs
[19:52:10] [PASSED] 21 VFs
[19:52:10] [PASSED] 22 VFs
[19:52:10] [PASSED] 23 VFs
[19:52:10] [PASSED] 24 VFs
[19:52:10] [PASSED] 25 VFs
[19:52:10] [PASSED] 26 VFs
[19:52:10] [PASSED] 27 VFs
[19:52:10] [PASSED] 28 VFs
[19:52:10] [PASSED] 29 VFs
[19:52:10] [PASSED] 30 VFs
[19:52:10] [PASSED] 31 VFs
[19:52:10] [PASSED] 32 VFs
[19:52:10] [PASSED] 33 VFs
[19:52:10] [PASSED] 34 VFs
[19:52:10] [PASSED] 35 VFs
[19:52:10] [PASSED] 36 VFs
[19:52:10] [PASSED] 37 VFs
[19:52:10] [PASSED] 38 VFs
[19:52:10] [PASSED] 39 VFs
[19:52:10] [PASSED] 40 VFs
[19:52:10] [PASSED] 41 VFs
[19:52:10] [PASSED] 42 VFs
[19:52:10] [PASSED] 43 VFs
[19:52:10] [PASSED] 44 VFs
[19:52:10] [PASSED] 45 VFs
[19:52:10] [PASSED] 46 VFs
[19:52:10] [PASSED] 47 VFs
[19:52:10] [PASSED] 48 VFs
[19:52:10] [PASSED] 49 VFs
[19:52:10] [PASSED] 50 VFs
[19:52:10] [PASSED] 51 VFs
[19:52:10] [PASSED] 52 VFs
[19:52:10] [PASSED] 53 VFs
[19:52:10] [PASSED] 54 VFs
[19:52:10] [PASSED] 55 VFs
[19:52:10] [PASSED] 56 VFs
[19:52:10] [PASSED] 57 VFs
[19:52:10] [PASSED] 58 VFs
[19:52:10] [PASSED] 59 VFs
[19:52:10] [PASSED] 60 VFs
[19:52:10] [PASSED] 61 VFs
[19:52:10] [PASSED] 62 VFs
[19:52:10] [PASSED] 63 VFs
[19:52:10] ================= [PASSED] fair_doorbells ==================
[19:52:10] ======================== fair_ggtt ========================
[19:52:10] [PASSED] 1 VF
[19:52:10] [PASSED] 2 VFs
[19:52:10] [PASSED] 3 VFs
[19:52:10] [PASSED] 4 VFs
[19:52:10] [PASSED] 5 VFs
[19:52:10] [PASSED] 6 VFs
[19:52:10] [PASSED] 7 VFs
[19:52:10] [PASSED] 8 VFs
[19:52:10] [PASSED] 9 VFs
[19:52:10] [PASSED] 10 VFs
[19:52:10] [PASSED] 11 VFs
[19:52:10] [PASSED] 12 VFs
[19:52:10] [PASSED] 13 VFs
[19:52:10] [PASSED] 14 VFs
[19:52:10] [PASSED] 15 VFs
[19:52:10] [PASSED] 16 VFs
[19:52:10] [PASSED] 17 VFs
[19:52:10] [PASSED] 18 VFs
[19:52:10] [PASSED] 19 VFs
[19:52:10] [PASSED] 20 VFs
[19:52:10] [PASSED] 21 VFs
[19:52:10] [PASSED] 22 VFs
[19:52:10] [PASSED] 23 VFs
[19:52:10] [PASSED] 24 VFs
[19:52:10] [PASSED] 25 VFs
[19:52:10] [PASSED] 26 VFs
[19:52:10] [PASSED] 27 VFs
[19:52:10] [PASSED] 28 VFs
[19:52:10] [PASSED] 29 VFs
[19:52:10] [PASSED] 30 VFs
[19:52:10] [PASSED] 31 VFs
[19:52:10] [PASSED] 32 VFs
[19:52:10] [PASSED] 33 VFs
[19:52:10] [PASSED] 34 VFs
[19:52:10] [PASSED] 35 VFs
[19:52:10] [PASSED] 36 VFs
[19:52:10] [PASSED] 37 VFs
[19:52:10] [PASSED] 38 VFs
[19:52:10] [PASSED] 39 VFs
[19:52:10] [PASSED] 40 VFs
[19:52:10] [PASSED] 41 VFs
[19:52:10] [PASSED] 42 VFs
[19:52:10] [PASSED] 43 VFs
[19:52:10] [PASSED] 44 VFs
[19:52:10] [PASSED] 45 VFs
[19:52:10] [PASSED] 46 VFs
[19:52:10] [PASSED] 47 VFs
[19:52:10] [PASSED] 48 VFs
[19:52:10] [PASSED] 49 VFs
[19:52:10] [PASSED] 50 VFs
[19:52:10] [PASSED] 51 VFs
[19:52:10] [PASSED] 52 VFs
[19:52:10] [PASSED] 53 VFs
[19:52:10] [PASSED] 54 VFs
[19:52:10] [PASSED] 55 VFs
[19:52:10] [PASSED] 56 VFs
[19:52:10] [PASSED] 57 VFs
[19:52:10] [PASSED] 58 VFs
[19:52:10] [PASSED] 59 VFs
[19:52:10] [PASSED] 60 VFs
[19:52:10] [PASSED] 61 VFs
[19:52:10] [PASSED] 62 VFs
[19:52:10] [PASSED] 63 VFs
[19:52:10] ==================== [PASSED] fair_ggtt ====================
[19:52:10] ======================== fair_vram ========================
[19:52:10] [PASSED] 1 VF
[19:52:10] [PASSED] 2 VFs
[19:52:10] [PASSED] 3 VFs
[19:52:10] [PASSED] 4 VFs
[19:52:10] [PASSED] 5 VFs
[19:52:10] [PASSED] 6 VFs
[19:52:10] [PASSED] 7 VFs
[19:52:10] [PASSED] 8 VFs
[19:52:10] [PASSED] 9 VFs
[19:52:10] [PASSED] 10 VFs
[19:52:10] [PASSED] 11 VFs
[19:52:10] [PASSED] 12 VFs
[19:52:10] [PASSED] 13 VFs
[19:52:10] [PASSED] 14 VFs
[19:52:10] [PASSED] 15 VFs
[19:52:10] [PASSED] 16 VFs
[19:52:10] [PASSED] 17 VFs
[19:52:10] [PASSED] 18 VFs
[19:52:10] [PASSED] 19 VFs
[19:52:10] [PASSED] 20 VFs
[19:52:10] [PASSED] 21 VFs
[19:52:10] [PASSED] 22 VFs
[19:52:10] [PASSED] 23 VFs
[19:52:10] [PASSED] 24 VFs
[19:52:10] [PASSED] 25 VFs
[19:52:10] [PASSED] 26 VFs
[19:52:10] [PASSED] 27 VFs
[19:52:10] [PASSED] 28 VFs
[19:52:10] [PASSED] 29 VFs
[19:52:10] [PASSED] 30 VFs
[19:52:10] [PASSED] 31 VFs
[19:52:10] [PASSED] 32 VFs
[19:52:10] [PASSED] 33 VFs
[19:52:10] [PASSED] 34 VFs
[19:52:10] [PASSED] 35 VFs
[19:52:10] [PASSED] 36 VFs
[19:52:10] [PASSED] 37 VFs
[19:52:10] [PASSED] 38 VFs
[19:52:10] [PASSED] 39 VFs
[19:52:10] [PASSED] 40 VFs
[19:52:10] [PASSED] 41 VFs
[19:52:10] [PASSED] 42 VFs
[19:52:10] [PASSED] 43 VFs
[19:52:10] [PASSED] 44 VFs
[19:52:10] [PASSED] 45 VFs
[19:52:10] [PASSED] 46 VFs
[19:52:10] [PASSED] 47 VFs
[19:52:10] [PASSED] 48 VFs
[19:52:10] [PASSED] 49 VFs
[19:52:10] [PASSED] 50 VFs
[19:52:10] [PASSED] 51 VFs
[19:52:10] [PASSED] 52 VFs
[19:52:10] [PASSED] 53 VFs
[19:52:10] [PASSED] 54 VFs
[19:52:10] [PASSED] 55 VFs
[19:52:10] [PASSED] 56 VFs
[19:52:10] [PASSED] 57 VFs
[19:52:10] [PASSED] 58 VFs
[19:52:10] [PASSED] 59 VFs
[19:52:10] [PASSED] 60 VFs
[19:52:10] [PASSED] 61 VFs
[19:52:10] [PASSED] 62 VFs
[19:52:10] [PASSED] 63 VFs
[19:52:10] ==================== [PASSED] fair_vram ====================
[19:52:10] ================== [PASSED] pf_gt_config ===================
[19:52:10] ===================== lmtt (1 subtest) =====================
[19:52:10] ======================== test_ops =========================
[19:52:10] [PASSED] 2-level
[19:52:10] [PASSED] multi-level
[19:52:10] ==================== [PASSED] test_ops =====================
[19:52:10] ====================== [PASSED] lmtt =======================
[19:52:10] ================= pf_service (11 subtests) =================
[19:52:10] [PASSED] pf_negotiate_any
[19:52:10] [PASSED] pf_negotiate_base_match
[19:52:10] [PASSED] pf_negotiate_base_newer
[19:52:10] [PASSED] pf_negotiate_base_next
[19:52:10] [SKIPPED] pf_negotiate_base_older
[19:52:10] [PASSED] pf_negotiate_base_prev
[19:52:10] [PASSED] pf_negotiate_latest_match
[19:52:10] [PASSED] pf_negotiate_latest_newer
[19:52:10] [PASSED] pf_negotiate_latest_next
[19:52:10] [SKIPPED] pf_negotiate_latest_older
[19:52:10] [SKIPPED] pf_negotiate_latest_prev
[19:52:10] =================== [PASSED] pf_service ====================
[19:52:10] ================= xe_guc_g2g (2 subtests) ==================
[19:52:10] ============== xe_live_guc_g2g_kunit_default ==============
[19:52:10] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[19:52:10] ============== xe_live_guc_g2g_kunit_allmem ===============
[19:52:10] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[19:52:10] =================== [SKIPPED] xe_guc_g2g ===================
[19:52:10] =================== xe_mocs (2 subtests) ===================
[19:52:10] ================ xe_live_mocs_kernel_kunit ================
[19:52:10] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[19:52:10] ================ xe_live_mocs_reset_kunit =================
[19:52:10] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[19:52:10] ==================== [SKIPPED] xe_mocs =====================
[19:52:10] ================= xe_migrate (2 subtests) ==================
[19:52:10] ================= xe_migrate_sanity_kunit =================
[19:52:10] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[19:52:10] ================== xe_validate_ccs_kunit ==================
[19:52:10] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[19:52:10] =================== [SKIPPED] xe_migrate ===================
[19:52:10] ================== xe_dma_buf (1 subtest) ==================
[19:52:10] ==================== xe_dma_buf_kunit =====================
[19:52:10] ================ [SKIPPED] xe_dma_buf_kunit ================
[19:52:10] =================== [SKIPPED] xe_dma_buf ===================
[19:52:10] ================= xe_bo_shrink (1 subtest) =================
[19:52:10] =================== xe_bo_shrink_kunit ====================
[19:52:10] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[19:52:10] ================== [SKIPPED] xe_bo_shrink ==================
[19:52:10] ==================== xe_bo (2 subtests) ====================
[19:52:10] ================== xe_ccs_migrate_kunit ===================
[19:52:10] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[19:52:10] ==================== xe_bo_evict_kunit ====================
[19:52:10] =============== [SKIPPED] xe_bo_evict_kunit ================
[19:52:10] ===================== [SKIPPED] xe_bo ======================
[19:52:10] ==================== args (13 subtests) ====================
[19:52:10] [PASSED] count_args_test
[19:52:10] [PASSED] call_args_example
[19:52:10] [PASSED] call_args_test
[19:52:10] [PASSED] drop_first_arg_example
[19:52:10] [PASSED] drop_first_arg_test
[19:52:10] [PASSED] first_arg_example
[19:52:10] [PASSED] first_arg_test
[19:52:10] [PASSED] last_arg_example
[19:52:10] [PASSED] last_arg_test
[19:52:10] [PASSED] pick_arg_example
[19:52:10] [PASSED] if_args_example
[19:52:10] [PASSED] if_args_test
[19:52:10] [PASSED] sep_comma_example
[19:52:10] ====================== [PASSED] args =======================
[19:52:10] =================== xe_pci (3 subtests) ====================
[19:52:10] ==================== check_graphics_ip ====================
[19:52:10] [PASSED] 12.00 Xe_LP
[19:52:10] [PASSED] 12.10 Xe_LP+
[19:52:10] [PASSED] 12.55 Xe_HPG
[19:52:10] [PASSED] 12.60 Xe_HPC
[19:52:10] [PASSED] 12.70 Xe_LPG
[19:52:10] [PASSED] 12.71 Xe_LPG
[19:52:10] [PASSED] 12.74 Xe_LPG+
[19:52:10] [PASSED] 20.01 Xe2_HPG
[19:52:10] [PASSED] 20.02 Xe2_HPG
[19:52:10] [PASSED] 20.04 Xe2_LPG
[19:52:10] [PASSED] 30.00 Xe3_LPG
[19:52:10] [PASSED] 30.01 Xe3_LPG
[19:52:10] [PASSED] 30.03 Xe3_LPG
[19:52:10] [PASSED] 30.04 Xe3_LPG
[19:52:10] [PASSED] 30.05 Xe3_LPG
[19:52:10] [PASSED] 35.10 Xe3p_LPG
[19:52:10] [PASSED] 35.11 Xe3p_XPC
[19:52:10] ================ [PASSED] check_graphics_ip ================
[19:52:10] ===================== check_media_ip ======================
[19:52:10] [PASSED] 12.00 Xe_M
[19:52:10] [PASSED] 12.55 Xe_HPM
[19:52:10] [PASSED] 13.00 Xe_LPM+
[19:52:10] [PASSED] 13.01 Xe2_HPM
[19:52:10] [PASSED] 20.00 Xe2_LPM
[19:52:10] [PASSED] 30.00 Xe3_LPM
[19:52:10] [PASSED] 30.02 Xe3_LPM
[19:52:10] [PASSED] 35.00 Xe3p_LPM
[19:52:10] [PASSED] 35.03 Xe3p_HPM
[19:52:10] ================= [PASSED] check_media_ip ==================
[19:52:10] =================== check_platform_desc ===================
[19:52:10] [PASSED] 0x9A60 (TIGERLAKE)
[19:52:10] [PASSED] 0x9A68 (TIGERLAKE)
[19:52:10] [PASSED] 0x9A70 (TIGERLAKE)
[19:52:10] [PASSED] 0x9A40 (TIGERLAKE)
[19:52:10] [PASSED] 0x9A49 (TIGERLAKE)
[19:52:10] [PASSED] 0x9A59 (TIGERLAKE)
[19:52:10] [PASSED] 0x9A78 (TIGERLAKE)
[19:52:10] [PASSED] 0x9AC0 (TIGERLAKE)
[19:52:10] [PASSED] 0x9AC9 (TIGERLAKE)
[19:52:10] [PASSED] 0x9AD9 (TIGERLAKE)
[19:52:10] [PASSED] 0x9AF8 (TIGERLAKE)
[19:52:10] [PASSED] 0x4C80 (ROCKETLAKE)
[19:52:10] [PASSED] 0x4C8A (ROCKETLAKE)
[19:52:10] [PASSED] 0x4C8B (ROCKETLAKE)
[19:52:10] [PASSED] 0x4C8C (ROCKETLAKE)
[19:52:10] [PASSED] 0x4C90 (ROCKETLAKE)
[19:52:10] [PASSED] 0x4C9A (ROCKETLAKE)
[19:52:10] [PASSED] 0x4680 (ALDERLAKE_S)
[19:52:10] [PASSED] 0x4682 (ALDERLAKE_S)
[19:52:10] [PASSED] 0x4688 (ALDERLAKE_S)
[19:52:10] [PASSED] 0x468A (ALDERLAKE_S)
[19:52:10] [PASSED] 0x468B (ALDERLAKE_S)
[19:52:10] [PASSED] 0x4690 (ALDERLAKE_S)
[19:52:10] [PASSED] 0x4692 (ALDERLAKE_S)
[19:52:10] [PASSED] 0x4693 (ALDERLAKE_S)
[19:52:10] [PASSED] 0x46A0 (ALDERLAKE_P)
[19:52:10] [PASSED] 0x46A1 (ALDERLAKE_P)
[19:52:10] [PASSED] 0x46A2 (ALDERLAKE_P)
[19:52:10] [PASSED] 0x46A3 (ALDERLAKE_P)
[19:52:10] [PASSED] 0x46A6 (ALDERLAKE_P)
[19:52:10] [PASSED] 0x46A8 (ALDERLAKE_P)
[19:52:10] [PASSED] 0x46AA (ALDERLAKE_P)
[19:52:10] [PASSED] 0x462A (ALDERLAKE_P)
[19:52:10] [PASSED] 0x4626 (ALDERLAKE_P)
[19:52:10] [PASSED] 0x4628 (ALDERLAKE_P)
[19:52:10] [PASSED] 0x46B0 (ALDERLAKE_P)
[19:52:10] [PASSED] 0x46B1 (ALDERLAKE_P)
[19:52:10] [PASSED] 0x46B2 (ALDERLAKE_P)
[19:52:10] [PASSED] 0x46B3 (ALDERLAKE_P)
[19:52:10] [PASSED] 0x46C0 (ALDERLAKE_P)
[19:52:10] [PASSED] 0x46C1 (ALDERLAKE_P)
[19:52:10] [PASSED] 0x46C2 (ALDERLAKE_P)
[19:52:10] [PASSED] 0x46C3 (ALDERLAKE_P)
[19:52:10] [PASSED] 0x46D0 (ALDERLAKE_N)
[19:52:10] [PASSED] 0x46D1 (ALDERLAKE_N)
[19:52:10] [PASSED] 0x46D2 (ALDERLAKE_N)
[19:52:10] [PASSED] 0x46D3 (ALDERLAKE_N)
[19:52:10] [PASSED] 0x46D4 (ALDERLAKE_N)
[19:52:10] [PASSED] 0xA721 (ALDERLAKE_P)
[19:52:10] [PASSED] 0xA7A1 (ALDERLAKE_P)
[19:52:10] [PASSED] 0xA7A9 (ALDERLAKE_P)
[19:52:10] [PASSED] 0xA7AC (ALDERLAKE_P)
[19:52:10] [PASSED] 0xA7AD (ALDERLAKE_P)
[19:52:10] [PASSED] 0xA720 (ALDERLAKE_P)
[19:52:10] [PASSED] 0xA7A0 (ALDERLAKE_P)
[19:52:10] [PASSED] 0xA7A8 (ALDERLAKE_P)
[19:52:10] [PASSED] 0xA7AA (ALDERLAKE_P)
[19:52:10] [PASSED] 0xA7AB (ALDERLAKE_P)
[19:52:10] [PASSED] 0xA780 (ALDERLAKE_S)
[19:52:10] [PASSED] 0xA781 (ALDERLAKE_S)
[19:52:10] [PASSED] 0xA782 (ALDERLAKE_S)
[19:52:10] [PASSED] 0xA783 (ALDERLAKE_S)
[19:52:10] [PASSED] 0xA788 (ALDERLAKE_S)
[19:52:10] [PASSED] 0xA789 (ALDERLAKE_S)
[19:52:10] [PASSED] 0xA78A (ALDERLAKE_S)
[19:52:10] [PASSED] 0xA78B (ALDERLAKE_S)
[19:52:10] [PASSED] 0x4905 (DG1)
[19:52:10] [PASSED] 0x4906 (DG1)
[19:52:10] [PASSED] 0x4907 (DG1)
[19:52:10] [PASSED] 0x4908 (DG1)
[19:52:10] [PASSED] 0x4909 (DG1)
[19:52:10] [PASSED] 0x56C0 (DG2)
[19:52:10] [PASSED] 0x56C2 (DG2)
[19:52:10] [PASSED] 0x56C1 (DG2)
[19:52:10] [PASSED] 0x7D51 (METEORLAKE)
[19:52:10] [PASSED] 0x7DD1 (METEORLAKE)
[19:52:10] [PASSED] 0x7D41 (METEORLAKE)
[19:52:10] [PASSED] 0x7D67 (METEORLAKE)
[19:52:10] [PASSED] 0xB640 (METEORLAKE)
[19:52:10] [PASSED] 0x56A0 (DG2)
[19:52:10] [PASSED] 0x56A1 (DG2)
[19:52:10] [PASSED] 0x56A2 (DG2)
[19:52:10] [PASSED] 0x56BE (DG2)
[19:52:10] [PASSED] 0x56BF (DG2)
[19:52:10] [PASSED] 0x5690 (DG2)
[19:52:10] [PASSED] 0x5691 (DG2)
[19:52:10] [PASSED] 0x5692 (DG2)
[19:52:10] [PASSED] 0x56A5 (DG2)
[19:52:10] [PASSED] 0x56A6 (DG2)
[19:52:10] [PASSED] 0x56B0 (DG2)
[19:52:10] [PASSED] 0x56B1 (DG2)
[19:52:10] [PASSED] 0x56BA (DG2)
[19:52:10] [PASSED] 0x56BB (DG2)
[19:52:10] [PASSED] 0x56BC (DG2)
[19:52:10] [PASSED] 0x56BD (DG2)
[19:52:10] [PASSED] 0x5693 (DG2)
[19:52:10] [PASSED] 0x5694 (DG2)
[19:52:10] [PASSED] 0x5695 (DG2)
[19:52:10] [PASSED] 0x56A3 (DG2)
[19:52:10] [PASSED] 0x56A4 (DG2)
[19:52:10] [PASSED] 0x56B2 (DG2)
[19:52:10] [PASSED] 0x56B3 (DG2)
[19:52:10] [PASSED] 0x5696 (DG2)
[19:52:10] [PASSED] 0x5697 (DG2)
[19:52:10] [PASSED] 0xB69 (PVC)
[19:52:10] [PASSED] 0xB6E (PVC)
[19:52:10] [PASSED] 0xBD4 (PVC)
[19:52:10] [PASSED] 0xBD5 (PVC)
[19:52:10] [PASSED] 0xBD6 (PVC)
[19:52:10] [PASSED] 0xBD7 (PVC)
[19:52:10] [PASSED] 0xBD8 (PVC)
[19:52:10] [PASSED] 0xBD9 (PVC)
[19:52:10] [PASSED] 0xBDA (PVC)
[19:52:10] [PASSED] 0xBDB (PVC)
[19:52:10] [PASSED] 0xBE0 (PVC)
[19:52:10] [PASSED] 0xBE1 (PVC)
[19:52:10] [PASSED] 0xBE5 (PVC)
[19:52:10] [PASSED] 0x7D40 (METEORLAKE)
[19:52:10] [PASSED] 0x7D45 (METEORLAKE)
[19:52:10] [PASSED] 0x7D55 (METEORLAKE)
[19:52:10] [PASSED] 0x7D60 (METEORLAKE)
[19:52:10] [PASSED] 0x7DD5 (METEORLAKE)
[19:52:10] [PASSED] 0x6420 (LUNARLAKE)
[19:52:10] [PASSED] 0x64A0 (LUNARLAKE)
[19:52:10] [PASSED] 0x64B0 (LUNARLAKE)
[19:52:10] [PASSED] 0xE202 (BATTLEMAGE)
[19:52:10] [PASSED] 0xE209 (BATTLEMAGE)
[19:52:10] [PASSED] 0xE20B (BATTLEMAGE)
[19:52:10] [PASSED] 0xE20C (BATTLEMAGE)
[19:52:10] [PASSED] 0xE20D (BATTLEMAGE)
[19:52:10] [PASSED] 0xE210 (BATTLEMAGE)
[19:52:10] [PASSED] 0xE211 (BATTLEMAGE)
[19:52:10] [PASSED] 0xE212 (BATTLEMAGE)
[19:52:10] [PASSED] 0xE216 (BATTLEMAGE)
[19:52:10] [PASSED] 0xE220 (BATTLEMAGE)
[19:52:10] [PASSED] 0xE221 (BATTLEMAGE)
[19:52:10] [PASSED] 0xE222 (BATTLEMAGE)
[19:52:10] [PASSED] 0xE223 (BATTLEMAGE)
[19:52:10] [PASSED] 0xB080 (PANTHERLAKE)
[19:52:10] [PASSED] 0xB081 (PANTHERLAKE)
[19:52:10] [PASSED] 0xB082 (PANTHERLAKE)
[19:52:10] [PASSED] 0xB083 (PANTHERLAKE)
[19:52:10] [PASSED] 0xB084 (PANTHERLAKE)
[19:52:10] [PASSED] 0xB085 (PANTHERLAKE)
[19:52:10] [PASSED] 0xB086 (PANTHERLAKE)
[19:52:10] [PASSED] 0xB087 (PANTHERLAKE)
[19:52:10] [PASSED] 0xB08F (PANTHERLAKE)
[19:52:10] [PASSED] 0xB090 (PANTHERLAKE)
[19:52:10] [PASSED] 0xB0A0 (PANTHERLAKE)
[19:52:10] [PASSED] 0xB0B0 (PANTHERLAKE)
[19:52:10] [PASSED] 0xFD80 (PANTHERLAKE)
[19:52:10] [PASSED] 0xFD81 (PANTHERLAKE)
[19:52:10] [PASSED] 0xD740 (NOVALAKE_S)
[19:52:10] [PASSED] 0xD741 (NOVALAKE_S)
[19:52:10] [PASSED] 0xD742 (NOVALAKE_S)
[19:52:10] [PASSED] 0xD743 (NOVALAKE_S)
[19:52:10] [PASSED] 0xD744 (NOVALAKE_S)
[19:52:10] [PASSED] 0xD745 (NOVALAKE_S)
[19:52:10] [PASSED] 0x674C (CRESCENTISLAND)
[19:52:10] [PASSED] 0xD750 (NOVALAKE_P)
[19:52:10] [PASSED] 0xD751 (NOVALAKE_P)
[19:52:10] [PASSED] 0xD752 (NOVALAKE_P)
[19:52:10] [PASSED] 0xD753 (NOVALAKE_P)
[19:52:10] [PASSED] 0xD754 (NOVALAKE_P)
[19:52:10] [PASSED] 0xD755 (NOVALAKE_P)
[19:52:10] [PASSED] 0xD756 (NOVALAKE_P)
[19:52:10] [PASSED] 0xD757 (NOVALAKE_P)
[19:52:10] [PASSED] 0xD75F (NOVALAKE_P)
[19:52:10] =============== [PASSED] check_platform_desc ===============
[19:52:10] ===================== [PASSED] xe_pci ======================
[19:52:10] =================== xe_rtp (2 subtests) ====================
[19:52:10] =============== xe_rtp_process_to_sr_tests ================
[19:52:10] [PASSED] coalesce-same-reg
[19:52:10] [PASSED] no-match-no-add
[19:52:10] [PASSED] match-or
[19:52:10] [PASSED] match-or-xfail
[19:52:10] [PASSED] no-match-no-add-multiple-rules
[19:52:10] [PASSED] two-regs-two-entries
[19:52:10] [PASSED] clr-one-set-other
[19:52:10] [PASSED] set-field
[19:52:10] [PASSED] conflict-duplicate
stty: 'standard input': Inappropriate ioctl for device
[19:52:10] [PASSED] conflict-not-disjoint
[19:52:10] [PASSED] conflict-reg-type
[19:52:10] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[19:52:10] ================== xe_rtp_process_tests ===================
[19:52:10] [PASSED] active1
[19:52:10] [PASSED] active2
[19:52:10] [PASSED] active-inactive
[19:52:10] [PASSED] inactive-active
[19:52:10] [PASSED] inactive-1st_or_active-inactive
[19:52:10] [PASSED] inactive-2nd_or_active-inactive
[19:52:10] [PASSED] inactive-last_or_active-inactive
[19:52:10] [PASSED] inactive-no_or_active-inactive
[19:52:10] ============== [PASSED] xe_rtp_process_tests ===============
[19:52:10] ===================== [PASSED] xe_rtp ======================
[19:52:10] ==================== xe_wa (1 subtest) =====================
[19:52:10] ======================== xe_wa_gt =========================
[19:52:10] [PASSED] TIGERLAKE B0
[19:52:10] [PASSED] DG1 A0
[19:52:10] [PASSED] DG1 B0
[19:52:10] [PASSED] ALDERLAKE_S A0
[19:52:10] [PASSED] ALDERLAKE_S B0
[19:52:10] [PASSED] ALDERLAKE_S C0
[19:52:10] [PASSED] ALDERLAKE_S D0
[19:52:10] [PASSED] ALDERLAKE_P A0
[19:52:10] [PASSED] ALDERLAKE_P B0
[19:52:10] [PASSED] ALDERLAKE_P C0
[19:52:10] [PASSED] ALDERLAKE_S RPLS D0
[19:52:10] [PASSED] ALDERLAKE_P RPLU E0
[19:52:10] [PASSED] DG2 G10 C0
[19:52:10] [PASSED] DG2 G11 B1
[19:52:10] [PASSED] DG2 G12 A1
[19:52:10] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[19:52:10] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[19:52:10] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[19:52:10] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[19:52:10] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[19:52:10] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[19:52:10] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[19:52:10] ==================== [PASSED] xe_wa_gt =====================
[19:52:10] ====================== [PASSED] xe_wa ======================
[19:52:10] ============================================================
[19:52:10] Testing complete. Ran 597 tests: passed: 579, skipped: 18
[19:52:11] Elapsed time: 35.907s total, 4.268s configuring, 31.022s building, 0.588s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[19:52:11] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[19:52:12] 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
[19:52:36] Starting KUnit Kernel (1/1)...
[19:52:36] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[19:52:36] ============ drm_test_pick_cmdline (2 subtests) ============
[19:52:36] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[19:52:36] =============== drm_test_pick_cmdline_named ===============
[19:52:36] [PASSED] NTSC
[19:52:36] [PASSED] NTSC-J
[19:52:36] [PASSED] PAL
[19:52:36] [PASSED] PAL-M
[19:52:36] =========== [PASSED] drm_test_pick_cmdline_named ===========
[19:52:36] ============== [PASSED] drm_test_pick_cmdline ==============
[19:52:36] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[19:52:36] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[19:52:36] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[19:52:36] =========== drm_validate_clone_mode (2 subtests) ===========
[19:52:36] ============== drm_test_check_in_clone_mode ===============
[19:52:36] [PASSED] in_clone_mode
[19:52:36] [PASSED] not_in_clone_mode
[19:52:36] ========== [PASSED] drm_test_check_in_clone_mode ===========
[19:52:36] =============== drm_test_check_valid_clones ===============
[19:52:36] [PASSED] not_in_clone_mode
[19:52:36] [PASSED] valid_clone
[19:52:36] [PASSED] invalid_clone
[19:52:36] =========== [PASSED] drm_test_check_valid_clones ===========
[19:52:36] ============= [PASSED] drm_validate_clone_mode =============
[19:52:36] ============= drm_validate_modeset (1 subtest) =============
[19:52:36] [PASSED] drm_test_check_connector_changed_modeset
[19:52:36] ============== [PASSED] drm_validate_modeset ===============
[19:52:36] ====== drm_test_bridge_get_current_state (2 subtests) ======
[19:52:36] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[19:52:36] [PASSED] drm_test_drm_bridge_get_current_state_legacy
[19:52:36] ======== [PASSED] drm_test_bridge_get_current_state ========
[19:52:36] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[19:52:36] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[19:52:36] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[19:52:36] [PASSED] drm_test_drm_bridge_helper_reset_crtc_legacy
[19:52:36] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[19:52:36] ============== drm_bridge_alloc (2 subtests) ===============
[19:52:36] [PASSED] drm_test_drm_bridge_alloc_basic
[19:52:36] [PASSED] drm_test_drm_bridge_alloc_get_put
[19:52:36] ================ [PASSED] drm_bridge_alloc =================
[19:52:36] ============= drm_cmdline_parser (40 subtests) =============
[19:52:36] [PASSED] drm_test_cmdline_force_d_only
[19:52:36] [PASSED] drm_test_cmdline_force_D_only_dvi
[19:52:36] [PASSED] drm_test_cmdline_force_D_only_hdmi
[19:52:36] [PASSED] drm_test_cmdline_force_D_only_not_digital
[19:52:36] [PASSED] drm_test_cmdline_force_e_only
[19:52:36] [PASSED] drm_test_cmdline_res
[19:52:36] [PASSED] drm_test_cmdline_res_vesa
[19:52:36] [PASSED] drm_test_cmdline_res_vesa_rblank
[19:52:36] [PASSED] drm_test_cmdline_res_rblank
[19:52:36] [PASSED] drm_test_cmdline_res_bpp
[19:52:36] [PASSED] drm_test_cmdline_res_refresh
[19:52:36] [PASSED] drm_test_cmdline_res_bpp_refresh
[19:52:36] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[19:52:36] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[19:52:36] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[19:52:36] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[19:52:36] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[19:52:36] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[19:52:36] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[19:52:36] [PASSED] drm_test_cmdline_res_margins_force_on
[19:52:36] [PASSED] drm_test_cmdline_res_vesa_margins
[19:52:36] [PASSED] drm_test_cmdline_name
[19:52:36] [PASSED] drm_test_cmdline_name_bpp
[19:52:36] [PASSED] drm_test_cmdline_name_option
[19:52:36] [PASSED] drm_test_cmdline_name_bpp_option
[19:52:36] [PASSED] drm_test_cmdline_rotate_0
[19:52:36] [PASSED] drm_test_cmdline_rotate_90
[19:52:36] [PASSED] drm_test_cmdline_rotate_180
[19:52:36] [PASSED] drm_test_cmdline_rotate_270
[19:52:36] [PASSED] drm_test_cmdline_hmirror
[19:52:36] [PASSED] drm_test_cmdline_vmirror
[19:52:36] [PASSED] drm_test_cmdline_margin_options
[19:52:36] [PASSED] drm_test_cmdline_multiple_options
[19:52:36] [PASSED] drm_test_cmdline_bpp_extra_and_option
[19:52:36] [PASSED] drm_test_cmdline_extra_and_option
[19:52:36] [PASSED] drm_test_cmdline_freestanding_options
[19:52:36] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[19:52:36] [PASSED] drm_test_cmdline_panel_orientation
[19:52:36] ================ drm_test_cmdline_invalid =================
[19:52:36] [PASSED] margin_only
[19:52:36] [PASSED] interlace_only
[19:52:36] [PASSED] res_missing_x
[19:52:36] [PASSED] res_missing_y
[19:52:36] [PASSED] res_bad_y
[19:52:36] [PASSED] res_missing_y_bpp
[19:52:36] [PASSED] res_bad_bpp
[19:52:36] [PASSED] res_bad_refresh
[19:52:36] [PASSED] res_bpp_refresh_force_on_off
[19:52:36] [PASSED] res_invalid_mode
[19:52:36] [PASSED] res_bpp_wrong_place_mode
[19:52:36] [PASSED] name_bpp_refresh
[19:52:36] [PASSED] name_refresh
[19:52:36] [PASSED] name_refresh_wrong_mode
[19:52:36] [PASSED] name_refresh_invalid_mode
[19:52:36] [PASSED] rotate_multiple
[19:52:36] [PASSED] rotate_invalid_val
[19:52:36] [PASSED] rotate_truncated
[19:52:36] [PASSED] invalid_option
[19:52:36] [PASSED] invalid_tv_option
[19:52:36] [PASSED] truncated_tv_option
[19:52:36] ============ [PASSED] drm_test_cmdline_invalid =============
[19:52:36] =============== drm_test_cmdline_tv_options ===============
[19:52:36] [PASSED] NTSC
[19:52:36] [PASSED] NTSC_443
[19:52:36] [PASSED] NTSC_J
[19:52:36] [PASSED] PAL
[19:52:36] [PASSED] PAL_M
[19:52:36] [PASSED] PAL_N
[19:52:36] [PASSED] SECAM
[19:52:36] [PASSED] MONO_525
[19:52:36] [PASSED] MONO_625
[19:52:36] =========== [PASSED] drm_test_cmdline_tv_options ===========
[19:52:36] =============== [PASSED] drm_cmdline_parser ================
[19:52:36] ========== drmm_connector_hdmi_init (20 subtests) ==========
[19:52:36] [PASSED] drm_test_connector_hdmi_init_valid
[19:52:36] [PASSED] drm_test_connector_hdmi_init_bpc_8
[19:52:36] [PASSED] drm_test_connector_hdmi_init_bpc_10
[19:52:36] [PASSED] drm_test_connector_hdmi_init_bpc_12
[19:52:36] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[19:52:36] [PASSED] drm_test_connector_hdmi_init_bpc_null
[19:52:36] [PASSED] drm_test_connector_hdmi_init_formats_empty
[19:52:36] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[19:52:36] === drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[19:52:36] [PASSED] supported_formats=0x9 yuv420_allowed=1
[19:52:36] [PASSED] supported_formats=0x9 yuv420_allowed=0
[19:52:36] [PASSED] supported_formats=0x5 yuv420_allowed=1
[19:52:36] [PASSED] supported_formats=0x5 yuv420_allowed=0
[19:52:36] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[19:52:36] [PASSED] drm_test_connector_hdmi_init_null_ddc
[19:52:36] [PASSED] drm_test_connector_hdmi_init_null_product
[19:52:36] [PASSED] drm_test_connector_hdmi_init_null_vendor
[19:52:36] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[19:52:36] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[19:52:37] [PASSED] drm_test_connector_hdmi_init_product_valid
[19:52:37] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[19:52:37] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[19:52:37] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[19:52:37] ========= drm_test_connector_hdmi_init_type_valid =========
[19:52:37] [PASSED] HDMI-A
[19:52:37] [PASSED] HDMI-B
[19:52:37] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[19:52:37] ======== drm_test_connector_hdmi_init_type_invalid ========
[19:52:37] [PASSED] Unknown
[19:52:37] [PASSED] VGA
[19:52:37] [PASSED] DVI-I
[19:52:37] [PASSED] DVI-D
[19:52:37] [PASSED] DVI-A
[19:52:37] [PASSED] Composite
[19:52:37] [PASSED] SVIDEO
[19:52:37] [PASSED] LVDS
[19:52:37] [PASSED] Component
[19:52:37] [PASSED] DIN
[19:52:37] [PASSED] DP
[19:52:37] [PASSED] TV
[19:52:37] [PASSED] eDP
[19:52:37] [PASSED] Virtual
[19:52:37] [PASSED] DSI
[19:52:37] [PASSED] DPI
[19:52:37] [PASSED] Writeback
[19:52:37] [PASSED] SPI
[19:52:37] [PASSED] USB
[19:52:37] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[19:52:37] ============ [PASSED] drmm_connector_hdmi_init =============
[19:52:37] ============= drmm_connector_init (3 subtests) =============
[19:52:37] [PASSED] drm_test_drmm_connector_init
[19:52:37] [PASSED] drm_test_drmm_connector_init_null_ddc
[19:52:37] ========= drm_test_drmm_connector_init_type_valid =========
[19:52:37] [PASSED] Unknown
[19:52:37] [PASSED] VGA
[19:52:37] [PASSED] DVI-I
[19:52:37] [PASSED] DVI-D
[19:52:37] [PASSED] DVI-A
[19:52:37] [PASSED] Composite
[19:52:37] [PASSED] SVIDEO
[19:52:37] [PASSED] LVDS
[19:52:37] [PASSED] Component
[19:52:37] [PASSED] DIN
[19:52:37] [PASSED] DP
[19:52:37] [PASSED] HDMI-A
[19:52:37] [PASSED] HDMI-B
[19:52:37] [PASSED] TV
[19:52:37] [PASSED] eDP
[19:52:37] [PASSED] Virtual
[19:52:37] [PASSED] DSI
[19:52:37] [PASSED] DPI
[19:52:37] [PASSED] Writeback
[19:52:37] [PASSED] SPI
[19:52:37] [PASSED] USB
[19:52:37] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[19:52:37] =============== [PASSED] drmm_connector_init ===============
[19:52:37] ========= drm_connector_dynamic_init (6 subtests) ==========
[19:52:37] [PASSED] drm_test_drm_connector_dynamic_init
[19:52:37] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[19:52:37] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[19:52:37] [PASSED] drm_test_drm_connector_dynamic_init_properties
[19:52:37] ===== drm_test_drm_connector_dynamic_init_type_valid ======
[19:52:37] [PASSED] Unknown
[19:52:37] [PASSED] VGA
[19:52:37] [PASSED] DVI-I
[19:52:37] [PASSED] DVI-D
[19:52:37] [PASSED] DVI-A
[19:52:37] [PASSED] Composite
[19:52:37] [PASSED] SVIDEO
[19:52:37] [PASSED] LVDS
[19:52:37] [PASSED] Component
[19:52:37] [PASSED] DIN
[19:52:37] [PASSED] DP
[19:52:37] [PASSED] HDMI-A
[19:52:37] [PASSED] HDMI-B
[19:52:37] [PASSED] TV
[19:52:37] [PASSED] eDP
[19:52:37] [PASSED] Virtual
[19:52:37] [PASSED] DSI
[19:52:37] [PASSED] DPI
[19:52:37] [PASSED] Writeback
[19:52:37] [PASSED] SPI
[19:52:37] [PASSED] USB
[19:52:37] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[19:52:37] ======== drm_test_drm_connector_dynamic_init_name =========
[19:52:37] [PASSED] Unknown
[19:52:37] [PASSED] VGA
[19:52:37] [PASSED] DVI-I
[19:52:37] [PASSED] DVI-D
[19:52:37] [PASSED] DVI-A
[19:52:37] [PASSED] Composite
[19:52:37] [PASSED] SVIDEO
[19:52:37] [PASSED] LVDS
[19:52:37] [PASSED] Component
[19:52:37] [PASSED] DIN
[19:52:37] [PASSED] DP
[19:52:37] [PASSED] HDMI-A
[19:52:37] [PASSED] HDMI-B
[19:52:37] [PASSED] TV
[19:52:37] [PASSED] eDP
[19:52:37] [PASSED] Virtual
[19:52:37] [PASSED] DSI
[19:52:37] [PASSED] DPI
[19:52:37] [PASSED] Writeback
[19:52:37] [PASSED] SPI
[19:52:37] [PASSED] USB
[19:52:37] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[19:52:37] =========== [PASSED] drm_connector_dynamic_init ============
[19:52:37] ==== drm_connector_dynamic_register_early (4 subtests) =====
[19:52:37] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[19:52:37] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[19:52:37] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[19:52:37] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[19:52:37] ====== [PASSED] drm_connector_dynamic_register_early =======
[19:52:37] ======= drm_connector_dynamic_register (7 subtests) ========
[19:52:37] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[19:52:37] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[19:52:37] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[19:52:37] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[19:52:37] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[19:52:37] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[19:52:37] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[19:52:37] ========= [PASSED] drm_connector_dynamic_register ==========
[19:52:37] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[19:52:37] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[19:52:37] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[19:52:37] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[19:52:37] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[19:52:37] ========== drm_test_get_tv_mode_from_name_valid ===========
[19:52:37] [PASSED] NTSC
[19:52:37] [PASSED] NTSC-443
[19:52:37] [PASSED] NTSC-J
[19:52:37] [PASSED] PAL
[19:52:37] [PASSED] PAL-M
[19:52:37] [PASSED] PAL-N
[19:52:37] [PASSED] SECAM
[19:52:37] [PASSED] Mono
[19:52:37] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[19:52:37] [PASSED] drm_test_get_tv_mode_from_name_truncated
[19:52:37] ============ [PASSED] drm_get_tv_mode_from_name ============
[19:52:37] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[19:52:37] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[19:52:37] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[19:52:37] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[19:52:37] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[19:52:37] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[19:52:37] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[19:52:37] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[19:52:37] [PASSED] VIC 96
[19:52:37] [PASSED] VIC 97
[19:52:37] [PASSED] VIC 101
[19:52:37] [PASSED] VIC 102
[19:52:37] [PASSED] VIC 106
[19:52:37] [PASSED] VIC 107
[19:52:37] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[19:52:37] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[19:52:37] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[19:52:37] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[19:52:37] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[19:52:37] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[19:52:37] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[19:52:37] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[19:52:37] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[19:52:37] [PASSED] Automatic
[19:52:37] [PASSED] Full
[19:52:37] [PASSED] Limited 16:235
[19:52:37] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[19:52:37] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[19:52:37] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[19:52:37] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[19:52:37] === drm_test_drm_hdmi_connector_get_output_format_name ====
[19:52:37] [PASSED] RGB
[19:52:37] [PASSED] YUV 4:2:0
[19:52:37] [PASSED] YUV 4:2:2
[19:52:37] [PASSED] YUV 4:4:4
[19:52:37] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[19:52:37] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[19:52:37] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[19:52:37] ============= drm_damage_helper (21 subtests) ==============
[19:52:37] [PASSED] drm_test_damage_iter_no_damage
[19:52:37] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[19:52:37] [PASSED] drm_test_damage_iter_no_damage_src_moved
[19:52:37] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[19:52:37] [PASSED] drm_test_damage_iter_no_damage_not_visible
[19:52:37] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[19:52:37] [PASSED] drm_test_damage_iter_no_damage_no_fb
[19:52:37] [PASSED] drm_test_damage_iter_simple_damage
[19:52:37] [PASSED] drm_test_damage_iter_single_damage
[19:52:37] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[19:52:37] [PASSED] drm_test_damage_iter_single_damage_outside_src
[19:52:37] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[19:52:37] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[19:52:37] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[19:52:37] [PASSED] drm_test_damage_iter_single_damage_src_moved
[19:52:37] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[19:52:37] [PASSED] drm_test_damage_iter_damage
[19:52:37] [PASSED] drm_test_damage_iter_damage_one_intersect
[19:52:37] [PASSED] drm_test_damage_iter_damage_one_outside
[19:52:37] [PASSED] drm_test_damage_iter_damage_src_moved
[19:52:37] [PASSED] drm_test_damage_iter_damage_not_visible
[19:52:37] ================ [PASSED] drm_damage_helper ================
[19:52:37] ============== drm_dp_mst_helper (3 subtests) ==============
[19:52:37] ============== drm_test_dp_mst_calc_pbn_mode ==============
[19:52:37] [PASSED] Clock 154000 BPP 30 DSC disabled
[19:52:37] [PASSED] Clock 234000 BPP 30 DSC disabled
[19:52:37] [PASSED] Clock 297000 BPP 24 DSC disabled
[19:52:37] [PASSED] Clock 332880 BPP 24 DSC enabled
[19:52:37] [PASSED] Clock 324540 BPP 24 DSC enabled
[19:52:37] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[19:52:37] ============== drm_test_dp_mst_calc_pbn_div ===============
[19:52:37] [PASSED] Link rate 2000000 lane count 4
[19:52:37] [PASSED] Link rate 2000000 lane count 2
[19:52:37] [PASSED] Link rate 2000000 lane count 1
[19:52:37] [PASSED] Link rate 1350000 lane count 4
[19:52:37] [PASSED] Link rate 1350000 lane count 2
[19:52:37] [PASSED] Link rate 1350000 lane count 1
[19:52:37] [PASSED] Link rate 1000000 lane count 4
[19:52:37] [PASSED] Link rate 1000000 lane count 2
[19:52:37] [PASSED] Link rate 1000000 lane count 1
[19:52:37] [PASSED] Link rate 810000 lane count 4
[19:52:37] [PASSED] Link rate 810000 lane count 2
[19:52:37] [PASSED] Link rate 810000 lane count 1
[19:52:37] [PASSED] Link rate 540000 lane count 4
[19:52:37] [PASSED] Link rate 540000 lane count 2
[19:52:37] [PASSED] Link rate 540000 lane count 1
[19:52:37] [PASSED] Link rate 270000 lane count 4
[19:52:37] [PASSED] Link rate 270000 lane count 2
[19:52:37] [PASSED] Link rate 270000 lane count 1
[19:52:37] [PASSED] Link rate 162000 lane count 4
[19:52:37] [PASSED] Link rate 162000 lane count 2
[19:52:37] [PASSED] Link rate 162000 lane count 1
[19:52:37] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[19:52:37] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[19:52:37] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[19:52:37] [PASSED] DP_POWER_UP_PHY with port number
[19:52:37] [PASSED] DP_POWER_DOWN_PHY with port number
[19:52:37] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[19:52:37] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[19:52:37] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[19:52:37] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[19:52:37] [PASSED] DP_QUERY_PAYLOAD with port number
[19:52:37] [PASSED] DP_QUERY_PAYLOAD with VCPI
[19:52:37] [PASSED] DP_REMOTE_DPCD_READ with port number
[19:52:37] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[19:52:37] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[19:52:37] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[19:52:37] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[19:52:37] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[19:52:37] [PASSED] DP_REMOTE_I2C_READ with port number
[19:52:37] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[19:52:37] [PASSED] DP_REMOTE_I2C_READ with transactions array
[19:52:37] [PASSED] DP_REMOTE_I2C_WRITE with port number
[19:52:37] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[19:52:37] [PASSED] DP_REMOTE_I2C_WRITE with data array
[19:52:37] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[19:52:37] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[19:52:37] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[19:52:37] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[19:52:37] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[19:52:37] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[19:52:37] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[19:52:37] ================ [PASSED] drm_dp_mst_helper ================
[19:52:37] ================== drm_exec (7 subtests) ===================
[19:52:37] [PASSED] sanitycheck
[19:52:37] [PASSED] test_lock
[19:52:37] [PASSED] test_lock_unlock
[19:52:37] [PASSED] test_duplicates
[19:52:37] [PASSED] test_prepare
[19:52:37] [PASSED] test_prepare_array
[19:52:37] [PASSED] test_multiple_loops
[19:52:37] ==================== [PASSED] drm_exec =====================
[19:52:37] =========== drm_format_helper_test (17 subtests) ===========
[19:52:37] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[19:52:37] [PASSED] single_pixel_source_buffer
[19:52:37] [PASSED] single_pixel_clip_rectangle
[19:52:37] [PASSED] well_known_colors
[19:52:37] [PASSED] destination_pitch
[19:52:37] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[19:52:37] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[19:52:37] [PASSED] single_pixel_source_buffer
[19:52:37] [PASSED] single_pixel_clip_rectangle
[19:52:37] [PASSED] well_known_colors
[19:52:37] [PASSED] destination_pitch
[19:52:37] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[19:52:37] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[19:52:37] [PASSED] single_pixel_source_buffer
[19:52:37] [PASSED] single_pixel_clip_rectangle
[19:52:37] [PASSED] well_known_colors
[19:52:37] [PASSED] destination_pitch
[19:52:37] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[19:52:37] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[19:52:37] [PASSED] single_pixel_source_buffer
[19:52:37] [PASSED] single_pixel_clip_rectangle
[19:52:37] [PASSED] well_known_colors
[19:52:37] [PASSED] destination_pitch
[19:52:37] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[19:52:37] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[19:52:37] [PASSED] single_pixel_source_buffer
[19:52:37] [PASSED] single_pixel_clip_rectangle
[19:52:37] [PASSED] well_known_colors
[19:52:37] [PASSED] destination_pitch
[19:52:37] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[19:52:37] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[19:52:37] [PASSED] single_pixel_source_buffer
[19:52:37] [PASSED] single_pixel_clip_rectangle
[19:52:37] [PASSED] well_known_colors
[19:52:37] [PASSED] destination_pitch
[19:52:37] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[19:52:37] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[19:52:37] [PASSED] single_pixel_source_buffer
[19:52:37] [PASSED] single_pixel_clip_rectangle
[19:52:37] [PASSED] well_known_colors
[19:52:37] [PASSED] destination_pitch
[19:52:37] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[19:52:37] ============= drm_test_fb_xrgb8888_to_bgr888 ==============
[19:52:37] [PASSED] single_pixel_source_buffer
[19:52:37] [PASSED] single_pixel_clip_rectangle
[19:52:37] [PASSED] well_known_colors
[19:52:37] [PASSED] destination_pitch
[19:52:37] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[19:52:37] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[19:52:37] [PASSED] single_pixel_source_buffer
[19:52:37] [PASSED] single_pixel_clip_rectangle
[19:52:37] [PASSED] well_known_colors
[19:52:37] [PASSED] destination_pitch
[19:52:37] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[19:52:37] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[19:52:37] [PASSED] single_pixel_source_buffer
[19:52:37] [PASSED] single_pixel_clip_rectangle
[19:52:37] [PASSED] well_known_colors
[19:52:37] [PASSED] destination_pitch
[19:52:37] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[19:52:37] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[19:52:37] [PASSED] single_pixel_source_buffer
[19:52:37] [PASSED] single_pixel_clip_rectangle
[19:52:37] [PASSED] well_known_colors
[19:52:37] [PASSED] destination_pitch
[19:52:37] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[19:52:37] ============== drm_test_fb_xrgb8888_to_mono ===============
[19:52:37] [PASSED] single_pixel_source_buffer
[19:52:37] [PASSED] single_pixel_clip_rectangle
[19:52:37] [PASSED] well_known_colors
[19:52:37] [PASSED] destination_pitch
[19:52:37] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[19:52:37] ==================== drm_test_fb_swab =====================
[19:52:37] [PASSED] single_pixel_source_buffer
[19:52:37] [PASSED] single_pixel_clip_rectangle
[19:52:37] [PASSED] well_known_colors
[19:52:37] [PASSED] destination_pitch
[19:52:37] ================ [PASSED] drm_test_fb_swab =================
[19:52:37] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[19:52:37] [PASSED] single_pixel_source_buffer
[19:52:37] [PASSED] single_pixel_clip_rectangle
[19:52:37] [PASSED] well_known_colors
[19:52:37] [PASSED] destination_pitch
[19:52:37] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[19:52:37] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[19:52:37] [PASSED] single_pixel_source_buffer
[19:52:37] [PASSED] single_pixel_clip_rectangle
[19:52:37] [PASSED] well_known_colors
[19:52:37] [PASSED] destination_pitch
[19:52:37] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[19:52:37] ================= drm_test_fb_clip_offset =================
[19:52:37] [PASSED] pass through
[19:52:37] [PASSED] horizontal offset
[19:52:37] [PASSED] vertical offset
[19:52:37] [PASSED] horizontal and vertical offset
[19:52:37] [PASSED] horizontal offset (custom pitch)
[19:52:37] [PASSED] vertical offset (custom pitch)
[19:52:37] [PASSED] horizontal and vertical offset (custom pitch)
[19:52:37] ============= [PASSED] drm_test_fb_clip_offset =============
[19:52:37] =================== drm_test_fb_memcpy ====================
[19:52:37] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[19:52:37] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[19:52:37] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[19:52:37] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[19:52:37] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[19:52:37] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[19:52:37] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[19:52:37] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[19:52:37] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[19:52:37] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[19:52:37] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[19:52:37] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[19:52:37] =============== [PASSED] drm_test_fb_memcpy ================
[19:52:37] ============= [PASSED] drm_format_helper_test ==============
[19:52:37] ================= drm_format (18 subtests) =================
[19:52:37] [PASSED] drm_test_format_block_width_invalid
[19:52:37] [PASSED] drm_test_format_block_width_one_plane
[19:52:37] [PASSED] drm_test_format_block_width_two_plane
[19:52:37] [PASSED] drm_test_format_block_width_three_plane
[19:52:37] [PASSED] drm_test_format_block_width_tiled
[19:52:37] [PASSED] drm_test_format_block_height_invalid
[19:52:37] [PASSED] drm_test_format_block_height_one_plane
[19:52:37] [PASSED] drm_test_format_block_height_two_plane
[19:52:37] [PASSED] drm_test_format_block_height_three_plane
[19:52:37] [PASSED] drm_test_format_block_height_tiled
[19:52:37] [PASSED] drm_test_format_min_pitch_invalid
[19:52:37] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[19:52:37] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[19:52:37] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[19:52:37] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[19:52:37] [PASSED] drm_test_format_min_pitch_two_plane
[19:52:37] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[19:52:37] [PASSED] drm_test_format_min_pitch_tiled
[19:52:37] =================== [PASSED] drm_format ====================
[19:52:37] ============== drm_framebuffer (10 subtests) ===============
[19:52:37] ========== drm_test_framebuffer_check_src_coords ==========
[19:52:37] [PASSED] Success: source fits into fb
[19:52:37] [PASSED] Fail: overflowing fb with x-axis coordinate
[19:52:37] [PASSED] Fail: overflowing fb with y-axis coordinate
[19:52:37] [PASSED] Fail: overflowing fb with source width
[19:52:37] [PASSED] Fail: overflowing fb with source height
[19:52:37] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[19:52:37] [PASSED] drm_test_framebuffer_cleanup
[19:52:37] =============== drm_test_framebuffer_create ===============
[19:52:37] [PASSED] ABGR8888 normal sizes
[19:52:37] [PASSED] ABGR8888 max sizes
[19:52:37] [PASSED] ABGR8888 pitch greater than min required
[19:52:37] [PASSED] ABGR8888 pitch less than min required
[19:52:37] [PASSED] ABGR8888 Invalid width
[19:52:37] [PASSED] ABGR8888 Invalid buffer handle
[19:52:37] [PASSED] No pixel format
[19:52:37] [PASSED] ABGR8888 Width 0
[19:52:37] [PASSED] ABGR8888 Height 0
[19:52:37] [PASSED] ABGR8888 Out of bound height * pitch combination
[19:52:37] [PASSED] ABGR8888 Large buffer offset
[19:52:37] [PASSED] ABGR8888 Buffer offset for inexistent plane
[19:52:37] [PASSED] ABGR8888 Invalid flag
[19:52:37] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[19:52:37] [PASSED] ABGR8888 Valid buffer modifier
[19:52:37] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[19:52:37] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[19:52:37] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[19:52:37] [PASSED] NV12 Normal sizes
[19:52:37] [PASSED] NV12 Max sizes
[19:52:37] [PASSED] NV12 Invalid pitch
[19:52:37] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[19:52:37] [PASSED] NV12 different modifier per-plane
[19:52:37] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[19:52:37] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[19:52:37] [PASSED] NV12 Modifier for inexistent plane
[19:52:37] [PASSED] NV12 Handle for inexistent plane
[19:52:37] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[19:52:37] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[19:52:37] [PASSED] YVU420 Normal sizes
[19:52:37] [PASSED] YVU420 Max sizes
[19:52:37] [PASSED] YVU420 Invalid pitch
[19:52:37] [PASSED] YVU420 Different pitches
[19:52:37] [PASSED] YVU420 Different buffer offsets/pitches
[19:52:37] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[19:52:37] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[19:52:37] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[19:52:37] [PASSED] YVU420 Valid modifier
[19:52:37] [PASSED] YVU420 Different modifiers per plane
[19:52:37] [PASSED] YVU420 Modifier for inexistent plane
[19:52:37] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[19:52:37] [PASSED] X0L2 Normal sizes
[19:52:37] [PASSED] X0L2 Max sizes
[19:52:37] [PASSED] X0L2 Invalid pitch
[19:52:37] [PASSED] X0L2 Pitch greater than minimum required
[19:52:37] [PASSED] X0L2 Handle for inexistent plane
[19:52:37] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[19:52:37] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[19:52:37] [PASSED] X0L2 Valid modifier
[19:52:37] [PASSED] X0L2 Modifier for inexistent plane
[19:52:37] =========== [PASSED] drm_test_framebuffer_create ===========
[19:52:37] [PASSED] drm_test_framebuffer_free
[19:52:37] [PASSED] drm_test_framebuffer_init
[19:52:37] [PASSED] drm_test_framebuffer_init_bad_format
[19:52:37] [PASSED] drm_test_framebuffer_init_dev_mismatch
[19:52:37] [PASSED] drm_test_framebuffer_lookup
[19:52:37] [PASSED] drm_test_framebuffer_lookup_inexistent
[19:52:37] [PASSED] drm_test_framebuffer_modifiers_not_supported
[19:52:37] ================= [PASSED] drm_framebuffer =================
[19:52:37] ================ drm_gem_shmem (8 subtests) ================
[19:52:37] [PASSED] drm_gem_shmem_test_obj_create
[19:52:37] [PASSED] drm_gem_shmem_test_obj_create_private
[19:52:37] [PASSED] drm_gem_shmem_test_pin_pages
[19:52:37] [PASSED] drm_gem_shmem_test_vmap
[19:52:37] [PASSED] drm_gem_shmem_test_get_sg_table
[19:52:37] [PASSED] drm_gem_shmem_test_get_pages_sgt
[19:52:37] [PASSED] drm_gem_shmem_test_madvise
[19:52:37] [PASSED] drm_gem_shmem_test_purge
[19:52:37] ================== [PASSED] drm_gem_shmem ==================
[19:52:37] === drm_atomic_helper_connector_hdmi_check (27 subtests) ===
[19:52:37] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[19:52:37] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[19:52:37] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[19:52:37] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[19:52:37] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[19:52:37] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[19:52:37] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 =======
[19:52:37] [PASSED] Automatic
[19:52:37] [PASSED] Full
[19:52:37] [PASSED] Limited 16:235
[19:52:37] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[19:52:37] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[19:52:37] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[19:52:37] [PASSED] drm_test_check_disable_connector
[19:52:37] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[19:52:37] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[19:52:37] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[19:52:37] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[19:52:37] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[19:52:37] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[19:52:37] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[19:52:37] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[19:52:37] [PASSED] drm_test_check_output_bpc_dvi
[19:52:37] [PASSED] drm_test_check_output_bpc_format_vic_1
[19:52:37] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[19:52:37] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[19:52:37] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[19:52:37] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[19:52:37] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[19:52:37] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[19:52:37] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[19:52:37] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[19:52:37] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[19:52:37] [PASSED] drm_test_check_broadcast_rgb_value
[19:52:37] [PASSED] drm_test_check_bpc_8_value
[19:52:37] [PASSED] drm_test_check_bpc_10_value
[19:52:37] [PASSED] drm_test_check_bpc_12_value
[19:52:37] [PASSED] drm_test_check_format_value
[19:52:37] [PASSED] drm_test_check_tmds_char_value
[19:52:37] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[19:52:37] = drm_atomic_helper_connector_hdmi_mode_valid (4 subtests) =
[19:52:37] [PASSED] drm_test_check_mode_valid
[19:52:37] [PASSED] drm_test_check_mode_valid_reject
[19:52:37] [PASSED] drm_test_check_mode_valid_reject_rate
[19:52:37] [PASSED] drm_test_check_mode_valid_reject_max_clock
[19:52:37] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[19:52:37] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[19:52:37] [PASSED] drm_test_check_infoframes
[19:52:37] [PASSED] drm_test_check_reject_avi_infoframe
[19:52:37] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[19:52:37] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[19:52:37] [PASSED] drm_test_check_reject_audio_infoframe
[19:52:37] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[19:52:37] ================= drm_managed (2 subtests) =================
[19:52:37] [PASSED] drm_test_managed_release_action
[19:52:37] [PASSED] drm_test_managed_run_action
[19:52:37] =================== [PASSED] drm_managed ===================
[19:52:37] =================== drm_mm (6 subtests) ====================
[19:52:37] [PASSED] drm_test_mm_init
[19:52:37] [PASSED] drm_test_mm_debug
[19:52:37] [PASSED] drm_test_mm_align32
[19:52:37] [PASSED] drm_test_mm_align64
[19:52:37] [PASSED] drm_test_mm_lowest
[19:52:37] [PASSED] drm_test_mm_highest
[19:52:37] ===================== [PASSED] drm_mm ======================
[19:52:37] ============= drm_modes_analog_tv (5 subtests) =============
[19:52:37] [PASSED] drm_test_modes_analog_tv_mono_576i
[19:52:37] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[19:52:37] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[19:52:37] [PASSED] drm_test_modes_analog_tv_pal_576i
[19:52:37] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[19:52:37] =============== [PASSED] drm_modes_analog_tv ===============
[19:52:37] ============== drm_plane_helper (2 subtests) ===============
[19:52:37] =============== drm_test_check_plane_state ================
[19:52:37] [PASSED] clipping_simple
[19:52:37] [PASSED] clipping_rotate_reflect
[19:52:37] [PASSED] positioning_simple
[19:52:37] [PASSED] upscaling
[19:52:37] [PASSED] downscaling
[19:52:37] [PASSED] rounding1
[19:52:37] [PASSED] rounding2
[19:52:37] [PASSED] rounding3
[19:52:37] [PASSED] rounding4
[19:52:37] =========== [PASSED] drm_test_check_plane_state ============
[19:52:37] =========== drm_test_check_invalid_plane_state ============
[19:52:37] [PASSED] positioning_invalid
[19:52:37] [PASSED] upscaling_invalid
[19:52:37] [PASSED] downscaling_invalid
[19:52:37] ======= [PASSED] drm_test_check_invalid_plane_state ========
[19:52:37] ================ [PASSED] drm_plane_helper =================
[19:52:37] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[19:52:37] ====== drm_test_connector_helper_tv_get_modes_check =======
[19:52:37] [PASSED] None
[19:52:37] [PASSED] PAL
[19:52:37] [PASSED] NTSC
[19:52:37] [PASSED] Both, NTSC Default
[19:52:37] [PASSED] Both, PAL Default
[19:52:37] [PASSED] Both, NTSC Default, with PAL on command-line
[19:52:37] [PASSED] Both, PAL Default, with NTSC on command-line
[19:52:37] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[19:52:37] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[19:52:37] ================== drm_rect (9 subtests) ===================
[19:52:37] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[19:52:37] [PASSED] drm_test_rect_clip_scaled_not_clipped
[19:52:37] [PASSED] drm_test_rect_clip_scaled_clipped
[19:52:37] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[19:52:37] ================= drm_test_rect_intersect =================
[19:52:37] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[19:52:37] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[19:52:37] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[19:52:37] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[19:52:37] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[19:52:37] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[19:52:37] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[19:52:37] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[19:52:37] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[19:52:37] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[19:52:37] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[19:52:37] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[19:52:37] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[19:52:37] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[19:52:37] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[19:52:37] ============= [PASSED] drm_test_rect_intersect =============
[19:52:37] ================ drm_test_rect_calc_hscale ================
[19:52:37] [PASSED] normal use
[19:52:37] [PASSED] out of max range
[19:52:37] [PASSED] out of min range
[19:52:37] [PASSED] zero dst
[19:52:37] [PASSED] negative src
[19:52:37] [PASSED] negative dst
[19:52:37] ============ [PASSED] drm_test_rect_calc_hscale ============
[19:52:37] ================ drm_test_rect_calc_vscale ================
[19:52:37] [PASSED] normal use
[19:52:37] [PASSED] out of max range
[19:52:37] [PASSED] out of min range
[19:52:37] [PASSED] zero dst
[19:52:37] [PASSED] negative src
[19:52:37] [PASSED] negative dst
stty: 'standard input': Inappropriate ioctl for device
[19:52:37] ============ [PASSED] drm_test_rect_calc_vscale ============
[19:52:37] ================== drm_test_rect_rotate ===================
[19:52:37] [PASSED] reflect-x
[19:52:37] [PASSED] reflect-y
[19:52:37] [PASSED] rotate-0
[19:52:37] [PASSED] rotate-90
[19:52:37] [PASSED] rotate-180
[19:52:37] [PASSED] rotate-270
[19:52:37] ============== [PASSED] drm_test_rect_rotate ===============
[19:52:37] ================ drm_test_rect_rotate_inv =================
[19:52:37] [PASSED] reflect-x
[19:52:37] [PASSED] reflect-y
[19:52:37] [PASSED] rotate-0
[19:52:37] [PASSED] rotate-90
[19:52:37] [PASSED] rotate-180
[19:52:37] [PASSED] rotate-270
[19:52:37] ============ [PASSED] drm_test_rect_rotate_inv =============
[19:52:37] ==================== [PASSED] drm_rect =====================
[19:52:37] ============ drm_sysfb_modeset_test (1 subtest) ============
[19:52:37] ============ drm_test_sysfb_build_fourcc_list =============
[19:52:37] [PASSED] no native formats
[19:52:37] [PASSED] XRGB8888 as native format
[19:52:37] [PASSED] remove duplicates
[19:52:37] [PASSED] convert alpha formats
[19:52:37] [PASSED] random formats
[19:52:37] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[19:52:37] ============= [PASSED] drm_sysfb_modeset_test ==============
[19:52:37] ================== drm_fixp (2 subtests) ===================
[19:52:37] [PASSED] drm_test_int2fixp
[19:52:37] [PASSED] drm_test_sm2fixp
[19:52:37] ==================== [PASSED] drm_fixp =====================
[19:52:37] ============================================================
[19:52:37] Testing complete. Ran 621 tests: passed: 621
[19:52:37] Elapsed time: 25.961s total, 1.755s configuring, 24.034s building, 0.141s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[19:52:37] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[19:52:38] 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
[19:52:48] Starting KUnit Kernel (1/1)...
[19:52:48] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[19:52:48] ================= ttm_device (5 subtests) ==================
[19:52:48] [PASSED] ttm_device_init_basic
[19:52:48] [PASSED] ttm_device_init_multiple
[19:52:48] [PASSED] ttm_device_fini_basic
[19:52:48] [PASSED] ttm_device_init_no_vma_man
[19:52:48] ================== ttm_device_init_pools ==================
[19:52:48] [PASSED] No DMA allocations, no DMA32 required
[19:52:48] [PASSED] DMA allocations, DMA32 required
[19:52:48] [PASSED] No DMA allocations, DMA32 required
[19:52:48] [PASSED] DMA allocations, no DMA32 required
[19:52:48] ============== [PASSED] ttm_device_init_pools ==============
[19:52:48] =================== [PASSED] ttm_device ====================
[19:52:48] ================== ttm_pool (8 subtests) ===================
[19:52:48] ================== ttm_pool_alloc_basic ===================
[19:52:48] [PASSED] One page
[19:52:48] [PASSED] More than one page
[19:52:48] [PASSED] Above the allocation limit
[19:52:48] [PASSED] One page, with coherent DMA mappings enabled
[19:52:48] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[19:52:48] ============== [PASSED] ttm_pool_alloc_basic ===============
[19:52:48] ============== ttm_pool_alloc_basic_dma_addr ==============
[19:52:48] [PASSED] One page
[19:52:48] [PASSED] More than one page
[19:52:48] [PASSED] Above the allocation limit
[19:52:48] [PASSED] One page, with coherent DMA mappings enabled
[19:52:48] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[19:52:48] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[19:52:48] [PASSED] ttm_pool_alloc_order_caching_match
[19:52:48] [PASSED] ttm_pool_alloc_caching_mismatch
[19:52:48] [PASSED] ttm_pool_alloc_order_mismatch
[19:52:48] [PASSED] ttm_pool_free_dma_alloc
[19:52:48] [PASSED] ttm_pool_free_no_dma_alloc
[19:52:48] [PASSED] ttm_pool_fini_basic
[19:52:48] ==================== [PASSED] ttm_pool =====================
[19:52:48] ================ ttm_resource (8 subtests) =================
[19:52:48] ================= ttm_resource_init_basic =================
[19:52:48] [PASSED] Init resource in TTM_PL_SYSTEM
[19:52:48] [PASSED] Init resource in TTM_PL_VRAM
[19:52:48] [PASSED] Init resource in a private placement
[19:52:48] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[19:52:48] ============= [PASSED] ttm_resource_init_basic =============
[19:52:48] [PASSED] ttm_resource_init_pinned
[19:52:48] [PASSED] ttm_resource_fini_basic
[19:52:48] [PASSED] ttm_resource_manager_init_basic
[19:52:48] [PASSED] ttm_resource_manager_usage_basic
[19:52:48] [PASSED] ttm_resource_manager_set_used_basic
[19:52:48] [PASSED] ttm_sys_man_alloc_basic
[19:52:48] [PASSED] ttm_sys_man_free_basic
[19:52:48] ================== [PASSED] ttm_resource ===================
[19:52:48] =================== ttm_tt (15 subtests) ===================
[19:52:48] ==================== ttm_tt_init_basic ====================
[19:52:48] [PASSED] Page-aligned size
[19:52:48] [PASSED] Extra pages requested
[19:52:48] ================ [PASSED] ttm_tt_init_basic ================
[19:52:48] [PASSED] ttm_tt_init_misaligned
[19:52:48] [PASSED] ttm_tt_fini_basic
[19:52:48] [PASSED] ttm_tt_fini_sg
[19:52:48] [PASSED] ttm_tt_fini_shmem
[19:52:48] [PASSED] ttm_tt_create_basic
[19:52:48] [PASSED] ttm_tt_create_invalid_bo_type
[19:52:48] [PASSED] ttm_tt_create_ttm_exists
[19:52:48] [PASSED] ttm_tt_create_failed
[19:52:48] [PASSED] ttm_tt_destroy_basic
[19:52:48] [PASSED] ttm_tt_populate_null_ttm
[19:52:48] [PASSED] ttm_tt_populate_populated_ttm
[19:52:48] [PASSED] ttm_tt_unpopulate_basic
[19:52:48] [PASSED] ttm_tt_unpopulate_empty_ttm
[19:52:48] [PASSED] ttm_tt_swapin_basic
[19:52:48] ===================== [PASSED] ttm_tt ======================
[19:52:48] =================== ttm_bo (14 subtests) ===================
[19:52:48] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[19:52:48] [PASSED] Cannot be interrupted and sleeps
[19:52:48] [PASSED] Cannot be interrupted, locks straight away
[19:52:48] [PASSED] Can be interrupted, sleeps
[19:52:48] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[19:52:48] [PASSED] ttm_bo_reserve_locked_no_sleep
[19:52:48] [PASSED] ttm_bo_reserve_no_wait_ticket
[19:52:48] [PASSED] ttm_bo_reserve_double_resv
[19:52:48] [PASSED] ttm_bo_reserve_interrupted
[19:52:48] [PASSED] ttm_bo_reserve_deadlock
[19:52:48] [PASSED] ttm_bo_unreserve_basic
[19:52:48] [PASSED] ttm_bo_unreserve_pinned
[19:52:48] [PASSED] ttm_bo_unreserve_bulk
[19:52:48] [PASSED] ttm_bo_fini_basic
[19:52:48] [PASSED] ttm_bo_fini_shared_resv
[19:52:48] [PASSED] ttm_bo_pin_basic
[19:52:48] [PASSED] ttm_bo_pin_unpin_resource
[19:52:48] [PASSED] ttm_bo_multiple_pin_one_unpin
[19:52:48] ===================== [PASSED] ttm_bo ======================
[19:52:48] ============== ttm_bo_validate (22 subtests) ===============
[19:52:48] ============== ttm_bo_init_reserved_sys_man ===============
[19:52:48] [PASSED] Buffer object for userspace
[19:52:48] [PASSED] Kernel buffer object
[19:52:48] [PASSED] Shared buffer object
[19:52:48] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[19:52:48] ============== ttm_bo_init_reserved_mock_man ==============
[19:52:48] [PASSED] Buffer object for userspace
[19:52:48] [PASSED] Kernel buffer object
[19:52:48] [PASSED] Shared buffer object
[19:52:48] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[19:52:48] [PASSED] ttm_bo_init_reserved_resv
[19:52:48] ================== ttm_bo_validate_basic ==================
[19:52:48] [PASSED] Buffer object for userspace
[19:52:48] [PASSED] Kernel buffer object
[19:52:48] [PASSED] Shared buffer object
[19:52:48] ============== [PASSED] ttm_bo_validate_basic ==============
[19:52:48] [PASSED] ttm_bo_validate_invalid_placement
[19:52:48] ============= ttm_bo_validate_same_placement ==============
[19:52:48] [PASSED] System manager
[19:52:48] [PASSED] VRAM manager
[19:52:48] ========= [PASSED] ttm_bo_validate_same_placement ==========
[19:52:48] [PASSED] ttm_bo_validate_failed_alloc
[19:52:48] [PASSED] ttm_bo_validate_pinned
[19:52:48] [PASSED] ttm_bo_validate_busy_placement
[19:52:48] ================ ttm_bo_validate_multihop =================
[19:52:48] [PASSED] Buffer object for userspace
[19:52:48] [PASSED] Kernel buffer object
[19:52:48] [PASSED] Shared buffer object
[19:52:48] ============ [PASSED] ttm_bo_validate_multihop =============
[19:52:48] ========== ttm_bo_validate_no_placement_signaled ==========
[19:52:48] [PASSED] Buffer object in system domain, no page vector
[19:52:48] [PASSED] Buffer object in system domain with an existing page vector
[19:52:48] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[19:52:48] ======== ttm_bo_validate_no_placement_not_signaled ========
[19:52:48] [PASSED] Buffer object for userspace
[19:52:48] [PASSED] Kernel buffer object
[19:52:48] [PASSED] Shared buffer object
[19:52:48] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[19:52:48] [PASSED] ttm_bo_validate_move_fence_signaled
[19:52:48] ========= ttm_bo_validate_move_fence_not_signaled =========
[19:52:48] [PASSED] Waits for GPU
[19:52:48] [PASSED] Tries to lock straight away
[19:52:48] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[19:52:48] [PASSED] ttm_bo_validate_swapout
[19:52:48] [PASSED] ttm_bo_validate_happy_evict
[19:52:48] [PASSED] ttm_bo_validate_all_pinned_evict
[19:52:48] [PASSED] ttm_bo_validate_allowed_only_evict
[19:52:48] [PASSED] ttm_bo_validate_deleted_evict
[19:52:48] [PASSED] ttm_bo_validate_busy_domain_evict
[19:52:48] [PASSED] ttm_bo_validate_evict_gutting
[19:52:48] [PASSED] ttm_bo_validate_recrusive_evict
stty: 'standard input': Inappropriate ioctl for device
[19:52:48] ================= [PASSED] ttm_bo_validate =================
[19:52:48] ============================================================
[19:52:48] Testing complete. Ran 102 tests: passed: 102
[19:52:48] Elapsed time: 11.514s total, 1.727s configuring, 9.571s building, 0.184s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 21+ messages in thread* ✓ Xe.CI.BAT: success for Introduce error threshold to drm_ras
2026-04-17 21:16 [PATCH v1 00/11] Introduce error threshold to drm_ras Raag Jadav
` (12 preceding siblings ...)
2026-04-20 19:52 ` ✓ CI.KUnit: success " Patchwork
@ 2026-04-20 21:04 ` Patchwork
2026-04-21 0:01 ` ✗ Xe.CI.FULL: failure " Patchwork
14 siblings, 0 replies; 21+ messages in thread
From: Patchwork @ 2026-04-20 21:04 UTC (permalink / raw)
To: Raag Jadav; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 1604 bytes --]
== Series Details ==
Series: Introduce error threshold to drm_ras
URL : https://patchwork.freedesktop.org/series/165091/
State : success
== Summary ==
CI Bug Log - changes from xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201_BAT -> xe-pw-165091v1_BAT
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (12 -> 12)
------------------------------
No changes in participating hosts
Known issues
------------
Here are the changes found in xe-pw-165091v1_BAT that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@core_hotunplug@unbind-rebind:
- bat-bmg-2: [PASS][1] -> [ABORT][2] ([Intel XE#7249] / [Intel XE#7578])
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/bat-bmg-2/igt@core_hotunplug@unbind-rebind.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/bat-bmg-2/igt@core_hotunplug@unbind-rebind.html
[Intel XE#7249]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7249
[Intel XE#7578]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7578
Build changes
-------------
* Linux: xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201 -> xe-pw-165091v1
IGT_8863: 5b279a8b71dc1672099205a1a9e8135c7c7fadb5 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201: da91cb4e6137507f74e4da41c39d0260b4cd1201
xe-pw-165091v1: 165091v1
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/index.html
[-- Attachment #2: Type: text/html, Size: 2162 bytes --]
^ permalink raw reply [flat|nested] 21+ messages in thread* ✗ Xe.CI.FULL: failure for Introduce error threshold to drm_ras
2026-04-17 21:16 [PATCH v1 00/11] Introduce error threshold to drm_ras Raag Jadav
` (13 preceding siblings ...)
2026-04-20 21:04 ` ✓ Xe.CI.BAT: " Patchwork
@ 2026-04-21 0:01 ` Patchwork
14 siblings, 0 replies; 21+ messages in thread
From: Patchwork @ 2026-04-21 0:01 UTC (permalink / raw)
To: Raag Jadav; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 19380 bytes --]
== Series Details ==
Series: Introduce error threshold to drm_ras
URL : https://patchwork.freedesktop.org/series/165091/
State : failure
== Summary ==
CI Bug Log - changes from xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201_FULL -> xe-pw-165091v1_FULL
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with xe-pw-165091v1_FULL absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in xe-pw-165091v1_FULL, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
Participating hosts (2 -> 2)
------------------------------
No changes in participating hosts
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in xe-pw-165091v1_FULL:
### IGT changes ###
#### Possible regressions ####
* igt@kms_vblank@query-forked-hang@pipe-d-dp-2:
- shard-bmg: [PASS][1] -> [FAIL][2] +3 other tests fail
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-bmg-4/igt@kms_vblank@query-forked-hang@pipe-d-dp-2.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-6/igt@kms_vblank@query-forked-hang@pipe-d-dp-2.html
Known issues
------------
Here are the changes found in xe-pw-165091v1_FULL that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@kms_ccs@bad-rotation-90-4-tiled-lnl-ccs@pipe-c-dp-2:
- shard-bmg: NOTRUN -> [SKIP][3] ([Intel XE#2652]) +7 other tests skip
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-10/igt@kms_ccs@bad-rotation-90-4-tiled-lnl-ccs@pipe-c-dp-2.html
* igt@kms_cursor_legacy@cursorb-vs-flipa-varying-size:
- shard-bmg: [PASS][4] -> [DMESG-WARN][5] ([Intel XE#5354])
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-bmg-5/igt@kms_cursor_legacy@cursorb-vs-flipa-varying-size.html
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-9/igt@kms_cursor_legacy@cursorb-vs-flipa-varying-size.html
* igt@kms_flip@2x-blocking-absolute-wf_vblank:
- shard-bmg: [PASS][6] -> [FAIL][7] ([Intel XE#3149] / [Intel XE#7705]) +1 other test fail
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-bmg-4/igt@kms_flip@2x-blocking-absolute-wf_vblank.html
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-6/igt@kms_flip@2x-blocking-absolute-wf_vblank.html
* igt@xe_module_load@force-load:
- shard-bmg: [PASS][8] -> [DMESG-WARN][9] ([Intel XE#7725]) +1 other test dmesg-warn
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-bmg-4/igt@xe_module_load@force-load.html
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-6/igt@xe_module_load@force-load.html
#### Possible fixes ####
* igt@kms_atomic_transition@plane-all-modeset-transition-fencing:
- shard-bmg: [DMESG-FAIL][10] ([Intel XE#5545]) -> [PASS][11] +1 other test pass
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-bmg-2/igt@kms_atomic_transition@plane-all-modeset-transition-fencing.html
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-10/igt@kms_atomic_transition@plane-all-modeset-transition-fencing.html
* igt@xe_evict@evict-beng-mixed-many-threads-small:
- shard-bmg: [INCOMPLETE][12] ([Intel XE#6321]) -> [PASS][13]
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-bmg-4/igt@xe_evict@evict-beng-mixed-many-threads-small.html
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-6/igt@xe_evict@evict-beng-mixed-many-threads-small.html
* igt@xe_exec_system_allocator@pat-index-madvise-pat-idx-uc-multi-vma:
- shard-lnl: [FAIL][14] ([Intel XE#5625]) -> [PASS][15]
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-lnl-3/igt@xe_exec_system_allocator@pat-index-madvise-pat-idx-uc-multi-vma.html
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-lnl-1/igt@xe_exec_system_allocator@pat-index-madvise-pat-idx-uc-multi-vma.html
* igt@xe_exec_system_allocator@threads-many-stride-malloc-nomemset:
- shard-bmg: [SKIP][16] ([Intel XE#6703]) -> [PASS][17] +89 other tests pass
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-bmg-2/igt@xe_exec_system_allocator@threads-many-stride-malloc-nomemset.html
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-10/igt@xe_exec_system_allocator@threads-many-stride-malloc-nomemset.html
#### Warnings ####
* igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0-hflip:
- shard-bmg: [SKIP][18] ([Intel XE#6703]) -> [SKIP][19] ([Intel XE#1124])
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-bmg-2/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0-hflip.html
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-10/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0-hflip.html
* igt@kms_bw@linear-tiling-2-displays-3840x2160p:
- shard-bmg: [SKIP][20] ([Intel XE#6703]) -> [SKIP][21] ([Intel XE#367] / [Intel XE#7354])
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-bmg-2/igt@kms_bw@linear-tiling-2-displays-3840x2160p.html
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-10/igt@kms_bw@linear-tiling-2-displays-3840x2160p.html
* igt@kms_ccs@bad-rotation-90-4-tiled-lnl-ccs:
- shard-bmg: [SKIP][22] ([Intel XE#6703]) -> [SKIP][23] ([Intel XE#2652])
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-bmg-2/igt@kms_ccs@bad-rotation-90-4-tiled-lnl-ccs.html
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-10/igt@kms_ccs@bad-rotation-90-4-tiled-lnl-ccs.html
* igt@kms_ccs@crc-sprite-planes-basic-y-tiled-ccs:
- shard-bmg: [SKIP][24] ([Intel XE#6703]) -> [SKIP][25] ([Intel XE#2887]) +1 other test skip
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-bmg-2/igt@kms_ccs@crc-sprite-planes-basic-y-tiled-ccs.html
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-10/igt@kms_ccs@crc-sprite-planes-basic-y-tiled-ccs.html
* igt@kms_chamelium_hpd@dp-hpd-with-enabled-mode:
- shard-bmg: [SKIP][26] ([Intel XE#6703]) -> [SKIP][27] ([Intel XE#2252])
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-bmg-2/igt@kms_chamelium_hpd@dp-hpd-with-enabled-mode.html
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-10/igt@kms_chamelium_hpd@dp-hpd-with-enabled-mode.html
* igt@kms_cursor_crc@cursor-random-max-size:
- shard-bmg: [SKIP][28] ([Intel XE#6703]) -> [SKIP][29] ([Intel XE#2320])
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-bmg-2/igt@kms_cursor_crc@cursor-random-max-size.html
[29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-10/igt@kms_cursor_crc@cursor-random-max-size.html
* igt@kms_fbcon_fbt@psr:
- shard-bmg: [SKIP][30] ([Intel XE#6703]) -> [SKIP][31] ([Intel XE#6126] / [Intel XE#776])
[30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-bmg-2/igt@kms_fbcon_fbt@psr.html
[31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-10/igt@kms_fbcon_fbt@psr.html
* igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-render:
- shard-bmg: [SKIP][32] ([Intel XE#6703]) -> [SKIP][33] ([Intel XE#4141]) +3 other tests skip
[32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-bmg-2/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-render.html
[33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-10/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-render.html
* igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-wc:
- shard-bmg: [SKIP][34] ([Intel XE#6703]) -> [SKIP][35] ([Intel XE#2311]) +1 other test skip
[34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-bmg-2/igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-wc.html
[35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-10/igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-move:
- shard-bmg: [SKIP][36] ([Intel XE#6703]) -> [SKIP][37] ([Intel XE#2313]) +2 other tests skip
[36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-bmg-2/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-move.html
[37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-10/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-move.html
* igt@kms_frontbuffer_tracking@psr-2p-pri-indfb-multidraw:
- shard-bmg: [SKIP][38] ([Intel XE#2312]) -> [SKIP][39] ([Intel XE#2313])
[38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-bmg-3/igt@kms_frontbuffer_tracking@psr-2p-pri-indfb-multidraw.html
[39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-3/igt@kms_frontbuffer_tracking@psr-2p-pri-indfb-multidraw.html
* igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner:
- shard-bmg: [SKIP][40] ([Intel XE#6703]) -> [SKIP][41] ([Intel XE#4090] / [Intel XE#7443])
[40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-bmg-2/igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner.html
[41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-10/igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner.html
* igt@kms_plane@pixel-format-y-tiled-ccs-modifier:
- shard-bmg: [SKIP][42] ([Intel XE#6703]) -> [SKIP][43] ([Intel XE#7283])
[42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-bmg-2/igt@kms_plane@pixel-format-y-tiled-ccs-modifier.html
[43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-10/igt@kms_plane@pixel-format-y-tiled-ccs-modifier.html
* igt@kms_pm_lpsp@kms-lpsp:
- shard-bmg: [SKIP][44] ([Intel XE#6703]) -> [SKIP][45] ([Intel XE#2499])
[44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-bmg-2/igt@kms_pm_lpsp@kms-lpsp.html
[45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-10/igt@kms_pm_lpsp@kms-lpsp.html
* igt@kms_psr@psr-basic:
- shard-bmg: [SKIP][46] ([Intel XE#6703]) -> [SKIP][47] ([Intel XE#2234] / [Intel XE#2850]) +1 other test skip
[46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-bmg-2/igt@kms_psr@psr-basic.html
[47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-10/igt@kms_psr@psr-basic.html
* igt@kms_setmode@basic-clone-single-crtc:
- shard-bmg: [SKIP][48] ([Intel XE#6703]) -> [SKIP][49] ([Intel XE#1435])
[48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-bmg-2/igt@kms_setmode@basic-clone-single-crtc.html
[49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-10/igt@kms_setmode@basic-clone-single-crtc.html
* igt@kms_sharpness_filter@invalid-filter-with-scaling-mode:
- shard-bmg: [SKIP][50] ([Intel XE#6703]) -> [SKIP][51] ([Intel XE#6503])
[50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-bmg-2/igt@kms_sharpness_filter@invalid-filter-with-scaling-mode.html
[51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-10/igt@kms_sharpness_filter@invalid-filter-with-scaling-mode.html
* igt@kms_tiled_display@basic-test-pattern:
- shard-bmg: [FAIL][52] ([Intel XE#1729] / [Intel XE#7424]) -> [SKIP][53] ([Intel XE#2426] / [Intel XE#5848])
[52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-bmg-10/igt@kms_tiled_display@basic-test-pattern.html
[53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-7/igt@kms_tiled_display@basic-test-pattern.html
* igt@xe_eudebug@basic-exec-queues-enable:
- shard-bmg: [SKIP][54] ([Intel XE#6703]) -> [SKIP][55] ([Intel XE#7636]) +1 other test skip
[54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-bmg-2/igt@xe_eudebug@basic-exec-queues-enable.html
[55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-10/igt@xe_eudebug@basic-exec-queues-enable.html
* igt@xe_evict@evict-small-multi-queue:
- shard-bmg: [SKIP][56] ([Intel XE#6703]) -> [SKIP][57] ([Intel XE#7140])
[56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-bmg-2/igt@xe_evict@evict-small-multi-queue.html
[57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-10/igt@xe_evict@evict-small-multi-queue.html
* igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue:
- shard-bmg: [SKIP][58] ([Intel XE#6703]) -> [SKIP][59] ([Intel XE#2322] / [Intel XE#7372]) +1 other test skip
[58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-bmg-2/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue.html
[59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-10/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue.html
* igt@xe_exec_fault_mode@many-multi-queue-userptr-imm:
- shard-bmg: [SKIP][60] ([Intel XE#6703]) -> [SKIP][61] ([Intel XE#7136])
[60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-bmg-2/igt@xe_exec_fault_mode@many-multi-queue-userptr-imm.html
[61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-10/igt@xe_exec_fault_mode@many-multi-queue-userptr-imm.html
* igt@xe_exec_multi_queue@many-queues-preempt-mode-basic:
- shard-bmg: [SKIP][62] ([Intel XE#6703]) -> [SKIP][63] ([Intel XE#6874]) +2 other tests skip
[62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-bmg-2/igt@xe_exec_multi_queue@many-queues-preempt-mode-basic.html
[63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-10/igt@xe_exec_multi_queue@many-queues-preempt-mode-basic.html
* igt@xe_exec_threads@threads-multi-queue-cm-shared-vm-userptr-rebind:
- shard-bmg: [SKIP][64] ([Intel XE#6703]) -> [SKIP][65] ([Intel XE#7138])
[64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201/shard-bmg-2/igt@xe_exec_threads@threads-multi-queue-cm-shared-vm-userptr-rebind.html
[65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/shard-bmg-10/igt@xe_exec_threads@threads-multi-queue-cm-shared-vm-userptr-rebind.html
[Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
[Intel XE#1435]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1435
[Intel XE#1729]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1729
[Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
[Intel XE#2252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2252
[Intel XE#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311
[Intel XE#2312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2312
[Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313
[Intel XE#2320]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2320
[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#2499]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2499
[Intel XE#2652]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2652
[Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
[Intel XE#2887]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2887
[Intel XE#3149]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3149
[Intel XE#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
[Intel XE#4090]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4090
[Intel XE#4141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4141
[Intel XE#5354]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5354
[Intel XE#5545]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5545
[Intel XE#5625]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5625
[Intel XE#5848]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5848
[Intel XE#6126]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6126
[Intel XE#6321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6321
[Intel XE#6503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6503
[Intel XE#6703]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6703
[Intel XE#6874]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6874
[Intel XE#7136]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7136
[Intel XE#7138]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7138
[Intel XE#7140]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7140
[Intel XE#7283]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7283
[Intel XE#7354]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7354
[Intel XE#7372]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7372
[Intel XE#7424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7424
[Intel XE#7443]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7443
[Intel XE#7636]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7636
[Intel XE#7705]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7705
[Intel XE#7725]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7725
[Intel XE#776]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/776
Build changes
-------------
* Linux: xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201 -> xe-pw-165091v1
IGT_8863: 5b279a8b71dc1672099205a1a9e8135c7c7fadb5 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-4920-da91cb4e6137507f74e4da41c39d0260b4cd1201: da91cb4e6137507f74e4da41c39d0260b4cd1201
xe-pw-165091v1: 165091v1
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165091v1/index.html
[-- Attachment #2: Type: text/html, Size: 22271 bytes --]
^ permalink raw reply [flat|nested] 21+ messages in thread