* [PATCH v2 0/8] [ANDROID]: Add GPU work period support for Xe driver
@ 2025-08-22 8:59 Aakash Deep Sarkar
2025-08-22 8:59 ` [PATCH v2 1/8] [ANDROID]: Add a new xe_user structure Aakash Deep Sarkar
` (11 more replies)
0 siblings, 12 replies; 20+ messages in thread
From: Aakash Deep Sarkar @ 2025-08-22 8:59 UTC (permalink / raw)
To: intel-xe
Cc: jeevaka.badrappan, carlos.santa, rodrigo.vivi, matthew.brost,
Aakash Deep Sarkar
This patch series implements the Android VSR requirement GPU work
period event for the Intel Xe driver.
|GpuWorkPeriodEvent| defines a non-overlapping, non-zero period
of time from |start_time_ns| (inclusive) until |end_time_ns|
(exclusive) for a given |uid|, and includes details of how much
work the GPU was performing for |uid| during the period. When
GPU work for a given |uid| runs on the GPU, the driver must track
one or more periods that cover the time where the work was running,
and emit events soon after.
Full requirement is defined in the following file:
https://cs.android.com/android/platform/superproject/main/+\
main:frameworks/native/services/gpuservice/gpuwork/bpfprogs/gpuWork.c;l=35
The requirement is implemented using a delayed worker thread per
user id instance to accumulate its runtime on the gpu and emit
the event. Each user id instance is tracked using an xe_user
structure and the runtime is updated every time the kworker is
executed for this uid. The delay period is hardcoded to 500 msecs.
The runtime on the gpu is collected for each xe file individually
inside the function xe_exec_queue_update_run_ticks and accumulated
into the corresponding xe_user active_duration_ns field. The HW
Context timestamp field in the GTT is used to derive the runtime
in clock ticks and then converted into nanosecs before updating the
active duration.
Signed-off-by: Aakash Deep Sarkar <aakash.deep.sarkar@intel.com>
Aakash Deep Sarkar (8):
[ANDROID]: Add a new xe_user structure
[ANDROID]: Add xe_gt_clock_interval_to_ns function
[ANDROID]: Add a trace point for GPU work period
[ANDROID]: Modify xe_exec_queue_update_run_ticks
[ANDROID]: Handle xe_user creation and removal
[ANDROID]: Implement xe_work_period_worker
[ANDROID]: Add a Kconfig option for GPU work period
[ANDROID]: Handle xe_work_period destruction
drivers/gpu/drm/xe/Makefile | 2 +
drivers/gpu/drm/xe/xe_device.c | 90 ++++++++++
drivers/gpu/drm/xe/xe_device_types.h | 19 ++
drivers/gpu/drm/xe/xe_exec_queue.c | 10 ++
drivers/gpu/drm/xe/xe_gt_clock.c | 14 ++
drivers/gpu/drm/xe/xe_gt_clock.h | 1 +
.../drm/xe/xe_power_gpu_work_period_trace.h | 61 +++++++
drivers/gpu/drm/xe/xe_user.c | 162 ++++++++++++++++++
drivers/gpu/drm/xe/xe_user.h | 114 ++++++++++++
drivers/gpu/trace/Kconfig | 12 ++
10 files changed, 485 insertions(+)
create mode 100644 drivers/gpu/drm/xe/xe_power_gpu_work_period_trace.h
create mode 100644 drivers/gpu/drm/xe/xe_user.c
create mode 100644 drivers/gpu/drm/xe/xe_user.h
--
2.49.0
^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH v2 1/8] [ANDROID]: Add a new xe_user structure
2025-08-22 8:59 [PATCH v2 0/8] [ANDROID]: Add GPU work period support for Xe driver Aakash Deep Sarkar
@ 2025-08-22 8:59 ` Aakash Deep Sarkar
2025-08-22 15:48 ` Rodrigo Vivi
2025-08-22 8:59 ` [PATCH v2 2/8] [ANDROID]: Add xe_gt_clock_interval_to_ns function Aakash Deep Sarkar
` (10 subsequent siblings)
11 siblings, 1 reply; 20+ messages in thread
From: Aakash Deep Sarkar @ 2025-08-22 8:59 UTC (permalink / raw)
To: intel-xe
Cc: jeevaka.badrappan, carlos.santa, rodrigo.vivi, matthew.brost,
Aakash Deep Sarkar
For Android GPU work period event we need to track the runtime
on the GPU for each user id. This means we can have multiple
xe files opened by different processes/threads belonging to
the same user id. All these xe files need to be grouped together
so that one can easily identify these while calculating the
run time for the given user id.
Currently, the xe driver doesn't record the user id of the
calling process. Also, all the xe files created using open
call are clubbed together inside the xe device structure
with no way to distinguish between them based on the user id
of the calling process.
To remedy these limitations we are adding another layer of
indirection between xe device and xe file. xe device will
now have a list of xe users each with a given user id; and each
xe user will have a list of xe files each of which is created
by a process that is associated with this user id.
The lifetime of the xe user structure should be between when
a process with a new user id has opened the xe device; and when
the last xe file belonging to this user id is closed.
Signed-off-by: Aakash Deep Sarkar <aakash.deep.sarkar@intel.com>
---
drivers/gpu/drm/xe/Makefile | 2 +
drivers/gpu/drm/xe/xe_user.c | 59 ++++++++++++++++++++++++++
drivers/gpu/drm/xe/xe_user.h | 81 ++++++++++++++++++++++++++++++++++++
3 files changed, 142 insertions(+)
create mode 100644 drivers/gpu/drm/xe/xe_user.c
create mode 100644 drivers/gpu/drm/xe/xe_user.h
diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
index 8e0c3412a757..89212fc7ef44 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -325,6 +325,8 @@ ifeq ($(CONFIG_DEBUG_FS),y)
xe-$(CONFIG_PCI_IOV) += xe_gt_sriov_pf_debugfs.o
+ xe-y += xe_user.o
+
xe-$(CONFIG_DRM_XE_DISPLAY) += \
i915-display/intel_display_debugfs.o \
i915-display/intel_display_debugfs_params.o \
diff --git a/drivers/gpu/drm/xe/xe_user.c b/drivers/gpu/drm/xe/xe_user.c
new file mode 100644
index 000000000000..8c285a68115a
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_user.c
@@ -0,0 +1,59 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2023 Intel Corporation
+ */
+
+#include <linux/slab.h>
+
+#include "xe_user.h"
+
+/**
+ * worker thread to emit gpu work period event for this xe user
+ * @work: work instance for this xe user
+ *
+ * Return: void
+ */
+static inline void work_period_worker(struct work_struct *work)
+{
+ //TODO: Implement this worker
+}
+
+/**
+ * xe_user_alloc() - Allocate xe user
+ * @void: No arg
+ *
+ * Allocate xe user struct to track activity on the gpu
+ * by the application. Call this API whenever a new app
+ * has opened xe device.
+ *
+ * Return: pointer to user struct or NULL if can't allocate
+ */
+struct xe_user *xe_user_alloc(void)
+{
+ struct xe_user *user;
+
+ user = kzalloc(sizeof(*user), GFP_KERNEL);
+ if (!user)
+ return NULL;
+
+ kref_init(&user->refcount);
+ mutex_init(&user->filelist_lock);
+ INIT_LIST_HEAD(&user->filelist);
+ //TODO: Add a hook into xe device
+ INIT_WORK(&user->work, work_period_worker);
+ return user;
+}
+
+/**
+ * __xe_user_free() - Free user struct
+ * @kref: The reference
+ *
+ * Return: void
+ */
+void __xe_user_free(struct kref *kref)
+{
+ struct xe_user *user =
+ container_of(kref, struct xe_user, refcount);
+
+ kfree(user);
+}
diff --git a/drivers/gpu/drm/xe/xe_user.h b/drivers/gpu/drm/xe/xe_user.h
new file mode 100644
index 000000000000..e52f66d3f3b0
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_user.h
@@ -0,0 +1,81 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2023 Intel Corporation
+ */
+
+#ifndef _XE_USER_H_
+#define _XE_USER_H_
+
+#include <linux/kref.h>
+#include <linux/list.h>
+#include <linux/workqueue.h>
+
+/**
+ * This is a per process/user id structure for a xe device
+ * client. It is allocated when a new process/app opens the
+ * xe device and destroyed when the last xe file belonging
+ * to this user id is destroyed.
+ */
+struct xe_user {
+ /**
+ * @refcount: reference count
+ */
+ struct kref refcount;
+
+ /**
+ * @xe: pointer to the xe_device
+ */
+ struct xe_device *xe;
+
+ /**
+ * @filelist_lock: lock protecting the filelist
+ */
+ struct mutex filelist_lock;
+
+ /**
+ * @filelist: list of xe files belonging to this xe user
+ */
+ struct list_head filelist;
+
+ /**
+ * @work: work to emit the gpu work period event for this
+ * xe user
+ */
+ struct work_struct work;
+
+ /**
+ * @uid: user id for this xe_user
+ */
+ u32 uid;
+
+ /**
+ * @active_duration_ns: sum total of xe_file.active_duration_ns
+ * for all xe files belonging to this xe user
+ */
+ u64 active_duration_ns;
+
+ /**
+ * @last_timestamp_ns: timestamp in ns when we last emitted event
+ * for this xe user
+ */
+ u64 last_timestamp_ns;
+};
+
+struct xe_user *xe_user_alloc(void);
+
+static inline struct xe_user *
+xe_user_get(struct xe_user *user)
+{
+ kref_get(&user->refcount);
+ return user;
+}
+
+void __xe_user_free(struct kref *kref);
+
+static inline void xe_user_put(struct xe_user *user)
+{
+ kref_put(&user->refcount, __xe_user_free);
+}
+
+#endif // _XE_USER_H_
+
--
2.49.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH v2 2/8] [ANDROID]: Add xe_gt_clock_interval_to_ns function
2025-08-22 8:59 [PATCH v2 0/8] [ANDROID]: Add GPU work period support for Xe driver Aakash Deep Sarkar
2025-08-22 8:59 ` [PATCH v2 1/8] [ANDROID]: Add a new xe_user structure Aakash Deep Sarkar
@ 2025-08-22 8:59 ` Aakash Deep Sarkar
2025-08-22 8:59 ` [PATCH v2 3/8] [ANDROID]: Add a trace point for GPU work period Aakash Deep Sarkar
` (9 subsequent siblings)
11 siblings, 0 replies; 20+ messages in thread
From: Aakash Deep Sarkar @ 2025-08-22 8:59 UTC (permalink / raw)
To: intel-xe
Cc: jeevaka.badrappan, carlos.santa, rodrigo.vivi, matthew.brost,
Aakash Deep Sarkar
The runtime of a user id in the GPU work period event are required
to be given in nanosec unit. Since we want to use the HW Context
timestamp register to derive the runtime for a context, we need
a way to convert from GT clock ticks to nano seconds.
Signed-off-by: Aakash Deep Sarkar <aakash.deep.sarkar@intel.com>
---
drivers/gpu/drm/xe/xe_gt_clock.c | 14 ++++++++++++++
drivers/gpu/drm/xe/xe_gt_clock.h | 1 +
2 files changed, 15 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_gt_clock.c b/drivers/gpu/drm/xe/xe_gt_clock.c
index 4f011d1573c6..17c1cc6bff5a 100644
--- a/drivers/gpu/drm/xe/xe_gt_clock.c
+++ b/drivers/gpu/drm/xe/xe_gt_clock.c
@@ -110,3 +110,17 @@ u64 xe_gt_clock_interval_to_ms(struct xe_gt *gt, u64 count)
{
return div_u64_roundup(count * MSEC_PER_SEC, gt->info.reference_clock);
}
+
+/**
+ * xe_gt_clock_interval_to_ns - Convert sampled GT clock ticks to nanosec
+ *
+ * @gt: the &xe_gt
+ * @count: count of GT clock ticks
+ *
+ * Returns: time in nanosec
+ */
+u64 xe_gt_clock_interval_to_ns(struct xe_gt *gt, u64 count)
+{
+ return div_u64_roundup(count * NSEC_PER_SEC, gt->info.reference_clock);
+}
+
diff --git a/drivers/gpu/drm/xe/xe_gt_clock.h b/drivers/gpu/drm/xe/xe_gt_clock.h
index 3adeb7baaca4..bd87971bce97 100644
--- a/drivers/gpu/drm/xe/xe_gt_clock.h
+++ b/drivers/gpu/drm/xe/xe_gt_clock.h
@@ -12,5 +12,6 @@ struct xe_gt;
int xe_gt_clock_init(struct xe_gt *gt);
u64 xe_gt_clock_interval_to_ms(struct xe_gt *gt, u64 count);
+u64 xe_gt_clock_interval_to_ns(struct xe_gt *gt, u64 count);
#endif
--
2.49.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH v2 3/8] [ANDROID]: Add a trace point for GPU work period
2025-08-22 8:59 [PATCH v2 0/8] [ANDROID]: Add GPU work period support for Xe driver Aakash Deep Sarkar
2025-08-22 8:59 ` [PATCH v2 1/8] [ANDROID]: Add a new xe_user structure Aakash Deep Sarkar
2025-08-22 8:59 ` [PATCH v2 2/8] [ANDROID]: Add xe_gt_clock_interval_to_ns function Aakash Deep Sarkar
@ 2025-08-22 8:59 ` Aakash Deep Sarkar
2025-08-22 19:57 ` Rodrigo Vivi
2025-08-22 8:59 ` [PATCH v2 4/8] [ANDROID]: Modify xe_exec_queue_update_run_ticks Aakash Deep Sarkar
` (8 subsequent siblings)
11 siblings, 1 reply; 20+ messages in thread
From: Aakash Deep Sarkar @ 2025-08-22 8:59 UTC (permalink / raw)
To: intel-xe
Cc: jeevaka.badrappan, carlos.santa, rodrigo.vivi, matthew.brost,
Aakash Deep Sarkar
The GPU work period event is required to have the following format:
Defines the structure of the kernel tracepoint:
/sys/kernel/tracing/events/power/gpu_work_period
A value that uniquely identifies the GPU within the system.
uint32_t gpu_id;
The UID of the application (i.e. persistent, unique ID of the Android
app) that submitted work to the GPU.
uint32_t uid;
The start time of the period in nanoseconds. The clock must be
CLOCK_MONOTONIC_RAW, as returned by the ktime_get_raw_ns(void) function.
uint64_t start_time_ns;
The end time of the period in nanoseconds. The clock must be
CLOCK_MONOTONIC_RAW, as returned by the ktime_get_raw_ns(void) function.
uint64_t end_time_ns;
The amount of time the GPU was running GPU work for |uid| during the
period, in nanoseconds, without double-counting parallel GPU work for the
same |uid|. For example, this might include the amount of time the GPU
spent performing shader work (vertex work, fragment work, etc.) for
|uid|.
uint64_t total_active_duration_ns;
Signed-off-by: Aakash Deep Sarkar <aakash.deep.sarkar@intel.com>
---
.../drm/xe/xe_power_gpu_work_period_trace.h | 61 +++++++++++++++++++
1 file changed, 61 insertions(+)
create mode 100644 drivers/gpu/drm/xe/xe_power_gpu_work_period_trace.h
diff --git a/drivers/gpu/drm/xe/xe_power_gpu_work_period_trace.h b/drivers/gpu/drm/xe/xe_power_gpu_work_period_trace.h
new file mode 100644
index 000000000000..2de05f1b64f3
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_power_gpu_work_period_trace.h
@@ -0,0 +1,61 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2024 Intel Corporation
+ */
+
+#ifndef _TRACE_POWER_GPU_WORK_PERIOD_INTEL
+#define _TRACE_POWER_GPU_WORK_PERIOD_INTEL
+#endif
+
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM power
+#undef TRACE_INCLUDE_FILE
+#define TRACE_INCLUDE_FILE xe_power_gpu_work_period_trace
+#undef TRACE_INCLUDE_PATH
+#define TRACE_INCLUDE_PATH .
+
+#if !defined(_TRACE_POWER_GPU_WORK_PERIOD_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_POWER_GPU_WORK_PERIOD_H
+
+#include <linux/tracepoint.h>
+
+TRACE_EVENT(gpu_work_period,
+
+ TP_PROTO(
+ u32 gpu_id,
+ u32 uid,
+ u64 start_time_ns,
+ u64 end_time_ns,
+ u64 total_active_duration_ns
+ ),
+
+ TP_ARGS(gpu_id, uid, start_time_ns, end_time_ns, total_active_duration_ns),
+
+ TP_STRUCT__entry(
+ __field(u32, gpu_id)
+ __field(u32, uid)
+ __field(u64, start_time_ns)
+ __field(u64, end_time_ns)
+ __field(u64, total_active_duration_ns)
+ ),
+
+ TP_fast_assign(
+ __entry->gpu_id = gpu_id;
+ __entry->uid = uid;
+ __entry->start_time_ns = start_time_ns;
+ __entry->end_time_ns = end_time_ns;
+ __entry->total_active_duration_ns = total_active_duration_ns;
+ ),
+
+ TP_printk("gpu_id=%u uid=%u start_time_ns=%llu end_time_ns=%llu total_active_duration_ns=%llu",
+ __entry->gpu_id,
+ __entry->uid,
+ __entry->start_time_ns,
+ __entry->end_time_ns,
+ __entry->total_active_duration_ns)
+);
+
+#endif /* _TRACE_POWER_GPU_WORK_PERIOD_H */
+
+/* This part must be outside protection */
+#include <trace/define_trace.h>
--
2.49.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH v2 4/8] [ANDROID]: Modify xe_exec_queue_update_run_ticks
2025-08-22 8:59 [PATCH v2 0/8] [ANDROID]: Add GPU work period support for Xe driver Aakash Deep Sarkar
` (2 preceding siblings ...)
2025-08-22 8:59 ` [PATCH v2 3/8] [ANDROID]: Add a trace point for GPU work period Aakash Deep Sarkar
@ 2025-08-22 8:59 ` Aakash Deep Sarkar
2025-08-22 8:59 ` [PATCH v2 5/8] [ANDROID]: Handle xe_user creation and removal Aakash Deep Sarkar
` (7 subsequent siblings)
11 siblings, 0 replies; 20+ messages in thread
From: Aakash Deep Sarkar @ 2025-08-22 8:59 UTC (permalink / raw)
To: intel-xe
Cc: jeevaka.badrappan, carlos.santa, rodrigo.vivi, matthew.brost,
Aakash Deep Sarkar
For GPU work period event we need to record the run time of a
context on the GPU in nanosecs. In the present xe driver code,
we only record the run time in clock ticks and separately for
each engine class.
So, we are adding a uint64 variable |active_duration_ns| in
the xe file structure where we can record the cumulative
run time in ns of all the engines for this context. The
intent here is to add up the |active_duration_ns| in
all the xe files belonging to a given user id to derive
the run time for that user id.
Signed-off-by: Aakash Deep Sarkar <aakash.deep.sarkar@intel.com>
---
drivers/gpu/drm/xe/xe_device_types.h | 3 +++
drivers/gpu/drm/xe/xe_exec_queue.c | 7 +++++++
2 files changed, 10 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index 01e8fa0d2f9f..c4f076a26291 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -656,6 +656,9 @@ struct xe_file {
/** @run_ticks: hw engine class run time in ticks for this drm client */
u64 run_ticks[XE_ENGINE_CLASS_MAX];
+ /** @active_duration_ns: total run time in ns for this xe file */
+ u64 active_duration_ns;
+
/** @client: drm client */
struct xe_drm_client *client;
diff --git a/drivers/gpu/drm/xe/xe_exec_queue.c b/drivers/gpu/drm/xe/xe_exec_queue.c
index 2d10a53f701d..2ee8a475f5ed 100644
--- a/drivers/gpu/drm/xe/xe_exec_queue.c
+++ b/drivers/gpu/drm/xe/xe_exec_queue.c
@@ -15,6 +15,7 @@
#include "xe_dep_scheduler.h"
#include "xe_device.h"
#include "xe_gt.h"
+#include "xe_gt_clock.h"
#include "xe_hw_engine_class_sysfs.h"
#include "xe_hw_engine_group.h"
#include "xe_hw_fence.h"
@@ -879,6 +880,8 @@ void xe_exec_queue_update_run_ticks(struct xe_exec_queue *q)
{
struct xe_device *xe = gt_to_xe(q->gt);
struct xe_lrc *lrc;
+ struct xe_gt *gt = q->gt;
+
u64 old_ts, new_ts;
int idx;
@@ -904,6 +907,10 @@ void xe_exec_queue_update_run_ticks(struct xe_exec_queue *q)
new_ts = xe_lrc_update_timestamp(lrc, &old_ts);
q->xef->run_ticks[q->class] += (new_ts - old_ts) * q->width;
+ // Accumulate the runtime in nanosec for this queue into the xe file.
+ q->xef->active_duration_ns +=
+ xe_gt_clock_interval_to_ns(gt, (new_ts - old_ts));
+
drm_dev_exit(idx);
}
--
2.49.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH v2 5/8] [ANDROID]: Handle xe_user creation and removal
2025-08-22 8:59 [PATCH v2 0/8] [ANDROID]: Add GPU work period support for Xe driver Aakash Deep Sarkar
` (3 preceding siblings ...)
2025-08-22 8:59 ` [PATCH v2 4/8] [ANDROID]: Modify xe_exec_queue_update_run_ticks Aakash Deep Sarkar
@ 2025-08-22 8:59 ` Aakash Deep Sarkar
2025-08-22 8:59 ` [PATCH v2 6/8] [ANDROID]: Implement xe_work_period_worker Aakash Deep Sarkar
` (6 subsequent siblings)
11 siblings, 0 replies; 20+ messages in thread
From: Aakash Deep Sarkar @ 2025-08-22 8:59 UTC (permalink / raw)
To: intel-xe
Cc: jeevaka.badrappan, carlos.santa, rodrigo.vivi, matthew.brost,
Aakash Deep Sarkar
We want our xe user structure to be created when a new
user id opens the xe device node and to be destroyed
when the final xe file with this uid is closed. In other
words the xe_user structure for a uid should remain in
scope as long as any process with this uid has an open
xe file descriptor.
To implement this we maintain an xarray of xe user
structures inside our xe device instance. Whenever a new
xe file is created via an open call, we check if the
calling process' uid is already present in our xarray.
If so, we increment the refcount for the associated
xe user and add this xe file to the list of xe files
belonging to this xe user. Otherwise, we allocate a
new xe user structure for this uid and initialize its
file list with this xe file.
Whenever an xe file is destroyed, we decrement the
refcount of the associated xe user. When the last
xe file in the xe user's file list is destroyed,
the xe user refcount should drop to zero and the
xe user should be cleaned up. During the cleanup path
we remove the xarray entry for this xe user in our
xe device and free up its memory.
Signed-off-by: Aakash Deep Sarkar <aakash.deep.sarkar@intel.com>
---
drivers/gpu/drm/xe/xe_device.c | 57 ++++++++++++++++++++++++++++
drivers/gpu/drm/xe/xe_device_types.h | 16 ++++++++
drivers/gpu/drm/xe/xe_user.c | 28 +++++++++++++-
drivers/gpu/drm/xe/xe_user.h | 10 +++++
4 files changed, 110 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index 3e0402dff423..bd4a1c5c57ca 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -62,6 +62,7 @@
#include "xe_tile.h"
#include "xe_ttm_stolen_mgr.h"
#include "xe_ttm_sys_mgr.h"
+#include "xe_user.h"
#include "xe_vm.h"
#include "xe_vram.h"
#include "xe_vram_types.h"
@@ -76,9 +77,13 @@ static int xe_file_open(struct drm_device *dev, struct drm_file *file)
{
struct xe_device *xe = to_xe_device(dev);
struct xe_drm_client *client;
+ struct xe_user *user;
struct xe_file *xef;
int ret = -ENOMEM;
+ int uid = -EINVAL;
+ u32 idx;
struct task_struct *task = NULL;
+ const struct cred *cred = NULL;
xef = kzalloc(sizeof(*xef), GFP_KERNEL);
if (!xef)
@@ -105,11 +110,53 @@ static int xe_file_open(struct drm_device *dev, struct drm_file *file)
task = get_pid_task(rcu_access_pointer(file->pid), PIDTYPE_PID);
if (task) {
+ cred = get_task_cred(task);
+ if (cred) {
+ uid = (unsigned int) cred->euid.val;
+ put_cred(cred);
+ }
xef->process_name = kstrdup(task->comm, GFP_KERNEL);
xef->pid = task->pid;
put_task_struct(task);
}
+ if (uid < 0)
+ return -ENOENT;
+
+ INIT_LIST_HEAD(&xef->user_link);
+ /*
+ * Check if the calling process/uid has already been registered
+ * with the xe device during a previous open call. If so then
+ * take a reference to this xe user and add this xe file to the
+ * filelist belonging to this xe user
+ */
+ user = xe_user_lookup(xe, uid);
+ if (!user) {
+ /*
+ * We couldn't find an existing xe user for the calling process.
+ * Allocate a new struct xe_user and register it with this xe
+ * device
+ */
+ user = xe_user_alloc();
+ if (!user)
+ return -ENOMEM;
+
+ user->uid = uid;
+ user->last_timestamp_ns = ktime_get_raw_ns();
+ user->xe = xe;
+
+ ret = xa_alloc(&xe->work_period.users, &idx, user, xa_limit_32b, GFP_KERNEL);
+ if (ret < 0)
+ return ret;
+
+ user->id = idx;
+ drm_dev_get(&xe->drm);
+ }
+ mutex_lock(&user->filelist_lock);
+ list_add(&xef->user_link, &user->filelist);
+ mutex_unlock(&user->filelist_lock);
+ xef->user = user;
+
return 0;
}
@@ -124,6 +171,12 @@ static void xe_file_destroy(struct kref *ref)
xe_drm_client_put(xef->client);
kfree(xef->process_name);
+
+ mutex_lock(&xef->user->filelist_lock);
+ list_del(&xef->user_link);
+ mutex_unlock(&xef->user->filelist_lock);
+
+ xe_user_put(xef->user);
kfree(xef);
}
@@ -458,6 +511,10 @@ struct xe_device *xe_device_create(struct pci_dev *pdev,
xa_init_flags(&xe->usm.asid_to_vm, XA_FLAGS_ALLOC);
+ xa_init_flags(&xe->work_period.users, XA_FLAGS_ALLOC1);
+
+ mutex_init(&xe->work_period.lock);
+
if (IS_ENABLED(CONFIG_DRM_XE_DEBUG)) {
/* Trigger a large asid and an early asid wrap. */
u32 asid;
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index c4f076a26291..b375c4928a09 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -576,6 +576,16 @@ struct xe_device {
atomic64_t global_total_pages;
#endif
+ /**
+ * @xe_work_period: Support for GPU work period tracepoint
+ */
+ struct xe_work_period {
+ /** @users: list of users that have opened this xe device */
+ struct xarray users;
+ /** @lock: lock protecting this structure */
+ struct mutex lock;
+ } work_period;
+
/* private: */
#if IS_ENABLED(CONFIG_DRM_XE_DISPLAY)
@@ -659,6 +669,12 @@ struct xe_file {
/** @active_duration_ns: total run time in ns for this xe file */
u64 active_duration_ns;
+ /** @user: pointer to struct xe_user associated with this xe file */
+ struct xe_user *user;
+
+ /** @user_link: link into xe_user::filelist */
+ struct list_head user_link;
+
/** @client: drm client */
struct xe_drm_client *client;
diff --git a/drivers/gpu/drm/xe/xe_user.c b/drivers/gpu/drm/xe/xe_user.c
index 8c285a68115a..5c7d21dfcc45 100644
--- a/drivers/gpu/drm/xe/xe_user.c
+++ b/drivers/gpu/drm/xe/xe_user.c
@@ -4,6 +4,7 @@
*/
#include <linux/slab.h>
+#include <drm/drm_drv.h>
#include "xe_user.h"
@@ -39,7 +40,6 @@ struct xe_user *xe_user_alloc(void)
kref_init(&user->refcount);
mutex_init(&user->filelist_lock);
INIT_LIST_HEAD(&user->filelist);
- //TODO: Add a hook into xe device
INIT_WORK(&user->work, work_period_worker);
return user;
}
@@ -54,6 +54,32 @@ void __xe_user_free(struct kref *kref)
{
struct xe_user *user =
container_of(kref, struct xe_user, refcount);
+ struct xe_device *xe = user->xe;
+ void *lookup;
+ mutex_lock(&xe->work_period.lock);
+ lookup = xa_erase(&xe->work_period.users, user->id);
+ xe_assert(xe, lookup == user);
+ mutex_unlock(&xe->work_period.lock);
+
+ drm_dev_put(&user->xe->drm);
kfree(user);
}
+
+struct xe_user *xe_user_lookup(struct xe_device *xe, u32 uid)
+{
+ struct xe_user *user = NULL;
+ unsigned long i;
+
+ mutex_lock(&xe->work_period.lock);
+ xa_for_each(&xe->work_period.users, i, user) {
+ if (user->uid == uid) {
+ xe_user_get(user);
+ mutex_unlock(&xe->work_period.lock);
+ return user;
+ }
+ }
+ mutex_unlock(&xe->work_period.lock);
+
+ return NULL;
+}
diff --git a/drivers/gpu/drm/xe/xe_user.h b/drivers/gpu/drm/xe/xe_user.h
index e52f66d3f3b0..55035a9c2c4c 100644
--- a/drivers/gpu/drm/xe/xe_user.h
+++ b/drivers/gpu/drm/xe/xe_user.h
@@ -8,8 +8,12 @@
#include <linux/kref.h>
#include <linux/list.h>
+#include <linux/mutex.h>
#include <linux/workqueue.h>
+#include "xe_device.h"
+
+
/**
* This is a per process/user id structure for a xe device
* client. It is allocated when a new process/app opens the
@@ -43,6 +47,11 @@ struct xe_user {
*/
struct work_struct work;
+ /**
+ * @id: index of this user into the xe device users array
+ */
+ u32 id;
+
/**
* @uid: user id for this xe_user
*/
@@ -62,6 +71,7 @@ struct xe_user {
};
struct xe_user *xe_user_alloc(void);
+struct xe_user *xe_user_lookup(struct xe_device *xe, u32 uid);
static inline struct xe_user *
xe_user_get(struct xe_user *user)
--
2.49.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH v2 6/8] [ANDROID]: Implement xe_work_period_worker
2025-08-22 8:59 [PATCH v2 0/8] [ANDROID]: Add GPU work period support for Xe driver Aakash Deep Sarkar
` (4 preceding siblings ...)
2025-08-22 8:59 ` [PATCH v2 5/8] [ANDROID]: Handle xe_user creation and removal Aakash Deep Sarkar
@ 2025-08-22 8:59 ` Aakash Deep Sarkar
2025-08-22 11:00 ` Matthew Auld
2025-08-22 8:59 ` [PATCH v2 7/8] [ANDROID]: Add a Kconfig option for GPU work period Aakash Deep Sarkar
` (5 subsequent siblings)
11 siblings, 1 reply; 20+ messages in thread
From: Aakash Deep Sarkar @ 2025-08-22 8:59 UTC (permalink / raw)
To: intel-xe
Cc: jeevaka.badrappan, carlos.santa, rodrigo.vivi, matthew.brost,
Aakash Deep Sarkar
The work of collecting the GPU run time for a given
xe_user and emitting its event, is done by the
xe_work_period_worker kworker. At the time of creation
of a new xe_user, we simultaneously start a delayed
kworker thread. The delay of execution is set to be
500 ms. After the completion of the work, the kworker
schedules itself for the next execution. This is done
as long as the reference to the xe_user pointer is
valid.
During each execution cycle the xe_work_period_worker
iterates over all the xe files in the xe_user::filelist
and accumulate their corresponding GPU runtime into the
xe_user::active_duration_ns; while also updating each of
the xe_file::active_duration_ns. The total runtime for
this uid in the current sampling period is the delta
between the previous xe_user::active_duration_ns and
the current xe_user::active_duration_ns.
We also record the current timestamp at the end of each
invocation to xe_work_period_worker function in the
xe_user::last_timestamp_ns. The sampling period for this
uid is the delta between the previous timestamp and the
current timestamp.
Signed-off-by: Aakash Deep Sarkar <aakash.deep.sarkar@intel.com>
---
drivers/gpu/drm/xe/xe_device.c | 28 +++++++----
drivers/gpu/drm/xe/xe_user.c | 85 ++++++++++++++++++++++++++++++++--
drivers/gpu/drm/xe/xe_user.h | 18 +++++--
3 files changed, 115 insertions(+), 16 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index bd4a1c5c57ca..b4692d45c7e9 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -151,12 +151,23 @@ static int xe_file_open(struct drm_device *dev, struct drm_file *file)
user->id = idx;
drm_dev_get(&xe->drm);
+
+ xe_user_get(user);
+ if (!schedule_delayed_work(&user->delay_work,
+ msecs_to_jiffies(XE_WORK_PERIOD_INTERVAL)))
+ xe_user_put(user);
}
- mutex_lock(&user->filelist_lock);
+
+ mutex_lock(&user->lock);
list_add(&xef->user_link, &user->filelist);
- mutex_unlock(&user->filelist_lock);
- xef->user = user;
+ mutex_unlock(&user->lock);
+ /*
+ * We have already taken a reference to the xe_user in
+ * xe_user_lookup in case this xe file doesn't own the
+ * pointer to the xe_user.
+ */
+ xef->user = user;
return 0;
}
@@ -172,11 +183,12 @@ static void xe_file_destroy(struct kref *ref)
xe_drm_client_put(xef->client);
kfree(xef->process_name);
- mutex_lock(&xef->user->filelist_lock);
- list_del(&xef->user_link);
- mutex_unlock(&xef->user->filelist_lock);
-
- xe_user_put(xef->user);
+ if (xef->user) {
+ mutex_lock(&xef->user->lock);
+ list_del(&xef->user_link);
+ xe_user_put(xef->user);
+ mutex_unlock(&xef->user->lock);
+ }
kfree(xef);
}
diff --git a/drivers/gpu/drm/xe/xe_user.c b/drivers/gpu/drm/xe/xe_user.c
index 5c7d21dfcc45..50fb43d03b7b 100644
--- a/drivers/gpu/drm/xe/xe_user.c
+++ b/drivers/gpu/drm/xe/xe_user.c
@@ -6,17 +6,94 @@
#include <linux/slab.h>
#include <drm/drm_drv.h>
+#include "xe_assert.h"
+#include "xe_device_types.h"
+#include "xe_exec_queue.h"
+#include "xe_pm.h"
#include "xe_user.h"
+#define CREATE_TRACE_POINTS
+#include "xe_power_gpu_work_period_trace.h"
+
+static inline void schedule_next_work(struct xe_device *xe, unsigned int id)
+{
+ struct xe_user *user;
+
+ mutex_lock(&xe->work_period.lock);
+ user = xa_load(&xe->work_period.users, id);
+ if (user && xe_user_get_unless_zero(user))
+ schedule_delayed_work(&user->delay_work,
+ msecs_to_jiffies(XE_WORK_PERIOD_INTERVAL));
+ mutex_unlock(&xe->work_period.lock);
+}
/**
* worker thread to emit gpu work period event for this xe user
* @work: work instance for this xe user
*
* Return: void
*/
-static inline void work_period_worker(struct work_struct *work)
+static void xe_work_period_worker(struct work_struct *work)
{
- //TODO: Implement this worker
+ struct xe_user *user = container_of(work, struct xe_user, delay_work.work);
+ struct xe_device *xe = user->xe;
+ struct xe_file *xef;
+ struct xe_exec_queue *q;
+
+ /*
+ * The GPU work period event requires the following parameters
+ *
+ * gpuid: GPU index in case the platform has more than one GPU
+ * uid: user id of the app
+ * start_time: start time for the sampling period in nanosecs
+ * end_time: end time for the sampling period in nanosecs
+ * active_duration: Total runtime in nanosecs for this uid in
+ * the current sampling period.
+ */
+ u32 gpuid = 0, uid = user->uid, id = user->id;
+ u64 start_time, end_time, active_duration;
+ u64 last_active_duration, last_timestamp;
+ unsigned long i;
+
+ mutex_lock(&user->lock);
+
+ // Save the last recorded active duration and timestamp
+ last_active_duration = user->active_duration_ns;
+ last_timestamp = user->last_timestamp_ns;
+
+ xe_pm_runtime_get(xe);
+
+ list_for_each_entry(xef, &user->filelist, user_link) {
+
+ wait_var_event(&xef->exec_queue.pending_removal,
+ !atomic_read(&xef->exec_queue.pending_removal));
+
+ /* Accumulate all the exec queues from this file */
+ mutex_lock(&xef->exec_queue.lock);
+ xa_for_each(&xef->exec_queue.xa, i, q) {
+ xe_exec_queue_get(q);
+ mutex_unlock(&xef->exec_queue.lock);
+
+ xe_exec_queue_update_run_ticks(q);
+
+ mutex_lock(&xef->exec_queue.lock);
+ xe_exec_queue_put(q);
+ }
+ mutex_unlock(&xef->exec_queue.lock);
+ user->active_duration_ns += xef->active_duration_ns;
+ }
+
+ xe_pm_runtime_put(xe);
+
+ start_time = last_timestamp + 1;
+ end_time = ktime_get_raw_ns();
+ active_duration = user->active_duration_ns - last_active_duration;
+ trace_gpu_work_period(gpuid, uid, start_time, end_time, active_duration);
+ user->last_timestamp_ns = end_time;
+ xe_user_put(user);
+
+ mutex_unlock(&user->lock);
+
+ schedule_next_work(xe, id);
}
/**
@@ -38,9 +115,9 @@ struct xe_user *xe_user_alloc(void)
return NULL;
kref_init(&user->refcount);
- mutex_init(&user->filelist_lock);
+ mutex_init(&user->lock);
INIT_LIST_HEAD(&user->filelist);
- INIT_WORK(&user->work, work_period_worker);
+ INIT_DELAYED_WORK(&user->delay_work, xe_work_period_worker);
return user;
}
diff --git a/drivers/gpu/drm/xe/xe_user.h b/drivers/gpu/drm/xe/xe_user.h
index 55035a9c2c4c..80948199e743 100644
--- a/drivers/gpu/drm/xe/xe_user.h
+++ b/drivers/gpu/drm/xe/xe_user.h
@@ -11,9 +11,11 @@
#include <linux/mutex.h>
#include <linux/workqueue.h>
-#include "xe_device.h"
+#include "xe_device_types.h"
+#define XE_WORK_PERIOD_INTERVAL 500
+
/**
* This is a per process/user id structure for a xe device
* client. It is allocated when a new process/app opens the
@@ -32,9 +34,9 @@ struct xe_user {
struct xe_device *xe;
/**
- * @filelist_lock: lock protecting the filelist
+ * @filelist_lock: lock protecting this structure
*/
- struct mutex filelist_lock;
+ struct mutex lock;
/**
* @filelist: list of xe files belonging to this xe user
@@ -45,7 +47,7 @@ struct xe_user {
* @work: work to emit the gpu work period event for this
* xe user
*/
- struct work_struct work;
+ struct delayed_work delay_work;
/**
* @id: index of this user into the xe device users array
@@ -73,6 +75,14 @@ struct xe_user {
struct xe_user *xe_user_alloc(void);
struct xe_user *xe_user_lookup(struct xe_device *xe, u32 uid);
+static inline struct xe_user *
+xe_user_get_unless_zero(struct xe_user *user)
+{
+ if (kref_get_unless_zero(&user->refcount))
+ return user;
+ return NULL;
+}
+
static inline struct xe_user *
xe_user_get(struct xe_user *user)
{
--
2.49.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH v2 7/8] [ANDROID]: Add a Kconfig option for GPU work period
2025-08-22 8:59 [PATCH v2 0/8] [ANDROID]: Add GPU work period support for Xe driver Aakash Deep Sarkar
` (5 preceding siblings ...)
2025-08-22 8:59 ` [PATCH v2 6/8] [ANDROID]: Implement xe_work_period_worker Aakash Deep Sarkar
@ 2025-08-22 8:59 ` Aakash Deep Sarkar
2025-08-22 8:59 ` [PATCH v2 8/8] [ANDROID]: Handle xe_work_period destruction Aakash Deep Sarkar
` (4 subsequent siblings)
11 siblings, 0 replies; 20+ messages in thread
From: Aakash Deep Sarkar @ 2025-08-22 8:59 UTC (permalink / raw)
To: intel-xe
Cc: jeevaka.badrappan, carlos.santa, rodrigo.vivi, matthew.brost,
Aakash Deep Sarkar
Since this requirement is intended only for Android, there's
no reason to have it enabled by default in other distributions.
So, better to have it guarded by a Kconfig option.
Signed-off-by: Aakash Deep Sarkar <aakash.deep.sarkar@intel.com>
---
drivers/gpu/drm/xe/Makefile | 2 +-
drivers/gpu/drm/xe/xe_device.c | 116 +++++++++++++++--------------
drivers/gpu/drm/xe/xe_exec_queue.c | 9 ++-
drivers/gpu/drm/xe/xe_user.h | 13 ++++
drivers/gpu/trace/Kconfig | 12 +++
5 files changed, 94 insertions(+), 58 deletions(-)
diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
index 89212fc7ef44..9cc8743b8d7f 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -325,7 +325,7 @@ ifeq ($(CONFIG_DEBUG_FS),y)
xe-$(CONFIG_PCI_IOV) += xe_gt_sriov_pf_debugfs.o
- xe-y += xe_user.o
+ xe-$(CONFIG_TRACE_GPU_WORK_PERIOD) += xe_user.o
xe-$(CONFIG_DRM_XE_DISPLAY) += \
i915-display/intel_display_debugfs.o \
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index b4692d45c7e9..569f3890bde2 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -110,64 +110,69 @@ static int xe_file_open(struct drm_device *dev, struct drm_file *file)
task = get_pid_task(rcu_access_pointer(file->pid), PIDTYPE_PID);
if (task) {
- cred = get_task_cred(task);
- if (cred) {
- uid = (unsigned int) cred->euid.val;
- put_cred(cred);
+ if (IS_ENABLED(CONFIG_TRACE_GPU_WORK_PERIOD)) {
+ cred = get_task_cred(task);
+ if (cred) {
+ uid = (unsigned int) cred->euid.val;
+ put_cred(cred);
+ }
}
xef->process_name = kstrdup(task->comm, GFP_KERNEL);
xef->pid = task->pid;
put_task_struct(task);
}
- if (uid < 0)
- return -ENOENT;
+ if (IS_ENABLED(CONFIG_TRACE_GPU_WORK_PERIOD)) {
+ if (uid < 0)
+ return -ENOENT;
- INIT_LIST_HEAD(&xef->user_link);
- /*
- * Check if the calling process/uid has already been registered
- * with the xe device during a previous open call. If so then
- * take a reference to this xe user and add this xe file to the
- * filelist belonging to this xe user
- */
- user = xe_user_lookup(xe, uid);
- if (!user) {
+ INIT_LIST_HEAD(&xef->user_link);
/*
- * We couldn't find an existing xe user for the calling process.
- * Allocate a new struct xe_user and register it with this xe
- * device
+ * Check if the calling process/uid has already been registered
+ * with the xe device during a previous open call. If so then
+ * take a reference to this xe user and add this xe file to the
+ * filelist belonging to this xe user
*/
- user = xe_user_alloc();
- if (!user)
- return -ENOMEM;
-
- user->uid = uid;
- user->last_timestamp_ns = ktime_get_raw_ns();
- user->xe = xe;
-
- ret = xa_alloc(&xe->work_period.users, &idx, user, xa_limit_32b, GFP_KERNEL);
- if (ret < 0)
- return ret;
-
- user->id = idx;
- drm_dev_get(&xe->drm);
-
- xe_user_get(user);
- if (!schedule_delayed_work(&user->delay_work,
+ user = xe_user_lookup(xe, uid);
+ if (!user) {
+ /*
+ * We couldn't find an existing xe user for the calling process.
+ * Allocate a new struct xe_user and register it with this xe
+ * device
+ */
+ user = xe_user_alloc();
+ if (!user)
+ return -ENOMEM;
+
+ user->uid = uid;
+ user->last_timestamp_ns = ktime_get_raw_ns();
+ user->xe = xe;
+
+ ret = xa_alloc(&xe->work_period.users, &idx, user,
+ xa_limit_32b, GFP_KERNEL);
+ if (ret < 0)
+ return ret;
+
+ user->id = idx;
+ drm_dev_get(&xe->drm);
+
+ xe_user_get(user);
+ if (!schedule_delayed_work(&user->delay_work,
msecs_to_jiffies(XE_WORK_PERIOD_INTERVAL)))
- xe_user_put(user);
- }
+ xe_user_put(user);
+ }
- mutex_lock(&user->lock);
- list_add(&xef->user_link, &user->filelist);
- mutex_unlock(&user->lock);
+ mutex_lock(&user->lock);
+ list_add(&xef->user_link, &user->filelist);
+ mutex_unlock(&user->lock);
- /*
- * We have already taken a reference to the xe_user in
- * xe_user_lookup in case this xe file doesn't own the
- * pointer to the xe_user.
- */
- xef->user = user;
+ /*
+ * We have already taken a reference to the xe_user in
+ * xe_user_lookup, in case this xe file doesn't own the
+ * pointer to the xe_user.
+ */
+ xef->user = user;
+ } // CONFIG_TRACE_GPU_WORK_PERIOD
return 0;
}
@@ -183,11 +188,13 @@ static void xe_file_destroy(struct kref *ref)
xe_drm_client_put(xef->client);
kfree(xef->process_name);
- if (xef->user) {
- mutex_lock(&xef->user->lock);
- list_del(&xef->user_link);
- xe_user_put(xef->user);
- mutex_unlock(&xef->user->lock);
+ if (IS_ENABLED(CONFIG_TRACE_GPU_WORK_PERIOD)) {
+ if (xef->user) {
+ mutex_lock(&xef->user->lock);
+ list_del(&xef->user_link);
+ xe_user_put(xef->user);
+ mutex_unlock(&xef->user->lock);
+ }
}
kfree(xef);
}
@@ -523,9 +530,10 @@ struct xe_device *xe_device_create(struct pci_dev *pdev,
xa_init_flags(&xe->usm.asid_to_vm, XA_FLAGS_ALLOC);
- xa_init_flags(&xe->work_period.users, XA_FLAGS_ALLOC1);
-
- mutex_init(&xe->work_period.lock);
+ if (IS_ENABLED(CONFIG_TRACE_GPU_WORK_PERIOD)) {
+ xa_init_flags(&xe->work_period.users, XA_FLAGS_ALLOC1);
+ mutex_init(&xe->work_period.lock);
+ }
if (IS_ENABLED(CONFIG_DRM_XE_DEBUG)) {
/* Trigger a large asid and an early asid wrap. */
diff --git a/drivers/gpu/drm/xe/xe_exec_queue.c b/drivers/gpu/drm/xe/xe_exec_queue.c
index 2ee8a475f5ed..6a24463e13a4 100644
--- a/drivers/gpu/drm/xe/xe_exec_queue.c
+++ b/drivers/gpu/drm/xe/xe_exec_queue.c
@@ -907,9 +907,12 @@ void xe_exec_queue_update_run_ticks(struct xe_exec_queue *q)
new_ts = xe_lrc_update_timestamp(lrc, &old_ts);
q->xef->run_ticks[q->class] += (new_ts - old_ts) * q->width;
- // Accumulate the runtime in nanosec for this queue into the xe file.
- q->xef->active_duration_ns +=
- xe_gt_clock_interval_to_ns(gt, (new_ts - old_ts));
+ if (IS_ENABLED(CONFIG_TRACE_GPU_WORK_PERIOD)) {
+
+ // Accumulate the runtime in ns for this queue
+ q->xef->active_duration_ns +=
+ xe_gt_clock_interval_to_ns(gt, (new_ts - old_ts));
+ }
drm_dev_exit(idx);
}
diff --git a/drivers/gpu/drm/xe/xe_user.h b/drivers/gpu/drm/xe/xe_user.h
index 80948199e743..7c30bf470aa7 100644
--- a/drivers/gpu/drm/xe/xe_user.h
+++ b/drivers/gpu/drm/xe/xe_user.h
@@ -72,8 +72,21 @@ struct xe_user {
u64 last_timestamp_ns;
};
+#if IS_ENABLED(CONFIG_TRACE_GPU_WORK_PERIOD)
+
struct xe_user *xe_user_alloc(void);
struct xe_user *xe_user_lookup(struct xe_device *xe, u32 uid);
+#else
+static inline struct xe_user *xe_user_alloc(void)
+{
+ return NULL;
+}
+
+static inline struct xe_user *xe_user_lookup(struct xe_device *xe, u32 uid)
+{
+ return NULL;
+}
+#endif // CONFIG_TRACE_GPU_WORK_PERIOD
static inline struct xe_user *
xe_user_get_unless_zero(struct xe_user *user)
diff --git a/drivers/gpu/trace/Kconfig b/drivers/gpu/trace/Kconfig
index cd3d19c4a201..34f2e08cf1be 100644
--- a/drivers/gpu/trace/Kconfig
+++ b/drivers/gpu/trace/Kconfig
@@ -11,3 +11,15 @@ config TRACE_GPU_MEM
Tracepoint availability varies by GPU driver.
If in doubt, say "N".
+
+config TRACE_GPU_WORK_PERIOD
+ bool "Enable GPU work period tracepoint"
+ default n
+ help
+ Choose this option to enable tracepoint for tracking
+ GPU usage based on the UID. Intended for performance
+ profiling and required for Android.
+
+ Tracepoint availability varies by GPU driver.
+
+ If in doubt, say "N".
--
2.49.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH v2 8/8] [ANDROID]: Handle xe_work_period destruction
2025-08-22 8:59 [PATCH v2 0/8] [ANDROID]: Add GPU work period support for Xe driver Aakash Deep Sarkar
` (6 preceding siblings ...)
2025-08-22 8:59 ` [PATCH v2 7/8] [ANDROID]: Add a Kconfig option for GPU work period Aakash Deep Sarkar
@ 2025-08-22 8:59 ` Aakash Deep Sarkar
2025-08-22 9:39 ` ✗ CI.checkpatch: warning for : Add GPU work period support for Xe driver Patchwork
` (3 subsequent siblings)
11 siblings, 0 replies; 20+ messages in thread
From: Aakash Deep Sarkar @ 2025-08-22 8:59 UTC (permalink / raw)
To: intel-xe
Cc: jeevaka.badrappan, carlos.santa, rodrigo.vivi, matthew.brost,
Aakash Deep Sarkar
This adds the xe_work_period destruction procedure.
We iterate over all entries in the xe::work_period::users
xarray and cancel any pending delayed work. Then destroy
the xarray itself.
Signed-off-by: Aakash Deep Sarkar <aakash.deep.sarkar@intel.com>
---
drivers/gpu/drm/xe/xe_device.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index 569f3890bde2..e07bc2f2d0c1 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -481,6 +481,19 @@ static void xe_device_destroy(struct drm_device *dev, void *dummy)
if (xe->destroy_wq)
destroy_workqueue(xe->destroy_wq);
+ if (IS_ENABLED(CONFIG_TRACE_GPU_WORK_PERIOD)) {
+ struct xe_user *user = NULL;
+ unsigned long i;
+
+ mutex_lock(&xe->work_period.lock);
+ xa_for_each(&xe->work_period.users, i, user) {
+ if (cancel_delayed_work_sync(&user->delay_work))
+ xe_user_put(user);
+ }
+ xa_destroy(&xe->work_period.users);
+ mutex_unlock(&xe->work_period.lock);
+ }
+
ttm_device_fini(&xe->ttm);
}
--
2.49.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* ✗ CI.checkpatch: warning for : Add GPU work period support for Xe driver
2025-08-22 8:59 [PATCH v2 0/8] [ANDROID]: Add GPU work period support for Xe driver Aakash Deep Sarkar
` (7 preceding siblings ...)
2025-08-22 8:59 ` [PATCH v2 8/8] [ANDROID]: Handle xe_work_period destruction Aakash Deep Sarkar
@ 2025-08-22 9:39 ` Patchwork
2025-08-22 9:40 ` ✓ CI.KUnit: success " Patchwork
` (2 subsequent siblings)
11 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2025-08-22 9:39 UTC (permalink / raw)
To: Aakash Deep Sarkar; +Cc: intel-xe
== Series Details ==
Series: : Add GPU work period support for Xe driver
URL : https://patchwork.freedesktop.org/series/153341/
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
553439844b6500767ce8aef522cfe9fbb7ece541
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit 8c756ecf8c8172e9b050435b9211ccda16488f56
Author: Aakash Deep Sarkar <aakash.deep.sarkar@intel.com>
Date: Fri Aug 22 08:59:30 2025 +0000
Handle xe_work_period destruction
This adds the xe_work_period destruction procedure.
We iterate over all entries in the xe::work_period::users
xarray and cancel any pending delayed work. Then destroy
the xarray itself.
Signed-off-by: Aakash Deep Sarkar <aakash.deep.sarkar@intel.com>
+ /mt/dim checkpatch cca87ca63e2f5b8a785dc59c23e526987530b27f drm-intel
f81133374464 Add a new xe_user structure
-:45: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#45:
new file mode 100644
total: 0 errors, 1 warnings, 0 checks, 148 lines checked
81bc89af85cd Add xe_gt_clock_interval_to_ns function
e099678d0cff Add a trace point for GPU work period
-:36: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#36:
new file mode 100644
-:63: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#63: FILE: drivers/gpu/drm/xe/xe_power_gpu_work_period_trace.h:23:
+TRACE_EVENT(gpu_work_period,
+
-:64: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#64: FILE: drivers/gpu/drm/xe/xe_power_gpu_work_period_trace.h:24:
+ TP_PROTO(
-:74: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#74: FILE: drivers/gpu/drm/xe/xe_power_gpu_work_period_trace.h:34:
+ TP_STRUCT__entry(
-:82: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#82: FILE: drivers/gpu/drm/xe/xe_power_gpu_work_period_trace.h:42:
+ TP_fast_assign(
-:91: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#91: FILE: drivers/gpu/drm/xe/xe_power_gpu_work_period_trace.h:51:
+ TP_printk("gpu_id=%u uid=%u start_time_ns=%llu end_time_ns=%llu total_active_duration_ns=%llu",
+ __entry->gpu_id,
total: 0 errors, 1 warnings, 5 checks, 61 lines checked
c6fa68deadc2 Modify xe_exec_queue_update_run_ticks
27b593ab84de Handle xe_user creation and removal
-:65: CHECK:SPACING: No space is necessary after a cast
#65: FILE: drivers/gpu/drm/xe/xe_device.c:115:
+ uid = (unsigned int) cred->euid.val;
-:237: CHECK:LINE_SPACING: Please don't use multiple blank lines
#237: FILE: drivers/gpu/drm/xe/xe_user.h:16:
+
+
total: 0 errors, 0 warnings, 2 checks, 199 lines checked
5a8982fc8084 Implement xe_work_period_worker
-:44: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#44: FILE: drivers/gpu/drm/xe/xe_device.c:157:
+ if (!schedule_delayed_work(&user->delay_work,
+ msecs_to_jiffies(XE_WORK_PERIOD_INTERVAL)))
-:107: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#107: FILE: drivers/gpu/drm/xe/xe_user.c:26:
+ schedule_delayed_work(&user->delay_work,
+ msecs_to_jiffies(XE_WORK_PERIOD_INTERVAL));
-:149: CHECK:BRACES: Blank lines aren't necessary after an open brace '{'
#149: FILE: drivers/gpu/drm/xe/xe_user.c:66:
+ list_for_each_entry(xef, &user->filelist, user_link) {
+
-:151: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#151: FILE: drivers/gpu/drm/xe/xe_user.c:68:
+ wait_var_event(&xef->exec_queue.pending_removal,
+ !atomic_read(&xef->exec_queue.pending_removal));
-:220: CHECK:UNCOMMENTED_DEFINITION: struct mutex definition without comment
#220: FILE: drivers/gpu/drm/xe/xe_user.h:39:
+ struct mutex lock;
total: 0 errors, 0 warnings, 5 checks, 195 lines checked
fbd760d9bee6 Add a Kconfig option for GPU work period
-:40: CHECK:SPACING: No space is necessary after a cast
#40: FILE: drivers/gpu/drm/xe/xe_device.c:116:
+ uid = (unsigned int) cred->euid.val;
-:107: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#107: FILE: drivers/gpu/drm/xe/xe_device.c:152:
+ ret = xa_alloc(&xe->work_period.users, &idx, user,
+ xa_limit_32b, GFP_KERNEL);
-:116: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#116: FILE: drivers/gpu/drm/xe/xe_device.c:161:
+ if (!schedule_delayed_work(&user->delay_work,
msecs_to_jiffies(XE_WORK_PERIOD_INTERVAL)))
-:190: CHECK:BRACES: Blank lines aren't necessary after an open brace '{'
#190: FILE: drivers/gpu/drm/xe/xe_exec_queue.c:911:
+ if (IS_ENABLED(CONFIG_TRACE_GPU_WORK_PERIOD)) {
+
total: 0 errors, 0 warnings, 4 checks, 205 lines checked
8c756ecf8c81 Handle xe_work_period destruction
^ permalink raw reply [flat|nested] 20+ messages in thread
* ✓ CI.KUnit: success for : Add GPU work period support for Xe driver
2025-08-22 8:59 [PATCH v2 0/8] [ANDROID]: Add GPU work period support for Xe driver Aakash Deep Sarkar
` (8 preceding siblings ...)
2025-08-22 9:39 ` ✗ CI.checkpatch: warning for : Add GPU work period support for Xe driver Patchwork
@ 2025-08-22 9:40 ` Patchwork
2025-08-22 10:44 ` ✓ Xe.CI.BAT: " Patchwork
2025-08-23 3:50 ` ✗ Xe.CI.Full: failure " Patchwork
11 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2025-08-22 9:40 UTC (permalink / raw)
To: Aakash Deep Sarkar; +Cc: intel-xe
== Series Details ==
Series: : Add GPU work period support for Xe driver
URL : https://patchwork.freedesktop.org/series/153341/
State : success
== Summary ==
+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[09:39:17] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[09:39:21] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[09:39:49] Starting KUnit Kernel (1/1)...
[09:39:49] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[09:39:50] ================== guc_buf (11 subtests) ===================
[09:39:50] [PASSED] test_smallest
[09:39:50] [PASSED] test_largest
[09:39:50] [PASSED] test_granular
[09:39:50] [PASSED] test_unique
[09:39:50] [PASSED] test_overlap
[09:39:50] [PASSED] test_reusable
[09:39:50] [PASSED] test_too_big
[09:39:50] [PASSED] test_flush
[09:39:50] [PASSED] test_lookup
[09:39:50] [PASSED] test_data
[09:39:50] [PASSED] test_class
[09:39:50] ===================== [PASSED] guc_buf =====================
[09:39:50] =================== guc_dbm (7 subtests) ===================
[09:39:50] [PASSED] test_empty
[09:39:50] [PASSED] test_default
[09:39:50] ======================== test_size ========================
[09:39:50] [PASSED] 4
[09:39:50] [PASSED] 8
[09:39:50] [PASSED] 32
[09:39:50] [PASSED] 256
[09:39:50] ==================== [PASSED] test_size ====================
[09:39:50] ======================= test_reuse ========================
[09:39:50] [PASSED] 4
[09:39:50] [PASSED] 8
[09:39:50] [PASSED] 32
[09:39:50] [PASSED] 256
[09:39:50] =================== [PASSED] test_reuse ====================
[09:39:50] =================== test_range_overlap ====================
[09:39:50] [PASSED] 4
[09:39:50] [PASSED] 8
[09:39:50] [PASSED] 32
[09:39:50] [PASSED] 256
[09:39:50] =============== [PASSED] test_range_overlap ================
[09:39:50] =================== test_range_compact ====================
[09:39:50] [PASSED] 4
[09:39:50] [PASSED] 8
[09:39:50] [PASSED] 32
[09:39:50] [PASSED] 256
[09:39:50] =============== [PASSED] test_range_compact ================
[09:39:50] ==================== test_range_spare =====================
[09:39:50] [PASSED] 4
[09:39:50] [PASSED] 8
[09:39:50] [PASSED] 32
[09:39:50] [PASSED] 256
[09:39:50] ================ [PASSED] test_range_spare =================
[09:39:50] ===================== [PASSED] guc_dbm =====================
[09:39:50] =================== guc_idm (6 subtests) ===================
[09:39:50] [PASSED] bad_init
[09:39:50] [PASSED] no_init
[09:39:50] [PASSED] init_fini
[09:39:50] [PASSED] check_used
[09:39:50] [PASSED] check_quota
[09:39:50] [PASSED] check_all
[09:39:50] ===================== [PASSED] guc_idm =====================
[09:39:50] ================== no_relay (3 subtests) ===================
[09:39:50] [PASSED] xe_drops_guc2pf_if_not_ready
[09:39:50] [PASSED] xe_drops_guc2vf_if_not_ready
[09:39:50] [PASSED] xe_rejects_send_if_not_ready
[09:39:50] ==================== [PASSED] no_relay =====================
[09:39:50] ================== pf_relay (14 subtests) ==================
[09:39:50] [PASSED] pf_rejects_guc2pf_too_short
[09:39:50] [PASSED] pf_rejects_guc2pf_too_long
[09:39:50] [PASSED] pf_rejects_guc2pf_no_payload
[09:39:50] [PASSED] pf_fails_no_payload
[09:39:50] [PASSED] pf_fails_bad_origin
[09:39:50] [PASSED] pf_fails_bad_type
[09:39:50] [PASSED] pf_txn_reports_error
[09:39:50] [PASSED] pf_txn_sends_pf2guc
[09:39:50] [PASSED] pf_sends_pf2guc
[09:39:50] [SKIPPED] pf_loopback_nop
[09:39:50] [SKIPPED] pf_loopback_echo
[09:39:50] [SKIPPED] pf_loopback_fail
[09:39:50] [SKIPPED] pf_loopback_busy
[09:39:50] [SKIPPED] pf_loopback_retry
[09:39:50] ==================== [PASSED] pf_relay =====================
[09:39:50] ================== vf_relay (3 subtests) ===================
[09:39:50] [PASSED] vf_rejects_guc2vf_too_short
[09:39:50] [PASSED] vf_rejects_guc2vf_too_long
[09:39:50] [PASSED] vf_rejects_guc2vf_no_payload
[09:39:50] ==================== [PASSED] vf_relay =====================
[09:39:50] ===================== lmtt (1 subtest) =====================
[09:39:50] ======================== test_ops =========================
[09:39:50] [PASSED] 2-level
[09:39:50] [PASSED] multi-level
[09:39:50] ==================== [PASSED] test_ops =====================
[09:39:50] ====================== [PASSED] lmtt =======================
[09:39:50] ================= pf_service (11 subtests) =================
[09:39:50] [PASSED] pf_negotiate_any
[09:39:50] [PASSED] pf_negotiate_base_match
[09:39:50] [PASSED] pf_negotiate_base_newer
[09:39:50] [PASSED] pf_negotiate_base_next
[09:39:50] [SKIPPED] pf_negotiate_base_older
[09:39:50] [PASSED] pf_negotiate_base_prev
[09:39:50] [PASSED] pf_negotiate_latest_match
[09:39:50] [PASSED] pf_negotiate_latest_newer
[09:39:50] [PASSED] pf_negotiate_latest_next
[09:39:50] [SKIPPED] pf_negotiate_latest_older
[09:39:50] [SKIPPED] pf_negotiate_latest_prev
[09:39:50] =================== [PASSED] pf_service ====================
[09:39:50] =================== xe_mocs (2 subtests) ===================
[09:39:50] ================ xe_live_mocs_kernel_kunit ================
[09:39:50] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[09:39:50] ================ xe_live_mocs_reset_kunit =================
[09:39:50] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[09:39:50] ==================== [SKIPPED] xe_mocs =====================
[09:39:50] ================= xe_migrate (2 subtests) ==================
[09:39:50] ================= xe_migrate_sanity_kunit =================
[09:39:50] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[09:39:50] ================== xe_validate_ccs_kunit ==================
[09:39:50] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[09:39:50] =================== [SKIPPED] xe_migrate ===================
[09:39:50] ================== xe_dma_buf (1 subtest) ==================
[09:39:50] ==================== xe_dma_buf_kunit =====================
[09:39:50] ================ [SKIPPED] xe_dma_buf_kunit ================
[09:39:50] =================== [SKIPPED] xe_dma_buf ===================
[09:39:50] ================= xe_bo_shrink (1 subtest) =================
[09:39:50] =================== xe_bo_shrink_kunit ====================
[09:39:50] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[09:39:50] ================== [SKIPPED] xe_bo_shrink ==================
[09:39:50] ==================== xe_bo (2 subtests) ====================
[09:39:50] ================== xe_ccs_migrate_kunit ===================
[09:39:50] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[09:39:50] ==================== xe_bo_evict_kunit ====================
[09:39:50] =============== [SKIPPED] xe_bo_evict_kunit ================
[09:39:50] ===================== [SKIPPED] xe_bo ======================
[09:39:50] ==================== args (11 subtests) ====================
[09:39:50] [PASSED] count_args_test
[09:39:50] [PASSED] call_args_example
[09:39:50] [PASSED] call_args_test
[09:39:50] [PASSED] drop_first_arg_example
[09:39:50] [PASSED] drop_first_arg_test
[09:39:50] [PASSED] first_arg_example
[09:39:50] [PASSED] first_arg_test
[09:39:50] [PASSED] last_arg_example
[09:39:50] [PASSED] last_arg_test
[09:39:50] [PASSED] pick_arg_example
[09:39:50] [PASSED] sep_comma_example
[09:39:50] ====================== [PASSED] args =======================
[09:39:50] =================== xe_pci (3 subtests) ====================
[09:39:50] ==================== check_graphics_ip ====================
[09:39:50] [PASSED] 12.70 Xe_LPG
[09:39:50] [PASSED] 12.71 Xe_LPG
[09:39:50] [PASSED] 12.74 Xe_LPG+
[09:39:50] [PASSED] 20.01 Xe2_HPG
[09:39:50] [PASSED] 20.02 Xe2_HPG
[09:39:50] [PASSED] 20.04 Xe2_LPG
[09:39:50] [PASSED] 30.00 Xe3_LPG
[09:39:50] [PASSED] 30.01 Xe3_LPG
[09:39:50] [PASSED] 30.03 Xe3_LPG
[09:39:50] ================ [PASSED] check_graphics_ip ================
[09:39:50] ===================== check_media_ip ======================
[09:39:50] [PASSED] 13.00 Xe_LPM+
[09:39:50] [PASSED] 13.01 Xe2_HPM
[09:39:50] [PASSED] 20.00 Xe2_LPM
[09:39:50] [PASSED] 30.00 Xe3_LPM
[09:39:50] [PASSED] 30.02 Xe3_LPM
[09:39:50] ================= [PASSED] check_media_ip ==================
[09:39:50] ================= check_platform_gt_count =================
[09:39:50] [PASSED] 0x9A60 (TIGERLAKE)
[09:39:50] [PASSED] 0x9A68 (TIGERLAKE)
[09:39:50] [PASSED] 0x9A70 (TIGERLAKE)
[09:39:50] [PASSED] 0x9A40 (TIGERLAKE)
[09:39:50] [PASSED] 0x9A49 (TIGERLAKE)
[09:39:50] [PASSED] 0x9A59 (TIGERLAKE)
[09:39:50] [PASSED] 0x9A78 (TIGERLAKE)
[09:39:50] [PASSED] 0x9AC0 (TIGERLAKE)
[09:39:50] [PASSED] 0x9AC9 (TIGERLAKE)
[09:39:50] [PASSED] 0x9AD9 (TIGERLAKE)
[09:39:50] [PASSED] 0x9AF8 (TIGERLAKE)
[09:39:50] [PASSED] 0x4C80 (ROCKETLAKE)
[09:39:50] [PASSED] 0x4C8A (ROCKETLAKE)
[09:39:50] [PASSED] 0x4C8B (ROCKETLAKE)
[09:39:50] [PASSED] 0x4C8C (ROCKETLAKE)
[09:39:50] [PASSED] 0x4C90 (ROCKETLAKE)
[09:39:50] [PASSED] 0x4C9A (ROCKETLAKE)
[09:39:50] [PASSED] 0x4680 (ALDERLAKE_S)
[09:39:50] [PASSED] 0x4682 (ALDERLAKE_S)
[09:39:50] [PASSED] 0x4688 (ALDERLAKE_S)
[09:39:50] [PASSED] 0x468A (ALDERLAKE_S)
[09:39:50] [PASSED] 0x468B (ALDERLAKE_S)
[09:39:50] [PASSED] 0x4690 (ALDERLAKE_S)
[09:39:50] [PASSED] 0x4692 (ALDERLAKE_S)
[09:39:50] [PASSED] 0x4693 (ALDERLAKE_S)
[09:39:50] [PASSED] 0x46A0 (ALDERLAKE_P)
[09:39:50] [PASSED] 0x46A1 (ALDERLAKE_P)
[09:39:50] [PASSED] 0x46A2 (ALDERLAKE_P)
[09:39:50] [PASSED] 0x46A3 (ALDERLAKE_P)
[09:39:50] [PASSED] 0x46A6 (ALDERLAKE_P)
[09:39:50] [PASSED] 0x46A8 (ALDERLAKE_P)
[09:39:50] [PASSED] 0x46AA (ALDERLAKE_P)
[09:39:50] [PASSED] 0x462A (ALDERLAKE_P)
[09:39:50] [PASSED] 0x4626 (ALDERLAKE_P)
[09:39:50] [PASSED] 0x4628 (ALDERLAKE_P)
[09:39:50] [PASSED] 0x46B0 (ALDERLAKE_P)
[09:39:50] [PASSED] 0x46B1 (ALDERLAKE_P)
[09:39:50] [PASSED] 0x46B2 (ALDERLAKE_P)
[09:39:50] [PASSED] 0x46B3 (ALDERLAKE_P)
[09:39:50] [PASSED] 0x46C0 (ALDERLAKE_P)
[09:39:50] [PASSED] 0x46C1 (ALDERLAKE_P)
[09:39:50] [PASSED] 0x46C2 (ALDERLAKE_P)
[09:39:50] [PASSED] 0x46C3 (ALDERLAKE_P)
[09:39:50] [PASSED] 0x46D0 (ALDERLAKE_N)
[09:39:50] [PASSED] 0x46D1 (ALDERLAKE_N)
[09:39:50] [PASSED] 0x46D2 (ALDERLAKE_N)
[09:39:50] [PASSED] 0x46D3 (ALDERLAKE_N)
[09:39:50] [PASSED] 0x46D4 (ALDERLAKE_N)
[09:39:50] [PASSED] 0xA721 (ALDERLAKE_P)
[09:39:50] [PASSED] 0xA7A1 (ALDERLAKE_P)
[09:39:50] [PASSED] 0xA7A9 (ALDERLAKE_P)
[09:39:50] [PASSED] 0xA7AC (ALDERLAKE_P)
[09:39:50] [PASSED] 0xA7AD (ALDERLAKE_P)
[09:39:50] [PASSED] 0xA720 (ALDERLAKE_P)
[09:39:50] [PASSED] 0xA7A0 (ALDERLAKE_P)
[09:39:50] [PASSED] 0xA7A8 (ALDERLAKE_P)
[09:39:50] [PASSED] 0xA7AA (ALDERLAKE_P)
[09:39:50] [PASSED] 0xA7AB (ALDERLAKE_P)
[09:39:50] [PASSED] 0xA780 (ALDERLAKE_S)
[09:39:50] [PASSED] 0xA781 (ALDERLAKE_S)
[09:39:50] [PASSED] 0xA782 (ALDERLAKE_S)
[09:39:50] [PASSED] 0xA783 (ALDERLAKE_S)
[09:39:50] [PASSED] 0xA788 (ALDERLAKE_S)
[09:39:50] [PASSED] 0xA789 (ALDERLAKE_S)
[09:39:50] [PASSED] 0xA78A (ALDERLAKE_S)
[09:39:50] [PASSED] 0xA78B (ALDERLAKE_S)
[09:39:50] [PASSED] 0x4905 (DG1)
[09:39:50] [PASSED] 0x4906 (DG1)
[09:39:50] [PASSED] 0x4907 (DG1)
[09:39:50] [PASSED] 0x4908 (DG1)
[09:39:50] [PASSED] 0x4909 (DG1)
[09:39:50] [PASSED] 0x56C0 (DG2)
[09:39:50] [PASSED] 0x56C2 (DG2)
[09:39:50] [PASSED] 0x56C1 (DG2)
[09:39:50] [PASSED] 0x7D51 (METEORLAKE)
[09:39:50] [PASSED] 0x7DD1 (METEORLAKE)
[09:39:50] [PASSED] 0x7D41 (METEORLAKE)
[09:39:50] [PASSED] 0x7D67 (METEORLAKE)
[09:39:50] [PASSED] 0xB640 (METEORLAKE)
[09:39:50] [PASSED] 0x56A0 (DG2)
[09:39:50] [PASSED] 0x56A1 (DG2)
[09:39:50] [PASSED] 0x56A2 (DG2)
[09:39:50] [PASSED] 0x56BE (DG2)
[09:39:50] [PASSED] 0x56BF (DG2)
[09:39:50] [PASSED] 0x5690 (DG2)
[09:39:50] [PASSED] 0x5691 (DG2)
[09:39:50] [PASSED] 0x5692 (DG2)
[09:39:50] [PASSED] 0x56A5 (DG2)
[09:39:50] [PASSED] 0x56A6 (DG2)
[09:39:50] [PASSED] 0x56B0 (DG2)
[09:39:50] [PASSED] 0x56B1 (DG2)
[09:39:50] [PASSED] 0x56BA (DG2)
[09:39:50] [PASSED] 0x56BB (DG2)
[09:39:50] [PASSED] 0x56BC (DG2)
[09:39:50] [PASSED] 0x56BD (DG2)
[09:39:50] [PASSED] 0x5693 (DG2)
[09:39:50] [PASSED] 0x5694 (DG2)
[09:39:50] [PASSED] 0x5695 (DG2)
[09:39:50] [PASSED] 0x56A3 (DG2)
[09:39:50] [PASSED] 0x56A4 (DG2)
[09:39:50] [PASSED] 0x56B2 (DG2)
[09:39:50] [PASSED] 0x56B3 (DG2)
[09:39:50] [PASSED] 0x5696 (DG2)
[09:39:50] [PASSED] 0x5697 (DG2)
[09:39:50] [PASSED] 0xB69 (PVC)
[09:39:50] [PASSED] 0xB6E (PVC)
[09:39:50] [PASSED] 0xBD4 (PVC)
[09:39:50] [PASSED] 0xBD5 (PVC)
[09:39:50] [PASSED] 0xBD6 (PVC)
[09:39:50] [PASSED] 0xBD7 (PVC)
[09:39:50] [PASSED] 0xBD8 (PVC)
[09:39:50] [PASSED] 0xBD9 (PVC)
[09:39:50] [PASSED] 0xBDA (PVC)
[09:39:50] [PASSED] 0xBDB (PVC)
[09:39:50] [PASSED] 0xBE0 (PVC)
[09:39:50] [PASSED] 0xBE1 (PVC)
[09:39:50] [PASSED] 0xBE5 (PVC)
[09:39:50] [PASSED] 0x7D40 (METEORLAKE)
[09:39:50] [PASSED] 0x7D45 (METEORLAKE)
[09:39:50] [PASSED] 0x7D55 (METEORLAKE)
[09:39:50] [PASSED] 0x7D60 (METEORLAKE)
[09:39:50] [PASSED] 0x7DD5 (METEORLAKE)
[09:39:50] [PASSED] 0x6420 (LUNARLAKE)
[09:39:50] [PASSED] 0x64A0 (LUNARLAKE)
[09:39:50] [PASSED] 0x64B0 (LUNARLAKE)
[09:39:50] [PASSED] 0xE202 (BATTLEMAGE)
[09:39:50] [PASSED] 0xE209 (BATTLEMAGE)
[09:39:50] [PASSED] 0xE20B (BATTLEMAGE)
[09:39:50] [PASSED] 0xE20C (BATTLEMAGE)
[09:39:50] [PASSED] 0xE20D (BATTLEMAGE)
[09:39:50] [PASSED] 0xE210 (BATTLEMAGE)
[09:39:50] [PASSED] 0xE211 (BATTLEMAGE)
[09:39:50] [PASSED] 0xE212 (BATTLEMAGE)
[09:39:50] [PASSED] 0xE216 (BATTLEMAGE)
[09:39:50] [PASSED] 0xE220 (BATTLEMAGE)
[09:39:50] [PASSED] 0xE221 (BATTLEMAGE)
[09:39:50] [PASSED] 0xE222 (BATTLEMAGE)
[09:39:50] [PASSED] 0xE223 (BATTLEMAGE)
[09:39:50] [PASSED] 0xB080 (PANTHERLAKE)
[09:39:50] [PASSED] 0xB081 (PANTHERLAKE)
[09:39:50] [PASSED] 0xB082 (PANTHERLAKE)
[09:39:50] [PASSED] 0xB083 (PANTHERLAKE)
[09:39:50] [PASSED] 0xB084 (PANTHERLAKE)
[09:39:50] [PASSED] 0xB085 (PANTHERLAKE)
[09:39:50] [PASSED] 0xB086 (PANTHERLAKE)
[09:39:50] [PASSED] 0xB087 (PANTHERLAKE)
[09:39:50] [PASSED] 0xB08F (PANTHERLAKE)
[09:39:50] [PASSED] 0xB090 (PANTHERLAKE)
[09:39:50] [PASSED] 0xB0A0 (PANTHERLAKE)
[09:39:50] [PASSED] 0xB0B0 (PANTHERLAKE)
[09:39:50] [PASSED] 0xFD80 (PANTHERLAKE)
[09:39:50] [PASSED] 0xFD81 (PANTHERLAKE)
[09:39:50] ============= [PASSED] check_platform_gt_count =============
[09:39:50] ===================== [PASSED] xe_pci ======================
[09:39:50] =================== xe_rtp (2 subtests) ====================
[09:39:50] =============== xe_rtp_process_to_sr_tests ================
[09:39:50] [PASSED] coalesce-same-reg
[09:39:50] [PASSED] no-match-no-add
[09:39:50] [PASSED] match-or
[09:39:50] [PASSED] match-or-xfail
[09:39:50] [PASSED] no-match-no-add-multiple-rules
[09:39:50] [PASSED] two-regs-two-entries
[09:39:50] [PASSED] clr-one-set-other
[09:39:50] [PASSED] set-field
[09:39:50] [PASSED] conflict-duplicate
[09:39:50] [PASSED] conflict-not-disjoint
[09:39:50] [PASSED] conflict-reg-type
[09:39:50] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[09:39:50] ================== xe_rtp_process_tests ===================
[09:39:50] [PASSED] active1
[09:39:50] [PASSED] active2
[09:39:50] [PASSED] active-inactive
[09:39:50] [PASSED] inactive-active
[09:39:50] [PASSED] inactive-1st_or_active-inactive
[09:39:50] [PASSED] inactive-2nd_or_active-inactive
[09:39:50] [PASSED] inactive-last_or_active-inactive
[09:39:50] [PASSED] inactive-no_or_active-inactive
[09:39:50] ============== [PASSED] xe_rtp_process_tests ===============
[09:39:50] ===================== [PASSED] xe_rtp ======================
[09:39:50] ==================== xe_wa (1 subtest) =====================
[09:39:50] ======================== xe_wa_gt =========================
[09:39:50] [PASSED] TIGERLAKE (B0)
[09:39:50] [PASSED] DG1 (A0)
[09:39:50] [PASSED] DG1 (B0)
[09:39:50] [PASSED] ALDERLAKE_S (A0)
[09:39:50] [PASSED] ALDERLAKE_S (B0)
[09:39:50] [PASSED] ALDERLAKE_S (C0)
[09:39:50] [PASSED] ALDERLAKE_S (D0)
[09:39:50] [PASSED] ALDERLAKE_P (A0)
[09:39:50] [PASSED] ALDERLAKE_P (B0)
[09:39:50] [PASSED] ALDERLAKE_P (C0)
[09:39:50] [PASSED] ALDERLAKE_S_RPLS (D0)
[09:39:50] [PASSED] ALDERLAKE_P_RPLU (E0)
[09:39:50] [PASSED] DG2_G10 (C0)
[09:39:50] [PASSED] DG2_G11 (B1)
[09:39:50] [PASSED] DG2_G12 (A1)
[09:39:50] [PASSED] METEORLAKE (g:A0, m:A0)
[09:39:50] [PASSED] METEORLAKE (g:A0, m:A0)
[09:39:50] [PASSED] METEORLAKE (g:A0, m:A0)
[09:39:50] [PASSED] LUNARLAKE (g:A0, m:A0)
[09:39:50] [PASSED] LUNARLAKE (g:B0, m:A0)
stty: 'standard input': Inappropriate ioctl for device
[09:39:50] [PASSED] BATTLEMAGE (g:A0, m:A1)
[09:39:50] [PASSED] PANTHERLAKE (g:A0, m:A0)
[09:39:50] ==================== [PASSED] xe_wa_gt =====================
[09:39:50] ====================== [PASSED] xe_wa ======================
[09:39:50] ============================================================
[09:39:50] Testing complete. Ran 298 tests: passed: 282, skipped: 16
[09:39:50] Elapsed time: 33.240s total, 4.295s configuring, 28.578s building, 0.333s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[09:39:50] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[09:39:52] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[09:40:14] Starting KUnit Kernel (1/1)...
[09:40:14] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[09:40:14] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[09:40:14] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[09:40:14] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[09:40:14] =========== drm_validate_clone_mode (2 subtests) ===========
[09:40:14] ============== drm_test_check_in_clone_mode ===============
[09:40:14] [PASSED] in_clone_mode
[09:40:14] [PASSED] not_in_clone_mode
[09:40:14] ========== [PASSED] drm_test_check_in_clone_mode ===========
[09:40:14] =============== drm_test_check_valid_clones ===============
[09:40:14] [PASSED] not_in_clone_mode
[09:40:14] [PASSED] valid_clone
[09:40:14] [PASSED] invalid_clone
[09:40:14] =========== [PASSED] drm_test_check_valid_clones ===========
[09:40:14] ============= [PASSED] drm_validate_clone_mode =============
[09:40:14] ============= drm_validate_modeset (1 subtest) =============
[09:40:14] [PASSED] drm_test_check_connector_changed_modeset
[09:40:14] ============== [PASSED] drm_validate_modeset ===============
[09:40:14] ====== drm_test_bridge_get_current_state (2 subtests) ======
[09:40:14] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[09:40:14] [PASSED] drm_test_drm_bridge_get_current_state_legacy
[09:40:14] ======== [PASSED] drm_test_bridge_get_current_state ========
[09:40:14] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[09:40:14] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[09:40:14] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[09:40:14] [PASSED] drm_test_drm_bridge_helper_reset_crtc_legacy
[09:40:14] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[09:40:14] ============== drm_bridge_alloc (2 subtests) ===============
[09:40:14] [PASSED] drm_test_drm_bridge_alloc_basic
[09:40:14] [PASSED] drm_test_drm_bridge_alloc_get_put
[09:40:14] ================ [PASSED] drm_bridge_alloc =================
[09:40:14] ================== drm_buddy (7 subtests) ==================
[09:40:14] [PASSED] drm_test_buddy_alloc_limit
[09:40:14] [PASSED] drm_test_buddy_alloc_optimistic
[09:40:14] [PASSED] drm_test_buddy_alloc_pessimistic
[09:40:14] [PASSED] drm_test_buddy_alloc_pathological
[09:40:14] [PASSED] drm_test_buddy_alloc_contiguous
[09:40:14] [PASSED] drm_test_buddy_alloc_clear
[09:40:14] [PASSED] drm_test_buddy_alloc_range_bias
[09:40:14] ==================== [PASSED] drm_buddy ====================
[09:40:14] ============= drm_cmdline_parser (40 subtests) =============
[09:40:14] [PASSED] drm_test_cmdline_force_d_only
[09:40:14] [PASSED] drm_test_cmdline_force_D_only_dvi
[09:40:14] [PASSED] drm_test_cmdline_force_D_only_hdmi
[09:40:14] [PASSED] drm_test_cmdline_force_D_only_not_digital
[09:40:14] [PASSED] drm_test_cmdline_force_e_only
[09:40:14] [PASSED] drm_test_cmdline_res
[09:40:14] [PASSED] drm_test_cmdline_res_vesa
[09:40:14] [PASSED] drm_test_cmdline_res_vesa_rblank
[09:40:14] [PASSED] drm_test_cmdline_res_rblank
[09:40:14] [PASSED] drm_test_cmdline_res_bpp
[09:40:14] [PASSED] drm_test_cmdline_res_refresh
[09:40:14] [PASSED] drm_test_cmdline_res_bpp_refresh
[09:40:14] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[09:40:14] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[09:40:14] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[09:40:14] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[09:40:14] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[09:40:14] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[09:40:14] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[09:40:14] [PASSED] drm_test_cmdline_res_margins_force_on
[09:40:14] [PASSED] drm_test_cmdline_res_vesa_margins
[09:40:14] [PASSED] drm_test_cmdline_name
[09:40:14] [PASSED] drm_test_cmdline_name_bpp
[09:40:14] [PASSED] drm_test_cmdline_name_option
[09:40:14] [PASSED] drm_test_cmdline_name_bpp_option
[09:40:14] [PASSED] drm_test_cmdline_rotate_0
[09:40:14] [PASSED] drm_test_cmdline_rotate_90
[09:40:14] [PASSED] drm_test_cmdline_rotate_180
[09:40:14] [PASSED] drm_test_cmdline_rotate_270
[09:40:14] [PASSED] drm_test_cmdline_hmirror
[09:40:14] [PASSED] drm_test_cmdline_vmirror
[09:40:14] [PASSED] drm_test_cmdline_margin_options
[09:40:14] [PASSED] drm_test_cmdline_multiple_options
[09:40:14] [PASSED] drm_test_cmdline_bpp_extra_and_option
[09:40:14] [PASSED] drm_test_cmdline_extra_and_option
[09:40:14] [PASSED] drm_test_cmdline_freestanding_options
[09:40:14] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[09:40:14] [PASSED] drm_test_cmdline_panel_orientation
[09:40:14] ================ drm_test_cmdline_invalid =================
[09:40:14] [PASSED] margin_only
[09:40:14] [PASSED] interlace_only
[09:40:14] [PASSED] res_missing_x
[09:40:14] [PASSED] res_missing_y
[09:40:14] [PASSED] res_bad_y
[09:40:14] [PASSED] res_missing_y_bpp
[09:40:14] [PASSED] res_bad_bpp
[09:40:14] [PASSED] res_bad_refresh
[09:40:14] [PASSED] res_bpp_refresh_force_on_off
[09:40:14] [PASSED] res_invalid_mode
[09:40:14] [PASSED] res_bpp_wrong_place_mode
[09:40:14] [PASSED] name_bpp_refresh
[09:40:14] [PASSED] name_refresh
[09:40:14] [PASSED] name_refresh_wrong_mode
[09:40:14] [PASSED] name_refresh_invalid_mode
[09:40:14] [PASSED] rotate_multiple
[09:40:14] [PASSED] rotate_invalid_val
[09:40:14] [PASSED] rotate_truncated
[09:40:14] [PASSED] invalid_option
[09:40:14] [PASSED] invalid_tv_option
[09:40:14] [PASSED] truncated_tv_option
[09:40:14] ============ [PASSED] drm_test_cmdline_invalid =============
[09:40:14] =============== drm_test_cmdline_tv_options ===============
[09:40:14] [PASSED] NTSC
[09:40:14] [PASSED] NTSC_443
[09:40:14] [PASSED] NTSC_J
[09:40:14] [PASSED] PAL
[09:40:14] [PASSED] PAL_M
[09:40:14] [PASSED] PAL_N
[09:40:14] [PASSED] SECAM
[09:40:14] [PASSED] MONO_525
[09:40:14] [PASSED] MONO_625
[09:40:14] =========== [PASSED] drm_test_cmdline_tv_options ===========
[09:40:14] =============== [PASSED] drm_cmdline_parser ================
[09:40:14] ========== drmm_connector_hdmi_init (20 subtests) ==========
[09:40:14] [PASSED] drm_test_connector_hdmi_init_valid
[09:40:14] [PASSED] drm_test_connector_hdmi_init_bpc_8
[09:40:14] [PASSED] drm_test_connector_hdmi_init_bpc_10
[09:40:14] [PASSED] drm_test_connector_hdmi_init_bpc_12
[09:40:14] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[09:40:14] [PASSED] drm_test_connector_hdmi_init_bpc_null
[09:40:14] [PASSED] drm_test_connector_hdmi_init_formats_empty
[09:40:14] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[09:40:14] === drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[09:40:14] [PASSED] supported_formats=0x9 yuv420_allowed=1
[09:40:14] [PASSED] supported_formats=0x9 yuv420_allowed=0
[09:40:14] [PASSED] supported_formats=0x3 yuv420_allowed=1
[09:40:14] [PASSED] supported_formats=0x3 yuv420_allowed=0
[09:40:14] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[09:40:14] [PASSED] drm_test_connector_hdmi_init_null_ddc
[09:40:14] [PASSED] drm_test_connector_hdmi_init_null_product
[09:40:14] [PASSED] drm_test_connector_hdmi_init_null_vendor
[09:40:14] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[09:40:14] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[09:40:14] [PASSED] drm_test_connector_hdmi_init_product_valid
[09:40:14] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[09:40:14] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[09:40:14] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[09:40:14] ========= drm_test_connector_hdmi_init_type_valid =========
[09:40:14] [PASSED] HDMI-A
[09:40:14] [PASSED] HDMI-B
[09:40:14] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[09:40:14] ======== drm_test_connector_hdmi_init_type_invalid ========
[09:40:14] [PASSED] Unknown
[09:40:14] [PASSED] VGA
[09:40:14] [PASSED] DVI-I
[09:40:14] [PASSED] DVI-D
[09:40:14] [PASSED] DVI-A
[09:40:14] [PASSED] Composite
[09:40:14] [PASSED] SVIDEO
[09:40:14] [PASSED] LVDS
[09:40:14] [PASSED] Component
[09:40:14] [PASSED] DIN
[09:40:14] [PASSED] DP
[09:40:14] [PASSED] TV
[09:40:14] [PASSED] eDP
[09:40:14] [PASSED] Virtual
[09:40:14] [PASSED] DSI
[09:40:14] [PASSED] DPI
[09:40:14] [PASSED] Writeback
[09:40:14] [PASSED] SPI
[09:40:14] [PASSED] USB
[09:40:14] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[09:40:14] ============ [PASSED] drmm_connector_hdmi_init =============
[09:40:14] ============= drmm_connector_init (3 subtests) =============
[09:40:14] [PASSED] drm_test_drmm_connector_init
[09:40:14] [PASSED] drm_test_drmm_connector_init_null_ddc
[09:40:14] ========= drm_test_drmm_connector_init_type_valid =========
[09:40:14] [PASSED] Unknown
[09:40:14] [PASSED] VGA
[09:40:14] [PASSED] DVI-I
[09:40:14] [PASSED] DVI-D
[09:40:14] [PASSED] DVI-A
[09:40:14] [PASSED] Composite
[09:40:14] [PASSED] SVIDEO
[09:40:14] [PASSED] LVDS
[09:40:14] [PASSED] Component
[09:40:14] [PASSED] DIN
[09:40:14] [PASSED] DP
[09:40:14] [PASSED] HDMI-A
[09:40:14] [PASSED] HDMI-B
[09:40:14] [PASSED] TV
[09:40:14] [PASSED] eDP
[09:40:14] [PASSED] Virtual
[09:40:14] [PASSED] DSI
[09:40:14] [PASSED] DPI
[09:40:14] [PASSED] Writeback
[09:40:14] [PASSED] SPI
[09:40:14] [PASSED] USB
[09:40:14] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[09:40:14] =============== [PASSED] drmm_connector_init ===============
[09:40:14] ========= drm_connector_dynamic_init (6 subtests) ==========
[09:40:14] [PASSED] drm_test_drm_connector_dynamic_init
[09:40:14] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[09:40:14] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[09:40:14] [PASSED] drm_test_drm_connector_dynamic_init_properties
[09:40:14] ===== drm_test_drm_connector_dynamic_init_type_valid ======
[09:40:14] [PASSED] Unknown
[09:40:14] [PASSED] VGA
[09:40:14] [PASSED] DVI-I
[09:40:14] [PASSED] DVI-D
[09:40:14] [PASSED] DVI-A
[09:40:14] [PASSED] Composite
[09:40:14] [PASSED] SVIDEO
[09:40:14] [PASSED] LVDS
[09:40:14] [PASSED] Component
[09:40:14] [PASSED] DIN
[09:40:14] [PASSED] DP
[09:40:14] [PASSED] HDMI-A
[09:40:14] [PASSED] HDMI-B
[09:40:14] [PASSED] TV
[09:40:14] [PASSED] eDP
[09:40:14] [PASSED] Virtual
[09:40:14] [PASSED] DSI
[09:40:14] [PASSED] DPI
[09:40:14] [PASSED] Writeback
[09:40:14] [PASSED] SPI
[09:40:14] [PASSED] USB
[09:40:14] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[09:40:14] ======== drm_test_drm_connector_dynamic_init_name =========
[09:40:14] [PASSED] Unknown
[09:40:14] [PASSED] VGA
[09:40:14] [PASSED] DVI-I
[09:40:14] [PASSED] DVI-D
[09:40:14] [PASSED] DVI-A
[09:40:14] [PASSED] Composite
[09:40:14] [PASSED] SVIDEO
[09:40:14] [PASSED] LVDS
[09:40:14] [PASSED] Component
[09:40:14] [PASSED] DIN
[09:40:14] [PASSED] DP
[09:40:14] [PASSED] HDMI-A
[09:40:14] [PASSED] HDMI-B
[09:40:14] [PASSED] TV
[09:40:14] [PASSED] eDP
[09:40:14] [PASSED] Virtual
[09:40:14] [PASSED] DSI
[09:40:14] [PASSED] DPI
[09:40:14] [PASSED] Writeback
[09:40:14] [PASSED] SPI
[09:40:14] [PASSED] USB
[09:40:14] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[09:40:14] =========== [PASSED] drm_connector_dynamic_init ============
[09:40:14] ==== drm_connector_dynamic_register_early (4 subtests) =====
[09:40:14] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[09:40:14] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[09:40:14] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[09:40:14] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[09:40:14] ====== [PASSED] drm_connector_dynamic_register_early =======
[09:40:14] ======= drm_connector_dynamic_register (7 subtests) ========
[09:40:14] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[09:40:14] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[09:40:14] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[09:40:14] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[09:40:14] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[09:40:14] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[09:40:14] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[09:40:14] ========= [PASSED] drm_connector_dynamic_register ==========
[09:40:14] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[09:40:14] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[09:40:14] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[09:40:14] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[09:40:14] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[09:40:14] ========== drm_test_get_tv_mode_from_name_valid ===========
[09:40:14] [PASSED] NTSC
[09:40:14] [PASSED] NTSC-443
[09:40:14] [PASSED] NTSC-J
[09:40:14] [PASSED] PAL
[09:40:14] [PASSED] PAL-M
[09:40:14] [PASSED] PAL-N
[09:40:14] [PASSED] SECAM
[09:40:14] [PASSED] Mono
[09:40:14] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[09:40:14] [PASSED] drm_test_get_tv_mode_from_name_truncated
[09:40:14] ============ [PASSED] drm_get_tv_mode_from_name ============
[09:40:14] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[09:40:14] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[09:40:14] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[09:40:14] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[09:40:14] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[09:40:14] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[09:40:14] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[09:40:14] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[09:40:14] [PASSED] VIC 96
[09:40:14] [PASSED] VIC 97
[09:40:14] [PASSED] VIC 101
[09:40:14] [PASSED] VIC 102
[09:40:14] [PASSED] VIC 106
[09:40:14] [PASSED] VIC 107
[09:40:14] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[09:40:14] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[09:40:14] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[09:40:14] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[09:40:14] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[09:40:14] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[09:40:14] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[09:40:14] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[09:40:14] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[09:40:14] [PASSED] Automatic
[09:40:14] [PASSED] Full
[09:40:14] [PASSED] Limited 16:235
[09:40:14] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[09:40:14] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[09:40:14] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[09:40:14] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[09:40:14] === drm_test_drm_hdmi_connector_get_output_format_name ====
[09:40:14] [PASSED] RGB
[09:40:14] [PASSED] YUV 4:2:0
[09:40:14] [PASSED] YUV 4:2:2
[09:40:14] [PASSED] YUV 4:4:4
[09:40:14] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[09:40:14] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[09:40:14] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[09:40:14] ============= drm_damage_helper (21 subtests) ==============
[09:40:14] [PASSED] drm_test_damage_iter_no_damage
[09:40:14] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[09:40:14] [PASSED] drm_test_damage_iter_no_damage_src_moved
[09:40:14] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[09:40:14] [PASSED] drm_test_damage_iter_no_damage_not_visible
[09:40:14] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[09:40:14] [PASSED] drm_test_damage_iter_no_damage_no_fb
[09:40:14] [PASSED] drm_test_damage_iter_simple_damage
[09:40:14] [PASSED] drm_test_damage_iter_single_damage
[09:40:14] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[09:40:14] [PASSED] drm_test_damage_iter_single_damage_outside_src
[09:40:14] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[09:40:14] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[09:40:14] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[09:40:14] [PASSED] drm_test_damage_iter_single_damage_src_moved
[09:40:14] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[09:40:14] [PASSED] drm_test_damage_iter_damage
[09:40:14] [PASSED] drm_test_damage_iter_damage_one_intersect
[09:40:14] [PASSED] drm_test_damage_iter_damage_one_outside
[09:40:14] [PASSED] drm_test_damage_iter_damage_src_moved
[09:40:14] [PASSED] drm_test_damage_iter_damage_not_visible
[09:40:14] ================ [PASSED] drm_damage_helper ================
[09:40:14] ============== drm_dp_mst_helper (3 subtests) ==============
[09:40:14] ============== drm_test_dp_mst_calc_pbn_mode ==============
[09:40:14] [PASSED] Clock 154000 BPP 30 DSC disabled
[09:40:14] [PASSED] Clock 234000 BPP 30 DSC disabled
[09:40:14] [PASSED] Clock 297000 BPP 24 DSC disabled
[09:40:14] [PASSED] Clock 332880 BPP 24 DSC enabled
[09:40:14] [PASSED] Clock 324540 BPP 24 DSC enabled
[09:40:14] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[09:40:14] ============== drm_test_dp_mst_calc_pbn_div ===============
[09:40:14] [PASSED] Link rate 2000000 lane count 4
[09:40:14] [PASSED] Link rate 2000000 lane count 2
[09:40:14] [PASSED] Link rate 2000000 lane count 1
[09:40:14] [PASSED] Link rate 1350000 lane count 4
[09:40:14] [PASSED] Link rate 1350000 lane count 2
[09:40:14] [PASSED] Link rate 1350000 lane count 1
[09:40:14] [PASSED] Link rate 1000000 lane count 4
[09:40:14] [PASSED] Link rate 1000000 lane count 2
[09:40:14] [PASSED] Link rate 1000000 lane count 1
[09:40:14] [PASSED] Link rate 810000 lane count 4
[09:40:14] [PASSED] Link rate 810000 lane count 2
[09:40:14] [PASSED] Link rate 810000 lane count 1
[09:40:14] [PASSED] Link rate 540000 lane count 4
[09:40:14] [PASSED] Link rate 540000 lane count 2
[09:40:14] [PASSED] Link rate 540000 lane count 1
[09:40:14] [PASSED] Link rate 270000 lane count 4
[09:40:14] [PASSED] Link rate 270000 lane count 2
[09:40:14] [PASSED] Link rate 270000 lane count 1
[09:40:14] [PASSED] Link rate 162000 lane count 4
[09:40:14] [PASSED] Link rate 162000 lane count 2
[09:40:14] [PASSED] Link rate 162000 lane count 1
[09:40:14] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[09:40:14] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[09:40:14] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[09:40:14] [PASSED] DP_POWER_UP_PHY with port number
[09:40:14] [PASSED] DP_POWER_DOWN_PHY with port number
[09:40:14] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[09:40:14] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[09:40:14] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[09:40:14] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[09:40:14] [PASSED] DP_QUERY_PAYLOAD with port number
[09:40:14] [PASSED] DP_QUERY_PAYLOAD with VCPI
[09:40:14] [PASSED] DP_REMOTE_DPCD_READ with port number
[09:40:14] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[09:40:14] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[09:40:14] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[09:40:14] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[09:40:14] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[09:40:14] [PASSED] DP_REMOTE_I2C_READ with port number
[09:40:14] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[09:40:14] [PASSED] DP_REMOTE_I2C_READ with transactions array
[09:40:14] [PASSED] DP_REMOTE_I2C_WRITE with port number
[09:40:14] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[09:40:14] [PASSED] DP_REMOTE_I2C_WRITE with data array
[09:40:14] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[09:40:14] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[09:40:14] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[09:40:14] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[09:40:14] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[09:40:14] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[09:40:14] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[09:40:14] ================ [PASSED] drm_dp_mst_helper ================
[09:40:14] ================== drm_exec (7 subtests) ===================
[09:40:14] [PASSED] sanitycheck
[09:40:14] [PASSED] test_lock
[09:40:14] [PASSED] test_lock_unlock
[09:40:14] [PASSED] test_duplicates
[09:40:14] [PASSED] test_prepare
[09:40:14] [PASSED] test_prepare_array
[09:40:14] [PASSED] test_multiple_loops
[09:40:14] ==================== [PASSED] drm_exec =====================
[09:40:14] =========== drm_format_helper_test (17 subtests) ===========
[09:40:14] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[09:40:14] [PASSED] single_pixel_source_buffer
[09:40:14] [PASSED] single_pixel_clip_rectangle
[09:40:14] [PASSED] well_known_colors
[09:40:14] [PASSED] destination_pitch
[09:40:14] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[09:40:14] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[09:40:14] [PASSED] single_pixel_source_buffer
[09:40:14] [PASSED] single_pixel_clip_rectangle
[09:40:14] [PASSED] well_known_colors
[09:40:14] [PASSED] destination_pitch
[09:40:14] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[09:40:14] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[09:40:14] [PASSED] single_pixel_source_buffer
[09:40:14] [PASSED] single_pixel_clip_rectangle
[09:40:14] [PASSED] well_known_colors
[09:40:14] [PASSED] destination_pitch
[09:40:14] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[09:40:14] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[09:40:14] [PASSED] single_pixel_source_buffer
[09:40:14] [PASSED] single_pixel_clip_rectangle
[09:40:14] [PASSED] well_known_colors
[09:40:14] [PASSED] destination_pitch
[09:40:14] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[09:40:14] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[09:40:14] [PASSED] single_pixel_source_buffer
[09:40:14] [PASSED] single_pixel_clip_rectangle
[09:40:14] [PASSED] well_known_colors
[09:40:14] [PASSED] destination_pitch
[09:40:14] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[09:40:14] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[09:40:14] [PASSED] single_pixel_source_buffer
[09:40:14] [PASSED] single_pixel_clip_rectangle
[09:40:14] [PASSED] well_known_colors
[09:40:14] [PASSED] destination_pitch
[09:40:14] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[09:40:14] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[09:40:14] [PASSED] single_pixel_source_buffer
[09:40:14] [PASSED] single_pixel_clip_rectangle
[09:40:14] [PASSED] well_known_colors
[09:40:14] [PASSED] destination_pitch
[09:40:14] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[09:40:14] ============= drm_test_fb_xrgb8888_to_bgr888 ==============
[09:40:14] [PASSED] single_pixel_source_buffer
[09:40:14] [PASSED] single_pixel_clip_rectangle
[09:40:14] [PASSED] well_known_colors
[09:40:14] [PASSED] destination_pitch
[09:40:14] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[09:40:14] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[09:40:14] [PASSED] single_pixel_source_buffer
[09:40:14] [PASSED] single_pixel_clip_rectangle
[09:40:14] [PASSED] well_known_colors
[09:40:14] [PASSED] destination_pitch
[09:40:14] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[09:40:14] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[09:40:14] [PASSED] single_pixel_source_buffer
[09:40:14] [PASSED] single_pixel_clip_rectangle
[09:40:14] [PASSED] well_known_colors
[09:40:14] [PASSED] destination_pitch
[09:40:14] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[09:40:14] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[09:40:14] [PASSED] single_pixel_source_buffer
[09:40:14] [PASSED] single_pixel_clip_rectangle
[09:40:14] [PASSED] well_known_colors
[09:40:14] [PASSED] destination_pitch
[09:40:14] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[09:40:14] ============== drm_test_fb_xrgb8888_to_mono ===============
[09:40:14] [PASSED] single_pixel_source_buffer
[09:40:14] [PASSED] single_pixel_clip_rectangle
[09:40:14] [PASSED] well_known_colors
[09:40:14] [PASSED] destination_pitch
[09:40:14] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[09:40:14] ==================== drm_test_fb_swab =====================
[09:40:14] [PASSED] single_pixel_source_buffer
[09:40:14] [PASSED] single_pixel_clip_rectangle
[09:40:14] [PASSED] well_known_colors
[09:40:14] [PASSED] destination_pitch
[09:40:14] ================ [PASSED] drm_test_fb_swab =================
[09:40:14] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[09:40:14] [PASSED] single_pixel_source_buffer
[09:40:14] [PASSED] single_pixel_clip_rectangle
[09:40:14] [PASSED] well_known_colors
[09:40:14] [PASSED] destination_pitch
[09:40:14] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[09:40:14] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[09:40:14] [PASSED] single_pixel_source_buffer
[09:40:14] [PASSED] single_pixel_clip_rectangle
[09:40:14] [PASSED] well_known_colors
[09:40:14] [PASSED] destination_pitch
[09:40:14] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[09:40:14] ================= drm_test_fb_clip_offset =================
[09:40:14] [PASSED] pass through
[09:40:14] [PASSED] horizontal offset
[09:40:14] [PASSED] vertical offset
[09:40:14] [PASSED] horizontal and vertical offset
[09:40:14] [PASSED] horizontal offset (custom pitch)
[09:40:14] [PASSED] vertical offset (custom pitch)
[09:40:14] [PASSED] horizontal and vertical offset (custom pitch)
[09:40:14] ============= [PASSED] drm_test_fb_clip_offset =============
[09:40:14] =================== drm_test_fb_memcpy ====================
[09:40:14] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[09:40:14] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[09:40:14] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[09:40:14] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[09:40:14] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[09:40:14] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[09:40:14] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[09:40:14] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[09:40:14] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[09:40:14] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[09:40:14] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[09:40:14] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[09:40:14] =============== [PASSED] drm_test_fb_memcpy ================
[09:40:14] ============= [PASSED] drm_format_helper_test ==============
[09:40:14] ================= drm_format (18 subtests) =================
[09:40:14] [PASSED] drm_test_format_block_width_invalid
[09:40:14] [PASSED] drm_test_format_block_width_one_plane
[09:40:14] [PASSED] drm_test_format_block_width_two_plane
[09:40:14] [PASSED] drm_test_format_block_width_three_plane
[09:40:14] [PASSED] drm_test_format_block_width_tiled
[09:40:14] [PASSED] drm_test_format_block_height_invalid
[09:40:14] [PASSED] drm_test_format_block_height_one_plane
[09:40:14] [PASSED] drm_test_format_block_height_two_plane
[09:40:14] [PASSED] drm_test_format_block_height_three_plane
[09:40:14] [PASSED] drm_test_format_block_height_tiled
[09:40:14] [PASSED] drm_test_format_min_pitch_invalid
[09:40:14] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[09:40:14] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[09:40:14] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[09:40:14] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[09:40:14] [PASSED] drm_test_format_min_pitch_two_plane
[09:40:14] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[09:40:14] [PASSED] drm_test_format_min_pitch_tiled
[09:40:14] =================== [PASSED] drm_format ====================
[09:40:14] ============== drm_framebuffer (10 subtests) ===============
[09:40:14] ========== drm_test_framebuffer_check_src_coords ==========
[09:40:14] [PASSED] Success: source fits into fb
[09:40:14] [PASSED] Fail: overflowing fb with x-axis coordinate
[09:40:14] [PASSED] Fail: overflowing fb with y-axis coordinate
[09:40:14] [PASSED] Fail: overflowing fb with source width
[09:40:14] [PASSED] Fail: overflowing fb with source height
[09:40:14] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[09:40:14] [PASSED] drm_test_framebuffer_cleanup
[09:40:14] =============== drm_test_framebuffer_create ===============
[09:40:14] [PASSED] ABGR8888 normal sizes
[09:40:14] [PASSED] ABGR8888 max sizes
[09:40:14] [PASSED] ABGR8888 pitch greater than min required
[09:40:14] [PASSED] ABGR8888 pitch less than min required
[09:40:14] [PASSED] ABGR8888 Invalid width
[09:40:14] [PASSED] ABGR8888 Invalid buffer handle
[09:40:14] [PASSED] No pixel format
[09:40:14] [PASSED] ABGR8888 Width 0
[09:40:14] [PASSED] ABGR8888 Height 0
[09:40:14] [PASSED] ABGR8888 Out of bound height * pitch combination
[09:40:14] [PASSED] ABGR8888 Large buffer offset
[09:40:14] [PASSED] ABGR8888 Buffer offset for inexistent plane
[09:40:14] [PASSED] ABGR8888 Invalid flag
[09:40:14] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[09:40:14] [PASSED] ABGR8888 Valid buffer modifier
[09:40:14] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[09:40:14] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[09:40:14] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[09:40:14] [PASSED] NV12 Normal sizes
[09:40:14] [PASSED] NV12 Max sizes
[09:40:14] [PASSED] NV12 Invalid pitch
[09:40:14] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[09:40:14] [PASSED] NV12 different modifier per-plane
[09:40:14] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[09:40:14] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[09:40:14] [PASSED] NV12 Modifier for inexistent plane
[09:40:14] [PASSED] NV12 Handle for inexistent plane
[09:40:14] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[09:40:14] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[09:40:14] [PASSED] YVU420 Normal sizes
[09:40:14] [PASSED] YVU420 Max sizes
[09:40:14] [PASSED] YVU420 Invalid pitch
[09:40:14] [PASSED] YVU420 Different pitches
[09:40:14] [PASSED] YVU420 Different buffer offsets/pitches
[09:40:14] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[09:40:14] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[09:40:14] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[09:40:14] [PASSED] YVU420 Valid modifier
[09:40:14] [PASSED] YVU420 Different modifiers per plane
[09:40:14] [PASSED] YVU420 Modifier for inexistent plane
[09:40:14] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[09:40:14] [PASSED] X0L2 Normal sizes
[09:40:14] [PASSED] X0L2 Max sizes
[09:40:14] [PASSED] X0L2 Invalid pitch
[09:40:14] [PASSED] X0L2 Pitch greater than minimum required
[09:40:14] [PASSED] X0L2 Handle for inexistent plane
[09:40:14] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[09:40:14] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[09:40:14] [PASSED] X0L2 Valid modifier
[09:40:14] [PASSED] X0L2 Modifier for inexistent plane
[09:40:14] =========== [PASSED] drm_test_framebuffer_create ===========
[09:40:14] [PASSED] drm_test_framebuffer_free
[09:40:14] [PASSED] drm_test_framebuffer_init
[09:40:14] [PASSED] drm_test_framebuffer_init_bad_format
[09:40:14] [PASSED] drm_test_framebuffer_init_dev_mismatch
[09:40:14] [PASSED] drm_test_framebuffer_lookup
[09:40:14] [PASSED] drm_test_framebuffer_lookup_inexistent
[09:40:14] [PASSED] drm_test_framebuffer_modifiers_not_supported
[09:40:14] ================= [PASSED] drm_framebuffer =================
[09:40:14] ================ drm_gem_shmem (8 subtests) ================
[09:40:14] [PASSED] drm_gem_shmem_test_obj_create
[09:40:14] [PASSED] drm_gem_shmem_test_obj_create_private
[09:40:14] [PASSED] drm_gem_shmem_test_pin_pages
[09:40:14] [PASSED] drm_gem_shmem_test_vmap
[09:40:14] [PASSED] drm_gem_shmem_test_get_pages_sgt
[09:40:14] [PASSED] drm_gem_shmem_test_get_sg_table
[09:40:14] [PASSED] drm_gem_shmem_test_madvise
[09:40:14] [PASSED] drm_gem_shmem_test_purge
[09:40:14] ================== [PASSED] drm_gem_shmem ==================
[09:40:14] === drm_atomic_helper_connector_hdmi_check (27 subtests) ===
[09:40:14] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[09:40:14] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[09:40:14] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[09:40:14] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[09:40:14] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[09:40:14] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[09:40:14] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 =======
[09:40:14] [PASSED] Automatic
[09:40:14] [PASSED] Full
[09:40:14] [PASSED] Limited 16:235
[09:40:14] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[09:40:14] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[09:40:14] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[09:40:14] [PASSED] drm_test_check_disable_connector
[09:40:14] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[09:40:14] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[09:40:14] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[09:40:14] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[09:40:14] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[09:40:14] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[09:40:14] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[09:40:14] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[09:40:14] [PASSED] drm_test_check_output_bpc_dvi
[09:40:14] [PASSED] drm_test_check_output_bpc_format_vic_1
[09:40:14] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[09:40:14] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[09:40:14] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[09:40:14] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[09:40:14] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[09:40:14] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[09:40:14] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[09:40:14] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[09:40:14] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[09:40:14] [PASSED] drm_test_check_broadcast_rgb_value
[09:40:14] [PASSED] drm_test_check_bpc_8_value
[09:40:14] [PASSED] drm_test_check_bpc_10_value
[09:40:14] [PASSED] drm_test_check_bpc_12_value
[09:40:14] [PASSED] drm_test_check_format_value
[09:40:14] [PASSED] drm_test_check_tmds_char_value
[09:40:14] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[09:40:14] = drm_atomic_helper_connector_hdmi_mode_valid (4 subtests) =
[09:40:14] [PASSED] drm_test_check_mode_valid
[09:40:14] [PASSED] drm_test_check_mode_valid_reject
[09:40:14] [PASSED] drm_test_check_mode_valid_reject_rate
[09:40:14] [PASSED] drm_test_check_mode_valid_reject_max_clock
[09:40:14] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[09:40:14] ================= drm_managed (2 subtests) =================
[09:40:14] [PASSED] drm_test_managed_release_action
[09:40:14] [PASSED] drm_test_managed_run_action
[09:40:14] =================== [PASSED] drm_managed ===================
[09:40:14] =================== drm_mm (6 subtests) ====================
[09:40:14] [PASSED] drm_test_mm_init
[09:40:14] [PASSED] drm_test_mm_debug
[09:40:14] [PASSED] drm_test_mm_align32
[09:40:14] [PASSED] drm_test_mm_align64
[09:40:14] [PASSED] drm_test_mm_lowest
[09:40:14] [PASSED] drm_test_mm_highest
[09:40:14] ===================== [PASSED] drm_mm ======================
[09:40:14] ============= drm_modes_analog_tv (5 subtests) =============
[09:40:14] [PASSED] drm_test_modes_analog_tv_mono_576i
[09:40:14] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[09:40:14] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[09:40:14] [PASSED] drm_test_modes_analog_tv_pal_576i
[09:40:14] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[09:40:14] =============== [PASSED] drm_modes_analog_tv ===============
[09:40:14] ============== drm_plane_helper (2 subtests) ===============
[09:40:14] =============== drm_test_check_plane_state ================
[09:40:14] [PASSED] clipping_simple
[09:40:14] [PASSED] clipping_rotate_reflect
[09:40:14] [PASSED] positioning_simple
[09:40:14] [PASSED] upscaling
[09:40:14] [PASSED] downscaling
[09:40:14] [PASSED] rounding1
[09:40:14] [PASSED] rounding2
[09:40:14] [PASSED] rounding3
[09:40:14] [PASSED] rounding4
[09:40:14] =========== [PASSED] drm_test_check_plane_state ============
[09:40:14] =========== drm_test_check_invalid_plane_state ============
[09:40:14] [PASSED] positioning_invalid
[09:40:14] [PASSED] upscaling_invalid
[09:40:14] [PASSED] downscaling_invalid
[09:40:14] ======= [PASSED] drm_test_check_invalid_plane_state ========
[09:40:14] ================ [PASSED] drm_plane_helper =================
[09:40:14] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[09:40:14] ====== drm_test_connector_helper_tv_get_modes_check =======
[09:40:14] [PASSED] None
[09:40:14] [PASSED] PAL
[09:40:14] [PASSED] NTSC
[09:40:14] [PASSED] Both, NTSC Default
[09:40:14] [PASSED] Both, PAL Default
[09:40:14] [PASSED] Both, NTSC Default, with PAL on command-line
[09:40:14] [PASSED] Both, PAL Default, with NTSC on command-line
[09:40:14] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[09:40:14] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[09:40:14] ================== drm_rect (9 subtests) ===================
[09:40:14] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[09:40:14] [PASSED] drm_test_rect_clip_scaled_not_clipped
[09:40:14] [PASSED] drm_test_rect_clip_scaled_clipped
[09:40:14] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[09:40:14] ================= drm_test_rect_intersect =================
[09:40:14] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[09:40:14] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[09:40:14] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[09:40:14] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[09:40:14] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[09:40:14] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[09:40:14] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[09:40:14] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[09:40:14] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[09:40:14] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[09:40:14] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[09:40:14] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[09:40:14] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[09:40:14] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[09:40:14] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[09:40:14] ============= [PASSED] drm_test_rect_intersect =============
[09:40:14] ================ drm_test_rect_calc_hscale ================
[09:40:14] [PASSED] normal use
[09:40:14] [PASSED] out of max range
[09:40:14] [PASSED] out of min range
[09:40:14] [PASSED] zero dst
[09:40:14] [PASSED] negative src
[09:40:14] [PASSED] negative dst
[09:40:14] ============ [PASSED] drm_test_rect_calc_hscale ============
[09:40:14] ================ drm_test_rect_calc_vscale ================
[09:40:14] [PASSED] normal use
[09:40:14] [PASSED] out of max range
[09:40:14] [PASSED] out of min range
[09:40:14] [PASSED] zero dst
[09:40:14] [PASSED] negative src
[09:40:14] [PASSED] negative dst
[09:40:14] ============ [PASSED] drm_test_rect_calc_vscale ============
[09:40:14] ================== drm_test_rect_rotate ===================
[09:40:14] [PASSED] reflect-x
[09:40:14] [PASSED] reflect-y
[09:40:14] [PASSED] rotate-0
[09:40:14] [PASSED] rotate-90
[09:40:14] [PASSED] rotate-180
[09:40:14] [PASSED] rotate-270
stty: 'standard input': Inappropriate ioctl for device
[09:40:14] ============== [PASSED] drm_test_rect_rotate ===============
[09:40:14] ================ drm_test_rect_rotate_inv =================
[09:40:14] [PASSED] reflect-x
[09:40:14] [PASSED] reflect-y
[09:40:14] [PASSED] rotate-0
[09:40:14] [PASSED] rotate-90
[09:40:14] [PASSED] rotate-180
[09:40:14] [PASSED] rotate-270
[09:40:14] ============ [PASSED] drm_test_rect_rotate_inv =============
[09:40:14] ==================== [PASSED] drm_rect =====================
[09:40:14] ============ drm_sysfb_modeset_test (1 subtest) ============
[09:40:14] ============ drm_test_sysfb_build_fourcc_list =============
[09:40:14] [PASSED] no native formats
[09:40:14] [PASSED] XRGB8888 as native format
[09:40:14] [PASSED] remove duplicates
[09:40:14] [PASSED] convert alpha formats
[09:40:14] [PASSED] random formats
[09:40:14] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[09:40:14] ============= [PASSED] drm_sysfb_modeset_test ==============
[09:40:14] ============================================================
[09:40:14] Testing complete. Ran 616 tests: passed: 616
[09:40:14] Elapsed time: 24.552s total, 1.753s configuring, 22.631s building, 0.137s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[09:40:15] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[09:40:16] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[09:40:24] Starting KUnit Kernel (1/1)...
[09:40:24] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[09:40:24] ================= ttm_device (5 subtests) ==================
[09:40:24] [PASSED] ttm_device_init_basic
[09:40:24] [PASSED] ttm_device_init_multiple
[09:40:24] [PASSED] ttm_device_fini_basic
[09:40:24] [PASSED] ttm_device_init_no_vma_man
[09:40:24] ================== ttm_device_init_pools ==================
[09:40:24] [PASSED] No DMA allocations, no DMA32 required
[09:40:24] [PASSED] DMA allocations, DMA32 required
[09:40:24] [PASSED] No DMA allocations, DMA32 required
[09:40:24] [PASSED] DMA allocations, no DMA32 required
[09:40:24] ============== [PASSED] ttm_device_init_pools ==============
[09:40:24] =================== [PASSED] ttm_device ====================
[09:40:24] ================== ttm_pool (8 subtests) ===================
[09:40:24] ================== ttm_pool_alloc_basic ===================
[09:40:24] [PASSED] One page
[09:40:24] [PASSED] More than one page
[09:40:24] [PASSED] Above the allocation limit
[09:40:24] [PASSED] One page, with coherent DMA mappings enabled
[09:40:24] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[09:40:24] ============== [PASSED] ttm_pool_alloc_basic ===============
[09:40:24] ============== ttm_pool_alloc_basic_dma_addr ==============
[09:40:24] [PASSED] One page
[09:40:24] [PASSED] More than one page
[09:40:24] [PASSED] Above the allocation limit
[09:40:24] [PASSED] One page, with coherent DMA mappings enabled
[09:40:24] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[09:40:24] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[09:40:24] [PASSED] ttm_pool_alloc_order_caching_match
[09:40:24] [PASSED] ttm_pool_alloc_caching_mismatch
[09:40:24] [PASSED] ttm_pool_alloc_order_mismatch
[09:40:24] [PASSED] ttm_pool_free_dma_alloc
[09:40:24] [PASSED] ttm_pool_free_no_dma_alloc
[09:40:24] [PASSED] ttm_pool_fini_basic
[09:40:24] ==================== [PASSED] ttm_pool =====================
[09:40:24] ================ ttm_resource (8 subtests) =================
[09:40:24] ================= ttm_resource_init_basic =================
[09:40:24] [PASSED] Init resource in TTM_PL_SYSTEM
[09:40:24] [PASSED] Init resource in TTM_PL_VRAM
[09:40:24] [PASSED] Init resource in a private placement
[09:40:24] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[09:40:24] ============= [PASSED] ttm_resource_init_basic =============
[09:40:24] [PASSED] ttm_resource_init_pinned
[09:40:24] [PASSED] ttm_resource_fini_basic
[09:40:24] [PASSED] ttm_resource_manager_init_basic
[09:40:24] [PASSED] ttm_resource_manager_usage_basic
[09:40:24] [PASSED] ttm_resource_manager_set_used_basic
[09:40:24] [PASSED] ttm_sys_man_alloc_basic
[09:40:24] [PASSED] ttm_sys_man_free_basic
[09:40:24] ================== [PASSED] ttm_resource ===================
[09:40:24] =================== ttm_tt (15 subtests) ===================
[09:40:24] ==================== ttm_tt_init_basic ====================
[09:40:24] [PASSED] Page-aligned size
[09:40:24] [PASSED] Extra pages requested
[09:40:24] ================ [PASSED] ttm_tt_init_basic ================
[09:40:24] [PASSED] ttm_tt_init_misaligned
[09:40:24] [PASSED] ttm_tt_fini_basic
[09:40:24] [PASSED] ttm_tt_fini_sg
[09:40:24] [PASSED] ttm_tt_fini_shmem
[09:40:24] [PASSED] ttm_tt_create_basic
[09:40:24] [PASSED] ttm_tt_create_invalid_bo_type
[09:40:24] [PASSED] ttm_tt_create_ttm_exists
[09:40:24] [PASSED] ttm_tt_create_failed
[09:40:24] [PASSED] ttm_tt_destroy_basic
[09:40:24] [PASSED] ttm_tt_populate_null_ttm
[09:40:24] [PASSED] ttm_tt_populate_populated_ttm
[09:40:24] [PASSED] ttm_tt_unpopulate_basic
[09:40:24] [PASSED] ttm_tt_unpopulate_empty_ttm
[09:40:24] [PASSED] ttm_tt_swapin_basic
[09:40:24] ===================== [PASSED] ttm_tt ======================
[09:40:24] =================== ttm_bo (14 subtests) ===================
[09:40:24] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[09:40:24] [PASSED] Cannot be interrupted and sleeps
[09:40:24] [PASSED] Cannot be interrupted, locks straight away
[09:40:24] [PASSED] Can be interrupted, sleeps
[09:40:24] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[09:40:24] [PASSED] ttm_bo_reserve_locked_no_sleep
[09:40:24] [PASSED] ttm_bo_reserve_no_wait_ticket
[09:40:24] [PASSED] ttm_bo_reserve_double_resv
[09:40:24] [PASSED] ttm_bo_reserve_interrupted
[09:40:24] [PASSED] ttm_bo_reserve_deadlock
[09:40:24] [PASSED] ttm_bo_unreserve_basic
[09:40:24] [PASSED] ttm_bo_unreserve_pinned
[09:40:24] [PASSED] ttm_bo_unreserve_bulk
[09:40:24] [PASSED] ttm_bo_put_basic
[09:40:24] [PASSED] ttm_bo_put_shared_resv
[09:40:24] [PASSED] ttm_bo_pin_basic
[09:40:24] [PASSED] ttm_bo_pin_unpin_resource
[09:40:24] [PASSED] ttm_bo_multiple_pin_one_unpin
[09:40:24] ===================== [PASSED] ttm_bo ======================
[09:40:24] ============== ttm_bo_validate (21 subtests) ===============
[09:40:24] ============== ttm_bo_init_reserved_sys_man ===============
[09:40:24] [PASSED] Buffer object for userspace
[09:40:24] [PASSED] Kernel buffer object
[09:40:24] [PASSED] Shared buffer object
[09:40:24] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[09:40:24] ============== ttm_bo_init_reserved_mock_man ==============
[09:40:24] [PASSED] Buffer object for userspace
[09:40:24] [PASSED] Kernel buffer object
[09:40:24] [PASSED] Shared buffer object
[09:40:24] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[09:40:24] [PASSED] ttm_bo_init_reserved_resv
[09:40:24] ================== ttm_bo_validate_basic ==================
[09:40:24] [PASSED] Buffer object for userspace
[09:40:24] [PASSED] Kernel buffer object
[09:40:24] [PASSED] Shared buffer object
[09:40:24] ============== [PASSED] ttm_bo_validate_basic ==============
[09:40:24] [PASSED] ttm_bo_validate_invalid_placement
[09:40:24] ============= ttm_bo_validate_same_placement ==============
[09:40:24] [PASSED] System manager
[09:40:24] [PASSED] VRAM manager
[09:40:24] ========= [PASSED] ttm_bo_validate_same_placement ==========
[09:40:24] [PASSED] ttm_bo_validate_failed_alloc
[09:40:24] [PASSED] ttm_bo_validate_pinned
[09:40:24] [PASSED] ttm_bo_validate_busy_placement
[09:40:24] ================ ttm_bo_validate_multihop =================
[09:40:24] [PASSED] Buffer object for userspace
[09:40:24] [PASSED] Kernel buffer object
[09:40:24] [PASSED] Shared buffer object
[09:40:24] ============ [PASSED] ttm_bo_validate_multihop =============
[09:40:24] ========== ttm_bo_validate_no_placement_signaled ==========
[09:40:24] [PASSED] Buffer object in system domain, no page vector
[09:40:24] [PASSED] Buffer object in system domain with an existing page vector
[09:40:24] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[09:40:24] ======== ttm_bo_validate_no_placement_not_signaled ========
[09:40:24] [PASSED] Buffer object for userspace
[09:40:24] [PASSED] Kernel buffer object
[09:40:24] [PASSED] Shared buffer object
[09:40:24] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[09:40:24] [PASSED] ttm_bo_validate_move_fence_signaled
[09:40:24] ========= ttm_bo_validate_move_fence_not_signaled =========
[09:40:24] [PASSED] Waits for GPU
[09:40:24] [PASSED] Tries to lock straight away
[09:40:24] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[09:40:24] [PASSED] ttm_bo_validate_happy_evict
[09:40:24] [PASSED] ttm_bo_validate_all_pinned_evict
[09:40:24] [PASSED] ttm_bo_validate_allowed_only_evict
[09:40:24] [PASSED] ttm_bo_validate_deleted_evict
[09:40:24] [PASSED] ttm_bo_validate_busy_domain_evict
[09:40:24] [PASSED] ttm_bo_validate_evict_gutting
[09:40:24] [PASSED] ttm_bo_validate_recrusive_evict
stty: 'standard input': Inappropriate ioctl for device
[09:40:24] ================= [PASSED] ttm_bo_validate =================
[09:40:24] ============================================================
[09:40:24] Testing complete. Ran 101 tests: passed: 101
[09:40:24] Elapsed time: 9.685s total, 1.665s configuring, 7.804s building, 0.190s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 20+ messages in thread
* ✓ Xe.CI.BAT: success for : Add GPU work period support for Xe driver
2025-08-22 8:59 [PATCH v2 0/8] [ANDROID]: Add GPU work period support for Xe driver Aakash Deep Sarkar
` (9 preceding siblings ...)
2025-08-22 9:40 ` ✓ CI.KUnit: success " Patchwork
@ 2025-08-22 10:44 ` Patchwork
2025-08-23 3:50 ` ✗ Xe.CI.Full: failure " Patchwork
11 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2025-08-22 10:44 UTC (permalink / raw)
To: Aakash Deep Sarkar; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 1231 bytes --]
== Series Details ==
Series: : Add GPU work period support for Xe driver
URL : https://patchwork.freedesktop.org/series/153341/
State : success
== Summary ==
CI Bug Log - changes from xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f_BAT -> xe-pw-153341v1_BAT
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (11 -> 11)
------------------------------
No changes in participating hosts
Known issues
------------
Here are the changes found in xe-pw-153341v1_BAT that come from known issues:
### IGT changes ###
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[Intel XE#5783]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5783
Build changes
-------------
* IGT: IGT_8503 -> IGT_8504
* Linux: xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f -> xe-pw-153341v1
IGT_8503: 8503
IGT_8504: 8504
xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f: cca87ca63e2f5b8a785dc59c23e526987530b27f
xe-pw-153341v1: 153341v1
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/index.html
[-- Attachment #2: Type: text/html, Size: 1722 bytes --]
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v2 6/8] [ANDROID]: Implement xe_work_period_worker
2025-08-22 8:59 ` [PATCH v2 6/8] [ANDROID]: Implement xe_work_period_worker Aakash Deep Sarkar
@ 2025-08-22 11:00 ` Matthew Auld
2025-08-22 16:58 ` Matthew Brost
0 siblings, 1 reply; 20+ messages in thread
From: Matthew Auld @ 2025-08-22 11:00 UTC (permalink / raw)
To: Aakash Deep Sarkar, intel-xe
Cc: jeevaka.badrappan, carlos.santa, rodrigo.vivi, matthew.brost
On 22/08/2025 09:59, Aakash Deep Sarkar wrote:
> The work of collecting the GPU run time for a given
> xe_user and emitting its event, is done by the
> xe_work_period_worker kworker. At the time of creation
> of a new xe_user, we simultaneously start a delayed
> kworker thread. The delay of execution is set to be
> 500 ms. After the completion of the work, the kworker
> schedules itself for the next execution. This is done
> as long as the reference to the xe_user pointer is
> valid.
>
> During each execution cycle the xe_work_period_worker
> iterates over all the xe files in the xe_user::filelist
> and accumulate their corresponding GPU runtime into the
> xe_user::active_duration_ns; while also updating each of
> the xe_file::active_duration_ns. The total runtime for
> this uid in the current sampling period is the delta
> between the previous xe_user::active_duration_ns and
> the current xe_user::active_duration_ns.
>
> We also record the current timestamp at the end of each
> invocation to xe_work_period_worker function in the
> xe_user::last_timestamp_ns. The sampling period for this
> uid is the delta between the previous timestamp and the
> current timestamp.
>
> Signed-off-by: Aakash Deep Sarkar <aakash.deep.sarkar@intel.com>
> ---
> drivers/gpu/drm/xe/xe_device.c | 28 +++++++----
> drivers/gpu/drm/xe/xe_user.c | 85 ++++++++++++++++++++++++++++++++--
> drivers/gpu/drm/xe/xe_user.h | 18 +++++--
> 3 files changed, 115 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
> index bd4a1c5c57ca..b4692d45c7e9 100644
> --- a/drivers/gpu/drm/xe/xe_device.c
> +++ b/drivers/gpu/drm/xe/xe_device.c
> @@ -151,12 +151,23 @@ static int xe_file_open(struct drm_device *dev, struct drm_file *file)
>
> user->id = idx;
> drm_dev_get(&xe->drm);
> +
> + xe_user_get(user);
> + if (!schedule_delayed_work(&user->delay_work,
> + msecs_to_jiffies(XE_WORK_PERIOD_INTERVAL)))
> + xe_user_put(user);
> }
> - mutex_lock(&user->filelist_lock);
> +
> + mutex_lock(&user->lock);
> list_add(&xef->user_link, &user->filelist);
> - mutex_unlock(&user->filelist_lock);
> - xef->user = user;
> + mutex_unlock(&user->lock);
>
> + /*
> + * We have already taken a reference to the xe_user in
> + * xe_user_lookup in case this xe file doesn't own the
> + * pointer to the xe_user.
> + */
> + xef->user = user;
> return 0;
> }
>
> @@ -172,11 +183,12 @@ static void xe_file_destroy(struct kref *ref)
> xe_drm_client_put(xef->client);
> kfree(xef->process_name);
>
> - mutex_lock(&xef->user->filelist_lock);
> - list_del(&xef->user_link);
> - mutex_unlock(&xef->user->filelist_lock);
> -
> - xe_user_put(xef->user);
> + if (xef->user) {
> + mutex_lock(&xef->user->lock);
> + list_del(&xef->user_link);
> + xe_user_put(xef->user);
> + mutex_unlock(&xef->user->lock);
> + }
> kfree(xef);
> }
>
> diff --git a/drivers/gpu/drm/xe/xe_user.c b/drivers/gpu/drm/xe/xe_user.c
> index 5c7d21dfcc45..50fb43d03b7b 100644
> --- a/drivers/gpu/drm/xe/xe_user.c
> +++ b/drivers/gpu/drm/xe/xe_user.c
> @@ -6,17 +6,94 @@
> #include <linux/slab.h>
> #include <drm/drm_drv.h>
>
> +#include "xe_assert.h"
> +#include "xe_device_types.h"
> +#include "xe_exec_queue.h"
> +#include "xe_pm.h"
> #include "xe_user.h"
>
> +#define CREATE_TRACE_POINTS
> +#include "xe_power_gpu_work_period_trace.h"
> +
> +static inline void schedule_next_work(struct xe_device *xe, unsigned int id)
> +{
> + struct xe_user *user;
> +
> + mutex_lock(&xe->work_period.lock);
> + user = xa_load(&xe->work_period.users, id);
> + if (user && xe_user_get_unless_zero(user))
> + schedule_delayed_work(&user->delay_work,
> + msecs_to_jiffies(XE_WORK_PERIOD_INTERVAL));
> + mutex_unlock(&xe->work_period.lock);
> +}
> /**
> * worker thread to emit gpu work period event for this xe user
> * @work: work instance for this xe user
> *
> * Return: void
> */
> -static inline void work_period_worker(struct work_struct *work)
> +static void xe_work_period_worker(struct work_struct *work)
> {
> - //TODO: Implement this worker
> + struct xe_user *user = container_of(work, struct xe_user, delay_work.work);
> + struct xe_device *xe = user->xe;
> + struct xe_file *xef;
> + struct xe_exec_queue *q;
> +
> + /*
> + * The GPU work period event requires the following parameters
> + *
> + * gpuid: GPU index in case the platform has more than one GPU
> + * uid: user id of the app
> + * start_time: start time for the sampling period in nanosecs
> + * end_time: end time for the sampling period in nanosecs
> + * active_duration: Total runtime in nanosecs for this uid in
> + * the current sampling period.
> + */
> + u32 gpuid = 0, uid = user->uid, id = user->id;
> + u64 start_time, end_time, active_duration;
> + u64 last_active_duration, last_timestamp;
> + unsigned long i;
> +
> + mutex_lock(&user->lock);
> +
> + // Save the last recorded active duration and timestamp
> + last_active_duration = user->active_duration_ns;
> + last_timestamp = user->last_timestamp_ns;
> +
> + xe_pm_runtime_get(xe);
If this runs every ~500ms is this not the same as disabling RPM
completely? IIRC when the RPM refcount reaches zero there is about 1
second delay before trying to enter runtime suspend. If so, should this
not be something like get_if_active(), and then rather have the resume
side restart the worker as needed?
> +
> + list_for_each_entry(xef, &user->filelist, user_link) {
> +
> + wait_var_event(&xef->exec_queue.pending_removal,
> + !atomic_read(&xef->exec_queue.pending_removal));
> +
> + /* Accumulate all the exec queues from this file */
> + mutex_lock(&xef->exec_queue.lock);
> + xa_for_each(&xef->exec_queue.xa, i, q) {
> + xe_exec_queue_get(q);
> + mutex_unlock(&xef->exec_queue.lock);
> +
> + xe_exec_queue_update_run_ticks(q);
> +
> + mutex_lock(&xef->exec_queue.lock);
> + xe_exec_queue_put(q);
> + }
> + mutex_unlock(&xef->exec_queue.lock);
> + user->active_duration_ns += xef->active_duration_ns;
> + }
> +
> + xe_pm_runtime_put(xe);
> +
> + start_time = last_timestamp + 1;
> + end_time = ktime_get_raw_ns();
> + active_duration = user->active_duration_ns - last_active_duration;
> + trace_gpu_work_period(gpuid, uid, start_time, end_time, active_duration);
> + user->last_timestamp_ns = end_time;
> + xe_user_put(user);
> +
> + mutex_unlock(&user->lock);
> +
> + schedule_next_work(xe, id);
> }
>
> /**
> @@ -38,9 +115,9 @@ struct xe_user *xe_user_alloc(void)
> return NULL;
>
> kref_init(&user->refcount);
> - mutex_init(&user->filelist_lock);
> + mutex_init(&user->lock);
> INIT_LIST_HEAD(&user->filelist);
> - INIT_WORK(&user->work, work_period_worker);
> + INIT_DELAYED_WORK(&user->delay_work, xe_work_period_worker);
> return user;
> }
>
> diff --git a/drivers/gpu/drm/xe/xe_user.h b/drivers/gpu/drm/xe/xe_user.h
> index 55035a9c2c4c..80948199e743 100644
> --- a/drivers/gpu/drm/xe/xe_user.h
> +++ b/drivers/gpu/drm/xe/xe_user.h
> @@ -11,9 +11,11 @@
> #include <linux/mutex.h>
> #include <linux/workqueue.h>
>
> -#include "xe_device.h"
> +#include "xe_device_types.h"
>
>
> +#define XE_WORK_PERIOD_INTERVAL 500
> +
> /**
> * This is a per process/user id structure for a xe device
> * client. It is allocated when a new process/app opens the
> @@ -32,9 +34,9 @@ struct xe_user {
> struct xe_device *xe;
>
> /**
> - * @filelist_lock: lock protecting the filelist
> + * @filelist_lock: lock protecting this structure
> */
> - struct mutex filelist_lock;
> + struct mutex lock;
>
> /**
> * @filelist: list of xe files belonging to this xe user
> @@ -45,7 +47,7 @@ struct xe_user {
> * @work: work to emit the gpu work period event for this
> * xe user
> */
> - struct work_struct work;
> + struct delayed_work delay_work;
>
> /**
> * @id: index of this user into the xe device users array
> @@ -73,6 +75,14 @@ struct xe_user {
> struct xe_user *xe_user_alloc(void);
> struct xe_user *xe_user_lookup(struct xe_device *xe, u32 uid);
>
> +static inline struct xe_user *
> +xe_user_get_unless_zero(struct xe_user *user)
> +{
> + if (kref_get_unless_zero(&user->refcount))
> + return user;
> + return NULL;
> +}
> +
> static inline struct xe_user *
> xe_user_get(struct xe_user *user)
> {
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v2 1/8] [ANDROID]: Add a new xe_user structure
2025-08-22 8:59 ` [PATCH v2 1/8] [ANDROID]: Add a new xe_user structure Aakash Deep Sarkar
@ 2025-08-22 15:48 ` Rodrigo Vivi
2025-08-22 17:01 ` Matthew Brost
0 siblings, 1 reply; 20+ messages in thread
From: Rodrigo Vivi @ 2025-08-22 15:48 UTC (permalink / raw)
To: Aakash Deep Sarkar
Cc: intel-xe, jeevaka.badrappan, carlos.santa, matthew.brost
On Fri, Aug 22, 2025 at 08:59:23AM +0000, Aakash Deep Sarkar wrote:
> For Android GPU work period event we need to track the runtime
> on the GPU for each user id. This means we can have multiple
> xe files opened by different processes/threads belonging to
> the same user id. All these xe files need to be grouped together
> so that one can easily identify these while calculating the
> run time for the given user id.
>
> Currently, the xe driver doesn't record the user id of the
> calling process. Also, all the xe files created using open
> call are clubbed together inside the xe device structure
> with no way to distinguish between them based on the user id
> of the calling process.
I thought I had already given this feedback, but I'm not sure if
I forgot or if I was just ignored. I'm sorry either way.
Android is not a justification. Please keep 'Android' mentions
and ralated 'Android' justifications in the cover letter ONLY!
The patch needs to make sense by itself. The patch needs to make
sense in the currently linux upstream.
This also means no --subject-prefix=ANDROID.
Please!
>
> To remedy these limitations we are adding another layer of
> indirection between xe device and xe file. xe device will
> now have a list of xe users each with a given user id; and each
> xe user will have a list of xe files each of which is created
> by a process that is associated with this user id.
>
> The lifetime of the xe user structure should be between when
> a process with a new user id has opened the xe device; and when
> the last xe file belonging to this user id is closed.
>
> Signed-off-by: Aakash Deep Sarkar <aakash.deep.sarkar@intel.com>
> ---
> drivers/gpu/drm/xe/Makefile | 2 +
> drivers/gpu/drm/xe/xe_user.c | 59 ++++++++++++++++++++++++++
> drivers/gpu/drm/xe/xe_user.h | 81 ++++++++++++++++++++++++++++++++++++
> 3 files changed, 142 insertions(+)
> create mode 100644 drivers/gpu/drm/xe/xe_user.c
> create mode 100644 drivers/gpu/drm/xe/xe_user.h
>
> diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
> index 8e0c3412a757..89212fc7ef44 100644
> --- a/drivers/gpu/drm/xe/Makefile
> +++ b/drivers/gpu/drm/xe/Makefile
> @@ -325,6 +325,8 @@ ifeq ($(CONFIG_DEBUG_FS),y)
>
> xe-$(CONFIG_PCI_IOV) += xe_gt_sriov_pf_debugfs.o
>
> + xe-y += xe_user.o
> +
> xe-$(CONFIG_DRM_XE_DISPLAY) += \
> i915-display/intel_display_debugfs.o \
> i915-display/intel_display_debugfs_params.o \
> diff --git a/drivers/gpu/drm/xe/xe_user.c b/drivers/gpu/drm/xe/xe_user.c
> new file mode 100644
> index 000000000000..8c285a68115a
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_user.c
> @@ -0,0 +1,59 @@
> +// SPDX-License-Identifier: MIT
> +/*
> + * Copyright © 2023 Intel Corporation
> + */
> +
> +#include <linux/slab.h>
> +
> +#include "xe_user.h"
> +
> +/**
> + * worker thread to emit gpu work period event for this xe user
> + * @work: work instance for this xe user
> + *
> + * Return: void
> + */
> +static inline void work_period_worker(struct work_struct *work)
> +{
> + //TODO: Implement this worker
> +}
> +
> +/**
> + * xe_user_alloc() - Allocate xe user
> + * @void: No arg
> + *
> + * Allocate xe user struct to track activity on the gpu
> + * by the application. Call this API whenever a new app
> + * has opened xe device.
> + *
> + * Return: pointer to user struct or NULL if can't allocate
> + */
> +struct xe_user *xe_user_alloc(void)
> +{
> + struct xe_user *user;
> +
> + user = kzalloc(sizeof(*user), GFP_KERNEL);
> + if (!user)
> + return NULL;
> +
> + kref_init(&user->refcount);
> + mutex_init(&user->filelist_lock);
> + INIT_LIST_HEAD(&user->filelist);
> + //TODO: Add a hook into xe device
> + INIT_WORK(&user->work, work_period_worker);
> + return user;
> +}
> +
> +/**
> + * __xe_user_free() - Free user struct
> + * @kref: The reference
> + *
> + * Return: void
> + */
> +void __xe_user_free(struct kref *kref)
> +{
> + struct xe_user *user =
> + container_of(kref, struct xe_user, refcount);
> +
> + kfree(user);
> +}
> diff --git a/drivers/gpu/drm/xe/xe_user.h b/drivers/gpu/drm/xe/xe_user.h
> new file mode 100644
> index 000000000000..e52f66d3f3b0
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_user.h
> @@ -0,0 +1,81 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2023 Intel Corporation
> + */
> +
> +#ifndef _XE_USER_H_
> +#define _XE_USER_H_
> +
> +#include <linux/kref.h>
> +#include <linux/list.h>
> +#include <linux/workqueue.h>
> +
> +/**
> + * This is a per process/user id structure for a xe device
> + * client. It is allocated when a new process/app opens the
> + * xe device and destroyed when the last xe file belonging
> + * to this user id is destroyed.
> + */
> +struct xe_user {
> + /**
> + * @refcount: reference count
> + */
> + struct kref refcount;
> +
> + /**
> + * @xe: pointer to the xe_device
> + */
> + struct xe_device *xe;
> +
> + /**
> + * @filelist_lock: lock protecting the filelist
> + */
> + struct mutex filelist_lock;
> +
> + /**
> + * @filelist: list of xe files belonging to this xe user
> + */
> + struct list_head filelist;
> +
> + /**
> + * @work: work to emit the gpu work period event for this
> + * xe user
> + */
> + struct work_struct work;
> +
> + /**
> + * @uid: user id for this xe_user
> + */
> + u32 uid;
> +
> + /**
> + * @active_duration_ns: sum total of xe_file.active_duration_ns
> + * for all xe files belonging to this xe user
> + */
> + u64 active_duration_ns;
> +
> + /**
> + * @last_timestamp_ns: timestamp in ns when we last emitted event
> + * for this xe user
> + */
> + u64 last_timestamp_ns;
> +};
> +
> +struct xe_user *xe_user_alloc(void);
> +
> +static inline struct xe_user *
> +xe_user_get(struct xe_user *user)
> +{
> + kref_get(&user->refcount);
> + return user;
> +}
> +
> +void __xe_user_free(struct kref *kref);
> +
> +static inline void xe_user_put(struct xe_user *user)
> +{
> + kref_put(&user->refcount, __xe_user_free);
> +}
> +
> +#endif // _XE_USER_H_
> +
> --
> 2.49.0
>
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v2 6/8] [ANDROID]: Implement xe_work_period_worker
2025-08-22 11:00 ` Matthew Auld
@ 2025-08-22 16:58 ` Matthew Brost
0 siblings, 0 replies; 20+ messages in thread
From: Matthew Brost @ 2025-08-22 16:58 UTC (permalink / raw)
To: Matthew Auld
Cc: Aakash Deep Sarkar, intel-xe, jeevaka.badrappan, carlos.santa,
rodrigo.vivi
On Fri, Aug 22, 2025 at 12:00:44PM +0100, Matthew Auld wrote:
> On 22/08/2025 09:59, Aakash Deep Sarkar wrote:
> > The work of collecting the GPU run time for a given
> > xe_user and emitting its event, is done by the
> > xe_work_period_worker kworker. At the time of creation
> > of a new xe_user, we simultaneously start a delayed
> > kworker thread. The delay of execution is set to be
> > 500 ms. After the completion of the work, the kworker
> > schedules itself for the next execution. This is done
> > as long as the reference to the xe_user pointer is
> > valid.
> >
> > During each execution cycle the xe_work_period_worker
> > iterates over all the xe files in the xe_user::filelist
> > and accumulate their corresponding GPU runtime into the
> > xe_user::active_duration_ns; while also updating each of
> > the xe_file::active_duration_ns. The total runtime for
> > this uid in the current sampling period is the delta
> > between the previous xe_user::active_duration_ns and
> > the current xe_user::active_duration_ns.
> >
> > We also record the current timestamp at the end of each
> > invocation to xe_work_period_worker function in the
> > xe_user::last_timestamp_ns. The sampling period for this
> > uid is the delta between the previous timestamp and the
> > current timestamp.
> >
> > Signed-off-by: Aakash Deep Sarkar <aakash.deep.sarkar@intel.com>
> > ---
> > drivers/gpu/drm/xe/xe_device.c | 28 +++++++----
> > drivers/gpu/drm/xe/xe_user.c | 85 ++++++++++++++++++++++++++++++++--
> > drivers/gpu/drm/xe/xe_user.h | 18 +++++--
> > 3 files changed, 115 insertions(+), 16 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
> > index bd4a1c5c57ca..b4692d45c7e9 100644
> > --- a/drivers/gpu/drm/xe/xe_device.c
> > +++ b/drivers/gpu/drm/xe/xe_device.c
> > @@ -151,12 +151,23 @@ static int xe_file_open(struct drm_device *dev, struct drm_file *file)
> > user->id = idx;
> > drm_dev_get(&xe->drm);
> > +
> > + xe_user_get(user);
> > + if (!schedule_delayed_work(&user->delay_work,
> > + msecs_to_jiffies(XE_WORK_PERIOD_INTERVAL)))
> > + xe_user_put(user);
> > }
> > - mutex_lock(&user->filelist_lock);
> > +
> > + mutex_lock(&user->lock);
> > list_add(&xef->user_link, &user->filelist);
> > - mutex_unlock(&user->filelist_lock);
> > - xef->user = user;
> > + mutex_unlock(&user->lock);
> > + /*
> > + * We have already taken a reference to the xe_user in
> > + * xe_user_lookup in case this xe file doesn't own the
> > + * pointer to the xe_user.
> > + */
> > + xef->user = user;
> > return 0;
> > }
> > @@ -172,11 +183,12 @@ static void xe_file_destroy(struct kref *ref)
> > xe_drm_client_put(xef->client);
> > kfree(xef->process_name);
> > - mutex_lock(&xef->user->filelist_lock);
> > - list_del(&xef->user_link);
> > - mutex_unlock(&xef->user->filelist_lock);
> > -
> > - xe_user_put(xef->user);
> > + if (xef->user) {
> > + mutex_lock(&xef->user->lock);
> > + list_del(&xef->user_link);
> > + xe_user_put(xef->user);
> > + mutex_unlock(&xef->user->lock);
> > + }
> > kfree(xef);
> > }
> > diff --git a/drivers/gpu/drm/xe/xe_user.c b/drivers/gpu/drm/xe/xe_user.c
> > index 5c7d21dfcc45..50fb43d03b7b 100644
> > --- a/drivers/gpu/drm/xe/xe_user.c
> > +++ b/drivers/gpu/drm/xe/xe_user.c
> > @@ -6,17 +6,94 @@
> > #include <linux/slab.h>
> > #include <drm/drm_drv.h>
> > +#include "xe_assert.h"
> > +#include "xe_device_types.h"
> > +#include "xe_exec_queue.h"
> > +#include "xe_pm.h"
> > #include "xe_user.h"
> > +#define CREATE_TRACE_POINTS
> > +#include "xe_power_gpu_work_period_trace.h"
> > +
> > +static inline void schedule_next_work(struct xe_device *xe, unsigned int id)
> > +{
> > + struct xe_user *user;
> > +
> > + mutex_lock(&xe->work_period.lock);
> > + user = xa_load(&xe->work_period.users, id);
> > + if (user && xe_user_get_unless_zero(user))
> > + schedule_delayed_work(&user->delay_work,
> > + msecs_to_jiffies(XE_WORK_PERIOD_INTERVAL));
> > + mutex_unlock(&xe->work_period.lock);
> > +}
> > /**
> > * worker thread to emit gpu work period event for this xe user
> > * @work: work instance for this xe user
> > *
> > * Return: void
> > */
> > -static inline void work_period_worker(struct work_struct *work)
> > +static void xe_work_period_worker(struct work_struct *work)
> > {
> > - //TODO: Implement this worker
> > + struct xe_user *user = container_of(work, struct xe_user, delay_work.work);
> > + struct xe_device *xe = user->xe;
> > + struct xe_file *xef;
> > + struct xe_exec_queue *q;
> > +
> > + /*
> > + * The GPU work period event requires the following parameters
> > + *
> > + * gpuid: GPU index in case the platform has more than one GPU
> > + * uid: user id of the app
> > + * start_time: start time for the sampling period in nanosecs
> > + * end_time: end time for the sampling period in nanosecs
> > + * active_duration: Total runtime in nanosecs for this uid in
> > + * the current sampling period.
> > + */
> > + u32 gpuid = 0, uid = user->uid, id = user->id;
> > + u64 start_time, end_time, active_duration;
> > + u64 last_active_duration, last_timestamp;
> > + unsigned long i;
> > +
> > + mutex_lock(&user->lock);
> > +
> > + // Save the last recorded active duration and timestamp
> > + last_active_duration = user->active_duration_ns;
> > + last_timestamp = user->last_timestamp_ns;
> > +
> > + xe_pm_runtime_get(xe);
>
> If this runs every ~500ms is this not the same as disabling RPM completely?
> IIRC when the RPM refcount reaches zero there is about 1 second delay before
> trying to enter runtime suspend. If so, should this not be something like
> get_if_active(), and then rather have the resume side restart the worker as
I agree with Matt Auld here. I'd use get_if_active here and if it fails
skip this function. Ideally you'd put the worker to sleep too (i.e.,
don't requeue it) and on PM resume restart all workers that are asleep.
Matt
> needed?
>
> > +
> > + list_for_each_entry(xef, &user->filelist, user_link) {
> > +
> > + wait_var_event(&xef->exec_queue.pending_removal,
> > + !atomic_read(&xef->exec_queue.pending_removal));
> > +
> > + /* Accumulate all the exec queues from this file */
> > + mutex_lock(&xef->exec_queue.lock);
> > + xa_for_each(&xef->exec_queue.xa, i, q) {
> > + xe_exec_queue_get(q);
> > + mutex_unlock(&xef->exec_queue.lock);
> > +
> > + xe_exec_queue_update_run_ticks(q);
> > +
> > + mutex_lock(&xef->exec_queue.lock);
> > + xe_exec_queue_put(q);
> > + }
> > + mutex_unlock(&xef->exec_queue.lock);
> > + user->active_duration_ns += xef->active_duration_ns;
> > + }
> > +
> > + xe_pm_runtime_put(xe);
> > +
> > + start_time = last_timestamp + 1;
> > + end_time = ktime_get_raw_ns();
> > + active_duration = user->active_duration_ns - last_active_duration;
> > + trace_gpu_work_period(gpuid, uid, start_time, end_time, active_duration);
> > + user->last_timestamp_ns = end_time;
> > + xe_user_put(user);
> > +
> > + mutex_unlock(&user->lock);
> > +
> > + schedule_next_work(xe, id);
> > }
> > /**
> > @@ -38,9 +115,9 @@ struct xe_user *xe_user_alloc(void)
> > return NULL;
> > kref_init(&user->refcount);
> > - mutex_init(&user->filelist_lock);
> > + mutex_init(&user->lock);
> > INIT_LIST_HEAD(&user->filelist);
> > - INIT_WORK(&user->work, work_period_worker);
> > + INIT_DELAYED_WORK(&user->delay_work, xe_work_period_worker);
> > return user;
> > }
> > diff --git a/drivers/gpu/drm/xe/xe_user.h b/drivers/gpu/drm/xe/xe_user.h
> > index 55035a9c2c4c..80948199e743 100644
> > --- a/drivers/gpu/drm/xe/xe_user.h
> > +++ b/drivers/gpu/drm/xe/xe_user.h
> > @@ -11,9 +11,11 @@
> > #include <linux/mutex.h>
> > #include <linux/workqueue.h>
> > -#include "xe_device.h"
> > +#include "xe_device_types.h"
> > +#define XE_WORK_PERIOD_INTERVAL 500
> > +
> > /**
> > * This is a per process/user id structure for a xe device
> > * client. It is allocated when a new process/app opens the
> > @@ -32,9 +34,9 @@ struct xe_user {
> > struct xe_device *xe;
> > /**
> > - * @filelist_lock: lock protecting the filelist
> > + * @filelist_lock: lock protecting this structure
> > */
> > - struct mutex filelist_lock;
> > + struct mutex lock;
> > /**
> > * @filelist: list of xe files belonging to this xe user
> > @@ -45,7 +47,7 @@ struct xe_user {
> > * @work: work to emit the gpu work period event for this
> > * xe user
> > */
> > - struct work_struct work;
> > + struct delayed_work delay_work;
> > /**
> > * @id: index of this user into the xe device users array
> > @@ -73,6 +75,14 @@ struct xe_user {
> > struct xe_user *xe_user_alloc(void);
> > struct xe_user *xe_user_lookup(struct xe_device *xe, u32 uid);
> > +static inline struct xe_user *
> > +xe_user_get_unless_zero(struct xe_user *user)
> > +{
> > + if (kref_get_unless_zero(&user->refcount))
> > + return user;
> > + return NULL;
> > +}
> > +
> > static inline struct xe_user *
> > xe_user_get(struct xe_user *user)
> > {
>
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v2 1/8] [ANDROID]: Add a new xe_user structure
2025-08-22 15:48 ` Rodrigo Vivi
@ 2025-08-22 17:01 ` Matthew Brost
2025-08-22 20:09 ` Rodrigo Vivi
0 siblings, 1 reply; 20+ messages in thread
From: Matthew Brost @ 2025-08-22 17:01 UTC (permalink / raw)
To: Rodrigo Vivi
Cc: Aakash Deep Sarkar, intel-xe, jeevaka.badrappan, carlos.santa
On Fri, Aug 22, 2025 at 11:48:54AM -0400, Rodrigo Vivi wrote:
> On Fri, Aug 22, 2025 at 08:59:23AM +0000, Aakash Deep Sarkar wrote:
> > For Android GPU work period event we need to track the runtime
> > on the GPU for each user id. This means we can have multiple
> > xe files opened by different processes/threads belonging to
> > the same user id. All these xe files need to be grouped together
> > so that one can easily identify these while calculating the
> > run time for the given user id.
> >
> > Currently, the xe driver doesn't record the user id of the
> > calling process. Also, all the xe files created using open
> > call are clubbed together inside the xe device structure
> > with no way to distinguish between them based on the user id
> > of the calling process.
>
> I thought I had already given this feedback, but I'm not sure if
> I forgot or if I was just ignored. I'm sorry either way.
>
> Android is not a justification. Please keep 'Android' mentions
> and ralated 'Android' justifications in the cover letter ONLY!
>
> The patch needs to make sense by itself. The patch needs to make
> sense in the currently linux upstream.
>
So what are the rules here? There is another series [1] floating around
with a justification that Android needs this. Does that mean we can't
accept any Andriod only code upstream?
Matt
[1] https://patchwork.freedesktop.org/series/152701/
> This also means no --subject-prefix=ANDROID.
>
> Please!
>
> >
> > To remedy these limitations we are adding another layer of
> > indirection between xe device and xe file. xe device will
> > now have a list of xe users each with a given user id; and each
> > xe user will have a list of xe files each of which is created
> > by a process that is associated with this user id.
> >
> > The lifetime of the xe user structure should be between when
> > a process with a new user id has opened the xe device; and when
> > the last xe file belonging to this user id is closed.
> >
> > Signed-off-by: Aakash Deep Sarkar <aakash.deep.sarkar@intel.com>
> > ---
> > drivers/gpu/drm/xe/Makefile | 2 +
> > drivers/gpu/drm/xe/xe_user.c | 59 ++++++++++++++++++++++++++
> > drivers/gpu/drm/xe/xe_user.h | 81 ++++++++++++++++++++++++++++++++++++
> > 3 files changed, 142 insertions(+)
> > create mode 100644 drivers/gpu/drm/xe/xe_user.c
> > create mode 100644 drivers/gpu/drm/xe/xe_user.h
> >
> > diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
> > index 8e0c3412a757..89212fc7ef44 100644
> > --- a/drivers/gpu/drm/xe/Makefile
> > +++ b/drivers/gpu/drm/xe/Makefile
> > @@ -325,6 +325,8 @@ ifeq ($(CONFIG_DEBUG_FS),y)
> >
> > xe-$(CONFIG_PCI_IOV) += xe_gt_sriov_pf_debugfs.o
> >
> > + xe-y += xe_user.o
> > +
> > xe-$(CONFIG_DRM_XE_DISPLAY) += \
> > i915-display/intel_display_debugfs.o \
> > i915-display/intel_display_debugfs_params.o \
> > diff --git a/drivers/gpu/drm/xe/xe_user.c b/drivers/gpu/drm/xe/xe_user.c
> > new file mode 100644
> > index 000000000000..8c285a68115a
> > --- /dev/null
> > +++ b/drivers/gpu/drm/xe/xe_user.c
> > @@ -0,0 +1,59 @@
> > +// SPDX-License-Identifier: MIT
> > +/*
> > + * Copyright © 2023 Intel Corporation
> > + */
> > +
> > +#include <linux/slab.h>
> > +
> > +#include "xe_user.h"
> > +
> > +/**
> > + * worker thread to emit gpu work period event for this xe user
> > + * @work: work instance for this xe user
> > + *
> > + * Return: void
> > + */
> > +static inline void work_period_worker(struct work_struct *work)
> > +{
> > + //TODO: Implement this worker
> > +}
> > +
> > +/**
> > + * xe_user_alloc() - Allocate xe user
> > + * @void: No arg
> > + *
> > + * Allocate xe user struct to track activity on the gpu
> > + * by the application. Call this API whenever a new app
> > + * has opened xe device.
> > + *
> > + * Return: pointer to user struct or NULL if can't allocate
> > + */
> > +struct xe_user *xe_user_alloc(void)
> > +{
> > + struct xe_user *user;
> > +
> > + user = kzalloc(sizeof(*user), GFP_KERNEL);
> > + if (!user)
> > + return NULL;
> > +
> > + kref_init(&user->refcount);
> > + mutex_init(&user->filelist_lock);
> > + INIT_LIST_HEAD(&user->filelist);
> > + //TODO: Add a hook into xe device
> > + INIT_WORK(&user->work, work_period_worker);
> > + return user;
> > +}
> > +
> > +/**
> > + * __xe_user_free() - Free user struct
> > + * @kref: The reference
> > + *
> > + * Return: void
> > + */
> > +void __xe_user_free(struct kref *kref)
> > +{
> > + struct xe_user *user =
> > + container_of(kref, struct xe_user, refcount);
> > +
> > + kfree(user);
> > +}
> > diff --git a/drivers/gpu/drm/xe/xe_user.h b/drivers/gpu/drm/xe/xe_user.h
> > new file mode 100644
> > index 000000000000..e52f66d3f3b0
> > --- /dev/null
> > +++ b/drivers/gpu/drm/xe/xe_user.h
> > @@ -0,0 +1,81 @@
> > +/* SPDX-License-Identifier: MIT */
> > +/*
> > + * Copyright © 2023 Intel Corporation
> > + */
> > +
> > +#ifndef _XE_USER_H_
> > +#define _XE_USER_H_
> > +
> > +#include <linux/kref.h>
> > +#include <linux/list.h>
> > +#include <linux/workqueue.h>
> > +
> > +/**
> > + * This is a per process/user id structure for a xe device
> > + * client. It is allocated when a new process/app opens the
> > + * xe device and destroyed when the last xe file belonging
> > + * to this user id is destroyed.
> > + */
> > +struct xe_user {
> > + /**
> > + * @refcount: reference count
> > + */
> > + struct kref refcount;
> > +
> > + /**
> > + * @xe: pointer to the xe_device
> > + */
> > + struct xe_device *xe;
> > +
> > + /**
> > + * @filelist_lock: lock protecting the filelist
> > + */
> > + struct mutex filelist_lock;
> > +
> > + /**
> > + * @filelist: list of xe files belonging to this xe user
> > + */
> > + struct list_head filelist;
> > +
> > + /**
> > + * @work: work to emit the gpu work period event for this
> > + * xe user
> > + */
> > + struct work_struct work;
> > +
> > + /**
> > + * @uid: user id for this xe_user
> > + */
> > + u32 uid;
> > +
> > + /**
> > + * @active_duration_ns: sum total of xe_file.active_duration_ns
> > + * for all xe files belonging to this xe user
> > + */
> > + u64 active_duration_ns;
> > +
> > + /**
> > + * @last_timestamp_ns: timestamp in ns when we last emitted event
> > + * for this xe user
> > + */
> > + u64 last_timestamp_ns;
> > +};
> > +
> > +struct xe_user *xe_user_alloc(void);
> > +
> > +static inline struct xe_user *
> > +xe_user_get(struct xe_user *user)
> > +{
> > + kref_get(&user->refcount);
> > + return user;
> > +}
> > +
> > +void __xe_user_free(struct kref *kref);
> > +
> > +static inline void xe_user_put(struct xe_user *user)
> > +{
> > + kref_put(&user->refcount, __xe_user_free);
> > +}
> > +
> > +#endif // _XE_USER_H_
> > +
> > --
> > 2.49.0
> >
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v2 3/8] [ANDROID]: Add a trace point for GPU work period
2025-08-22 8:59 ` [PATCH v2 3/8] [ANDROID]: Add a trace point for GPU work period Aakash Deep Sarkar
@ 2025-08-22 19:57 ` Rodrigo Vivi
0 siblings, 0 replies; 20+ messages in thread
From: Rodrigo Vivi @ 2025-08-22 19:57 UTC (permalink / raw)
To: Aakash Deep Sarkar
Cc: intel-xe, jeevaka.badrappan, carlos.santa, matthew.brost
On Fri, Aug 22, 2025 at 08:59:25AM +0000, Aakash Deep Sarkar wrote:
> The GPU work period event is required to have the following format:
>
> Defines the structure of the kernel tracepoint:
> /sys/kernel/tracing/events/power/gpu_work_period
It is okay to add traces in the driver, but in a xe_ namespace.
For using such a bold name like this we need to add this infrastructure
in the drm level.
Please move this to drm level and include dri-devel in the proposal.
>
> A value that uniquely identifies the GPU within the system.
> uint32_t gpu_id;
>
> The UID of the application (i.e. persistent, unique ID of the Android
> app) that submitted work to the GPU.
> uint32_t uid;
>
> The start time of the period in nanoseconds. The clock must be
> CLOCK_MONOTONIC_RAW, as returned by the ktime_get_raw_ns(void) function.
> uint64_t start_time_ns;
>
> The end time of the period in nanoseconds. The clock must be
> CLOCK_MONOTONIC_RAW, as returned by the ktime_get_raw_ns(void) function.
> uint64_t end_time_ns;
>
> The amount of time the GPU was running GPU work for |uid| during the
> period, in nanoseconds, without double-counting parallel GPU work for the
> same |uid|. For example, this might include the amount of time the GPU
> spent performing shader work (vertex work, fragment work, etc.) for
> |uid|.
> uint64_t total_active_duration_ns;
>
> Signed-off-by: Aakash Deep Sarkar <aakash.deep.sarkar@intel.com>
> ---
> .../drm/xe/xe_power_gpu_work_period_trace.h | 61 +++++++++++++++++++
> 1 file changed, 61 insertions(+)
> create mode 100644 drivers/gpu/drm/xe/xe_power_gpu_work_period_trace.h
>
> diff --git a/drivers/gpu/drm/xe/xe_power_gpu_work_period_trace.h b/drivers/gpu/drm/xe/xe_power_gpu_work_period_trace.h
> new file mode 100644
> index 000000000000..2de05f1b64f3
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_power_gpu_work_period_trace.h
> @@ -0,0 +1,61 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2024 Intel Corporation
> + */
> +
> +#ifndef _TRACE_POWER_GPU_WORK_PERIOD_INTEL
> +#define _TRACE_POWER_GPU_WORK_PERIOD_INTEL
> +#endif
> +
> +#undef TRACE_SYSTEM
> +#define TRACE_SYSTEM power
> +#undef TRACE_INCLUDE_FILE
> +#define TRACE_INCLUDE_FILE xe_power_gpu_work_period_trace
> +#undef TRACE_INCLUDE_PATH
> +#define TRACE_INCLUDE_PATH .
> +
> +#if !defined(_TRACE_POWER_GPU_WORK_PERIOD_H) || defined(TRACE_HEADER_MULTI_READ)
> +#define _TRACE_POWER_GPU_WORK_PERIOD_H
> +
> +#include <linux/tracepoint.h>
> +
> +TRACE_EVENT(gpu_work_period,
> +
> + TP_PROTO(
> + u32 gpu_id,
> + u32 uid,
> + u64 start_time_ns,
> + u64 end_time_ns,
> + u64 total_active_duration_ns
> + ),
> +
> + TP_ARGS(gpu_id, uid, start_time_ns, end_time_ns, total_active_duration_ns),
> +
> + TP_STRUCT__entry(
> + __field(u32, gpu_id)
> + __field(u32, uid)
> + __field(u64, start_time_ns)
> + __field(u64, end_time_ns)
> + __field(u64, total_active_duration_ns)
> + ),
> +
> + TP_fast_assign(
> + __entry->gpu_id = gpu_id;
> + __entry->uid = uid;
> + __entry->start_time_ns = start_time_ns;
> + __entry->end_time_ns = end_time_ns;
> + __entry->total_active_duration_ns = total_active_duration_ns;
> + ),
> +
> + TP_printk("gpu_id=%u uid=%u start_time_ns=%llu end_time_ns=%llu total_active_duration_ns=%llu",
> + __entry->gpu_id,
> + __entry->uid,
> + __entry->start_time_ns,
> + __entry->end_time_ns,
> + __entry->total_active_duration_ns)
> +);
> +
> +#endif /* _TRACE_POWER_GPU_WORK_PERIOD_H */
> +
> +/* This part must be outside protection */
> +#include <trace/define_trace.h>
> --
> 2.49.0
>
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v2 1/8] [ANDROID]: Add a new xe_user structure
2025-08-22 17:01 ` Matthew Brost
@ 2025-08-22 20:09 ` Rodrigo Vivi
2025-08-23 1:57 ` Dixit, Ashutosh
0 siblings, 1 reply; 20+ messages in thread
From: Rodrigo Vivi @ 2025-08-22 20:09 UTC (permalink / raw)
To: Matthew Brost
Cc: Aakash Deep Sarkar, intel-xe, jeevaka.badrappan, carlos.santa
On Fri, Aug 22, 2025 at 10:01:25AM -0700, Matthew Brost wrote:
> On Fri, Aug 22, 2025 at 11:48:54AM -0400, Rodrigo Vivi wrote:
> > On Fri, Aug 22, 2025 at 08:59:23AM +0000, Aakash Deep Sarkar wrote:
> > > For Android GPU work period event we need to track the runtime
> > > on the GPU for each user id. This means we can have multiple
> > > xe files opened by different processes/threads belonging to
> > > the same user id. All these xe files need to be grouped together
> > > so that one can easily identify these while calculating the
> > > run time for the given user id.
> > >
> > > Currently, the xe driver doesn't record the user id of the
> > > calling process. Also, all the xe files created using open
> > > call are clubbed together inside the xe device structure
> > > with no way to distinguish between them based on the user id
> > > of the calling process.
> >
> > I thought I had already given this feedback, but I'm not sure if
> > I forgot or if I was just ignored. I'm sorry either way.
> >
> > Android is not a justification. Please keep 'Android' mentions
> > and ralated 'Android' justifications in the cover letter ONLY!
> >
> > The patch needs to make sense by itself. The patch needs to make
> > sense in the currently linux upstream.
> >
>
> So what are the rules here? There is another series [1] floating around
> with a justification that Android needs this. Does that mean we can't
> accept any Andriod only code upstream?
I'm sorry for not being clear. Of course we can accept Android code
upstream. I wish we had more (all?) Android code upstream ;)
But we cannot add in xe, for instance, something with the namespace
/sys/kernel/tracing/events/power/gpu_work_period where
gpu_work_period is a definition in the Android tree only.
We could add xe_work_period.
But my comment was more with the justification of the patches itself.
The series tells a history. It explains the goals and motivations in its
cover letter. There it is okay to tell that we are adding this
gpu_work_period to attend to the Android requirements.
Then, it patch itself is a small piece of the puzzle telling what it
is doing and why, but in technical terms, without having to tell
that we are doing for Android.
And also every patch in the mailing list needs to come with [PATCH]
https://www.kernel.org/doc/html/latest/process/submitting-patches.html#include-patch-in-the-subject
in our case it is okay to accept [RFC] or [CI], but we should limit our
creativity there ;)
But the most important rule that we have to respect imho is this:
https://dri.freedesktop.org/docs/drm/gpu/drm-uapi.html#open-source-userspace-requirements
so, if we are targeting this upstream we need to justify based on the
admin using perf or trace directly. Commit messages should explain based
on admin usages of these APIs directly. Documentation added along with
the code should also demonstrate the usage with perf and or trace.
They should never rely on closed source Android applications that
might be using 'gpu_work_period'. That is unacceptable by these rules.
Thanks,
Rodrigo.
>
> Matt
>
> [1] https://patchwork.freedesktop.org/series/152701/
>
> > This also means no --subject-prefix=ANDROID.
> >
> > Please!
> >
> > >
> > > To remedy these limitations we are adding another layer of
> > > indirection between xe device and xe file. xe device will
> > > now have a list of xe users each with a given user id; and each
> > > xe user will have a list of xe files each of which is created
> > > by a process that is associated with this user id.
> > >
> > > The lifetime of the xe user structure should be between when
> > > a process with a new user id has opened the xe device; and when
> > > the last xe file belonging to this user id is closed.
> > >
> > > Signed-off-by: Aakash Deep Sarkar <aakash.deep.sarkar@intel.com>
> > > ---
> > > drivers/gpu/drm/xe/Makefile | 2 +
> > > drivers/gpu/drm/xe/xe_user.c | 59 ++++++++++++++++++++++++++
> > > drivers/gpu/drm/xe/xe_user.h | 81 ++++++++++++++++++++++++++++++++++++
> > > 3 files changed, 142 insertions(+)
> > > create mode 100644 drivers/gpu/drm/xe/xe_user.c
> > > create mode 100644 drivers/gpu/drm/xe/xe_user.h
> > >
> > > diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
> > > index 8e0c3412a757..89212fc7ef44 100644
> > > --- a/drivers/gpu/drm/xe/Makefile
> > > +++ b/drivers/gpu/drm/xe/Makefile
> > > @@ -325,6 +325,8 @@ ifeq ($(CONFIG_DEBUG_FS),y)
> > >
> > > xe-$(CONFIG_PCI_IOV) += xe_gt_sriov_pf_debugfs.o
> > >
> > > + xe-y += xe_user.o
> > > +
> > > xe-$(CONFIG_DRM_XE_DISPLAY) += \
> > > i915-display/intel_display_debugfs.o \
> > > i915-display/intel_display_debugfs_params.o \
> > > diff --git a/drivers/gpu/drm/xe/xe_user.c b/drivers/gpu/drm/xe/xe_user.c
> > > new file mode 100644
> > > index 000000000000..8c285a68115a
> > > --- /dev/null
> > > +++ b/drivers/gpu/drm/xe/xe_user.c
> > > @@ -0,0 +1,59 @@
> > > +// SPDX-License-Identifier: MIT
> > > +/*
> > > + * Copyright © 2023 Intel Corporation
> > > + */
> > > +
> > > +#include <linux/slab.h>
> > > +
> > > +#include "xe_user.h"
> > > +
> > > +/**
> > > + * worker thread to emit gpu work period event for this xe user
> > > + * @work: work instance for this xe user
> > > + *
> > > + * Return: void
> > > + */
> > > +static inline void work_period_worker(struct work_struct *work)
> > > +{
> > > + //TODO: Implement this worker
> > > +}
> > > +
> > > +/**
> > > + * xe_user_alloc() - Allocate xe user
> > > + * @void: No arg
> > > + *
> > > + * Allocate xe user struct to track activity on the gpu
> > > + * by the application. Call this API whenever a new app
> > > + * has opened xe device.
> > > + *
> > > + * Return: pointer to user struct or NULL if can't allocate
> > > + */
> > > +struct xe_user *xe_user_alloc(void)
> > > +{
> > > + struct xe_user *user;
> > > +
> > > + user = kzalloc(sizeof(*user), GFP_KERNEL);
> > > + if (!user)
> > > + return NULL;
> > > +
> > > + kref_init(&user->refcount);
> > > + mutex_init(&user->filelist_lock);
> > > + INIT_LIST_HEAD(&user->filelist);
> > > + //TODO: Add a hook into xe device
> > > + INIT_WORK(&user->work, work_period_worker);
> > > + return user;
> > > +}
> > > +
> > > +/**
> > > + * __xe_user_free() - Free user struct
> > > + * @kref: The reference
> > > + *
> > > + * Return: void
> > > + */
> > > +void __xe_user_free(struct kref *kref)
> > > +{
> > > + struct xe_user *user =
> > > + container_of(kref, struct xe_user, refcount);
> > > +
> > > + kfree(user);
> > > +}
> > > diff --git a/drivers/gpu/drm/xe/xe_user.h b/drivers/gpu/drm/xe/xe_user.h
> > > new file mode 100644
> > > index 000000000000..e52f66d3f3b0
> > > --- /dev/null
> > > +++ b/drivers/gpu/drm/xe/xe_user.h
> > > @@ -0,0 +1,81 @@
> > > +/* SPDX-License-Identifier: MIT */
> > > +/*
> > > + * Copyright © 2023 Intel Corporation
> > > + */
> > > +
> > > +#ifndef _XE_USER_H_
> > > +#define _XE_USER_H_
> > > +
> > > +#include <linux/kref.h>
> > > +#include <linux/list.h>
> > > +#include <linux/workqueue.h>
> > > +
> > > +/**
> > > + * This is a per process/user id structure for a xe device
> > > + * client. It is allocated when a new process/app opens the
> > > + * xe device and destroyed when the last xe file belonging
> > > + * to this user id is destroyed.
> > > + */
> > > +struct xe_user {
> > > + /**
> > > + * @refcount: reference count
> > > + */
> > > + struct kref refcount;
> > > +
> > > + /**
> > > + * @xe: pointer to the xe_device
> > > + */
> > > + struct xe_device *xe;
> > > +
> > > + /**
> > > + * @filelist_lock: lock protecting the filelist
> > > + */
> > > + struct mutex filelist_lock;
> > > +
> > > + /**
> > > + * @filelist: list of xe files belonging to this xe user
> > > + */
> > > + struct list_head filelist;
> > > +
> > > + /**
> > > + * @work: work to emit the gpu work period event for this
> > > + * xe user
> > > + */
> > > + struct work_struct work;
> > > +
> > > + /**
> > > + * @uid: user id for this xe_user
> > > + */
> > > + u32 uid;
> > > +
> > > + /**
> > > + * @active_duration_ns: sum total of xe_file.active_duration_ns
> > > + * for all xe files belonging to this xe user
> > > + */
> > > + u64 active_duration_ns;
> > > +
> > > + /**
> > > + * @last_timestamp_ns: timestamp in ns when we last emitted event
> > > + * for this xe user
> > > + */
> > > + u64 last_timestamp_ns;
> > > +};
> > > +
> > > +struct xe_user *xe_user_alloc(void);
> > > +
> > > +static inline struct xe_user *
> > > +xe_user_get(struct xe_user *user)
> > > +{
> > > + kref_get(&user->refcount);
> > > + return user;
> > > +}
> > > +
> > > +void __xe_user_free(struct kref *kref);
> > > +
> > > +static inline void xe_user_put(struct xe_user *user)
> > > +{
> > > + kref_put(&user->refcount, __xe_user_free);
> > > +}
> > > +
> > > +#endif // _XE_USER_H_
> > > +
> > > --
> > > 2.49.0
> > >
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v2 1/8] [ANDROID]: Add a new xe_user structure
2025-08-22 20:09 ` Rodrigo Vivi
@ 2025-08-23 1:57 ` Dixit, Ashutosh
0 siblings, 0 replies; 20+ messages in thread
From: Dixit, Ashutosh @ 2025-08-23 1:57 UTC (permalink / raw)
To: Rodrigo Vivi
Cc: Matthew Brost, Aakash Deep Sarkar, intel-xe, jeevaka.badrappan,
carlos.santa
On Fri, 22 Aug 2025 13:09:51 -0700, Rodrigo Vivi wrote:
>
> On Fri, Aug 22, 2025 at 10:01:25AM -0700, Matthew Brost wrote:
> > On Fri, Aug 22, 2025 at 11:48:54AM -0400, Rodrigo Vivi wrote:
> > > On Fri, Aug 22, 2025 at 08:59:23AM +0000, Aakash Deep Sarkar wrote:
> > > > For Android GPU work period event we need to track the runtime
> > > > on the GPU for each user id. This means we can have multiple
> > > > xe files opened by different processes/threads belonging to
> > > > the same user id. All these xe files need to be grouped together
> > > > so that one can easily identify these while calculating the
> > > > run time for the given user id.
> > > >
> > > > Currently, the xe driver doesn't record the user id of the
> > > > calling process. Also, all the xe files created using open
> > > > call are clubbed together inside the xe device structure
> > > > with no way to distinguish between them based on the user id
> > > > of the calling process.
> > >
> > > I thought I had already given this feedback, but I'm not sure if
> > > I forgot or if I was just ignored. I'm sorry either way.
> > >
> > > Android is not a justification. Please keep 'Android' mentions
> > > and ralated 'Android' justifications in the cover letter ONLY!
> > >
> > > The patch needs to make sense by itself. The patch needs to make
> > > sense in the currently linux upstream.
> > >
> >
> > So what are the rules here? There is another series [1] floating around
> > with a justification that Android needs this. Does that mean we can't
> > accept any Andriod only code upstream?
>
> I'm sorry for not being clear. Of course we can accept Android code
> upstream. I wish we had more (all?) Android code upstream ;)
>
> But we cannot add in xe, for instance, something with the namespace
> /sys/kernel/tracing/events/power/gpu_work_period where
> gpu_work_period is a definition in the Android tree only.
>
> We could add xe_work_period.
If Android user space consumes gpu_work_period, shouldn't gpu_work_period
be added at the drm level (rather than at xe level)?
I had a similar comment about gpu_frequency ftrace event here:
https://lore.kernel.org/intel-xe/87wm6vxedi.wl-ashutosh.dixit@intel.com/T/#me6005d00c09bf2198cc2a7465e780f50bd1ff291
Thanks.
--
Ashutosh
^ permalink raw reply [flat|nested] 20+ messages in thread
* ✗ Xe.CI.Full: failure for : Add GPU work period support for Xe driver
2025-08-22 8:59 [PATCH v2 0/8] [ANDROID]: Add GPU work period support for Xe driver Aakash Deep Sarkar
` (10 preceding siblings ...)
2025-08-22 10:44 ` ✓ Xe.CI.BAT: " Patchwork
@ 2025-08-23 3:50 ` Patchwork
11 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2025-08-23 3:50 UTC (permalink / raw)
To: Aakash Deep Sarkar; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 64044 bytes --]
== Series Details ==
Series: : Add GPU work period support for Xe driver
URL : https://patchwork.freedesktop.org/series/153341/
State : failure
== Summary ==
CI Bug Log - changes from xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f_FULL -> xe-pw-153341v1_FULL
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with xe-pw-153341v1_FULL absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in xe-pw-153341v1_FULL, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
Participating hosts (4 -> 4)
------------------------------
No changes in participating hosts
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in xe-pw-153341v1_FULL:
### IGT changes ###
#### Possible regressions ####
* igt@xe_exec_fault_mode@many-bindexecqueue-rebind-prefetch:
- shard-lnl: [PASS][1] -> [FAIL][2]
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-lnl-4/igt@xe_exec_fault_mode@many-bindexecqueue-rebind-prefetch.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-1/igt@xe_exec_fault_mode@many-bindexecqueue-rebind-prefetch.html
* igt@xe_exec_threads@threads-mixed-fd-rebind:
- shard-bmg: [PASS][3] -> [FAIL][4] +1 other test fail
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-bmg-2/igt@xe_exec_threads@threads-mixed-fd-rebind.html
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-4/igt@xe_exec_threads@threads-mixed-fd-rebind.html
Known issues
------------
Here are the changes found in xe-pw-153341v1_FULL that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@intel_hwmon@hwmon-write:
- shard-bmg: [PASS][5] -> [FAIL][6] ([Intel XE#4665])
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-bmg-4/igt@intel_hwmon@hwmon-write.html
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-7/igt@intel_hwmon@hwmon-write.html
* igt@kms_addfb_basic@addfb25-y-tiled-small-legacy:
- shard-bmg: NOTRUN -> [SKIP][7] ([Intel XE#2233])
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-3/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html
- shard-dg2-set2: NOTRUN -> [SKIP][8] ([Intel XE#623])
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-463/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html
- shard-lnl: NOTRUN -> [SKIP][9] ([Intel XE#1466])
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-8/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html
* igt@kms_big_fb@4-tiled-addfb-size-overflow:
- shard-adlp: NOTRUN -> [SKIP][10] ([Intel XE#610])
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-4/igt@kms_big_fb@4-tiled-addfb-size-overflow.html
* igt@kms_big_fb@x-tiled-16bpp-rotate-270:
- shard-dg2-set2: NOTRUN -> [SKIP][11] ([Intel XE#316])
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-436/igt@kms_big_fb@x-tiled-16bpp-rotate-270.html
* igt@kms_big_fb@x-tiled-32bpp-rotate-90:
- shard-bmg: NOTRUN -> [SKIP][12] ([Intel XE#2327]) +1 other test skip
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-3/igt@kms_big_fb@x-tiled-32bpp-rotate-90.html
- shard-lnl: NOTRUN -> [SKIP][13] ([Intel XE#1407]) +1 other test skip
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-8/igt@kms_big_fb@x-tiled-32bpp-rotate-90.html
* igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0-async-flip:
- shard-adlp: NOTRUN -> [DMESG-FAIL][14] ([Intel XE#4543])
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-6/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0-async-flip.html
* igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip:
- shard-adlp: [PASS][15] -> [DMESG-FAIL][16] ([Intel XE#4543]) +4 other tests dmesg-fail
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-adlp-4/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip.html
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-3/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip.html
* igt@kms_big_fb@yf-tiled-16bpp-rotate-180:
- shard-adlp: NOTRUN -> [SKIP][17] ([Intel XE#1124]) +1 other test skip
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-1/igt@kms_big_fb@yf-tiled-16bpp-rotate-180.html
- shard-lnl: NOTRUN -> [SKIP][18] ([Intel XE#1124]) +1 other test skip
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-7/igt@kms_big_fb@yf-tiled-16bpp-rotate-180.html
* igt@kms_big_fb@yf-tiled-32bpp-rotate-0:
- shard-bmg: NOTRUN -> [SKIP][19] ([Intel XE#1124]) +4 other tests skip
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-6/igt@kms_big_fb@yf-tiled-32bpp-rotate-0.html
* igt@kms_big_fb@yf-tiled-32bpp-rotate-180:
- shard-dg2-set2: NOTRUN -> [SKIP][20] ([Intel XE#1124]) +4 other tests skip
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-436/igt@kms_big_fb@yf-tiled-32bpp-rotate-180.html
* igt@kms_bw@connected-linear-tiling-2-displays-2160x1440p:
- shard-bmg: [PASS][21] -> [SKIP][22] ([Intel XE#2314] / [Intel XE#2894])
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-bmg-1/igt@kms_bw@connected-linear-tiling-2-displays-2160x1440p.html
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-6/igt@kms_bw@connected-linear-tiling-2-displays-2160x1440p.html
* igt@kms_bw@connected-linear-tiling-3-displays-2160x1440p:
- shard-adlp: NOTRUN -> [SKIP][23] ([Intel XE#2191])
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-4/igt@kms_bw@connected-linear-tiling-3-displays-2160x1440p.html
- shard-bmg: NOTRUN -> [SKIP][24] ([Intel XE#2314] / [Intel XE#2894])
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-7/igt@kms_bw@connected-linear-tiling-3-displays-2160x1440p.html
- shard-dg2-set2: NOTRUN -> [SKIP][25] ([Intel XE#2191])
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-434/igt@kms_bw@connected-linear-tiling-3-displays-2160x1440p.html
- shard-lnl: NOTRUN -> [SKIP][26] ([Intel XE#2191])
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-1/igt@kms_bw@connected-linear-tiling-3-displays-2160x1440p.html
* igt@kms_bw@linear-tiling-4-displays-3840x2160p:
- shard-dg2-set2: NOTRUN -> [SKIP][27] ([Intel XE#367])
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-436/igt@kms_bw@linear-tiling-4-displays-3840x2160p.html
* igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs-cc:
- shard-lnl: NOTRUN -> [SKIP][28] ([Intel XE#2887]) +1 other test skip
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-3/igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs-cc.html
* igt@kms_ccs@crc-primary-basic-4-tiled-mtl-mc-ccs:
- shard-adlp: NOTRUN -> [SKIP][29] ([Intel XE#455] / [Intel XE#787]) +5 other tests skip
[29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-2/igt@kms_ccs@crc-primary-basic-4-tiled-mtl-mc-ccs.html
* igt@kms_ccs@crc-primary-basic-4-tiled-mtl-mc-ccs@pipe-c-hdmi-a-1:
- shard-adlp: NOTRUN -> [SKIP][30] ([Intel XE#787]) +8 other tests skip
[30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-2/igt@kms_ccs@crc-primary-basic-4-tiled-mtl-mc-ccs@pipe-c-hdmi-a-1.html
* igt@kms_ccs@crc-primary-suspend-y-tiled-ccs:
- shard-bmg: NOTRUN -> [SKIP][31] ([Intel XE#3432])
[31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-8/igt@kms_ccs@crc-primary-suspend-y-tiled-ccs.html
- shard-lnl: NOTRUN -> [SKIP][32] ([Intel XE#3432])
[32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-8/igt@kms_ccs@crc-primary-suspend-y-tiled-ccs.html
* igt@kms_ccs@random-ccs-data-4-tiled-bmg-ccs:
- shard-adlp: NOTRUN -> [SKIP][33] ([Intel XE#2907])
[33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-6/igt@kms_ccs@random-ccs-data-4-tiled-bmg-ccs.html
- shard-dg2-set2: NOTRUN -> [SKIP][34] ([Intel XE#2907])
[34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-466/igt@kms_ccs@random-ccs-data-4-tiled-bmg-ccs.html
- shard-lnl: NOTRUN -> [SKIP][35] ([Intel XE#2669]) +3 other tests skip
[35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-5/igt@kms_ccs@random-ccs-data-4-tiled-bmg-ccs.html
* igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs:
- shard-dg2-set2: [PASS][36] -> [INCOMPLETE][37] ([Intel XE#1727] / [Intel XE#2705] / [Intel XE#3113] / [Intel XE#4212] / [Intel XE#4522])
[36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-dg2-432/igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs.html
[37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-464/igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs.html
* igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs@pipe-a-dp-4:
- shard-dg2-set2: NOTRUN -> [INCOMPLETE][38] ([Intel XE#1727] / [Intel XE#2705] / [Intel XE#3113] / [Intel XE#4212] / [Intel XE#4522]) +1 other test incomplete
[38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-464/igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs@pipe-a-dp-4.html
* igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc:
- shard-bmg: NOTRUN -> [SKIP][39] ([Intel XE#2887]) +4 other tests skip
[39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-7/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc.html
* igt@kms_ccs@random-ccs-data-y-tiled-ccs@pipe-d-dp-2:
- shard-dg2-set2: NOTRUN -> [SKIP][40] ([Intel XE#455] / [Intel XE#787]) +20 other tests skip
[40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-432/igt@kms_ccs@random-ccs-data-y-tiled-ccs@pipe-d-dp-2.html
* igt@kms_ccs@random-ccs-data-yf-tiled-ccs@pipe-b-dp-4:
- shard-dg2-set2: NOTRUN -> [SKIP][41] ([Intel XE#787]) +118 other tests skip
[41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-436/igt@kms_ccs@random-ccs-data-yf-tiled-ccs@pipe-b-dp-4.html
* igt@kms_cdclk@plane-scaling:
- shard-lnl: NOTRUN -> [SKIP][42] ([Intel XE#4416]) +3 other tests skip
[42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-4/igt@kms_cdclk@plane-scaling.html
- shard-adlp: NOTRUN -> [SKIP][43] ([Intel XE#4416] / [Intel XE#455])
[43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-2/igt@kms_cdclk@plane-scaling.html
- shard-bmg: NOTRUN -> [SKIP][44] ([Intel XE#2724])
[44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-3/igt@kms_cdclk@plane-scaling.html
* igt@kms_cdclk@plane-scaling@pipe-a-hdmi-a-1:
- shard-adlp: NOTRUN -> [SKIP][45] ([Intel XE#4416]) +2 other tests skip
[45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-2/igt@kms_cdclk@plane-scaling@pipe-a-hdmi-a-1.html
* igt@kms_cdclk@plane-scaling@pipe-b-dp-4:
- shard-dg2-set2: NOTRUN -> [SKIP][46] ([Intel XE#4416]) +3 other tests skip
[46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-435/igt@kms_cdclk@plane-scaling@pipe-b-dp-4.html
* igt@kms_chamelium_color@ctm-0-75:
- shard-dg2-set2: NOTRUN -> [SKIP][47] ([Intel XE#306])
[47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-435/igt@kms_chamelium_color@ctm-0-75.html
* igt@kms_chamelium_hpd@dp-hpd-enable-disable-mode:
- shard-bmg: NOTRUN -> [SKIP][48] ([Intel XE#2252]) +4 other tests skip
[48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-7/igt@kms_chamelium_hpd@dp-hpd-enable-disable-mode.html
* igt@kms_chamelium_hpd@dp-hpd-storm:
- shard-adlp: NOTRUN -> [SKIP][49] ([Intel XE#373]) +2 other tests skip
[49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-4/igt@kms_chamelium_hpd@dp-hpd-storm.html
* igt@kms_chamelium_hpd@hdmi-hpd:
- shard-dg2-set2: NOTRUN -> [SKIP][50] ([Intel XE#373]) +6 other tests skip
[50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-435/igt@kms_chamelium_hpd@hdmi-hpd.html
* igt@kms_chamelium_hpd@vga-hpd-with-enabled-mode:
- shard-lnl: NOTRUN -> [SKIP][51] ([Intel XE#373]) +3 other tests skip
[51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-7/igt@kms_chamelium_hpd@vga-hpd-with-enabled-mode.html
* igt@kms_content_protection@lic-type-0@pipe-a-dp-2:
- shard-bmg: NOTRUN -> [FAIL][52] ([Intel XE#1178])
[52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-2/igt@kms_content_protection@lic-type-0@pipe-a-dp-2.html
* igt@kms_cursor_crc@cursor-offscreen-64x21:
- shard-lnl: NOTRUN -> [SKIP][53] ([Intel XE#1424]) +1 other test skip
[53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-1/igt@kms_cursor_crc@cursor-offscreen-64x21.html
* igt@kms_cursor_crc@cursor-onscreen-128x42:
- shard-bmg: NOTRUN -> [SKIP][54] ([Intel XE#2320]) +3 other tests skip
[54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-7/igt@kms_cursor_crc@cursor-onscreen-128x42.html
* igt@kms_cursor_crc@cursor-rapid-movement-512x512:
- shard-dg2-set2: NOTRUN -> [SKIP][55] ([Intel XE#308]) +1 other test skip
[55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-464/igt@kms_cursor_crc@cursor-rapid-movement-512x512.html
- shard-bmg: NOTRUN -> [SKIP][56] ([Intel XE#2321])
[56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-3/igt@kms_cursor_crc@cursor-rapid-movement-512x512.html
* igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size:
- shard-bmg: [PASS][57] -> [SKIP][58] ([Intel XE#2291]) +3 other tests skip
[57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-bmg-1/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size.html
[58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-6/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size.html
* igt@kms_fbc_dirty_rect@fbc-dirty-rectangle-out-visible-area:
- shard-adlp: NOTRUN -> [SKIP][59] ([Intel XE#4422])
[59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-2/igt@kms_fbc_dirty_rect@fbc-dirty-rectangle-out-visible-area.html
- shard-bmg: NOTRUN -> [SKIP][60] ([Intel XE#4422])
[60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-2/igt@kms_fbc_dirty_rect@fbc-dirty-rectangle-out-visible-area.html
- shard-lnl: NOTRUN -> [SKIP][61] ([Intel XE#4422])
[61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-7/igt@kms_fbc_dirty_rect@fbc-dirty-rectangle-out-visible-area.html
* igt@kms_fbcon_fbt@psr-suspend:
- shard-bmg: NOTRUN -> [SKIP][62] ([Intel XE#776])
[62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-6/igt@kms_fbcon_fbt@psr-suspend.html
* igt@kms_flip@2x-flip-vs-dpms-on-nop:
- shard-lnl: NOTRUN -> [SKIP][63] ([Intel XE#1421]) +1 other test skip
[63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-3/igt@kms_flip@2x-flip-vs-dpms-on-nop.html
* igt@kms_flip@2x-flip-vs-dpms-on-nop-interruptible:
- shard-bmg: [PASS][64] -> [SKIP][65] ([Intel XE#2316]) +6 other tests skip
[64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-bmg-1/igt@kms_flip@2x-flip-vs-dpms-on-nop-interruptible.html
[65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-6/igt@kms_flip@2x-flip-vs-dpms-on-nop-interruptible.html
* igt@kms_flip@2x-flip-vs-wf_vblank:
- shard-adlp: NOTRUN -> [SKIP][66] ([Intel XE#310])
[66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-3/igt@kms_flip@2x-flip-vs-wf_vblank.html
* igt@kms_flip@plain-flip-interruptible@b-hdmi-a1:
- shard-adlp: [PASS][67] -> [DMESG-WARN][68] ([Intel XE#4543]) +18 other tests dmesg-warn
[67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-adlp-2/igt@kms_flip@plain-flip-interruptible@b-hdmi-a1.html
[68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-2/igt@kms_flip@plain-flip-interruptible@b-hdmi-a1.html
* igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-upscaling:
- shard-adlp: NOTRUN -> [SKIP][69] ([Intel XE#455]) +3 other tests skip
[69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-2/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-upscaling.html
- shard-bmg: NOTRUN -> [SKIP][70] ([Intel XE#2293] / [Intel XE#2380]) +2 other tests skip
[70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-3/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-upscaling.html
- shard-lnl: NOTRUN -> [SKIP][71] ([Intel XE#1401] / [Intel XE#1745])
[71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-4/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-upscaling.html
* igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-upscaling@pipe-a-default-mode:
- shard-lnl: NOTRUN -> [SKIP][72] ([Intel XE#1401])
[72]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-4/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-upscaling@pipe-a-default-mode.html
* igt@kms_flip_scaled_crc@flip-64bpp-linear-to-32bpp-linear-downscaling:
- shard-lnl: NOTRUN -> [SKIP][73] ([Intel XE#1397] / [Intel XE#1745])
[73]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-5/igt@kms_flip_scaled_crc@flip-64bpp-linear-to-32bpp-linear-downscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-linear-to-32bpp-linear-downscaling@pipe-a-default-mode:
- shard-lnl: NOTRUN -> [SKIP][74] ([Intel XE#1397])
[74]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-5/igt@kms_flip_scaled_crc@flip-64bpp-linear-to-32bpp-linear-downscaling@pipe-a-default-mode.html
* igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling:
- shard-dg2-set2: NOTRUN -> [SKIP][75] ([Intel XE#455]) +12 other tests skip
[75]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-433/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling@pipe-a-valid-mode:
- shard-bmg: NOTRUN -> [SKIP][76] ([Intel XE#2293]) +2 other tests skip
[76]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-8/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling@pipe-a-valid-mode.html
* igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-blt:
- shard-dg2-set2: NOTRUN -> [SKIP][77] ([Intel XE#651]) +10 other tests skip
[77]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-464/igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-mmap-wc:
- shard-adlp: NOTRUN -> [SKIP][78] ([Intel XE#656]) +6 other tests skip
[78]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-6/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-mmap-wc.html
- shard-bmg: NOTRUN -> [SKIP][79] ([Intel XE#2312]) +1 other test skip
[79]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-6/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-move:
- shard-bmg: NOTRUN -> [SKIP][80] ([Intel XE#2311]) +4 other tests skip
[80]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-3/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-move.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-draw-render:
- shard-bmg: NOTRUN -> [SKIP][81] ([Intel XE#5390]) +5 other tests skip
[81]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-8/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-draw-render.html
- shard-lnl: NOTRUN -> [SKIP][82] ([Intel XE#656]) +8 other tests skip
[82]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-3/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-mmap-wc:
- shard-adlp: NOTRUN -> [SKIP][83] ([Intel XE#651])
[83]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-1/igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-mmap-wc.html
- shard-lnl: NOTRUN -> [SKIP][84] ([Intel XE#651])
[84]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-7/igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-draw-render:
- shard-adlp: NOTRUN -> [SKIP][85] ([Intel XE#653]) +1 other test skip
[85]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-2/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-shrfb-draw-blt:
- shard-bmg: NOTRUN -> [SKIP][86] ([Intel XE#2313]) +6 other tests skip
[86]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-2/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-shrfb-draw-blt.html
* igt@kms_frontbuffer_tracking@plane-fbc-rte:
- shard-dg2-set2: NOTRUN -> [SKIP][87] ([Intel XE#1158])
[87]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-464/igt@kms_frontbuffer_tracking@plane-fbc-rte.html
- shard-adlp: NOTRUN -> [SKIP][88] ([Intel XE#1158])
[88]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-1/igt@kms_frontbuffer_tracking@plane-fbc-rte.html
- shard-bmg: NOTRUN -> [SKIP][89] ([Intel XE#2350])
[89]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-3/igt@kms_frontbuffer_tracking@plane-fbc-rte.html
* igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-mmap-wc:
- shard-dg2-set2: NOTRUN -> [SKIP][90] ([Intel XE#653]) +9 other tests skip
[90]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-435/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-mmap-wc.html
* igt@kms_hdmi_inject@inject-audio:
- shard-lnl: NOTRUN -> [SKIP][91] ([Intel XE#1470] / [Intel XE#2853])
[91]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-5/igt@kms_hdmi_inject@inject-audio.html
* igt@kms_hdr@static-toggle-suspend:
- shard-bmg: [PASS][92] -> [SKIP][93] ([Intel XE#1503])
[92]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-bmg-5/igt@kms_hdr@static-toggle-suspend.html
[93]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-6/igt@kms_hdr@static-toggle-suspend.html
* igt@kms_joiner@invalid-modeset-ultra-joiner:
- shard-dg2-set2: NOTRUN -> [SKIP][94] ([Intel XE#2927])
[94]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-436/igt@kms_joiner@invalid-modeset-ultra-joiner.html
* igt@kms_plane_alpha_blend@alpha-opaque-fb@pipe-a-hdmi-a-1:
- shard-adlp: [PASS][95] -> [DMESG-WARN][96] ([Intel XE#2953] / [Intel XE#4173]) +4 other tests dmesg-warn
[95]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-adlp-6/igt@kms_plane_alpha_blend@alpha-opaque-fb@pipe-a-hdmi-a-1.html
[96]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-3/igt@kms_plane_alpha_blend@alpha-opaque-fb@pipe-a-hdmi-a-1.html
* igt@kms_plane_cursor@primary@pipe-a-hdmi-a-6-size-256:
- shard-dg2-set2: NOTRUN -> [FAIL][97] ([Intel XE#616]) +2 other tests fail
[97]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-434/igt@kms_plane_cursor@primary@pipe-a-hdmi-a-6-size-256.html
* igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-5:
- shard-bmg: NOTRUN -> [SKIP][98] ([Intel XE#2763]) +4 other tests skip
[98]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-8/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-5.html
* igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-5@pipe-c:
- shard-lnl: NOTRUN -> [SKIP][99] ([Intel XE#2763]) +3 other tests skip
[99]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-2/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-5@pipe-c.html
* igt@kms_pm_dc@dc3co-vpb-simulation:
- shard-dg2-set2: NOTRUN -> [SKIP][100] ([Intel XE#1122])
[100]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-434/igt@kms_pm_dc@dc3co-vpb-simulation.html
* igt@kms_pm_dc@dc6-dpms:
- shard-lnl: [PASS][101] -> [FAIL][102] ([Intel XE#718])
[101]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-lnl-1/igt@kms_pm_dc@dc6-dpms.html
[102]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-4/igt@kms_pm_dc@dc6-dpms.html
* igt@kms_pm_rpm@dpms-mode-unset-non-lpsp:
- shard-adlp: NOTRUN -> [SKIP][103] ([Intel XE#836])
[103]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-9/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html
- shard-lnl: NOTRUN -> [SKIP][104] ([Intel XE#1439] / [Intel XE#836])
[104]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-3/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html
* igt@kms_pm_rpm@legacy-planes-dpms:
- shard-adlp: [PASS][105] -> [DMESG-WARN][106] ([Intel XE#3868])
[105]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-adlp-3/igt@kms_pm_rpm@legacy-planes-dpms.html
[106]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-3/igt@kms_pm_rpm@legacy-planes-dpms.html
* igt@kms_psr2_sf@fbc-pr-overlay-primary-update-sf-dmg-area:
- shard-lnl: NOTRUN -> [SKIP][107] ([Intel XE#2893] / [Intel XE#5899])
[107]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-7/igt@kms_psr2_sf@fbc-pr-overlay-primary-update-sf-dmg-area.html
* igt@kms_psr2_sf@psr2-cursor-plane-move-continuous-exceed-fully-sf:
- shard-adlp: NOTRUN -> [SKIP][108] ([Intel XE#1489] / [Intel XE#5899]) +1 other test skip
[108]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-6/igt@kms_psr2_sf@psr2-cursor-plane-move-continuous-exceed-fully-sf.html
- shard-bmg: NOTRUN -> [SKIP][109] ([Intel XE#1489] / [Intel XE#5899]) +1 other test skip
[109]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-6/igt@kms_psr2_sf@psr2-cursor-plane-move-continuous-exceed-fully-sf.html
- shard-dg2-set2: NOTRUN -> [SKIP][110] ([Intel XE#1489] / [Intel XE#5899]) +3 other tests skip
[110]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-436/igt@kms_psr2_sf@psr2-cursor-plane-move-continuous-exceed-fully-sf.html
* igt@kms_psr2_su@page_flip-nv12:
- shard-dg2-set2: NOTRUN -> [SKIP][111] ([Intel XE#1122] / [Intel XE#5899])
[111]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-463/igt@kms_psr2_su@page_flip-nv12.html
* igt@kms_psr@fbc-pr-cursor-blt:
- shard-bmg: NOTRUN -> [SKIP][112] ([Intel XE#2234] / [Intel XE#2850] / [Intel XE#5899]) +7 other tests skip
[112]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-5/igt@kms_psr@fbc-pr-cursor-blt.html
* igt@kms_psr@fbc-pr-dpms:
- shard-lnl: NOTRUN -> [SKIP][113] ([Intel XE#1406] / [Intel XE#5899])
[113]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-3/igt@kms_psr@fbc-pr-dpms.html
* igt@kms_psr@pr-cursor-blt:
- shard-adlp: NOTRUN -> [SKIP][114] ([Intel XE#2850] / [Intel XE#5899] / [Intel XE#929]) +2 other tests skip
[114]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-3/igt@kms_psr@pr-cursor-blt.html
- shard-lnl: NOTRUN -> [SKIP][115] ([Intel XE#5784] / [Intel XE#5899])
[115]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-4/igt@kms_psr@pr-cursor-blt.html
* igt@kms_psr@psr-dpms:
- shard-dg2-set2: NOTRUN -> [SKIP][116] ([Intel XE#2850] / [Intel XE#5899] / [Intel XE#929]) +6 other tests skip
[116]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-435/igt@kms_psr@psr-dpms.html
* igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90:
- shard-bmg: NOTRUN -> [SKIP][117] ([Intel XE#3414] / [Intel XE#3904])
[117]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-4/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90.html
* igt@kms_vrr@cmrr@pipe-a-edp-1:
- shard-lnl: [PASS][118] -> [FAIL][119] ([Intel XE#4459]) +1 other test fail
[118]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-lnl-1/igt@kms_vrr@cmrr@pipe-a-edp-1.html
[119]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-7/igt@kms_vrr@cmrr@pipe-a-edp-1.html
* igt@kms_vrr@seamless-rr-switch-virtual:
- shard-bmg: NOTRUN -> [SKIP][120] ([Intel XE#1499])
[120]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-4/igt@kms_vrr@seamless-rr-switch-virtual.html
* igt@xe_copy_basic@mem-set-linear-0xfffe:
- shard-dg2-set2: NOTRUN -> [SKIP][121] ([Intel XE#1126])
[121]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-432/igt@xe_copy_basic@mem-set-linear-0xfffe.html
* igt@xe_eu_stall@blocking-read:
- shard-adlp: NOTRUN -> [SKIP][122] ([Intel XE#5626])
[122]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-1/igt@xe_eu_stall@blocking-read.html
- shard-dg2-set2: NOTRUN -> [SKIP][123] ([Intel XE#5626])
[123]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-432/igt@xe_eu_stall@blocking-read.html
* igt@xe_eudebug@basic-vm-access-userptr:
- shard-adlp: NOTRUN -> [SKIP][124] ([Intel XE#4837] / [Intel XE#5565])
[124]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-4/igt@xe_eudebug@basic-vm-access-userptr.html
* igt@xe_eudebug@basic-vm-bind-extended-discovery:
- shard-dg2-set2: NOTRUN -> [SKIP][125] ([Intel XE#4837]) +2 other tests skip
[125]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-432/igt@xe_eudebug@basic-vm-bind-extended-discovery.html
* igt@xe_eudebug_online@basic-breakpoint:
- shard-bmg: NOTRUN -> [SKIP][126] ([Intel XE#4837]) +2 other tests skip
[126]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-1/igt@xe_eudebug_online@basic-breakpoint.html
- shard-lnl: NOTRUN -> [SKIP][127] ([Intel XE#4837]) +2 other tests skip
[127]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-4/igt@xe_eudebug_online@basic-breakpoint.html
* igt@xe_evict@evict-beng-large:
- shard-adlp: NOTRUN -> [SKIP][128] ([Intel XE#261] / [Intel XE#5564])
[128]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-2/igt@xe_evict@evict-beng-large.html
- shard-lnl: NOTRUN -> [SKIP][129] ([Intel XE#688])
[129]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-4/igt@xe_evict@evict-beng-large.html
* igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr-rebind:
- shard-dg2-set2: NOTRUN -> [SKIP][130] ([Intel XE#1392])
[130]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-432/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr-rebind.html
- shard-lnl: NOTRUN -> [SKIP][131] ([Intel XE#1392]) +1 other test skip
[131]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-8/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr-rebind.html
* igt@xe_exec_basic@multigpu-no-exec-bindexecqueue-userptr-rebind:
- shard-dg2-set2: [PASS][132] -> [SKIP][133] ([Intel XE#1392]) +5 other tests skip
[132]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-dg2-434/igt@xe_exec_basic@multigpu-no-exec-bindexecqueue-userptr-rebind.html
[133]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-432/igt@xe_exec_basic@multigpu-no-exec-bindexecqueue-userptr-rebind.html
* igt@xe_exec_basic@multigpu-once-basic-defer-bind:
- shard-adlp: NOTRUN -> [SKIP][134] ([Intel XE#1392] / [Intel XE#5575]) +1 other test skip
[134]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-4/igt@xe_exec_basic@multigpu-once-basic-defer-bind.html
- shard-bmg: NOTRUN -> [SKIP][135] ([Intel XE#2322]) +3 other tests skip
[135]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-3/igt@xe_exec_basic@multigpu-once-basic-defer-bind.html
* igt@xe_exec_fault_mode@many-execqueues-bindexecqueue-userptr-rebind-imm:
- shard-dg2-set2: NOTRUN -> [SKIP][136] ([Intel XE#288]) +9 other tests skip
[136]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-432/igt@xe_exec_fault_mode@many-execqueues-bindexecqueue-userptr-rebind-imm.html
* igt@xe_exec_fault_mode@many-execqueues-rebind:
- shard-adlp: NOTRUN -> [SKIP][137] ([Intel XE#288] / [Intel XE#5561]) +4 other tests skip
[137]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-2/igt@xe_exec_fault_mode@many-execqueues-rebind.html
* igt@xe_exec_mix_modes@exec-simple-batch-store-dma-fence:
- shard-dg2-set2: NOTRUN -> [SKIP][138] ([Intel XE#2360]) +1 other test skip
[138]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-432/igt@xe_exec_mix_modes@exec-simple-batch-store-dma-fence.html
* igt@xe_exec_mix_modes@exec-spinner-interrupted-lr:
- shard-adlp: NOTRUN -> [SKIP][139] ([Intel XE#2360] / [Intel XE#5573])
[139]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-8/igt@xe_exec_mix_modes@exec-spinner-interrupted-lr.html
* igt@xe_exec_system_allocator@many-stride-mmap-huge-nomemset:
- shard-lnl: NOTRUN -> [SKIP][140] ([Intel XE#4943]) +6 other tests skip
[140]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-7/igt@xe_exec_system_allocator@many-stride-mmap-huge-nomemset.html
* igt@xe_exec_system_allocator@once-mmap-new-huge-nomemset:
- shard-bmg: NOTRUN -> [SKIP][141] ([Intel XE#4943]) +12 other tests skip
[141]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-5/igt@xe_exec_system_allocator@once-mmap-new-huge-nomemset.html
* igt@xe_exec_system_allocator@threads-shared-vm-many-mmap-shared-nomemset:
- shard-dg2-set2: NOTRUN -> [SKIP][142] ([Intel XE#4915]) +108 other tests skip
[142]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-463/igt@xe_exec_system_allocator@threads-shared-vm-many-mmap-shared-nomemset.html
* igt@xe_exec_system_allocator@threads-shared-vm-many-mmap-shared-remap:
- shard-adlp: NOTRUN -> [SKIP][143] ([Intel XE#4915]) +39 other tests skip
[143]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-6/igt@xe_exec_system_allocator@threads-shared-vm-many-mmap-shared-remap.html
* igt@xe_live_ktest@xe_bo:
- shard-adlp: NOTRUN -> [SKIP][144] ([Intel XE#2229] / [Intel XE#455]) +1 other test skip
[144]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-2/igt@xe_live_ktest@xe_bo.html
* igt@xe_live_ktest@xe_bo@xe_bo_evict_kunit:
- shard-lnl: NOTRUN -> [SKIP][145] ([Intel XE#2229])
[145]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-4/igt@xe_live_ktest@xe_bo@xe_bo_evict_kunit.html
* igt@xe_live_ktest@xe_bo@xe_ccs_migrate_kunit:
- shard-bmg: NOTRUN -> [SKIP][146] ([Intel XE#2229])
[146]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-1/igt@xe_live_ktest@xe_bo@xe_ccs_migrate_kunit.html
- shard-adlp: NOTRUN -> [SKIP][147] ([Intel XE#2229])
[147]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-2/igt@xe_live_ktest@xe_bo@xe_ccs_migrate_kunit.html
* igt@xe_oa@oa-regs-whitelisted:
- shard-dg2-set2: NOTRUN -> [SKIP][148] ([Intel XE#3573]) +2 other tests skip
[148]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-466/igt@xe_oa@oa-regs-whitelisted.html
- shard-adlp: NOTRUN -> [SKIP][149] ([Intel XE#3573])
[149]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-6/igt@xe_oa@oa-regs-whitelisted.html
* igt@xe_pat@pat-index-xehpc:
- shard-adlp: NOTRUN -> [SKIP][150] ([Intel XE#2838] / [Intel XE#979])
[150]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-6/igt@xe_pat@pat-index-xehpc.html
- shard-bmg: NOTRUN -> [SKIP][151] ([Intel XE#1420])
[151]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-5/igt@xe_pat@pat-index-xehpc.html
- shard-dg2-set2: NOTRUN -> [SKIP][152] ([Intel XE#2838] / [Intel XE#979])
[152]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-466/igt@xe_pat@pat-index-xehpc.html
- shard-lnl: NOTRUN -> [SKIP][153] ([Intel XE#1420] / [Intel XE#2838])
[153]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-8/igt@xe_pat@pat-index-xehpc.html
* igt@xe_peer2peer@write@write-gpua-vram01-gpub-system-p2p:
- shard-dg2-set2: NOTRUN -> [FAIL][154] ([Intel XE#1173]) +1 other test fail
[154]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-463/igt@xe_peer2peer@write@write-gpua-vram01-gpub-system-p2p.html
* igt@xe_pm@s2idle-vm-bind-userptr:
- shard-adlp: [PASS][155] -> [DMESG-WARN][156] ([Intel XE#2953] / [Intel XE#4173] / [Intel XE#4504])
[155]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-adlp-9/igt@xe_pm@s2idle-vm-bind-userptr.html
[156]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-6/igt@xe_pm@s2idle-vm-bind-userptr.html
* igt@xe_pm@s3-d3cold-basic-exec:
- shard-adlp: NOTRUN -> [SKIP][157] ([Intel XE#2284] / [Intel XE#366])
[157]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-2/igt@xe_pm@s3-d3cold-basic-exec.html
- shard-bmg: NOTRUN -> [SKIP][158] ([Intel XE#2284])
[158]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-2/igt@xe_pm@s3-d3cold-basic-exec.html
- shard-lnl: NOTRUN -> [SKIP][159] ([Intel XE#2284] / [Intel XE#366])
[159]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-7/igt@xe_pm@s3-d3cold-basic-exec.html
* igt@xe_pxp@display-pxp-fb:
- shard-dg2-set2: NOTRUN -> [SKIP][160] ([Intel XE#4733])
[160]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-436/igt@xe_pxp@display-pxp-fb.html
* igt@xe_pxp@pxp-stale-bo-exec-post-rpm:
- shard-bmg: NOTRUN -> [SKIP][161] ([Intel XE#4733])
[161]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-3/igt@xe_pxp@pxp-stale-bo-exec-post-rpm.html
* igt@xe_query@multigpu-query-mem-usage:
- shard-bmg: NOTRUN -> [SKIP][162] ([Intel XE#944])
[162]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-8/igt@xe_query@multigpu-query-mem-usage.html
- shard-dg2-set2: NOTRUN -> [SKIP][163] ([Intel XE#944]) +1 other test skip
[163]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-463/igt@xe_query@multigpu-query-mem-usage.html
- shard-lnl: NOTRUN -> [SKIP][164] ([Intel XE#944])
[164]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-2/igt@xe_query@multigpu-query-mem-usage.html
- shard-adlp: NOTRUN -> [SKIP][165] ([Intel XE#944])
[165]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-9/igt@xe_query@multigpu-query-mem-usage.html
#### Possible fixes ####
* igt@kms_async_flips@async-flip-suspend-resume@pipe-d-hdmi-a-3:
- shard-bmg: [INCOMPLETE][166] ([Intel XE#4912]) -> [PASS][167] +1 other test pass
[166]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-bmg-4/igt@kms_async_flips@async-flip-suspend-resume@pipe-d-hdmi-a-3.html
[167]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-5/igt@kms_async_flips@async-flip-suspend-resume@pipe-d-hdmi-a-3.html
* igt@kms_async_flips@crc-atomic@pipe-d-hdmi-a-1:
- shard-adlp: [FAIL][168] ([Intel XE#3884]) -> [PASS][169] +1 other test pass
[168]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-adlp-2/igt@kms_async_flips@crc-atomic@pipe-d-hdmi-a-1.html
[169]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-1/igt@kms_async_flips@crc-atomic@pipe-d-hdmi-a-1.html
* igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip:
- shard-adlp: [DMESG-FAIL][170] ([Intel XE#4543]) -> [PASS][171] +9 other tests pass
[170]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-adlp-4/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip.html
[171]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-8/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip.html
* igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs@pipe-b-hdmi-a-6:
- shard-dg2-set2: [INCOMPLETE][172] ([Intel XE#1727] / [Intel XE#3113] / [Intel XE#3124]) -> [PASS][173]
[172]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-dg2-466/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs@pipe-b-hdmi-a-6.html
[173]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-435/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs@pipe-b-hdmi-a-6.html
* igt@kms_cursor_legacy@cursora-vs-flipb-legacy:
- shard-bmg: [SKIP][174] ([Intel XE#2291]) -> [PASS][175] +3 other tests pass
[174]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-bmg-6/igt@kms_cursor_legacy@cursora-vs-flipb-legacy.html
[175]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-5/igt@kms_cursor_legacy@cursora-vs-flipb-legacy.html
* igt@kms_dp_aux_dev:
- shard-bmg: [SKIP][176] ([Intel XE#3009]) -> [PASS][177]
[176]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-bmg-6/igt@kms_dp_aux_dev.html
[177]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-2/igt@kms_dp_aux_dev.html
* igt@kms_feature_discovery@display-2x:
- shard-bmg: [SKIP][178] ([Intel XE#2373]) -> [PASS][179]
[178]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-bmg-6/igt@kms_feature_discovery@display-2x.html
[179]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-8/igt@kms_feature_discovery@display-2x.html
* igt@kms_flip@2x-plain-flip-ts-check-interruptible:
- shard-bmg: [SKIP][180] ([Intel XE#2316]) -> [PASS][181] +4 other tests pass
[180]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-bmg-6/igt@kms_flip@2x-plain-flip-ts-check-interruptible.html
[181]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-2/igt@kms_flip@2x-plain-flip-ts-check-interruptible.html
* igt@kms_flip@flip-vs-panning-interruptible:
- shard-adlp: [DMESG-WARN][182] ([Intel XE#4543] / [Intel XE#5208]) -> [PASS][183]
[182]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-adlp-8/igt@kms_flip@flip-vs-panning-interruptible.html
[183]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-8/igt@kms_flip@flip-vs-panning-interruptible.html
* igt@kms_flip@flip-vs-panning-interruptible@b-hdmi-a1:
- shard-adlp: [DMESG-WARN][184] ([Intel XE#4543]) -> [PASS][185] +19 other tests pass
[184]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-adlp-8/igt@kms_flip@flip-vs-panning-interruptible@b-hdmi-a1.html
[185]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-adlp-8/igt@kms_flip@flip-vs-panning-interruptible@b-hdmi-a1.html
* igt@kms_flip@flip-vs-suspend:
- shard-bmg: [INCOMPLETE][186] ([Intel XE#2049] / [Intel XE#2597]) -> [PASS][187] +1 other test pass
[186]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-bmg-3/igt@kms_flip@flip-vs-suspend.html
[187]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-7/igt@kms_flip@flip-vs-suspend.html
- shard-dg2-set2: [INCOMPLETE][188] ([Intel XE#2049] / [Intel XE#2597]) -> [PASS][189] +1 other test pass
[188]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-dg2-433/igt@kms_flip@flip-vs-suspend.html
[189]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-464/igt@kms_flip@flip-vs-suspend.html
* igt@kms_plane_cursor@overlay:
- shard-dg2-set2: [FAIL][190] ([Intel XE#616]) -> [PASS][191]
[190]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-dg2-432/igt@kms_plane_cursor@overlay.html
[191]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-433/igt@kms_plane_cursor@overlay.html
* igt@xe_exec_basic@multigpu-no-exec-null-defer-bind:
- shard-dg2-set2: [SKIP][192] ([Intel XE#1392]) -> [PASS][193] +2 other tests pass
[192]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-dg2-432/igt@xe_exec_basic@multigpu-no-exec-null-defer-bind.html
[193]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-463/igt@xe_exec_basic@multigpu-no-exec-null-defer-bind.html
* igt@xe_exec_fault_mode@many-execqueues-bindexecqueue-userptr-rebind:
- shard-bmg: [FAIL][194] -> [PASS][195]
[194]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-bmg-7/igt@xe_exec_fault_mode@many-execqueues-bindexecqueue-userptr-rebind.html
[195]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-2/igt@xe_exec_fault_mode@many-execqueues-bindexecqueue-userptr-rebind.html
* igt@xe_exec_reset@parallel-gt-reset:
- shard-dg2-set2: [DMESG-WARN][196] ([Intel XE#3876]) -> [PASS][197]
[196]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-dg2-466/igt@xe_exec_reset@parallel-gt-reset.html
[197]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-433/igt@xe_exec_reset@parallel-gt-reset.html
* igt@xe_exec_threads@threads-hang-shared-vm-userptr-invalidate:
- shard-bmg: [DMESG-FAIL][198] ([Intel XE#3876]) -> [PASS][199] +1 other test pass
[198]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-bmg-3/igt@xe_exec_threads@threads-hang-shared-vm-userptr-invalidate.html
[199]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-2/igt@xe_exec_threads@threads-hang-shared-vm-userptr-invalidate.html
* igt@xe_pmu@gt-frequency:
- shard-dg2-set2: [FAIL][200] ([Intel XE#4819]) -> [PASS][201] +1 other test pass
[200]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-dg2-435/igt@xe_pmu@gt-frequency.html
[201]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-466/igt@xe_pmu@gt-frequency.html
- shard-lnl: [FAIL][202] ([Intel XE#5166]) -> [PASS][203] +1 other test pass
[202]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-lnl-7/igt@xe_pmu@gt-frequency.html
[203]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-8/igt@xe_pmu@gt-frequency.html
#### Warnings ####
* igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs:
- shard-dg2-set2: [INCOMPLETE][204] ([Intel XE#1727] / [Intel XE#3113] / [Intel XE#3124] / [Intel XE#4345]) -> [INCOMPLETE][205] ([Intel XE#1727] / [Intel XE#2705] / [Intel XE#3113] / [Intel XE#4212] / [Intel XE#4345] / [Intel XE#4522])
[204]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-dg2-466/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs.html
[205]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-dg2-435/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs.html
* igt@kms_content_protection@lic-type-0:
- shard-bmg: [SKIP][206] ([Intel XE#2341]) -> [FAIL][207] ([Intel XE#1178])
[206]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-bmg-6/igt@kms_content_protection@lic-type-0.html
[207]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-2/igt@kms_content_protection@lic-type-0.html
* igt@kms_flip@bo-too-big-interruptible@a-edp1:
- shard-lnl: [TIMEOUT][208] ([Intel XE#1504] / [Intel XE#5737]) -> [TIMEOUT][209] ([Intel XE#1504]) +1 other test timeout
[208]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-lnl-2/igt@kms_flip@bo-too-big-interruptible@a-edp1.html
[209]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-lnl-8/igt@kms_flip@bo-too-big-interruptible@a-edp1.html
* igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-mmap-wc:
- shard-bmg: [SKIP][210] ([Intel XE#2311]) -> [SKIP][211] ([Intel XE#2312]) +7 other tests skip
[210]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-bmg-2/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-mmap-wc.html
[211]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-6/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-onoff:
- shard-bmg: [SKIP][212] ([Intel XE#2312]) -> [SKIP][213] ([Intel XE#5390]) +2 other tests skip
[212]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-onoff.html
[213]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-2/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-onoff.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-draw-mmap-wc:
- shard-bmg: [SKIP][214] ([Intel XE#5390]) -> [SKIP][215] ([Intel XE#2312]) +4 other tests skip
[214]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-bmg-7/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-draw-mmap-wc.html
[215]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-blt:
- shard-bmg: [SKIP][216] ([Intel XE#2312]) -> [SKIP][217] ([Intel XE#2311]) +9 other tests skip
[216]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-blt.html
[217]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-7/igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-blt:
- shard-bmg: [SKIP][218] ([Intel XE#2313]) -> [SKIP][219] ([Intel XE#2312]) +9 other tests skip
[218]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-bmg-1/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-blt.html
[219]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@psr-2p-primscrn-indfb-msflip-blt:
- shard-bmg: [SKIP][220] ([Intel XE#2312]) -> [SKIP][221] ([Intel XE#2313]) +8 other tests skip
[220]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f/shard-bmg-6/igt@kms_frontbuffer_tracking@psr-2p-primscrn-indfb-msflip-blt.html
[221]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/shard-bmg-8/igt@kms_frontbuffer_tracking@psr-2p-primscrn-indfb-msflip-blt.html
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[Intel XE#1122]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1122
[Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
[Intel XE#1126]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1126
[Intel XE#1158]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1158
[Intel XE#1173]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1173
[Intel XE#1178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1178
[Intel XE#1392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1392
[Intel XE#1397]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1397
[Intel XE#1401]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1401
[Intel XE#1406]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1406
[Intel XE#1407]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1407
[Intel XE#1420]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1420
[Intel XE#1421]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1421
[Intel XE#1424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1424
[Intel XE#1439]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1439
[Intel XE#1466]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1466
[Intel XE#1470]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1470
[Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
[Intel XE#1499]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1499
[Intel XE#1503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1503
[Intel XE#1504]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1504
[Intel XE#1727]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1727
[Intel XE#1745]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1745
[Intel XE#2049]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2049
[Intel XE#2191]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2191
[Intel XE#2229]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2229
[Intel XE#2233]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2233
[Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
[Intel XE#2252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2252
[Intel XE#2284]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2284
[Intel XE#2291]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2291
[Intel XE#2293]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2293
[Intel XE#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311
[Intel XE#2312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2312
[Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313
[Intel XE#2314]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2314
[Intel XE#2316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2316
[Intel XE#2320]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2320
[Intel XE#2321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2321
[Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
[Intel XE#2327]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2327
[Intel XE#2341]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2341
[Intel XE#2350]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2350
[Intel XE#2360]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2360
[Intel XE#2373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2373
[Intel XE#2380]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2380
[Intel XE#2597]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2597
[Intel XE#261]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/261
[Intel XE#2669]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2669
[Intel XE#2705]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2705
[Intel XE#2724]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2724
[Intel XE#2763]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2763
[Intel XE#2838]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2838
[Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
[Intel XE#2853]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2853
[Intel XE#288]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/288
[Intel XE#2887]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2887
[Intel XE#2893]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2893
[Intel XE#2894]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2894
[Intel XE#2907]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2907
[Intel XE#2927]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2927
[Intel XE#2953]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2953
[Intel XE#3009]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3009
[Intel XE#306]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/306
[Intel XE#308]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/308
[Intel XE#310]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/310
[Intel XE#3113]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3113
[Intel XE#3124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3124
[Intel XE#316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/316
[Intel XE#3414]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3414
[Intel XE#3432]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3432
[Intel XE#3573]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3573
[Intel XE#366]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/366
[Intel XE#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
[Intel XE#373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/373
[Intel XE#3868]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3868
[Intel XE#3876]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3876
[Intel XE#3884]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3884
[Intel XE#3904]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3904
[Intel XE#4173]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4173
[Intel XE#4212]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4212
[Intel XE#4345]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4345
[Intel XE#4416]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4416
[Intel XE#4422]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4422
[Intel XE#4459]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4459
[Intel XE#4504]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4504
[Intel XE#4522]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4522
[Intel XE#4543]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4543
[Intel XE#455]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/455
[Intel XE#4665]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4665
[Intel XE#4733]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4733
[Intel XE#4819]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4819
[Intel XE#4837]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4837
[Intel XE#4912]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4912
[Intel XE#4915]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4915
[Intel XE#4943]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4943
[Intel XE#5166]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5166
[Intel XE#5208]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5208
[Intel XE#5390]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5390
[Intel XE#5561]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5561
[Intel XE#5564]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5564
[Intel XE#5565]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5565
[Intel XE#5573]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5573
[Intel XE#5575]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5575
[Intel XE#5626]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5626
[Intel XE#5737]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5737
[Intel XE#5784]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5784
[Intel XE#5899]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5899
[Intel XE#610]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/610
[Intel XE#616]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/616
[Intel XE#623]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/623
[Intel XE#651]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/651
[Intel XE#653]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/653
[Intel XE#656]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/656
[Intel XE#688]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/688
[Intel XE#718]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/718
[Intel XE#776]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/776
[Intel XE#787]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/787
[Intel XE#836]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/836
[Intel XE#929]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/929
[Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944
[Intel XE#979]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/979
Build changes
-------------
* IGT: IGT_8503 -> IGT_8504
* Linux: xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f -> xe-pw-153341v1
IGT_8503: 8503
IGT_8504: 8504
xe-3597-cca87ca63e2f5b8a785dc59c23e526987530b27f: cca87ca63e2f5b8a785dc59c23e526987530b27f
xe-pw-153341v1: 153341v1
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-153341v1/index.html
[-- Attachment #2: Type: text/html, Size: 76887 bytes --]
^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2025-08-23 3:50 UTC | newest]
Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-22 8:59 [PATCH v2 0/8] [ANDROID]: Add GPU work period support for Xe driver Aakash Deep Sarkar
2025-08-22 8:59 ` [PATCH v2 1/8] [ANDROID]: Add a new xe_user structure Aakash Deep Sarkar
2025-08-22 15:48 ` Rodrigo Vivi
2025-08-22 17:01 ` Matthew Brost
2025-08-22 20:09 ` Rodrigo Vivi
2025-08-23 1:57 ` Dixit, Ashutosh
2025-08-22 8:59 ` [PATCH v2 2/8] [ANDROID]: Add xe_gt_clock_interval_to_ns function Aakash Deep Sarkar
2025-08-22 8:59 ` [PATCH v2 3/8] [ANDROID]: Add a trace point for GPU work period Aakash Deep Sarkar
2025-08-22 19:57 ` Rodrigo Vivi
2025-08-22 8:59 ` [PATCH v2 4/8] [ANDROID]: Modify xe_exec_queue_update_run_ticks Aakash Deep Sarkar
2025-08-22 8:59 ` [PATCH v2 5/8] [ANDROID]: Handle xe_user creation and removal Aakash Deep Sarkar
2025-08-22 8:59 ` [PATCH v2 6/8] [ANDROID]: Implement xe_work_period_worker Aakash Deep Sarkar
2025-08-22 11:00 ` Matthew Auld
2025-08-22 16:58 ` Matthew Brost
2025-08-22 8:59 ` [PATCH v2 7/8] [ANDROID]: Add a Kconfig option for GPU work period Aakash Deep Sarkar
2025-08-22 8:59 ` [PATCH v2 8/8] [ANDROID]: Handle xe_work_period destruction Aakash Deep Sarkar
2025-08-22 9:39 ` ✗ CI.checkpatch: warning for : Add GPU work period support for Xe driver Patchwork
2025-08-22 9:40 ` ✓ CI.KUnit: success " Patchwork
2025-08-22 10:44 ` ✓ Xe.CI.BAT: " Patchwork
2025-08-23 3:50 ` ✗ Xe.CI.Full: failure " Patchwork
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.