* [PATCH v2 0/4] Add reclaim to the dmem cgroup controller
@ 2026-04-28 7:31 Thomas Hellström
2026-04-28 7:31 ` [PATCH v2 1/4] cgroup/dmem: Add reclaim callback for lowering max below current usage Thomas Hellström
` (7 more replies)
0 siblings, 8 replies; 13+ messages in thread
From: Thomas Hellström @ 2026-04-28 7:31 UTC (permalink / raw)
To: intel-xe
Cc: Thomas Hellström, Natalie Vock, Johannes Weiner, Tejun Heo,
Michal Koutný, cgroups, Huang Rui, Matthew Brost,
Matthew Auld, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
Simona Vetter, David Airlie, Christian König, Alex Deucher,
Rodrigo Vivi, dri-devel, amd-gfx, linux-kernel
When writing a "max" limit lower than the current usage, the
existing code silently failed. This series aims to improve
on that by returning -EBUSY on failure and also attempt
to synchronously reclaim device memory to push the usage
under the new max limit to avoid the error.
Patch 1 implements and documents a reclaim callback interface
for the dmem controller.
Patch 2 implements a TTM reclaim callback.
Patch 3-4 hooks up the reclaim callback to the dmem cgroups-
aware drivers xe and amdgpu.
v2:
- Remove the error propagation that was in a previous series (Maarten)
- A number of updates in patch 1. See its commit message for
details (Maarten)
User-space tests are at
https://patchwork.freedesktop.org/series/163935/
Test-with: 20260428065411.4222-1-thomas.hellstrom@linux.intel.com
Thomas Hellström (4):
cgroup/dmem: Add reclaim callback for lowering max below current usage
drm/ttm: Hook up a cgroup-aware reclaim callback for the dmem
controller
drm/xe: Wire up dmem cgroup reclaim for VRAM manager
drm/amdgpu: Wire up dmem cgroup reclaim for VRAM manager
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 2 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c | 10 ++-
drivers/gpu/drm/ttm/ttm_bo.c | 95 +++++++++++++++++++-
drivers/gpu/drm/ttm/ttm_bo_util.c | 3 +-
drivers/gpu/drm/ttm/ttm_resource.c | 36 ++++++++
drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 19 ++--
include/drm/ttm/ttm_bo.h | 10 +++
include/drm/ttm/ttm_resource.h | 4 +
include/linux/cgroup_dmem.h | 11 +++
kernel/cgroup/dmem.c | 83 +++++++++++++++--
10 files changed, 249 insertions(+), 24 deletions(-)
--
2.53.0
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 1/4] cgroup/dmem: Add reclaim callback for lowering max below current usage
2026-04-28 7:31 [PATCH v2 0/4] Add reclaim to the dmem cgroup controller Thomas Hellström
@ 2026-04-28 7:31 ` Thomas Hellström
2026-04-28 7:31 ` [PATCH v2 2/4] drm/ttm: Hook up a cgroup-aware reclaim callback for the dmem controller Thomas Hellström
` (6 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Thomas Hellström @ 2026-04-28 7:31 UTC (permalink / raw)
To: intel-xe
Cc: Thomas Hellström, Natalie Vock, Johannes Weiner, Tejun Heo,
Michal Koutný, cgroups, Huang Rui, Matthew Brost,
Matthew Auld, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
Simona Vetter, David Airlie, Christian König, Alex Deucher,
Rodrigo Vivi, dri-devel, amd-gfx, linux-kernel
Add an optional reclaim callback to struct dmem_cgroup_region. When
dmem.max is set below the current usage of a cgroup pool, the new limit
is applied immediately (so that concurrent allocations are throttled
while reclaim is in progress) and then the driver is asked to evict
memory to bring usage back below the limit.
Reclaim is attempted up to a bounded number of times. No error is
returned to userspace if usage remains above the limit after reclaim,
and a pending signal will abort the reclaim loop early. This matches
the behavior of memory.max in the memory cgroup controller.
Also honor O_NONBLOCK so that if that flag is set during the
max value write, no reclaim is initiated. The idea is to avoid
charging the reclaim cost to the writer of he max value.
v2:
- Write max before reclaim is attempted (Maarten)
- Let signals abort the reclaim without error (Maarten)
- If a new max value is written with the O_NONBLOCK flag,
reclaim is not attempted (Maarten)
- Extract region from the pool parameter rather than
passing it explicitly to set_resource_xxx().
Assisted-by: GitHub Copilot:claude-sonnet-4.6
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
---
include/linux/cgroup_dmem.h | 11 +++++
kernel/cgroup/dmem.c | 83 +++++++++++++++++++++++++++++++++----
2 files changed, 85 insertions(+), 9 deletions(-)
diff --git a/include/linux/cgroup_dmem.h b/include/linux/cgroup_dmem.h
index dd4869f1d736..61520a431740 100644
--- a/include/linux/cgroup_dmem.h
+++ b/include/linux/cgroup_dmem.h
@@ -26,6 +26,10 @@ bool dmem_cgroup_state_evict_valuable(struct dmem_cgroup_pool_state *limit_pool,
bool ignore_low, bool *ret_hit_low);
void dmem_cgroup_pool_state_put(struct dmem_cgroup_pool_state *pool);
+void dmem_cgroup_region_set_reclaim(struct dmem_cgroup_region *region,
+ int (*reclaim)(struct dmem_cgroup_pool_state *pool,
+ u64 target_bytes, void *priv),
+ void *priv);
#else
static inline __printf(2,3) struct dmem_cgroup_region *
dmem_cgroup_register_region(u64 size, const char *name_fmt, ...)
@@ -62,5 +66,12 @@ bool dmem_cgroup_state_evict_valuable(struct dmem_cgroup_pool_state *limit_pool,
static inline void dmem_cgroup_pool_state_put(struct dmem_cgroup_pool_state *pool)
{ }
+static inline void
+dmem_cgroup_region_set_reclaim(struct dmem_cgroup_region *region,
+ int (*reclaim)(struct dmem_cgroup_pool_state *pool,
+ u64 target_bytes, void *priv),
+ void *priv)
+{ }
+
#endif
#endif /* _CGROUP_DMEM_H */
diff --git a/kernel/cgroup/dmem.c b/kernel/cgroup/dmem.c
index 1ab1fb47f271..56e698e2d1c9 100644
--- a/kernel/cgroup/dmem.c
+++ b/kernel/cgroup/dmem.c
@@ -51,6 +51,18 @@ struct dmem_cgroup_region {
* No new pools should be added to the region afterwards.
*/
bool unregistered;
+
+ /**
+ * @reclaim: Optional callback invoked when dmem.max is set below the
+ * current usage of a pool. The driver should attempt to free at least
+ * @target_bytes from @pool. May be called multiple times if usage
+ * remains above the limit after returning.
+ */
+ int (*reclaim)(struct dmem_cgroup_pool_state *pool, u64 target_bytes,
+ void *priv);
+
+ /** @reclaim_priv: Private data passed to @reclaim. */
+ void *reclaim_priv;
};
struct dmemcg_state {
@@ -145,21 +157,46 @@ static void free_cg_pool(struct dmem_cgroup_pool_state *pool)
}
static void
-set_resource_min(struct dmem_cgroup_pool_state *pool, u64 val)
+set_resource_min(struct dmem_cgroup_pool_state *pool, u64 val, bool nonblock)
{
page_counter_set_min(&pool->cnt, val);
}
static void
-set_resource_low(struct dmem_cgroup_pool_state *pool, u64 val)
+set_resource_low(struct dmem_cgroup_pool_state *pool, u64 val, bool nonblock)
{
page_counter_set_low(&pool->cnt, val);
}
static void
-set_resource_max(struct dmem_cgroup_pool_state *pool, u64 val)
+set_resource_max(struct dmem_cgroup_pool_state *pool, u64 val, bool nonblock)
{
- page_counter_set_max(&pool->cnt, val);
+ struct dmem_cgroup_region *region = pool->region;
+
+ /*
+ * Always update the limit, even if usage currently exceeds it.
+ * Concurrent allocations will be throttled against the new limit
+ * while reclaim is in progress.
+ */
+ xchg(&pool->cnt.max, (unsigned long)val);
+
+ if (nonblock || !region->reclaim)
+ return;
+
+ for (int retries = 5; retries > 0; retries--) {
+ u64 usage = page_counter_read(&pool->cnt);
+
+ if (usage <= val)
+ break;
+
+ if (signal_pending(current))
+ break;
+
+ if (region->reclaim(pool, usage - val, region->reclaim_priv))
+ break;
+
+ cond_resched();
+ }
}
static u64 get_resource_low(struct dmem_cgroup_pool_state *pool)
@@ -184,9 +221,9 @@ static u64 get_resource_current(struct dmem_cgroup_pool_state *pool)
static void reset_all_resource_limits(struct dmem_cgroup_pool_state *rpool)
{
- set_resource_min(rpool, 0);
- set_resource_low(rpool, 0);
- set_resource_max(rpool, PAGE_COUNTER_MAX);
+ set_resource_min(rpool, 0, false);
+ set_resource_low(rpool, 0, false);
+ set_resource_max(rpool, PAGE_COUNTER_MAX, false);
}
static void dmemcs_offline(struct cgroup_subsys_state *css)
@@ -568,6 +605,32 @@ void dmem_cgroup_pool_state_put(struct dmem_cgroup_pool_state *pool)
}
EXPORT_SYMBOL_GPL(dmem_cgroup_pool_state_put);
+/**
+ * dmem_cgroup_region_set_reclaim - Register a reclaim callback on a region.
+ * @region: The region to register the callback for.
+ * @reclaim: Callback to invoke when dmem.max is set below current usage.
+ * Called with the pool that needs reclaiming and the number of
+ * bytes to free. Returns 0 on progress, negative on failure.
+ * @priv: Opaque pointer passed back to @reclaim.
+ *
+ * When dmem.max is lowered below the current usage of a cgroup pool, the
+ * dmem controller will call @reclaim with a target number of bytes to free.
+ * After @reclaim returns the controller retries setting the limit; if usage
+ * is still too high it calls @reclaim again, up to a bounded retry count.
+ */
+void dmem_cgroup_region_set_reclaim(struct dmem_cgroup_region *region,
+ int (*reclaim)(struct dmem_cgroup_pool_state *pool,
+ u64 target_bytes, void *priv),
+ void *priv)
+{
+ if (!region)
+ return;
+
+ region->reclaim = reclaim;
+ region->reclaim_priv = priv;
+}
+EXPORT_SYMBOL_GPL(dmem_cgroup_region_set_reclaim);
+
static struct dmem_cgroup_pool_state *
get_cg_pool_unlocked(struct dmemcg_state *cg, struct dmem_cgroup_region *region)
{
@@ -725,9 +788,10 @@ static int dmemcg_parse_limit(char *options, u64 *new_limit)
static ssize_t dmemcg_limit_write(struct kernfs_open_file *of,
char *buf, size_t nbytes, loff_t off,
- void (*apply)(struct dmem_cgroup_pool_state *, u64))
+ void (*apply)(struct dmem_cgroup_pool_state *, u64, bool))
{
struct dmemcg_state *dmemcs = css_to_dmemcs(of_css(of));
+ bool nonblock = of->file->f_flags & O_NONBLOCK;
int err = 0;
while (buf && !err) {
@@ -772,7 +836,8 @@ static ssize_t dmemcg_limit_write(struct kernfs_open_file *of,
}
/* And commit */
- apply(pool, new_limit);
+ apply(pool, new_limit, nonblock);
+
dmemcg_pool_put(pool);
out_put:
--
2.53.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v2 2/4] drm/ttm: Hook up a cgroup-aware reclaim callback for the dmem controller
2026-04-28 7:31 [PATCH v2 0/4] Add reclaim to the dmem cgroup controller Thomas Hellström
2026-04-28 7:31 ` [PATCH v2 1/4] cgroup/dmem: Add reclaim callback for lowering max below current usage Thomas Hellström
@ 2026-04-28 7:31 ` Thomas Hellström
2026-04-28 7:31 ` [PATCH v2 3/4] drm/xe: Wire up dmem cgroup reclaim for VRAM manager Thomas Hellström
` (5 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Thomas Hellström @ 2026-04-28 7:31 UTC (permalink / raw)
To: intel-xe
Cc: Thomas Hellström, Natalie Vock, Johannes Weiner, Tejun Heo,
Michal Koutný, cgroups, Huang Rui, Matthew Brost,
Matthew Auld, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
Simona Vetter, David Airlie, Christian König, Alex Deucher,
Rodrigo Vivi, dri-devel, amd-gfx, linux-kernel
Add ttm_bo_evict_cgroup() to evict buffer objects charged to a specific
dmem cgroup pool from a resource manager's LRU until a byte target is
met. Add ttm_resource_manager_set_dmem_region() to register the TTM
eviction path as the reclaim callback for a dmem cgroup region.
The eviction context is interruptible; signals abort the operation and
propagate back through the write() syscall.
Introduce a new mode for the bo LRU walker so that sleeping locks
can be taken. This can be used when the caller doesn't hold any
previous dma_resv locks, and where it intends to hold at most
one lock at a time.
Like the rest of the TTM eviction this should sooner than later
be converted to full WW transactions.
Assisted-by: GitHub Copilot:claude-sonnet-4.6
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
---
drivers/gpu/drm/ttm/ttm_bo.c | 95 +++++++++++++++++++++++++++++-
drivers/gpu/drm/ttm/ttm_bo_util.c | 3 +-
drivers/gpu/drm/ttm/ttm_resource.c | 36 +++++++++++
include/drm/ttm/ttm_bo.h | 10 ++++
include/drm/ttm/ttm_resource.h | 4 ++
5 files changed, 144 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
index d85f0a37ac35..1745557c184c 100644
--- a/drivers/gpu/drm/ttm/ttm_bo.c
+++ b/drivers/gpu/drm/ttm/ttm_bo.c
@@ -515,12 +515,20 @@ static s64 ttm_bo_evict_cb(struct ttm_lru_walk *walk, struct ttm_buffer_object *
{
struct ttm_bo_evict_walk *evict_walk =
container_of(walk, typeof(*evict_walk), walk);
+ /* Capture size before eviction in case res is cleared. */
+ s64 bo_size = bo->base.size;
s64 lret;
if (!dmem_cgroup_state_evict_valuable(evict_walk->limit_pool, bo->resource->css,
evict_walk->try_low, &evict_walk->hit_low))
return 0;
+ /*
+ * evict_walk->place is NULL in cgroup drain mode. Drivers'
+ * eviction_valuable() callbacks must handle a NULL place, treating it
+ * as "any placement": the TTM base implementation already does so via
+ * ttm_resource_intersects().
+ */
if (bo->pin_count || !bo->bdev->funcs->eviction_valuable(bo, evict_walk->place))
return 0;
@@ -536,11 +544,15 @@ static s64 ttm_bo_evict_cb(struct ttm_lru_walk *walk, struct ttm_buffer_object *
goto out;
evict_walk->evicted++;
- if (evict_walk->res)
+ if (evict_walk->res) {
lret = ttm_resource_alloc(evict_walk->evictor, evict_walk->place,
evict_walk->res, NULL);
- if (lret == 0)
- return 1;
+ if (lret == 0)
+ return 1;
+ } else {
+ /* Cgroup drain: return bytes freed for byte-denominated progress. */
+ return bo_size;
+ }
out:
/* Errors that should terminate the walk. */
if (lret == -ENOSPC)
@@ -614,6 +626,83 @@ static int ttm_bo_evict_alloc(struct ttm_device *bdev,
return 0;
}
+/**
+ * ttm_bo_evict_cgroup - Evict buffer objects charged to a specific cgroup.
+ * @bdev: The TTM device.
+ * @man: The resource manager whose LRU to walk.
+ * @limit_pool: The cgroup pool state whose members should be evicted.
+ * @target_bytes: Number of bytes to free.
+ * @ctx: The TTM operation context.
+ *
+ * Walk the LRU of @man and evict buffer objects that are charged to the
+ * cgroup identified by @limit_pool, until at least @target_bytes have been
+ * freed. Mirrors the two-pass (trylock -> sleeping-lock, low-watermark)
+ * strategy used by ttm_bo_evict_alloc().
+ *
+ * Return: >= @target_bytes on full success, 0..target_bytes-1 if partial,
+ * negative error code on fatal error.
+ */
+s64 ttm_bo_evict_cgroup(struct ttm_device *bdev,
+ struct ttm_resource_manager *man,
+ struct dmem_cgroup_pool_state *limit_pool,
+ s64 target_bytes,
+ struct ttm_operation_ctx *ctx)
+{
+ struct ttm_bo_evict_walk evict_walk = {
+ .walk = {
+ .ops = &ttm_evict_walk_ops,
+ .arg = { .ctx = ctx },
+ },
+ .limit_pool = limit_pool,
+ /* place, evictor, res left NULL: selects cgroup drain mode */
+ };
+ s64 lret, pass;
+
+ evict_walk.walk.arg.trylock_only = true;
+ lret = ttm_lru_walk_for_evict(&evict_walk.walk, bdev, man, target_bytes);
+ if (lret < 0 || lret >= target_bytes)
+ return lret;
+
+ /* Second pass: also evict BOs at the low watermark. */
+ if (evict_walk.hit_low) {
+ evict_walk.try_low = true;
+ pass = ttm_lru_walk_for_evict(&evict_walk.walk, bdev, man,
+ target_bytes - lret);
+ if (pass < 0)
+ return pass;
+ lret += pass;
+ if (lret >= target_bytes)
+ return lret;
+ }
+
+ /* Full sleeping-lock pass for remaining target. */
+ evict_walk.try_low = evict_walk.hit_low = false;
+ evict_walk.walk.arg.trylock_only = false;
+
+retry:
+ evict_walk.walk.arg.sleeping_lock = true;
+ do {
+ evict_walk.evicted = 0;
+ pass = ttm_lru_walk_for_evict(&evict_walk.walk, bdev, man,
+ target_bytes - lret);
+ if (pass < 0) {
+ lret = pass;
+ goto out;
+ }
+ lret += pass;
+ } while (lret < target_bytes && evict_walk.evicted);
+
+ /* One more attempt if we hit the low limit during sleeping-lock pass. */
+ if (lret < target_bytes && evict_walk.hit_low && !evict_walk.try_low) {
+ evict_walk.try_low = true;
+ goto retry;
+ }
+
+out:
+ return lret;
+}
+EXPORT_SYMBOL(ttm_bo_evict_cgroup);
+
/**
* ttm_bo_pin - Pin the buffer object.
* @bo: The buffer object to pin
diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c
index f83b7d5ec6c6..81c6a674c462 100644
--- a/drivers/gpu/drm/ttm/ttm_bo_util.c
+++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
@@ -999,7 +999,8 @@ __ttm_bo_lru_cursor_next(struct ttm_bo_lru_cursor *curs)
bo = res->bo;
if (ttm_lru_walk_trylock(curs, bo))
bo_locked = true;
- else if (!arg->ticket || arg->ctx->no_wait_gpu || arg->trylock_only)
+ else if ((!arg->ticket && !arg->sleeping_lock) || arg->ctx->no_wait_gpu ||
+ arg->trylock_only)
continue;
if (!ttm_bo_get_unless_zero(bo)) {
diff --git a/drivers/gpu/drm/ttm/ttm_resource.c b/drivers/gpu/drm/ttm/ttm_resource.c
index 9f36631d48b6..936552f426a7 100644
--- a/drivers/gpu/drm/ttm/ttm_resource.c
+++ b/drivers/gpu/drm/ttm/ttm_resource.c
@@ -937,3 +937,39 @@ void ttm_resource_manager_create_debugfs(struct ttm_resource_manager *man,
#endif
}
EXPORT_SYMBOL(ttm_resource_manager_create_debugfs);
+
+static int ttm_resource_manager_dmem_reclaim(struct dmem_cgroup_pool_state *pool,
+ u64 target_bytes, void *priv)
+{
+ struct ttm_resource_manager *man = priv;
+ struct ttm_operation_ctx ctx = { .interruptible = true };
+ s64 freed;
+
+ freed = ttm_bo_evict_cgroup(man->bdev, man, pool, target_bytes, &ctx);
+ if (freed < 0)
+ return freed;
+
+ return freed >= (s64)target_bytes ? 0 : -ENOSPC;
+}
+
+/**
+ * ttm_resource_manager_set_dmem_region - Associate a dmem cgroup region with a
+ * resource manager and register a reclaim
+ * callback.
+ * @man: The resource manager.
+ * @region: The dmem cgroup region to associate, may be NULL or IS_ERR().
+ *
+ * Sets @man->cg and registers ttm_resource_manager_dmem_reclaim() so that
+ * writing to dmem.max below current usage triggers TTM eviction rather than
+ * returning -EBUSY to userspace.
+ */
+void ttm_resource_manager_set_dmem_region(struct ttm_resource_manager *man,
+ struct dmem_cgroup_region *region)
+{
+ man->cg = region;
+ if (!IS_ERR_OR_NULL(region))
+ dmem_cgroup_region_set_reclaim(region,
+ ttm_resource_manager_dmem_reclaim,
+ man);
+}
+EXPORT_SYMBOL(ttm_resource_manager_set_dmem_region);
diff --git a/include/drm/ttm/ttm_bo.h b/include/drm/ttm/ttm_bo.h
index 8310bc3d55f9..32791c4db2a9 100644
--- a/include/drm/ttm/ttm_bo.h
+++ b/include/drm/ttm/ttm_bo.h
@@ -226,6 +226,11 @@ struct ttm_lru_walk_arg {
struct ww_acquire_ctx *ticket;
/** @trylock_only: Only use trylock for locking. */
bool trylock_only;
+ /**
+ * @sleeping_lock: Use sleeping locks even with %NULL @ticket.
+ * @trylock_only has precedence over this field.
+ */
+ bool sleeping_lock;
};
/**
@@ -431,6 +436,11 @@ void ttm_bo_unpin(struct ttm_buffer_object *bo);
int ttm_bo_evict_first(struct ttm_device *bdev,
struct ttm_resource_manager *man,
struct ttm_operation_ctx *ctx);
+s64 ttm_bo_evict_cgroup(struct ttm_device *bdev,
+ struct ttm_resource_manager *man,
+ struct dmem_cgroup_pool_state *limit_pool,
+ s64 target_bytes,
+ struct ttm_operation_ctx *ctx);
int ttm_bo_access(struct ttm_buffer_object *bo, unsigned long offset,
void *buf, int len, int write);
vm_fault_t ttm_bo_vm_reserve(struct ttm_buffer_object *bo,
diff --git a/include/drm/ttm/ttm_resource.h b/include/drm/ttm/ttm_resource.h
index 33e80f30b8b8..c187e6c8b871 100644
--- a/include/drm/ttm/ttm_resource.h
+++ b/include/drm/ttm/ttm_resource.h
@@ -39,6 +39,7 @@
struct dentry;
struct dmem_cgroup_device;
+struct dmem_cgroup_region;
struct drm_printer;
struct ttm_device;
struct ttm_resource_manager;
@@ -475,6 +476,9 @@ void ttm_resource_manager_init(struct ttm_resource_manager *man,
struct ttm_device *bdev,
uint64_t size);
+void ttm_resource_manager_set_dmem_region(struct ttm_resource_manager *man,
+ struct dmem_cgroup_region *region);
+
int ttm_resource_manager_evict_all(struct ttm_device *bdev,
struct ttm_resource_manager *man);
--
2.53.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v2 3/4] drm/xe: Wire up dmem cgroup reclaim for VRAM manager
2026-04-28 7:31 [PATCH v2 0/4] Add reclaim to the dmem cgroup controller Thomas Hellström
2026-04-28 7:31 ` [PATCH v2 1/4] cgroup/dmem: Add reclaim callback for lowering max below current usage Thomas Hellström
2026-04-28 7:31 ` [PATCH v2 2/4] drm/ttm: Hook up a cgroup-aware reclaim callback for the dmem controller Thomas Hellström
@ 2026-04-28 7:31 ` Thomas Hellström
2026-04-28 9:38 ` Upadhyay, Tejas
2026-04-28 9:50 ` Maarten Lankhorst
2026-04-28 7:31 ` [PATCH v2 4/4] drm/amdgpu: " Thomas Hellström
` (4 subsequent siblings)
7 siblings, 2 replies; 13+ messages in thread
From: Thomas Hellström @ 2026-04-28 7:31 UTC (permalink / raw)
To: intel-xe
Cc: Thomas Hellström, Natalie Vock, Johannes Weiner, Tejun Heo,
Michal Koutný, cgroups, Huang Rui, Matthew Brost,
Matthew Auld, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
Simona Vetter, David Airlie, Christian König, Alex Deucher,
Rodrigo Vivi, dri-devel, amd-gfx, linux-kernel
Register the VRAM manager with the dmem cgroup reclaim infrastructure
so that lowering dmem.max below current VRAM usage triggers TTM
eviction rather than failing with -EBUSY.
Assisted-by: GitHub Copilot:claude-sonnet-4.6
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
---
drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 19 ++++++++++++-------
1 file changed, 12 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
index 5fd0d5506a7e..1bdcb3fee901 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
@@ -303,13 +303,6 @@ int __xe_ttm_vram_mgr_init(struct xe_device *xe, struct xe_ttm_vram_mgr *mgr,
struct ttm_resource_manager *man = &mgr->manager;
int err;
- if (mem_type != XE_PL_STOLEN) {
- const char *name = mem_type == XE_PL_VRAM0 ? "vram0" : "vram1";
- man->cg = drmm_cgroup_register_region(&xe->drm, name, size);
- if (IS_ERR(man->cg))
- return PTR_ERR(man->cg);
- }
-
man->func = &xe_ttm_vram_mgr_func;
mgr->mem_type = mem_type;
mutex_init(&mgr->lock);
@@ -318,6 +311,18 @@ int __xe_ttm_vram_mgr_init(struct xe_device *xe, struct xe_ttm_vram_mgr *mgr,
mgr->visible_avail = io_size;
ttm_resource_manager_init(man, &xe->ttm, size);
+
+ if (mem_type != XE_PL_STOLEN) {
+ const char *name = mem_type == XE_PL_VRAM0 ? "vram0" : "vram1";
+ struct dmem_cgroup_region *cg =
+ drmm_cgroup_register_region(&xe->drm, name, size);
+
+ if (IS_ERR(cg))
+ return PTR_ERR(cg);
+
+ ttm_resource_manager_set_dmem_region(man, cg);
+ }
+
err = gpu_buddy_init(&mgr->mm, man->size, default_page_size);
if (err)
return err;
--
2.53.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v2 4/4] drm/amdgpu: Wire up dmem cgroup reclaim for VRAM manager
2026-04-28 7:31 [PATCH v2 0/4] Add reclaim to the dmem cgroup controller Thomas Hellström
` (2 preceding siblings ...)
2026-04-28 7:31 ` [PATCH v2 3/4] drm/xe: Wire up dmem cgroup reclaim for VRAM manager Thomas Hellström
@ 2026-04-28 7:31 ` Thomas Hellström
2026-04-28 7:38 ` ✗ CI.checkpatch: warning for Add reclaim to the dmem cgroup controller (rev2) Patchwork
` (3 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Thomas Hellström @ 2026-04-28 7:31 UTC (permalink / raw)
To: intel-xe
Cc: Thomas Hellström, Natalie Vock, Johannes Weiner, Tejun Heo,
Michal Koutný, cgroups, Huang Rui, Matthew Brost,
Matthew Auld, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
Simona Vetter, David Airlie, Christian König, Alex Deucher,
Rodrigo Vivi, dri-devel, amd-gfx, linux-kernel
Register the VRAM manager with the dmem cgroup reclaim infrastructure
so that lowering dmem.max below current VRAM usage triggers TTM
eviction rather than failing with -EBUSY.
Guard place->flags in amdgpu_ttm_bo_eviction_valuable() against NULL,
as the TTM reclaim path passes a NULL place in cgroup drain mode.
Assisted-by: GitHub Copilot:claude-sonnet-4.6
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 2 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c | 10 +++++++---
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 0dc68fb9d88e..334a177ae8d3 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -1485,7 +1485,7 @@ static bool amdgpu_ttm_bo_eviction_valuable(struct ttm_buffer_object *bo,
dma_resv_for_each_fence(&resv_cursor, bo->base.resv,
DMA_RESV_USAGE_BOOKKEEP, f) {
if (amdkfd_fence_check_mm(f, current->mm) &&
- !(place->flags & TTM_PL_FLAG_CONTIGUOUS))
+ !(place && (place->flags & TTM_PL_FLAG_CONTIGUOUS)))
return false;
}
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
index 2a241a5b12c4..5987b1b9ec09 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
@@ -916,14 +916,18 @@ int amdgpu_vram_mgr_init(struct amdgpu_device *adev)
{
struct amdgpu_vram_mgr *mgr = &adev->mman.vram_mgr;
struct ttm_resource_manager *man = &mgr->manager;
+ struct dmem_cgroup_region *cg;
int err;
- man->cg = drmm_cgroup_register_region(adev_to_drm(adev), "vram", adev->gmc.real_vram_size);
- if (IS_ERR(man->cg))
- return PTR_ERR(man->cg);
ttm_resource_manager_init(man, &adev->mman.bdev,
adev->gmc.real_vram_size);
+ cg = drmm_cgroup_register_region(adev_to_drm(adev), "vram",
+ adev->gmc.real_vram_size);
+ if (IS_ERR(cg))
+ return PTR_ERR(cg);
+ ttm_resource_manager_set_dmem_region(man, cg);
+
mutex_init(&mgr->lock);
INIT_LIST_HEAD(&mgr->reservations_pending);
INIT_LIST_HEAD(&mgr->reserved_pages);
--
2.53.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* ✗ CI.checkpatch: warning for Add reclaim to the dmem cgroup controller (rev2)
2026-04-28 7:31 [PATCH v2 0/4] Add reclaim to the dmem cgroup controller Thomas Hellström
` (3 preceding siblings ...)
2026-04-28 7:31 ` [PATCH v2 4/4] drm/amdgpu: " Thomas Hellström
@ 2026-04-28 7:38 ` Patchwork
2026-04-28 7:39 ` ✓ CI.KUnit: success " Patchwork
` (2 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Patchwork @ 2026-04-28 7:38 UTC (permalink / raw)
To: Thomas Hellström; +Cc: intel-xe
== Series Details ==
Series: Add reclaim to the dmem cgroup controller (rev2)
URL : https://patchwork.freedesktop.org/series/163970/
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
c8c12e558adaef7a4d125d83b6e1f8824bc13b82
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit 741a1588f644e57de14683f293aefb827bc4e65c
Author: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Date: Tue Apr 28 09:31:16 2026 +0200
drm/amdgpu: Wire up dmem cgroup reclaim for VRAM manager
Register the VRAM manager with the dmem cgroup reclaim infrastructure
so that lowering dmem.max below current VRAM usage triggers TTM
eviction rather than failing with -EBUSY.
Guard place->flags in amdgpu_ttm_bo_eviction_valuable() against NULL,
as the TTM reclaim path passes a NULL place in cgroup drain mode.
Assisted-by: GitHub Copilot:claude-sonnet-4.6
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
+ /mt/dim checkpatch aea2c496abcf55b647c14fe720bfc4ea555aac6a drm-intel
d04bda77b402 cgroup/dmem: Add reclaim callback for lowering max below current usage
-:33: WARNING:BAD_SIGN_OFF: Assisted-by expects 'AGENT_NAME:MODEL_VERSION [TOOL1] [TOOL2]' format
#33:
Assisted-by: GitHub Copilot:claude-sonnet-4.6
total: 0 errors, 1 warnings, 0 checks, 154 lines checked
001ae3695590 drm/ttm: Hook up a cgroup-aware reclaim callback for the dmem controller
-:26: WARNING:BAD_SIGN_OFF: Assisted-by expects 'AGENT_NAME:MODEL_VERSION [TOOL1] [TOOL2]' format
#26:
Assisted-by: GitHub Copilot:claude-sonnet-4.6
-:127: CHECK:MULTIPLE_ASSIGNMENTS: multiple assignments should be avoided
#127: FILE: drivers/gpu/drm/ttm/ttm_bo.c:679:
+ evict_walk.try_low = evict_walk.hit_low = false;
total: 0 errors, 1 warnings, 1 checks, 207 lines checked
e1418b9dff32 drm/xe: Wire up dmem cgroup reclaim for VRAM manager
-:13: WARNING:BAD_SIGN_OFF: Assisted-by expects 'AGENT_NAME:MODEL_VERSION [TOOL1] [TOOL2]' format
#13:
Assisted-by: GitHub Copilot:claude-sonnet-4.6
total: 0 errors, 1 warnings, 0 checks, 31 lines checked
741a1588f644 drm/amdgpu: Wire up dmem cgroup reclaim for VRAM manager
-:16: WARNING:BAD_SIGN_OFF: Assisted-by expects 'AGENT_NAME:MODEL_VERSION [TOOL1] [TOOL2]' format
#16:
Assisted-by: GitHub Copilot:claude-sonnet-4.6
total: 0 errors, 1 warnings, 0 checks, 29 lines checked
^ permalink raw reply [flat|nested] 13+ messages in thread
* ✓ CI.KUnit: success for Add reclaim to the dmem cgroup controller (rev2)
2026-04-28 7:31 [PATCH v2 0/4] Add reclaim to the dmem cgroup controller Thomas Hellström
` (4 preceding siblings ...)
2026-04-28 7:38 ` ✗ CI.checkpatch: warning for Add reclaim to the dmem cgroup controller (rev2) Patchwork
@ 2026-04-28 7:39 ` Patchwork
2026-04-28 8:28 ` ✓ Xe.CI.BAT: " Patchwork
2026-04-28 16:02 ` ✗ Xe.CI.FULL: failure " Patchwork
7 siblings, 0 replies; 13+ messages in thread
From: Patchwork @ 2026-04-28 7:39 UTC (permalink / raw)
To: Thomas Hellström; +Cc: intel-xe
== Series Details ==
Series: Add reclaim to the dmem cgroup controller (rev2)
URL : https://patchwork.freedesktop.org/series/163970/
State : success
== Summary ==
+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[07:38:25] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[07:38:29] 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
[07:39:00] Starting KUnit Kernel (1/1)...
[07:39:00] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[07:39:01] ================== guc_buf (11 subtests) ===================
[07:39:01] [PASSED] test_smallest
[07:39:01] [PASSED] test_largest
[07:39:01] [PASSED] test_granular
[07:39:01] [PASSED] test_unique
[07:39:01] [PASSED] test_overlap
[07:39:01] [PASSED] test_reusable
[07:39:01] [PASSED] test_too_big
[07:39:01] [PASSED] test_flush
[07:39:01] [PASSED] test_lookup
[07:39:01] [PASSED] test_data
[07:39:01] [PASSED] test_class
[07:39:01] ===================== [PASSED] guc_buf =====================
[07:39:01] =================== guc_dbm (7 subtests) ===================
[07:39:01] [PASSED] test_empty
[07:39:01] [PASSED] test_default
[07:39:01] ======================== test_size ========================
[07:39:01] [PASSED] 4
[07:39:01] [PASSED] 8
[07:39:01] [PASSED] 32
[07:39:01] [PASSED] 256
[07:39:01] ==================== [PASSED] test_size ====================
[07:39:01] ======================= test_reuse ========================
[07:39:01] [PASSED] 4
[07:39:01] [PASSED] 8
[07:39:01] [PASSED] 32
[07:39:01] [PASSED] 256
[07:39:01] =================== [PASSED] test_reuse ====================
[07:39:01] =================== test_range_overlap ====================
[07:39:01] [PASSED] 4
[07:39:01] [PASSED] 8
[07:39:01] [PASSED] 32
[07:39:01] [PASSED] 256
[07:39:01] =============== [PASSED] test_range_overlap ================
[07:39:01] =================== test_range_compact ====================
[07:39:01] [PASSED] 4
[07:39:01] [PASSED] 8
[07:39:01] [PASSED] 32
[07:39:01] [PASSED] 256
[07:39:01] =============== [PASSED] test_range_compact ================
[07:39:01] ==================== test_range_spare =====================
[07:39:01] [PASSED] 4
[07:39:01] [PASSED] 8
[07:39:01] [PASSED] 32
[07:39:01] [PASSED] 256
[07:39:01] ================ [PASSED] test_range_spare =================
[07:39:01] ===================== [PASSED] guc_dbm =====================
[07:39:01] =================== guc_idm (6 subtests) ===================
[07:39:01] [PASSED] bad_init
[07:39:01] [PASSED] no_init
[07:39:01] [PASSED] init_fini
[07:39:01] [PASSED] check_used
[07:39:01] [PASSED] check_quota
[07:39:01] [PASSED] check_all
[07:39:01] ===================== [PASSED] guc_idm =====================
[07:39:01] ================== no_relay (3 subtests) ===================
[07:39:01] [PASSED] xe_drops_guc2pf_if_not_ready
[07:39:01] [PASSED] xe_drops_guc2vf_if_not_ready
[07:39:01] [PASSED] xe_rejects_send_if_not_ready
[07:39:01] ==================== [PASSED] no_relay =====================
[07:39:01] ================== pf_relay (14 subtests) ==================
[07:39:01] [PASSED] pf_rejects_guc2pf_too_short
[07:39:01] [PASSED] pf_rejects_guc2pf_too_long
[07:39:01] [PASSED] pf_rejects_guc2pf_no_payload
[07:39:01] [PASSED] pf_fails_no_payload
[07:39:01] [PASSED] pf_fails_bad_origin
[07:39:01] [PASSED] pf_fails_bad_type
[07:39:01] [PASSED] pf_txn_reports_error
[07:39:01] [PASSED] pf_txn_sends_pf2guc
[07:39:01] [PASSED] pf_sends_pf2guc
[07:39:01] [SKIPPED] pf_loopback_nop
[07:39:01] [SKIPPED] pf_loopback_echo
[07:39:01] [SKIPPED] pf_loopback_fail
[07:39:01] [SKIPPED] pf_loopback_busy
[07:39:01] [SKIPPED] pf_loopback_retry
[07:39:01] ==================== [PASSED] pf_relay =====================
[07:39:01] ================== vf_relay (3 subtests) ===================
[07:39:01] [PASSED] vf_rejects_guc2vf_too_short
[07:39:01] [PASSED] vf_rejects_guc2vf_too_long
[07:39:01] [PASSED] vf_rejects_guc2vf_no_payload
[07:39:01] ==================== [PASSED] vf_relay =====================
[07:39:01] ================ pf_gt_config (9 subtests) =================
[07:39:01] [PASSED] fair_contexts_1vf
[07:39:01] [PASSED] fair_doorbells_1vf
[07:39:01] [PASSED] fair_ggtt_1vf
[07:39:01] ====================== fair_vram_1vf ======================
[07:39:01] [PASSED] 3.50 GiB
[07:39:01] [PASSED] 11.5 GiB
[07:39:01] [PASSED] 15.5 GiB
[07:39:01] [PASSED] 31.5 GiB
[07:39:01] [PASSED] 63.5 GiB
[07:39:01] [PASSED] 1.91 GiB
[07:39:01] ================== [PASSED] fair_vram_1vf ==================
[07:39:01] ================ fair_vram_1vf_admin_only =================
[07:39:01] [PASSED] 3.50 GiB
[07:39:01] [PASSED] 11.5 GiB
[07:39:01] [PASSED] 15.5 GiB
[07:39:01] [PASSED] 31.5 GiB
[07:39:01] [PASSED] 63.5 GiB
[07:39:01] [PASSED] 1.91 GiB
[07:39:01] ============ [PASSED] fair_vram_1vf_admin_only =============
[07:39:01] ====================== fair_contexts ======================
[07:39:01] [PASSED] 1 VF
[07:39:01] [PASSED] 2 VFs
[07:39:01] [PASSED] 3 VFs
[07:39:01] [PASSED] 4 VFs
[07:39:01] [PASSED] 5 VFs
[07:39:01] [PASSED] 6 VFs
[07:39:01] [PASSED] 7 VFs
[07:39:01] [PASSED] 8 VFs
[07:39:01] [PASSED] 9 VFs
[07:39:01] [PASSED] 10 VFs
[07:39:01] [PASSED] 11 VFs
[07:39:01] [PASSED] 12 VFs
[07:39:01] [PASSED] 13 VFs
[07:39:01] [PASSED] 14 VFs
[07:39:01] [PASSED] 15 VFs
[07:39:01] [PASSED] 16 VFs
[07:39:01] [PASSED] 17 VFs
[07:39:01] [PASSED] 18 VFs
[07:39:01] [PASSED] 19 VFs
[07:39:01] [PASSED] 20 VFs
[07:39:01] [PASSED] 21 VFs
[07:39:01] [PASSED] 22 VFs
[07:39:01] [PASSED] 23 VFs
[07:39:01] [PASSED] 24 VFs
[07:39:01] [PASSED] 25 VFs
[07:39:01] [PASSED] 26 VFs
[07:39:01] [PASSED] 27 VFs
[07:39:01] [PASSED] 28 VFs
[07:39:01] [PASSED] 29 VFs
[07:39:01] [PASSED] 30 VFs
[07:39:01] [PASSED] 31 VFs
[07:39:01] [PASSED] 32 VFs
[07:39:01] [PASSED] 33 VFs
[07:39:01] [PASSED] 34 VFs
[07:39:01] [PASSED] 35 VFs
[07:39:01] [PASSED] 36 VFs
[07:39:01] [PASSED] 37 VFs
[07:39:01] [PASSED] 38 VFs
[07:39:01] [PASSED] 39 VFs
[07:39:01] [PASSED] 40 VFs
[07:39:01] [PASSED] 41 VFs
[07:39:01] [PASSED] 42 VFs
[07:39:01] [PASSED] 43 VFs
[07:39:01] [PASSED] 44 VFs
[07:39:01] [PASSED] 45 VFs
[07:39:01] [PASSED] 46 VFs
[07:39:01] [PASSED] 47 VFs
[07:39:01] [PASSED] 48 VFs
[07:39:01] [PASSED] 49 VFs
[07:39:01] [PASSED] 50 VFs
[07:39:01] [PASSED] 51 VFs
[07:39:01] [PASSED] 52 VFs
[07:39:01] [PASSED] 53 VFs
[07:39:01] [PASSED] 54 VFs
[07:39:01] [PASSED] 55 VFs
[07:39:01] [PASSED] 56 VFs
[07:39:01] [PASSED] 57 VFs
[07:39:01] [PASSED] 58 VFs
[07:39:01] [PASSED] 59 VFs
[07:39:01] [PASSED] 60 VFs
[07:39:01] [PASSED] 61 VFs
[07:39:01] [PASSED] 62 VFs
[07:39:01] [PASSED] 63 VFs
[07:39:01] ================== [PASSED] fair_contexts ==================
[07:39:01] ===================== fair_doorbells ======================
[07:39:01] [PASSED] 1 VF
[07:39:01] [PASSED] 2 VFs
[07:39:01] [PASSED] 3 VFs
[07:39:01] [PASSED] 4 VFs
[07:39:01] [PASSED] 5 VFs
[07:39:01] [PASSED] 6 VFs
[07:39:01] [PASSED] 7 VFs
[07:39:01] [PASSED] 8 VFs
[07:39:01] [PASSED] 9 VFs
[07:39:01] [PASSED] 10 VFs
[07:39:01] [PASSED] 11 VFs
[07:39:01] [PASSED] 12 VFs
[07:39:01] [PASSED] 13 VFs
[07:39:01] [PASSED] 14 VFs
[07:39:01] [PASSED] 15 VFs
[07:39:01] [PASSED] 16 VFs
[07:39:01] [PASSED] 17 VFs
[07:39:01] [PASSED] 18 VFs
[07:39:01] [PASSED] 19 VFs
[07:39:01] [PASSED] 20 VFs
[07:39:01] [PASSED] 21 VFs
[07:39:01] [PASSED] 22 VFs
[07:39:01] [PASSED] 23 VFs
[07:39:01] [PASSED] 24 VFs
[07:39:01] [PASSED] 25 VFs
[07:39:01] [PASSED] 26 VFs
[07:39:01] [PASSED] 27 VFs
[07:39:01] [PASSED] 28 VFs
[07:39:01] [PASSED] 29 VFs
[07:39:01] [PASSED] 30 VFs
[07:39:01] [PASSED] 31 VFs
[07:39:01] [PASSED] 32 VFs
[07:39:01] [PASSED] 33 VFs
[07:39:01] [PASSED] 34 VFs
[07:39:01] [PASSED] 35 VFs
[07:39:01] [PASSED] 36 VFs
[07:39:01] [PASSED] 37 VFs
[07:39:01] [PASSED] 38 VFs
[07:39:01] [PASSED] 39 VFs
[07:39:01] [PASSED] 40 VFs
[07:39:01] [PASSED] 41 VFs
[07:39:01] [PASSED] 42 VFs
[07:39:01] [PASSED] 43 VFs
[07:39:01] [PASSED] 44 VFs
[07:39:01] [PASSED] 45 VFs
[07:39:01] [PASSED] 46 VFs
[07:39:01] [PASSED] 47 VFs
[07:39:01] [PASSED] 48 VFs
[07:39:01] [PASSED] 49 VFs
[07:39:01] [PASSED] 50 VFs
[07:39:01] [PASSED] 51 VFs
[07:39:01] [PASSED] 52 VFs
[07:39:01] [PASSED] 53 VFs
[07:39:01] [PASSED] 54 VFs
[07:39:01] [PASSED] 55 VFs
[07:39:01] [PASSED] 56 VFs
[07:39:01] [PASSED] 57 VFs
[07:39:01] [PASSED] 58 VFs
[07:39:01] [PASSED] 59 VFs
[07:39:01] [PASSED] 60 VFs
[07:39:01] [PASSED] 61 VFs
[07:39:01] [PASSED] 62 VFs
[07:39:01] [PASSED] 63 VFs
[07:39:01] ================= [PASSED] fair_doorbells ==================
[07:39:01] ======================== fair_ggtt ========================
[07:39:01] [PASSED] 1 VF
[07:39:01] [PASSED] 2 VFs
[07:39:01] [PASSED] 3 VFs
[07:39:01] [PASSED] 4 VFs
[07:39:01] [PASSED] 5 VFs
[07:39:01] [PASSED] 6 VFs
[07:39:01] [PASSED] 7 VFs
[07:39:01] [PASSED] 8 VFs
[07:39:01] [PASSED] 9 VFs
[07:39:01] [PASSED] 10 VFs
[07:39:01] [PASSED] 11 VFs
[07:39:01] [PASSED] 12 VFs
[07:39:01] [PASSED] 13 VFs
[07:39:01] [PASSED] 14 VFs
[07:39:01] [PASSED] 15 VFs
[07:39:01] [PASSED] 16 VFs
[07:39:01] [PASSED] 17 VFs
[07:39:01] [PASSED] 18 VFs
[07:39:01] [PASSED] 19 VFs
[07:39:01] [PASSED] 20 VFs
[07:39:01] [PASSED] 21 VFs
[07:39:01] [PASSED] 22 VFs
[07:39:01] [PASSED] 23 VFs
[07:39:01] [PASSED] 24 VFs
[07:39:01] [PASSED] 25 VFs
[07:39:01] [PASSED] 26 VFs
[07:39:01] [PASSED] 27 VFs
[07:39:01] [PASSED] 28 VFs
[07:39:01] [PASSED] 29 VFs
[07:39:01] [PASSED] 30 VFs
[07:39:01] [PASSED] 31 VFs
[07:39:01] [PASSED] 32 VFs
[07:39:01] [PASSED] 33 VFs
[07:39:01] [PASSED] 34 VFs
[07:39:01] [PASSED] 35 VFs
[07:39:01] [PASSED] 36 VFs
[07:39:01] [PASSED] 37 VFs
[07:39:01] [PASSED] 38 VFs
[07:39:01] [PASSED] 39 VFs
[07:39:01] [PASSED] 40 VFs
[07:39:01] [PASSED] 41 VFs
[07:39:01] [PASSED] 42 VFs
[07:39:01] [PASSED] 43 VFs
[07:39:01] [PASSED] 44 VFs
[07:39:01] [PASSED] 45 VFs
[07:39:01] [PASSED] 46 VFs
[07:39:01] [PASSED] 47 VFs
[07:39:01] [PASSED] 48 VFs
[07:39:01] [PASSED] 49 VFs
[07:39:01] [PASSED] 50 VFs
[07:39:01] [PASSED] 51 VFs
[07:39:01] [PASSED] 52 VFs
[07:39:01] [PASSED] 53 VFs
[07:39:01] [PASSED] 54 VFs
[07:39:01] [PASSED] 55 VFs
[07:39:01] [PASSED] 56 VFs
[07:39:01] [PASSED] 57 VFs
[07:39:01] [PASSED] 58 VFs
[07:39:01] [PASSED] 59 VFs
[07:39:01] [PASSED] 60 VFs
[07:39:01] [PASSED] 61 VFs
[07:39:01] [PASSED] 62 VFs
[07:39:01] [PASSED] 63 VFs
[07:39:01] ==================== [PASSED] fair_ggtt ====================
[07:39:01] ======================== fair_vram ========================
[07:39:01] [PASSED] 1 VF
[07:39:01] [PASSED] 2 VFs
[07:39:01] [PASSED] 3 VFs
[07:39:01] [PASSED] 4 VFs
[07:39:01] [PASSED] 5 VFs
[07:39:01] [PASSED] 6 VFs
[07:39:01] [PASSED] 7 VFs
[07:39:01] [PASSED] 8 VFs
[07:39:01] [PASSED] 9 VFs
[07:39:01] [PASSED] 10 VFs
[07:39:01] [PASSED] 11 VFs
[07:39:01] [PASSED] 12 VFs
[07:39:01] [PASSED] 13 VFs
[07:39:01] [PASSED] 14 VFs
[07:39:01] [PASSED] 15 VFs
[07:39:01] [PASSED] 16 VFs
[07:39:01] [PASSED] 17 VFs
[07:39:01] [PASSED] 18 VFs
[07:39:01] [PASSED] 19 VFs
[07:39:01] [PASSED] 20 VFs
[07:39:01] [PASSED] 21 VFs
[07:39:01] [PASSED] 22 VFs
[07:39:01] [PASSED] 23 VFs
[07:39:01] [PASSED] 24 VFs
[07:39:01] [PASSED] 25 VFs
[07:39:01] [PASSED] 26 VFs
[07:39:01] [PASSED] 27 VFs
[07:39:01] [PASSED] 28 VFs
[07:39:01] [PASSED] 29 VFs
[07:39:01] [PASSED] 30 VFs
[07:39:01] [PASSED] 31 VFs
[07:39:01] [PASSED] 32 VFs
[07:39:01] [PASSED] 33 VFs
[07:39:01] [PASSED] 34 VFs
[07:39:01] [PASSED] 35 VFs
[07:39:01] [PASSED] 36 VFs
[07:39:01] [PASSED] 37 VFs
[07:39:01] [PASSED] 38 VFs
[07:39:01] [PASSED] 39 VFs
[07:39:01] [PASSED] 40 VFs
[07:39:01] [PASSED] 41 VFs
[07:39:01] [PASSED] 42 VFs
[07:39:01] [PASSED] 43 VFs
[07:39:01] [PASSED] 44 VFs
[07:39:01] [PASSED] 45 VFs
[07:39:01] [PASSED] 46 VFs
[07:39:01] [PASSED] 47 VFs
[07:39:01] [PASSED] 48 VFs
[07:39:01] [PASSED] 49 VFs
[07:39:01] [PASSED] 50 VFs
[07:39:01] [PASSED] 51 VFs
[07:39:01] [PASSED] 52 VFs
[07:39:01] [PASSED] 53 VFs
[07:39:01] [PASSED] 54 VFs
[07:39:01] [PASSED] 55 VFs
[07:39:01] [PASSED] 56 VFs
[07:39:01] [PASSED] 57 VFs
[07:39:01] [PASSED] 58 VFs
[07:39:01] [PASSED] 59 VFs
[07:39:01] [PASSED] 60 VFs
[07:39:01] [PASSED] 61 VFs
[07:39:01] [PASSED] 62 VFs
[07:39:01] [PASSED] 63 VFs
[07:39:01] ==================== [PASSED] fair_vram ====================
[07:39:01] ================== [PASSED] pf_gt_config ===================
[07:39:01] ===================== lmtt (1 subtest) =====================
[07:39:01] ======================== test_ops =========================
[07:39:01] [PASSED] 2-level
[07:39:01] [PASSED] multi-level
[07:39:01] ==================== [PASSED] test_ops =====================
[07:39:01] ====================== [PASSED] lmtt =======================
[07:39:01] ================= pf_service (11 subtests) =================
[07:39:01] [PASSED] pf_negotiate_any
[07:39:01] [PASSED] pf_negotiate_base_match
[07:39:01] [PASSED] pf_negotiate_base_newer
[07:39:01] [PASSED] pf_negotiate_base_next
[07:39:01] [SKIPPED] pf_negotiate_base_older
[07:39:01] [PASSED] pf_negotiate_base_prev
[07:39:01] [PASSED] pf_negotiate_latest_match
[07:39:01] [PASSED] pf_negotiate_latest_newer
[07:39:01] [PASSED] pf_negotiate_latest_next
[07:39:01] [SKIPPED] pf_negotiate_latest_older
[07:39:01] [SKIPPED] pf_negotiate_latest_prev
[07:39:01] =================== [PASSED] pf_service ====================
[07:39:01] ================= xe_guc_g2g (2 subtests) ==================
[07:39:01] ============== xe_live_guc_g2g_kunit_default ==============
[07:39:01] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[07:39:01] ============== xe_live_guc_g2g_kunit_allmem ===============
[07:39:01] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[07:39:01] =================== [SKIPPED] xe_guc_g2g ===================
[07:39:01] =================== xe_mocs (2 subtests) ===================
[07:39:01] ================ xe_live_mocs_kernel_kunit ================
[07:39:01] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[07:39:01] ================ xe_live_mocs_reset_kunit =================
[07:39:01] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[07:39:01] ==================== [SKIPPED] xe_mocs =====================
[07:39:01] ================= xe_migrate (2 subtests) ==================
[07:39:01] ================= xe_migrate_sanity_kunit =================
[07:39:01] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[07:39:01] ================== xe_validate_ccs_kunit ==================
[07:39:01] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[07:39:01] =================== [SKIPPED] xe_migrate ===================
[07:39:01] ================== xe_dma_buf (1 subtest) ==================
[07:39:01] ==================== xe_dma_buf_kunit =====================
[07:39:01] ================ [SKIPPED] xe_dma_buf_kunit ================
[07:39:01] =================== [SKIPPED] xe_dma_buf ===================
[07:39:01] ================= xe_bo_shrink (1 subtest) =================
[07:39:01] =================== xe_bo_shrink_kunit ====================
[07:39:01] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[07:39:01] ================== [SKIPPED] xe_bo_shrink ==================
[07:39:01] ==================== xe_bo (2 subtests) ====================
[07:39:01] ================== xe_ccs_migrate_kunit ===================
[07:39:01] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[07:39:01] ==================== xe_bo_evict_kunit ====================
[07:39:01] =============== [SKIPPED] xe_bo_evict_kunit ================
[07:39:01] ===================== [SKIPPED] xe_bo ======================
[07:39:01] ==================== args (13 subtests) ====================
[07:39:01] [PASSED] count_args_test
[07:39:01] [PASSED] call_args_example
[07:39:01] [PASSED] call_args_test
[07:39:01] [PASSED] drop_first_arg_example
[07:39:01] [PASSED] drop_first_arg_test
[07:39:01] [PASSED] first_arg_example
[07:39:01] [PASSED] first_arg_test
[07:39:01] [PASSED] last_arg_example
[07:39:01] [PASSED] last_arg_test
[07:39:01] [PASSED] pick_arg_example
[07:39:01] [PASSED] if_args_example
[07:39:01] [PASSED] if_args_test
[07:39:01] [PASSED] sep_comma_example
[07:39:01] ====================== [PASSED] args =======================
[07:39:01] =================== xe_pci (3 subtests) ====================
[07:39:01] ==================== check_graphics_ip ====================
[07:39:01] [PASSED] 12.00 Xe_LP
[07:39:01] [PASSED] 12.10 Xe_LP+
[07:39:01] [PASSED] 12.55 Xe_HPG
[07:39:01] [PASSED] 12.60 Xe_HPC
[07:39:01] [PASSED] 12.70 Xe_LPG
[07:39:01] [PASSED] 12.71 Xe_LPG
[07:39:01] [PASSED] 12.74 Xe_LPG+
[07:39:01] [PASSED] 20.01 Xe2_HPG
[07:39:01] [PASSED] 20.02 Xe2_HPG
[07:39:01] [PASSED] 20.04 Xe2_LPG
[07:39:01] [PASSED] 30.00 Xe3_LPG
[07:39:01] [PASSED] 30.01 Xe3_LPG
[07:39:01] [PASSED] 30.03 Xe3_LPG
[07:39:01] [PASSED] 30.04 Xe3_LPG
[07:39:01] [PASSED] 30.05 Xe3_LPG
[07:39:01] [PASSED] 35.10 Xe3p_LPG
[07:39:01] [PASSED] 35.11 Xe3p_XPC
[07:39:01] ================ [PASSED] check_graphics_ip ================
[07:39:01] ===================== check_media_ip ======================
[07:39:01] [PASSED] 12.00 Xe_M
[07:39:01] [PASSED] 12.55 Xe_HPM
[07:39:01] [PASSED] 13.00 Xe_LPM+
[07:39:01] [PASSED] 13.01 Xe2_HPM
[07:39:01] [PASSED] 20.00 Xe2_LPM
[07:39:01] [PASSED] 30.00 Xe3_LPM
[07:39:01] [PASSED] 30.02 Xe3_LPM
[07:39:01] [PASSED] 35.00 Xe3p_LPM
[07:39:01] [PASSED] 35.03 Xe3p_HPM
[07:39:01] ================= [PASSED] check_media_ip ==================
[07:39:01] =================== check_platform_desc ===================
[07:39:01] [PASSED] 0x9A60 (TIGERLAKE)
[07:39:01] [PASSED] 0x9A68 (TIGERLAKE)
[07:39:01] [PASSED] 0x9A70 (TIGERLAKE)
[07:39:01] [PASSED] 0x9A40 (TIGERLAKE)
[07:39:01] [PASSED] 0x9A49 (TIGERLAKE)
[07:39:01] [PASSED] 0x9A59 (TIGERLAKE)
[07:39:01] [PASSED] 0x9A78 (TIGERLAKE)
[07:39:01] [PASSED] 0x9AC0 (TIGERLAKE)
[07:39:01] [PASSED] 0x9AC9 (TIGERLAKE)
[07:39:01] [PASSED] 0x9AD9 (TIGERLAKE)
[07:39:01] [PASSED] 0x9AF8 (TIGERLAKE)
[07:39:01] [PASSED] 0x4C80 (ROCKETLAKE)
[07:39:01] [PASSED] 0x4C8A (ROCKETLAKE)
[07:39:01] [PASSED] 0x4C8B (ROCKETLAKE)
[07:39:01] [PASSED] 0x4C8C (ROCKETLAKE)
[07:39:01] [PASSED] 0x4C90 (ROCKETLAKE)
[07:39:01] [PASSED] 0x4C9A (ROCKETLAKE)
[07:39:01] [PASSED] 0x4680 (ALDERLAKE_S)
[07:39:01] [PASSED] 0x4682 (ALDERLAKE_S)
[07:39:01] [PASSED] 0x4688 (ALDERLAKE_S)
[07:39:01] [PASSED] 0x468A (ALDERLAKE_S)
[07:39:01] [PASSED] 0x468B (ALDERLAKE_S)
[07:39:01] [PASSED] 0x4690 (ALDERLAKE_S)
[07:39:01] [PASSED] 0x4692 (ALDERLAKE_S)
[07:39:01] [PASSED] 0x4693 (ALDERLAKE_S)
[07:39:01] [PASSED] 0x46A0 (ALDERLAKE_P)
[07:39:01] [PASSED] 0x46A1 (ALDERLAKE_P)
[07:39:01] [PASSED] 0x46A2 (ALDERLAKE_P)
[07:39:01] [PASSED] 0x46A3 (ALDERLAKE_P)
[07:39:01] [PASSED] 0x46A6 (ALDERLAKE_P)
[07:39:01] [PASSED] 0x46A8 (ALDERLAKE_P)
[07:39:01] [PASSED] 0x46AA (ALDERLAKE_P)
[07:39:01] [PASSED] 0x462A (ALDERLAKE_P)
[07:39:01] [PASSED] 0x4626 (ALDERLAKE_P)
[07:39:01] [PASSED] 0x4628 (ALDERLAKE_P)
[07:39:01] [PASSED] 0x46B0 (ALDERLAKE_P)
[07:39:01] [PASSED] 0x46B1 (ALDERLAKE_P)
[07:39:01] [PASSED] 0x46B2 (ALDERLAKE_P)
[07:39:01] [PASSED] 0x46B3 (ALDERLAKE_P)
[07:39:01] [PASSED] 0x46C0 (ALDERLAKE_P)
[07:39:01] [PASSED] 0x46C1 (ALDERLAKE_P)
[07:39:01] [PASSED] 0x46C2 (ALDERLAKE_P)
[07:39:01] [PASSED] 0x46C3 (ALDERLAKE_P)
[07:39:01] [PASSED] 0x46D0 (ALDERLAKE_N)
[07:39:01] [PASSED] 0x46D1 (ALDERLAKE_N)
[07:39:01] [PASSED] 0x46D2 (ALDERLAKE_N)
[07:39:01] [PASSED] 0x46D3 (ALDERLAKE_N)
[07:39:01] [PASSED] 0x46D4 (ALDERLAKE_N)
[07:39:01] [PASSED] 0xA721 (ALDERLAKE_P)
[07:39:01] [PASSED] 0xA7A1 (ALDERLAKE_P)
[07:39:01] [PASSED] 0xA7A9 (ALDERLAKE_P)
[07:39:01] [PASSED] 0xA7AC (ALDERLAKE_P)
[07:39:01] [PASSED] 0xA7AD (ALDERLAKE_P)
[07:39:01] [PASSED] 0xA720 (ALDERLAKE_P)
[07:39:01] [PASSED] 0xA7A0 (ALDERLAKE_P)
[07:39:01] [PASSED] 0xA7A8 (ALDERLAKE_P)
[07:39:01] [PASSED] 0xA7AA (ALDERLAKE_P)
[07:39:01] [PASSED] 0xA7AB (ALDERLAKE_P)
[07:39:01] [PASSED] 0xA780 (ALDERLAKE_S)
[07:39:01] [PASSED] 0xA781 (ALDERLAKE_S)
[07:39:01] [PASSED] 0xA782 (ALDERLAKE_S)
[07:39:01] [PASSED] 0xA783 (ALDERLAKE_S)
[07:39:01] [PASSED] 0xA788 (ALDERLAKE_S)
[07:39:01] [PASSED] 0xA789 (ALDERLAKE_S)
[07:39:01] [PASSED] 0xA78A (ALDERLAKE_S)
[07:39:01] [PASSED] 0xA78B (ALDERLAKE_S)
[07:39:01] [PASSED] 0x4905 (DG1)
[07:39:01] [PASSED] 0x4906 (DG1)
[07:39:01] [PASSED] 0x4907 (DG1)
[07:39:01] [PASSED] 0x4908 (DG1)
[07:39:01] [PASSED] 0x4909 (DG1)
[07:39:01] [PASSED] 0x56C0 (DG2)
[07:39:01] [PASSED] 0x56C2 (DG2)
[07:39:01] [PASSED] 0x56C1 (DG2)
[07:39:01] [PASSED] 0x7D51 (METEORLAKE)
[07:39:01] [PASSED] 0x7DD1 (METEORLAKE)
[07:39:01] [PASSED] 0x7D41 (METEORLAKE)
[07:39:01] [PASSED] 0x7D67 (METEORLAKE)
[07:39:01] [PASSED] 0xB640 (METEORLAKE)
[07:39:01] [PASSED] 0x56A0 (DG2)
[07:39:01] [PASSED] 0x56A1 (DG2)
[07:39:01] [PASSED] 0x56A2 (DG2)
[07:39:01] [PASSED] 0x56BE (DG2)
[07:39:01] [PASSED] 0x56BF (DG2)
[07:39:01] [PASSED] 0x5690 (DG2)
[07:39:01] [PASSED] 0x5691 (DG2)
[07:39:01] [PASSED] 0x5692 (DG2)
[07:39:01] [PASSED] 0x56A5 (DG2)
[07:39:01] [PASSED] 0x56A6 (DG2)
[07:39:01] [PASSED] 0x56B0 (DG2)
[07:39:01] [PASSED] 0x56B1 (DG2)
[07:39:01] [PASSED] 0x56BA (DG2)
[07:39:01] [PASSED] 0x56BB (DG2)
[07:39:01] [PASSED] 0x56BC (DG2)
[07:39:01] [PASSED] 0x56BD (DG2)
[07:39:01] [PASSED] 0x5693 (DG2)
[07:39:01] [PASSED] 0x5694 (DG2)
[07:39:01] [PASSED] 0x5695 (DG2)
[07:39:01] [PASSED] 0x56A3 (DG2)
[07:39:01] [PASSED] 0x56A4 (DG2)
[07:39:01] [PASSED] 0x56B2 (DG2)
[07:39:01] [PASSED] 0x56B3 (DG2)
[07:39:01] [PASSED] 0x5696 (DG2)
[07:39:01] [PASSED] 0x5697 (DG2)
[07:39:01] [PASSED] 0xB69 (PVC)
[07:39:01] [PASSED] 0xB6E (PVC)
[07:39:01] [PASSED] 0xBD4 (PVC)
[07:39:01] [PASSED] 0xBD5 (PVC)
[07:39:01] [PASSED] 0xBD6 (PVC)
[07:39:01] [PASSED] 0xBD7 (PVC)
[07:39:01] [PASSED] 0xBD8 (PVC)
[07:39:01] [PASSED] 0xBD9 (PVC)
[07:39:01] [PASSED] 0xBDA (PVC)
[07:39:01] [PASSED] 0xBDB (PVC)
[07:39:01] [PASSED] 0xBE0 (PVC)
[07:39:01] [PASSED] 0xBE1 (PVC)
[07:39:01] [PASSED] 0xBE5 (PVC)
[07:39:01] [PASSED] 0x7D40 (METEORLAKE)
[07:39:01] [PASSED] 0x7D45 (METEORLAKE)
[07:39:01] [PASSED] 0x7D55 (METEORLAKE)
[07:39:01] [PASSED] 0x7D60 (METEORLAKE)
[07:39:01] [PASSED] 0x7DD5 (METEORLAKE)
[07:39:01] [PASSED] 0x6420 (LUNARLAKE)
[07:39:01] [PASSED] 0x64A0 (LUNARLAKE)
[07:39:01] [PASSED] 0x64B0 (LUNARLAKE)
[07:39:01] [PASSED] 0xE202 (BATTLEMAGE)
[07:39:01] [PASSED] 0xE209 (BATTLEMAGE)
[07:39:01] [PASSED] 0xE20B (BATTLEMAGE)
[07:39:01] [PASSED] 0xE20C (BATTLEMAGE)
[07:39:01] [PASSED] 0xE20D (BATTLEMAGE)
[07:39:01] [PASSED] 0xE210 (BATTLEMAGE)
[07:39:01] [PASSED] 0xE211 (BATTLEMAGE)
[07:39:01] [PASSED] 0xE212 (BATTLEMAGE)
[07:39:01] [PASSED] 0xE216 (BATTLEMAGE)
[07:39:01] [PASSED] 0xE220 (BATTLEMAGE)
[07:39:01] [PASSED] 0xE221 (BATTLEMAGE)
[07:39:01] [PASSED] 0xE222 (BATTLEMAGE)
[07:39:01] [PASSED] 0xE223 (BATTLEMAGE)
[07:39:01] [PASSED] 0xB080 (PANTHERLAKE)
[07:39:01] [PASSED] 0xB081 (PANTHERLAKE)
[07:39:01] [PASSED] 0xB082 (PANTHERLAKE)
[07:39:01] [PASSED] 0xB083 (PANTHERLAKE)
[07:39:01] [PASSED] 0xB084 (PANTHERLAKE)
[07:39:01] [PASSED] 0xB085 (PANTHERLAKE)
[07:39:01] [PASSED] 0xB086 (PANTHERLAKE)
[07:39:01] [PASSED] 0xB087 (PANTHERLAKE)
[07:39:01] [PASSED] 0xB08F (PANTHERLAKE)
[07:39:01] [PASSED] 0xB090 (PANTHERLAKE)
[07:39:01] [PASSED] 0xB0A0 (PANTHERLAKE)
[07:39:01] [PASSED] 0xB0B0 (PANTHERLAKE)
[07:39:01] [PASSED] 0xFD80 (PANTHERLAKE)
[07:39:01] [PASSED] 0xFD81 (PANTHERLAKE)
[07:39:01] [PASSED] 0xD740 (NOVALAKE_S)
[07:39:01] [PASSED] 0xD741 (NOVALAKE_S)
[07:39:01] [PASSED] 0xD742 (NOVALAKE_S)
[07:39:01] [PASSED] 0xD743 (NOVALAKE_S)
[07:39:01] [PASSED] 0xD744 (NOVALAKE_S)
[07:39:01] [PASSED] 0xD745 (NOVALAKE_S)
[07:39:01] [PASSED] 0x674C (CRESCENTISLAND)
[07:39:01] [PASSED] 0xD750 (NOVALAKE_P)
[07:39:01] [PASSED] 0xD751 (NOVALAKE_P)
[07:39:01] [PASSED] 0xD752 (NOVALAKE_P)
[07:39:01] [PASSED] 0xD753 (NOVALAKE_P)
[07:39:01] [PASSED] 0xD754 (NOVALAKE_P)
[07:39:01] [PASSED] 0xD755 (NOVALAKE_P)
[07:39:01] [PASSED] 0xD756 (NOVALAKE_P)
[07:39:01] [PASSED] 0xD757 (NOVALAKE_P)
[07:39:01] [PASSED] 0xD75F (NOVALAKE_P)
[07:39:01] =============== [PASSED] check_platform_desc ===============
[07:39:01] ===================== [PASSED] xe_pci ======================
[07:39:01] =================== xe_rtp (2 subtests) ====================
[07:39:01] =============== xe_rtp_process_to_sr_tests ================
[07:39:01] [PASSED] coalesce-same-reg
[07:39:01] [PASSED] no-match-no-add
[07:39:01] [PASSED] match-or
[07:39:01] [PASSED] match-or-xfail
[07:39:01] [PASSED] no-match-no-add-multiple-rules
[07:39:01] [PASSED] two-regs-two-entries
[07:39:01] [PASSED] clr-one-set-other
[07:39:01] [PASSED] set-field
[07:39:01] [PASSED] conflict-duplicate
[07:39:01] [PASSED] conflict-not-disjoint
[07:39:01] [PASSED] conflict-reg-type
[07:39:01] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[07:39:01] ================== xe_rtp_process_tests ===================
[07:39:01] [PASSED] active1
[07:39:01] [PASSED] active2
[07:39:01] [PASSED] active-inactive
[07:39:01] [PASSED] inactive-active
[07:39:01] [PASSED] inactive-1st_or_active-inactive
[07:39:01] [PASSED] inactive-2nd_or_active-inactive
[07:39:01] [PASSED] inactive-last_or_active-inactive
[07:39:01] [PASSED] inactive-no_or_active-inactive
[07:39:01] ============== [PASSED] xe_rtp_process_tests ===============
[07:39:01] ===================== [PASSED] xe_rtp ======================
[07:39:01] ==================== xe_wa (1 subtest) =====================
[07:39:01] ======================== xe_wa_gt =========================
[07:39:01] [PASSED] TIGERLAKE B0
[07:39:01] [PASSED] DG1 A0
[07:39:01] [PASSED] DG1 B0
[07:39:01] [PASSED] ALDERLAKE_S A0
[07:39:01] [PASSED] ALDERLAKE_S B0
[07:39:01] [PASSED] ALDERLAKE_S C0
[07:39:01] [PASSED] ALDERLAKE_S D0
[07:39:01] [PASSED] ALDERLAKE_P A0
[07:39:01] [PASSED] ALDERLAKE_P B0
[07:39:01] [PASSED] ALDERLAKE_P C0
[07:39:01] [PASSED] ALDERLAKE_S RPLS D0
[07:39:01] [PASSED] ALDERLAKE_P RPLU E0
[07:39:01] [PASSED] DG2 G10 C0
[07:39:01] [PASSED] DG2 G11 B1
[07:39:01] [PASSED] DG2 G12 A1
[07:39:01] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[07:39:01] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[07:39:01] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[07:39:01] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[07:39:01] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[07:39:01] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[07:39:01] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[07:39:01] ==================== [PASSED] xe_wa_gt =====================
[07:39:01] ====================== [PASSED] xe_wa ======================
[07:39:01] ============================================================
[07:39:01] Testing complete. Ran 597 tests: passed: 579, skipped: 18
[07:39:01] Elapsed time: 36.076s total, 4.255s configuring, 31.205s building, 0.605s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[07:39:01] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[07:39:03] 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
[07:39:27] Starting KUnit Kernel (1/1)...
[07:39:27] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[07:39:27] ============ drm_test_pick_cmdline (2 subtests) ============
[07:39:27] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[07:39:27] =============== drm_test_pick_cmdline_named ===============
[07:39:27] [PASSED] NTSC
[07:39:27] [PASSED] NTSC-J
[07:39:27] [PASSED] PAL
[07:39:27] [PASSED] PAL-M
[07:39:27] =========== [PASSED] drm_test_pick_cmdline_named ===========
[07:39:27] ============== [PASSED] drm_test_pick_cmdline ==============
[07:39:27] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[07:39:27] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[07:39:27] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[07:39:27] =========== drm_validate_clone_mode (2 subtests) ===========
[07:39:27] ============== drm_test_check_in_clone_mode ===============
[07:39:27] [PASSED] in_clone_mode
[07:39:27] [PASSED] not_in_clone_mode
[07:39:27] ========== [PASSED] drm_test_check_in_clone_mode ===========
[07:39:27] =============== drm_test_check_valid_clones ===============
[07:39:27] [PASSED] not_in_clone_mode
[07:39:27] [PASSED] valid_clone
[07:39:27] [PASSED] invalid_clone
[07:39:27] =========== [PASSED] drm_test_check_valid_clones ===========
[07:39:27] ============= [PASSED] drm_validate_clone_mode =============
[07:39:27] ============= drm_validate_modeset (1 subtest) =============
[07:39:27] [PASSED] drm_test_check_connector_changed_modeset
[07:39:27] ============== [PASSED] drm_validate_modeset ===============
[07:39:27] ====== drm_test_bridge_get_current_state (2 subtests) ======
[07:39:27] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[07:39:27] [PASSED] drm_test_drm_bridge_get_current_state_legacy
[07:39:27] ======== [PASSED] drm_test_bridge_get_current_state ========
[07:39:27] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[07:39:27] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[07:39:27] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[07:39:27] [PASSED] drm_test_drm_bridge_helper_reset_crtc_legacy
[07:39:27] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[07:39:27] ============== drm_bridge_alloc (2 subtests) ===============
[07:39:27] [PASSED] drm_test_drm_bridge_alloc_basic
[07:39:27] [PASSED] drm_test_drm_bridge_alloc_get_put
[07:39:27] ================ [PASSED] drm_bridge_alloc =================
[07:39:27] ============= drm_cmdline_parser (40 subtests) =============
[07:39:27] [PASSED] drm_test_cmdline_force_d_only
[07:39:27] [PASSED] drm_test_cmdline_force_D_only_dvi
[07:39:27] [PASSED] drm_test_cmdline_force_D_only_hdmi
[07:39:27] [PASSED] drm_test_cmdline_force_D_only_not_digital
[07:39:27] [PASSED] drm_test_cmdline_force_e_only
[07:39:27] [PASSED] drm_test_cmdline_res
[07:39:27] [PASSED] drm_test_cmdline_res_vesa
[07:39:27] [PASSED] drm_test_cmdline_res_vesa_rblank
[07:39:27] [PASSED] drm_test_cmdline_res_rblank
[07:39:27] [PASSED] drm_test_cmdline_res_bpp
[07:39:27] [PASSED] drm_test_cmdline_res_refresh
[07:39:27] [PASSED] drm_test_cmdline_res_bpp_refresh
[07:39:27] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[07:39:27] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[07:39:27] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[07:39:27] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[07:39:27] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[07:39:27] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[07:39:27] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[07:39:27] [PASSED] drm_test_cmdline_res_margins_force_on
[07:39:27] [PASSED] drm_test_cmdline_res_vesa_margins
[07:39:27] [PASSED] drm_test_cmdline_name
[07:39:27] [PASSED] drm_test_cmdline_name_bpp
[07:39:27] [PASSED] drm_test_cmdline_name_option
[07:39:27] [PASSED] drm_test_cmdline_name_bpp_option
[07:39:27] [PASSED] drm_test_cmdline_rotate_0
[07:39:27] [PASSED] drm_test_cmdline_rotate_90
[07:39:27] [PASSED] drm_test_cmdline_rotate_180
[07:39:27] [PASSED] drm_test_cmdline_rotate_270
[07:39:27] [PASSED] drm_test_cmdline_hmirror
[07:39:27] [PASSED] drm_test_cmdline_vmirror
[07:39:27] [PASSED] drm_test_cmdline_margin_options
[07:39:27] [PASSED] drm_test_cmdline_multiple_options
[07:39:27] [PASSED] drm_test_cmdline_bpp_extra_and_option
[07:39:27] [PASSED] drm_test_cmdline_extra_and_option
[07:39:27] [PASSED] drm_test_cmdline_freestanding_options
[07:39:27] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[07:39:27] [PASSED] drm_test_cmdline_panel_orientation
[07:39:27] ================ drm_test_cmdline_invalid =================
[07:39:27] [PASSED] margin_only
[07:39:27] [PASSED] interlace_only
[07:39:27] [PASSED] res_missing_x
[07:39:27] [PASSED] res_missing_y
[07:39:27] [PASSED] res_bad_y
[07:39:27] [PASSED] res_missing_y_bpp
[07:39:27] [PASSED] res_bad_bpp
[07:39:27] [PASSED] res_bad_refresh
[07:39:27] [PASSED] res_bpp_refresh_force_on_off
[07:39:27] [PASSED] res_invalid_mode
[07:39:27] [PASSED] res_bpp_wrong_place_mode
[07:39:27] [PASSED] name_bpp_refresh
[07:39:27] [PASSED] name_refresh
[07:39:27] [PASSED] name_refresh_wrong_mode
[07:39:27] [PASSED] name_refresh_invalid_mode
[07:39:27] [PASSED] rotate_multiple
[07:39:27] [PASSED] rotate_invalid_val
[07:39:27] [PASSED] rotate_truncated
[07:39:27] [PASSED] invalid_option
[07:39:27] [PASSED] invalid_tv_option
[07:39:27] [PASSED] truncated_tv_option
[07:39:27] ============ [PASSED] drm_test_cmdline_invalid =============
[07:39:27] =============== drm_test_cmdline_tv_options ===============
[07:39:27] [PASSED] NTSC
[07:39:27] [PASSED] NTSC_443
[07:39:27] [PASSED] NTSC_J
[07:39:27] [PASSED] PAL
[07:39:27] [PASSED] PAL_M
[07:39:27] [PASSED] PAL_N
[07:39:27] [PASSED] SECAM
[07:39:27] [PASSED] MONO_525
[07:39:27] [PASSED] MONO_625
[07:39:27] =========== [PASSED] drm_test_cmdline_tv_options ===========
[07:39:27] =============== [PASSED] drm_cmdline_parser ================
[07:39:27] ========== drmm_connector_hdmi_init (20 subtests) ==========
[07:39:27] [PASSED] drm_test_connector_hdmi_init_valid
[07:39:27] [PASSED] drm_test_connector_hdmi_init_bpc_8
[07:39:27] [PASSED] drm_test_connector_hdmi_init_bpc_10
[07:39:27] [PASSED] drm_test_connector_hdmi_init_bpc_12
[07:39:27] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[07:39:27] [PASSED] drm_test_connector_hdmi_init_bpc_null
[07:39:27] [PASSED] drm_test_connector_hdmi_init_formats_empty
[07:39:27] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[07:39:27] === drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[07:39:27] [PASSED] supported_formats=0x9 yuv420_allowed=1
[07:39:27] [PASSED] supported_formats=0x9 yuv420_allowed=0
[07:39:27] [PASSED] supported_formats=0x5 yuv420_allowed=1
[07:39:27] [PASSED] supported_formats=0x5 yuv420_allowed=0
[07:39:27] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[07:39:27] [PASSED] drm_test_connector_hdmi_init_null_ddc
[07:39:27] [PASSED] drm_test_connector_hdmi_init_null_product
[07:39:27] [PASSED] drm_test_connector_hdmi_init_null_vendor
[07:39:27] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[07:39:27] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[07:39:27] [PASSED] drm_test_connector_hdmi_init_product_valid
[07:39:27] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[07:39:27] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[07:39:27] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[07:39:27] ========= drm_test_connector_hdmi_init_type_valid =========
[07:39:27] [PASSED] HDMI-A
[07:39:27] [PASSED] HDMI-B
[07:39:27] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[07:39:27] ======== drm_test_connector_hdmi_init_type_invalid ========
[07:39:27] [PASSED] Unknown
[07:39:27] [PASSED] VGA
[07:39:27] [PASSED] DVI-I
[07:39:27] [PASSED] DVI-D
[07:39:27] [PASSED] DVI-A
[07:39:27] [PASSED] Composite
[07:39:27] [PASSED] SVIDEO
[07:39:27] [PASSED] LVDS
[07:39:27] [PASSED] Component
[07:39:27] [PASSED] DIN
[07:39:27] [PASSED] DP
[07:39:27] [PASSED] TV
[07:39:27] [PASSED] eDP
[07:39:27] [PASSED] Virtual
[07:39:27] [PASSED] DSI
[07:39:27] [PASSED] DPI
[07:39:27] [PASSED] Writeback
[07:39:27] [PASSED] SPI
[07:39:27] [PASSED] USB
[07:39:27] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[07:39:27] ============ [PASSED] drmm_connector_hdmi_init =============
[07:39:27] ============= drmm_connector_init (3 subtests) =============
[07:39:27] [PASSED] drm_test_drmm_connector_init
[07:39:27] [PASSED] drm_test_drmm_connector_init_null_ddc
[07:39:27] ========= drm_test_drmm_connector_init_type_valid =========
[07:39:27] [PASSED] Unknown
[07:39:27] [PASSED] VGA
[07:39:27] [PASSED] DVI-I
[07:39:27] [PASSED] DVI-D
[07:39:27] [PASSED] DVI-A
[07:39:27] [PASSED] Composite
[07:39:27] [PASSED] SVIDEO
[07:39:27] [PASSED] LVDS
[07:39:27] [PASSED] Component
[07:39:27] [PASSED] DIN
[07:39:27] [PASSED] DP
[07:39:27] [PASSED] HDMI-A
[07:39:27] [PASSED] HDMI-B
[07:39:27] [PASSED] TV
[07:39:27] [PASSED] eDP
[07:39:27] [PASSED] Virtual
[07:39:27] [PASSED] DSI
[07:39:27] [PASSED] DPI
[07:39:27] [PASSED] Writeback
[07:39:27] [PASSED] SPI
[07:39:27] [PASSED] USB
[07:39:27] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[07:39:27] =============== [PASSED] drmm_connector_init ===============
[07:39:27] ========= drm_connector_dynamic_init (6 subtests) ==========
[07:39:27] [PASSED] drm_test_drm_connector_dynamic_init
[07:39:27] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[07:39:27] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[07:39:27] [PASSED] drm_test_drm_connector_dynamic_init_properties
[07:39:27] ===== drm_test_drm_connector_dynamic_init_type_valid ======
[07:39:27] [PASSED] Unknown
[07:39:27] [PASSED] VGA
[07:39:27] [PASSED] DVI-I
[07:39:27] [PASSED] DVI-D
[07:39:27] [PASSED] DVI-A
[07:39:27] [PASSED] Composite
[07:39:27] [PASSED] SVIDEO
[07:39:27] [PASSED] LVDS
[07:39:27] [PASSED] Component
[07:39:27] [PASSED] DIN
[07:39:27] [PASSED] DP
[07:39:27] [PASSED] HDMI-A
[07:39:27] [PASSED] HDMI-B
[07:39:27] [PASSED] TV
[07:39:27] [PASSED] eDP
[07:39:27] [PASSED] Virtual
[07:39:27] [PASSED] DSI
[07:39:27] [PASSED] DPI
[07:39:27] [PASSED] Writeback
[07:39:27] [PASSED] SPI
[07:39:27] [PASSED] USB
[07:39:27] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[07:39:27] ======== drm_test_drm_connector_dynamic_init_name =========
[07:39:27] [PASSED] Unknown
[07:39:27] [PASSED] VGA
[07:39:27] [PASSED] DVI-I
[07:39:27] [PASSED] DVI-D
[07:39:27] [PASSED] DVI-A
[07:39:27] [PASSED] Composite
[07:39:27] [PASSED] SVIDEO
[07:39:27] [PASSED] LVDS
[07:39:27] [PASSED] Component
[07:39:27] [PASSED] DIN
[07:39:27] [PASSED] DP
[07:39:27] [PASSED] HDMI-A
[07:39:27] [PASSED] HDMI-B
[07:39:27] [PASSED] TV
[07:39:27] [PASSED] eDP
[07:39:27] [PASSED] Virtual
[07:39:27] [PASSED] DSI
[07:39:27] [PASSED] DPI
[07:39:27] [PASSED] Writeback
[07:39:27] [PASSED] SPI
[07:39:27] [PASSED] USB
[07:39:27] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[07:39:27] =========== [PASSED] drm_connector_dynamic_init ============
[07:39:27] ==== drm_connector_dynamic_register_early (4 subtests) =====
[07:39:27] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[07:39:27] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[07:39:27] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[07:39:27] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[07:39:27] ====== [PASSED] drm_connector_dynamic_register_early =======
[07:39:27] ======= drm_connector_dynamic_register (7 subtests) ========
[07:39:27] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[07:39:27] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[07:39:27] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[07:39:27] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[07:39:27] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[07:39:27] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[07:39:27] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[07:39:27] ========= [PASSED] drm_connector_dynamic_register ==========
[07:39:27] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[07:39:27] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[07:39:27] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[07:39:27] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[07:39:27] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[07:39:27] ========== drm_test_get_tv_mode_from_name_valid ===========
[07:39:27] [PASSED] NTSC
[07:39:27] [PASSED] NTSC-443
[07:39:27] [PASSED] NTSC-J
[07:39:27] [PASSED] PAL
[07:39:27] [PASSED] PAL-M
[07:39:27] [PASSED] PAL-N
[07:39:27] [PASSED] SECAM
[07:39:27] [PASSED] Mono
[07:39:27] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[07:39:27] [PASSED] drm_test_get_tv_mode_from_name_truncated
[07:39:27] ============ [PASSED] drm_get_tv_mode_from_name ============
[07:39:27] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[07:39:27] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[07:39:27] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[07:39:27] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[07:39:27] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[07:39:27] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[07:39:27] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[07:39:27] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[07:39:27] [PASSED] VIC 96
[07:39:27] [PASSED] VIC 97
[07:39:27] [PASSED] VIC 101
[07:39:27] [PASSED] VIC 102
[07:39:27] [PASSED] VIC 106
[07:39:27] [PASSED] VIC 107
[07:39:27] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[07:39:27] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[07:39:27] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[07:39:27] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[07:39:27] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[07:39:27] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[07:39:27] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[07:39:27] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[07:39:27] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[07:39:27] [PASSED] Automatic
[07:39:27] [PASSED] Full
[07:39:27] [PASSED] Limited 16:235
[07:39:27] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[07:39:27] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[07:39:27] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[07:39:27] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[07:39:27] === drm_test_drm_hdmi_connector_get_output_format_name ====
[07:39:27] [PASSED] RGB
[07:39:27] [PASSED] YUV 4:2:0
[07:39:27] [PASSED] YUV 4:2:2
[07:39:27] [PASSED] YUV 4:4:4
[07:39:27] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[07:39:27] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[07:39:27] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[07:39:27] ============= drm_damage_helper (21 subtests) ==============
[07:39:27] [PASSED] drm_test_damage_iter_no_damage
[07:39:27] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[07:39:27] [PASSED] drm_test_damage_iter_no_damage_src_moved
[07:39:27] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[07:39:27] [PASSED] drm_test_damage_iter_no_damage_not_visible
[07:39:27] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[07:39:27] [PASSED] drm_test_damage_iter_no_damage_no_fb
[07:39:27] [PASSED] drm_test_damage_iter_simple_damage
[07:39:27] [PASSED] drm_test_damage_iter_single_damage
[07:39:27] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[07:39:27] [PASSED] drm_test_damage_iter_single_damage_outside_src
[07:39:27] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[07:39:27] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[07:39:27] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[07:39:27] [PASSED] drm_test_damage_iter_single_damage_src_moved
[07:39:27] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[07:39:27] [PASSED] drm_test_damage_iter_damage
[07:39:27] [PASSED] drm_test_damage_iter_damage_one_intersect
[07:39:27] [PASSED] drm_test_damage_iter_damage_one_outside
[07:39:27] [PASSED] drm_test_damage_iter_damage_src_moved
[07:39:27] [PASSED] drm_test_damage_iter_damage_not_visible
[07:39:27] ================ [PASSED] drm_damage_helper ================
[07:39:27] ============== drm_dp_mst_helper (3 subtests) ==============
[07:39:27] ============== drm_test_dp_mst_calc_pbn_mode ==============
[07:39:27] [PASSED] Clock 154000 BPP 30 DSC disabled
[07:39:27] [PASSED] Clock 234000 BPP 30 DSC disabled
[07:39:27] [PASSED] Clock 297000 BPP 24 DSC disabled
[07:39:27] [PASSED] Clock 332880 BPP 24 DSC enabled
[07:39:27] [PASSED] Clock 324540 BPP 24 DSC enabled
[07:39:27] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[07:39:27] ============== drm_test_dp_mst_calc_pbn_div ===============
[07:39:27] [PASSED] Link rate 2000000 lane count 4
[07:39:27] [PASSED] Link rate 2000000 lane count 2
[07:39:27] [PASSED] Link rate 2000000 lane count 1
[07:39:27] [PASSED] Link rate 1350000 lane count 4
[07:39:27] [PASSED] Link rate 1350000 lane count 2
[07:39:27] [PASSED] Link rate 1350000 lane count 1
[07:39:27] [PASSED] Link rate 1000000 lane count 4
[07:39:27] [PASSED] Link rate 1000000 lane count 2
[07:39:27] [PASSED] Link rate 1000000 lane count 1
[07:39:27] [PASSED] Link rate 810000 lane count 4
[07:39:27] [PASSED] Link rate 810000 lane count 2
[07:39:27] [PASSED] Link rate 810000 lane count 1
[07:39:27] [PASSED] Link rate 540000 lane count 4
[07:39:27] [PASSED] Link rate 540000 lane count 2
[07:39:27] [PASSED] Link rate 540000 lane count 1
[07:39:27] [PASSED] Link rate 270000 lane count 4
[07:39:27] [PASSED] Link rate 270000 lane count 2
[07:39:27] [PASSED] Link rate 270000 lane count 1
[07:39:27] [PASSED] Link rate 162000 lane count 4
[07:39:27] [PASSED] Link rate 162000 lane count 2
[07:39:27] [PASSED] Link rate 162000 lane count 1
[07:39:27] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[07:39:27] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[07:39:27] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[07:39:27] [PASSED] DP_POWER_UP_PHY with port number
[07:39:27] [PASSED] DP_POWER_DOWN_PHY with port number
[07:39:27] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[07:39:27] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[07:39:27] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[07:39:27] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[07:39:27] [PASSED] DP_QUERY_PAYLOAD with port number
[07:39:27] [PASSED] DP_QUERY_PAYLOAD with VCPI
[07:39:27] [PASSED] DP_REMOTE_DPCD_READ with port number
[07:39:27] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[07:39:27] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[07:39:27] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[07:39:27] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[07:39:27] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[07:39:27] [PASSED] DP_REMOTE_I2C_READ with port number
[07:39:27] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[07:39:27] [PASSED] DP_REMOTE_I2C_READ with transactions array
[07:39:27] [PASSED] DP_REMOTE_I2C_WRITE with port number
[07:39:27] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[07:39:27] [PASSED] DP_REMOTE_I2C_WRITE with data array
[07:39:27] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[07:39:27] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[07:39:27] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[07:39:27] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[07:39:27] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[07:39:27] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[07:39:27] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[07:39:27] ================ [PASSED] drm_dp_mst_helper ================
[07:39:27] ================== drm_exec (7 subtests) ===================
[07:39:27] [PASSED] sanitycheck
[07:39:27] [PASSED] test_lock
[07:39:27] [PASSED] test_lock_unlock
[07:39:27] [PASSED] test_duplicates
[07:39:27] [PASSED] test_prepare
[07:39:27] [PASSED] test_prepare_array
[07:39:27] [PASSED] test_multiple_loops
[07:39:27] ==================== [PASSED] drm_exec =====================
[07:39:27] =========== drm_format_helper_test (17 subtests) ===========
[07:39:27] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[07:39:27] [PASSED] single_pixel_source_buffer
[07:39:27] [PASSED] single_pixel_clip_rectangle
[07:39:27] [PASSED] well_known_colors
[07:39:27] [PASSED] destination_pitch
[07:39:27] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[07:39:27] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[07:39:27] [PASSED] single_pixel_source_buffer
[07:39:27] [PASSED] single_pixel_clip_rectangle
[07:39:27] [PASSED] well_known_colors
[07:39:27] [PASSED] destination_pitch
[07:39:27] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[07:39:27] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[07:39:27] [PASSED] single_pixel_source_buffer
[07:39:27] [PASSED] single_pixel_clip_rectangle
[07:39:27] [PASSED] well_known_colors
[07:39:27] [PASSED] destination_pitch
[07:39:27] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[07:39:27] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[07:39:27] [PASSED] single_pixel_source_buffer
[07:39:27] [PASSED] single_pixel_clip_rectangle
[07:39:27] [PASSED] well_known_colors
[07:39:27] [PASSED] destination_pitch
[07:39:27] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[07:39:27] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[07:39:27] [PASSED] single_pixel_source_buffer
[07:39:27] [PASSED] single_pixel_clip_rectangle
[07:39:27] [PASSED] well_known_colors
[07:39:27] [PASSED] destination_pitch
[07:39:27] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[07:39:27] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[07:39:27] [PASSED] single_pixel_source_buffer
[07:39:27] [PASSED] single_pixel_clip_rectangle
[07:39:27] [PASSED] well_known_colors
[07:39:27] [PASSED] destination_pitch
[07:39:27] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[07:39:27] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[07:39:27] [PASSED] single_pixel_source_buffer
[07:39:27] [PASSED] single_pixel_clip_rectangle
[07:39:27] [PASSED] well_known_colors
[07:39:27] [PASSED] destination_pitch
[07:39:27] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[07:39:27] ============= drm_test_fb_xrgb8888_to_bgr888 ==============
[07:39:27] [PASSED] single_pixel_source_buffer
[07:39:27] [PASSED] single_pixel_clip_rectangle
[07:39:27] [PASSED] well_known_colors
[07:39:27] [PASSED] destination_pitch
[07:39:27] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[07:39:27] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[07:39:27] [PASSED] single_pixel_source_buffer
[07:39:27] [PASSED] single_pixel_clip_rectangle
[07:39:27] [PASSED] well_known_colors
[07:39:27] [PASSED] destination_pitch
[07:39:27] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[07:39:27] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[07:39:27] [PASSED] single_pixel_source_buffer
[07:39:27] [PASSED] single_pixel_clip_rectangle
[07:39:27] [PASSED] well_known_colors
[07:39:27] [PASSED] destination_pitch
[07:39:27] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[07:39:27] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[07:39:27] [PASSED] single_pixel_source_buffer
[07:39:27] [PASSED] single_pixel_clip_rectangle
[07:39:27] [PASSED] well_known_colors
[07:39:27] [PASSED] destination_pitch
[07:39:27] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[07:39:27] ============== drm_test_fb_xrgb8888_to_mono ===============
[07:39:27] [PASSED] single_pixel_source_buffer
[07:39:27] [PASSED] single_pixel_clip_rectangle
[07:39:27] [PASSED] well_known_colors
[07:39:27] [PASSED] destination_pitch
[07:39:27] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[07:39:27] ==================== drm_test_fb_swab =====================
[07:39:27] [PASSED] single_pixel_source_buffer
[07:39:27] [PASSED] single_pixel_clip_rectangle
[07:39:27] [PASSED] well_known_colors
[07:39:27] [PASSED] destination_pitch
[07:39:27] ================ [PASSED] drm_test_fb_swab =================
[07:39:27] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[07:39:27] [PASSED] single_pixel_source_buffer
[07:39:27] [PASSED] single_pixel_clip_rectangle
[07:39:27] [PASSED] well_known_colors
[07:39:27] [PASSED] destination_pitch
[07:39:27] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[07:39:27] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[07:39:27] [PASSED] single_pixel_source_buffer
[07:39:27] [PASSED] single_pixel_clip_rectangle
[07:39:27] [PASSED] well_known_colors
[07:39:27] [PASSED] destination_pitch
[07:39:27] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[07:39:27] ================= drm_test_fb_clip_offset =================
[07:39:27] [PASSED] pass through
[07:39:27] [PASSED] horizontal offset
[07:39:27] [PASSED] vertical offset
[07:39:27] [PASSED] horizontal and vertical offset
[07:39:27] [PASSED] horizontal offset (custom pitch)
[07:39:27] [PASSED] vertical offset (custom pitch)
[07:39:27] [PASSED] horizontal and vertical offset (custom pitch)
[07:39:27] ============= [PASSED] drm_test_fb_clip_offset =============
[07:39:27] =================== drm_test_fb_memcpy ====================
[07:39:27] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[07:39:27] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[07:39:27] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[07:39:27] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[07:39:27] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[07:39:27] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[07:39:27] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[07:39:27] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[07:39:27] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[07:39:27] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[07:39:27] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[07:39:27] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[07:39:27] =============== [PASSED] drm_test_fb_memcpy ================
[07:39:27] ============= [PASSED] drm_format_helper_test ==============
[07:39:27] ================= drm_format (18 subtests) =================
[07:39:27] [PASSED] drm_test_format_block_width_invalid
[07:39:27] [PASSED] drm_test_format_block_width_one_plane
[07:39:27] [PASSED] drm_test_format_block_width_two_plane
[07:39:27] [PASSED] drm_test_format_block_width_three_plane
[07:39:27] [PASSED] drm_test_format_block_width_tiled
[07:39:27] [PASSED] drm_test_format_block_height_invalid
[07:39:27] [PASSED] drm_test_format_block_height_one_plane
[07:39:27] [PASSED] drm_test_format_block_height_two_plane
[07:39:27] [PASSED] drm_test_format_block_height_three_plane
[07:39:27] [PASSED] drm_test_format_block_height_tiled
[07:39:27] [PASSED] drm_test_format_min_pitch_invalid
[07:39:27] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[07:39:27] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[07:39:27] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[07:39:27] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[07:39:27] [PASSED] drm_test_format_min_pitch_two_plane
[07:39:27] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[07:39:27] [PASSED] drm_test_format_min_pitch_tiled
[07:39:27] =================== [PASSED] drm_format ====================
[07:39:27] ============== drm_framebuffer (10 subtests) ===============
[07:39:27] ========== drm_test_framebuffer_check_src_coords ==========
[07:39:27] [PASSED] Success: source fits into fb
[07:39:27] [PASSED] Fail: overflowing fb with x-axis coordinate
[07:39:27] [PASSED] Fail: overflowing fb with y-axis coordinate
[07:39:27] [PASSED] Fail: overflowing fb with source width
[07:39:27] [PASSED] Fail: overflowing fb with source height
[07:39:27] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[07:39:27] [PASSED] drm_test_framebuffer_cleanup
[07:39:27] =============== drm_test_framebuffer_create ===============
[07:39:27] [PASSED] ABGR8888 normal sizes
[07:39:27] [PASSED] ABGR8888 max sizes
[07:39:27] [PASSED] ABGR8888 pitch greater than min required
[07:39:27] [PASSED] ABGR8888 pitch less than min required
[07:39:27] [PASSED] ABGR8888 Invalid width
[07:39:27] [PASSED] ABGR8888 Invalid buffer handle
[07:39:27] [PASSED] No pixel format
[07:39:27] [PASSED] ABGR8888 Width 0
[07:39:27] [PASSED] ABGR8888 Height 0
[07:39:27] [PASSED] ABGR8888 Out of bound height * pitch combination
[07:39:27] [PASSED] ABGR8888 Large buffer offset
[07:39:27] [PASSED] ABGR8888 Buffer offset for inexistent plane
[07:39:27] [PASSED] ABGR8888 Invalid flag
[07:39:27] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[07:39:27] [PASSED] ABGR8888 Valid buffer modifier
[07:39:27] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[07:39:27] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[07:39:27] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[07:39:27] [PASSED] NV12 Normal sizes
[07:39:27] [PASSED] NV12 Max sizes
[07:39:27] [PASSED] NV12 Invalid pitch
[07:39:27] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[07:39:27] [PASSED] NV12 different modifier per-plane
[07:39:27] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[07:39:27] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[07:39:27] [PASSED] NV12 Modifier for inexistent plane
[07:39:27] [PASSED] NV12 Handle for inexistent plane
[07:39:27] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[07:39:27] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[07:39:27] [PASSED] YVU420 Normal sizes
[07:39:27] [PASSED] YVU420 Max sizes
[07:39:27] [PASSED] YVU420 Invalid pitch
[07:39:27] [PASSED] YVU420 Different pitches
[07:39:27] [PASSED] YVU420 Different buffer offsets/pitches
[07:39:27] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[07:39:27] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[07:39:27] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[07:39:27] [PASSED] YVU420 Valid modifier
[07:39:27] [PASSED] YVU420 Different modifiers per plane
[07:39:27] [PASSED] YVU420 Modifier for inexistent plane
[07:39:27] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[07:39:27] [PASSED] X0L2 Normal sizes
[07:39:27] [PASSED] X0L2 Max sizes
[07:39:27] [PASSED] X0L2 Invalid pitch
[07:39:27] [PASSED] X0L2 Pitch greater than minimum required
[07:39:27] [PASSED] X0L2 Handle for inexistent plane
[07:39:27] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[07:39:27] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[07:39:27] [PASSED] X0L2 Valid modifier
[07:39:27] [PASSED] X0L2 Modifier for inexistent plane
[07:39:27] =========== [PASSED] drm_test_framebuffer_create ===========
[07:39:27] [PASSED] drm_test_framebuffer_free
[07:39:27] [PASSED] drm_test_framebuffer_init
[07:39:27] [PASSED] drm_test_framebuffer_init_bad_format
[07:39:27] [PASSED] drm_test_framebuffer_init_dev_mismatch
[07:39:27] [PASSED] drm_test_framebuffer_lookup
[07:39:27] [PASSED] drm_test_framebuffer_lookup_inexistent
[07:39:27] [PASSED] drm_test_framebuffer_modifiers_not_supported
[07:39:27] ================= [PASSED] drm_framebuffer =================
[07:39:27] ================ drm_gem_shmem (8 subtests) ================
[07:39:27] [PASSED] drm_gem_shmem_test_obj_create
[07:39:27] [PASSED] drm_gem_shmem_test_obj_create_private
[07:39:27] [PASSED] drm_gem_shmem_test_pin_pages
[07:39:27] [PASSED] drm_gem_shmem_test_vmap
[07:39:27] [PASSED] drm_gem_shmem_test_get_sg_table
[07:39:27] [PASSED] drm_gem_shmem_test_get_pages_sgt
[07:39:27] [PASSED] drm_gem_shmem_test_madvise
[07:39:27] [PASSED] drm_gem_shmem_test_purge
[07:39:27] ================== [PASSED] drm_gem_shmem ==================
[07:39:27] === drm_atomic_helper_connector_hdmi_check (27 subtests) ===
[07:39:27] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[07:39:27] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[07:39:27] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[07:39:27] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[07:39:27] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[07:39:27] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[07:39:27] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 =======
[07:39:27] [PASSED] Automatic
[07:39:27] [PASSED] Full
[07:39:27] [PASSED] Limited 16:235
[07:39:27] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[07:39:27] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[07:39:27] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[07:39:27] [PASSED] drm_test_check_disable_connector
[07:39:27] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[07:39:27] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[07:39:27] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[07:39:27] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[07:39:27] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[07:39:27] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[07:39:27] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[07:39:27] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[07:39:27] [PASSED] drm_test_check_output_bpc_dvi
[07:39:27] [PASSED] drm_test_check_output_bpc_format_vic_1
[07:39:27] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[07:39:27] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[07:39:27] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[07:39:27] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[07:39:27] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[07:39:27] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[07:39:27] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[07:39:27] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[07:39:27] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[07:39:27] [PASSED] drm_test_check_broadcast_rgb_value
[07:39:27] [PASSED] drm_test_check_bpc_8_value
[07:39:27] [PASSED] drm_test_check_bpc_10_value
[07:39:27] [PASSED] drm_test_check_bpc_12_value
[07:39:27] [PASSED] drm_test_check_format_value
[07:39:27] [PASSED] drm_test_check_tmds_char_value
[07:39:27] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[07:39:27] = drm_atomic_helper_connector_hdmi_mode_valid (4 subtests) =
[07:39:27] [PASSED] drm_test_check_mode_valid
[07:39:27] [PASSED] drm_test_check_mode_valid_reject
[07:39:27] [PASSED] drm_test_check_mode_valid_reject_rate
[07:39:27] [PASSED] drm_test_check_mode_valid_reject_max_clock
[07:39:27] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[07:39:27] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[07:39:27] [PASSED] drm_test_check_infoframes
[07:39:27] [PASSED] drm_test_check_reject_avi_infoframe
[07:39:27] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[07:39:27] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[07:39:27] [PASSED] drm_test_check_reject_audio_infoframe
[07:39:27] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[07:39:27] ================= drm_managed (2 subtests) =================
[07:39:27] [PASSED] drm_test_managed_release_action
[07:39:27] [PASSED] drm_test_managed_run_action
[07:39:27] =================== [PASSED] drm_managed ===================
[07:39:27] =================== drm_mm (6 subtests) ====================
[07:39:27] [PASSED] drm_test_mm_init
[07:39:27] [PASSED] drm_test_mm_debug
[07:39:27] [PASSED] drm_test_mm_align32
[07:39:27] [PASSED] drm_test_mm_align64
[07:39:27] [PASSED] drm_test_mm_lowest
[07:39:27] [PASSED] drm_test_mm_highest
[07:39:27] ===================== [PASSED] drm_mm ======================
[07:39:27] ============= drm_modes_analog_tv (5 subtests) =============
[07:39:27] [PASSED] drm_test_modes_analog_tv_mono_576i
[07:39:27] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[07:39:27] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[07:39:27] [PASSED] drm_test_modes_analog_tv_pal_576i
[07:39:27] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[07:39:27] =============== [PASSED] drm_modes_analog_tv ===============
[07:39:27] ============== drm_plane_helper (2 subtests) ===============
[07:39:27] =============== drm_test_check_plane_state ================
[07:39:27] [PASSED] clipping_simple
[07:39:27] [PASSED] clipping_rotate_reflect
[07:39:27] [PASSED] positioning_simple
[07:39:27] [PASSED] upscaling
[07:39:27] [PASSED] downscaling
[07:39:27] [PASSED] rounding1
[07:39:27] [PASSED] rounding2
[07:39:27] [PASSED] rounding3
[07:39:27] [PASSED] rounding4
[07:39:27] =========== [PASSED] drm_test_check_plane_state ============
[07:39:27] =========== drm_test_check_invalid_plane_state ============
[07:39:27] [PASSED] positioning_invalid
[07:39:27] [PASSED] upscaling_invalid
[07:39:27] [PASSED] downscaling_invalid
[07:39:27] ======= [PASSED] drm_test_check_invalid_plane_state ========
[07:39:27] ================ [PASSED] drm_plane_helper =================
[07:39:27] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[07:39:27] ====== drm_test_connector_helper_tv_get_modes_check =======
[07:39:27] [PASSED] None
[07:39:27] [PASSED] PAL
[07:39:27] [PASSED] NTSC
[07:39:27] [PASSED] Both, NTSC Default
[07:39:27] [PASSED] Both, PAL Default
[07:39:27] [PASSED] Both, NTSC Default, with PAL on command-line
[07:39:27] [PASSED] Both, PAL Default, with NTSC on command-line
[07:39:27] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[07:39:27] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[07:39:27] ================== drm_rect (9 subtests) ===================
[07:39:27] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[07:39:27] [PASSED] drm_test_rect_clip_scaled_not_clipped
[07:39:27] [PASSED] drm_test_rect_clip_scaled_clipped
[07:39:27] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[07:39:27] ================= drm_test_rect_intersect =================
[07:39:27] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[07:39:27] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[07:39:27] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[07:39:27] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[07:39:27] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[07:39:27] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[07:39:27] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[07:39:27] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[07:39:27] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[07:39:27] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[07:39:27] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[07:39:27] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[07:39:27] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[07:39:27] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[07:39:27] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[07:39:27] ============= [PASSED] drm_test_rect_intersect =============
[07:39:27] ================ drm_test_rect_calc_hscale ================
[07:39:27] [PASSED] normal use
[07:39:27] [PASSED] out of max range
[07:39:27] [PASSED] out of min range
[07:39:27] [PASSED] zero dst
[07:39:27] [PASSED] negative src
[07:39:27] [PASSED] negative dst
[07:39:27] ============ [PASSED] drm_test_rect_calc_hscale ============
[07:39:27] ================ drm_test_rect_calc_vscale ================
[07:39:27] [PASSED] normal use
[07:39:27] [PASSED] out of max range
[07:39:27] [PASSED] out of min range
[07:39:27] [PASSED] zero dst
[07:39:27] [PASSED] negative src
[07:39:27] [PASSED] negative dst
[07:39:27] ============ [PASSED] drm_test_rect_calc_vscale ============
[07:39:27] ================== drm_test_rect_rotate ===================
[07:39:27] [PASSED] reflect-x
[07:39:27] [PASSED] reflect-y
[07:39:27] [PASSED] rotate-0
[07:39:27] [PASSED] rotate-90
[07:39:27] [PASSED] rotate-180
[07:39:27] [PASSED] rotate-270
[07:39:27] ============== [PASSED] drm_test_rect_rotate ===============
[07:39:27] ================ drm_test_rect_rotate_inv =================
[07:39:27] [PASSED] reflect-x
[07:39:27] [PASSED] reflect-y
[07:39:27] [PASSED] rotate-0
[07:39:27] [PASSED] rotate-90
[07:39:27] [PASSED] rotate-180
[07:39:27] [PASSED] rotate-270
[07:39:27] ============ [PASSED] drm_test_rect_rotate_inv =============
[07:39:27] ==================== [PASSED] drm_rect =====================
[07:39:27] ============ drm_sysfb_modeset_test (1 subtest) ============
[07:39:27] ============ drm_test_sysfb_build_fourcc_list =============
[07:39:27] [PASSED] no native formats
[07:39:27] [PASSED] XRGB8888 as native format
[07:39:27] [PASSED] remove duplicates
[07:39:27] [PASSED] convert alpha formats
[07:39:27] [PASSED] random formats
[07:39:27] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[07:39:27] ============= [PASSED] drm_sysfb_modeset_test ==============
[07:39:27] ================== drm_fixp (2 subtests) ===================
[07:39:27] [PASSED] drm_test_int2fixp
[07:39:27] [PASSED] drm_test_sm2fixp
[07:39:27] ==================== [PASSED] drm_fixp =====================
[07:39:27] ============================================================
[07:39:27] Testing complete. Ran 621 tests: passed: 621
[07:39:27] Elapsed time: 25.673s total, 1.746s configuring, 23.747s building, 0.180s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[07:39:27] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[07:39:29] 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
[07:39:38] Starting KUnit Kernel (1/1)...
[07:39:38] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[07:39:38] ================= ttm_device (5 subtests) ==================
[07:39:38] [PASSED] ttm_device_init_basic
[07:39:38] [PASSED] ttm_device_init_multiple
[07:39:38] [PASSED] ttm_device_fini_basic
[07:39:38] [PASSED] ttm_device_init_no_vma_man
[07:39:38] ================== ttm_device_init_pools ==================
[07:39:38] [PASSED] No DMA allocations, no DMA32 required
[07:39:38] [PASSED] DMA allocations, DMA32 required
[07:39:38] [PASSED] No DMA allocations, DMA32 required
[07:39:38] [PASSED] DMA allocations, no DMA32 required
[07:39:38] ============== [PASSED] ttm_device_init_pools ==============
[07:39:38] =================== [PASSED] ttm_device ====================
[07:39:38] ================== ttm_pool (8 subtests) ===================
[07:39:38] ================== ttm_pool_alloc_basic ===================
[07:39:38] [PASSED] One page
[07:39:38] [PASSED] More than one page
[07:39:38] [PASSED] Above the allocation limit
[07:39:38] [PASSED] One page, with coherent DMA mappings enabled
[07:39:38] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[07:39:38] ============== [PASSED] ttm_pool_alloc_basic ===============
[07:39:38] ============== ttm_pool_alloc_basic_dma_addr ==============
[07:39:38] [PASSED] One page
[07:39:38] [PASSED] More than one page
[07:39:38] [PASSED] Above the allocation limit
[07:39:39] [PASSED] One page, with coherent DMA mappings enabled
[07:39:39] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[07:39:39] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[07:39:39] [PASSED] ttm_pool_alloc_order_caching_match
[07:39:39] [PASSED] ttm_pool_alloc_caching_mismatch
[07:39:39] [PASSED] ttm_pool_alloc_order_mismatch
[07:39:39] [PASSED] ttm_pool_free_dma_alloc
[07:39:39] [PASSED] ttm_pool_free_no_dma_alloc
[07:39:39] [PASSED] ttm_pool_fini_basic
[07:39:39] ==================== [PASSED] ttm_pool =====================
[07:39:39] ================ ttm_resource (8 subtests) =================
[07:39:39] ================= ttm_resource_init_basic =================
[07:39:39] [PASSED] Init resource in TTM_PL_SYSTEM
[07:39:39] [PASSED] Init resource in TTM_PL_VRAM
[07:39:39] [PASSED] Init resource in a private placement
[07:39:39] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[07:39:39] ============= [PASSED] ttm_resource_init_basic =============
[07:39:39] [PASSED] ttm_resource_init_pinned
[07:39:39] [PASSED] ttm_resource_fini_basic
[07:39:39] [PASSED] ttm_resource_manager_init_basic
[07:39:39] [PASSED] ttm_resource_manager_usage_basic
[07:39:39] [PASSED] ttm_resource_manager_set_used_basic
[07:39:39] [PASSED] ttm_sys_man_alloc_basic
[07:39:39] [PASSED] ttm_sys_man_free_basic
[07:39:39] ================== [PASSED] ttm_resource ===================
[07:39:39] =================== ttm_tt (15 subtests) ===================
[07:39:39] ==================== ttm_tt_init_basic ====================
[07:39:39] [PASSED] Page-aligned size
[07:39:39] [PASSED] Extra pages requested
[07:39:39] ================ [PASSED] ttm_tt_init_basic ================
[07:39:39] [PASSED] ttm_tt_init_misaligned
[07:39:39] [PASSED] ttm_tt_fini_basic
[07:39:39] [PASSED] ttm_tt_fini_sg
[07:39:39] [PASSED] ttm_tt_fini_shmem
[07:39:39] [PASSED] ttm_tt_create_basic
[07:39:39] [PASSED] ttm_tt_create_invalid_bo_type
[07:39:39] [PASSED] ttm_tt_create_ttm_exists
[07:39:39] [PASSED] ttm_tt_create_failed
[07:39:39] [PASSED] ttm_tt_destroy_basic
[07:39:39] [PASSED] ttm_tt_populate_null_ttm
[07:39:39] [PASSED] ttm_tt_populate_populated_ttm
[07:39:39] [PASSED] ttm_tt_unpopulate_basic
[07:39:39] [PASSED] ttm_tt_unpopulate_empty_ttm
[07:39:39] [PASSED] ttm_tt_swapin_basic
[07:39:39] ===================== [PASSED] ttm_tt ======================
[07:39:39] =================== ttm_bo (14 subtests) ===================
[07:39:39] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[07:39:39] [PASSED] Cannot be interrupted and sleeps
[07:39:39] [PASSED] Cannot be interrupted, locks straight away
[07:39:39] [PASSED] Can be interrupted, sleeps
[07:39:39] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[07:39:39] [PASSED] ttm_bo_reserve_locked_no_sleep
[07:39:39] [PASSED] ttm_bo_reserve_no_wait_ticket
[07:39:39] [PASSED] ttm_bo_reserve_double_resv
[07:39:39] [PASSED] ttm_bo_reserve_interrupted
[07:39:39] [PASSED] ttm_bo_reserve_deadlock
[07:39:39] [PASSED] ttm_bo_unreserve_basic
[07:39:39] [PASSED] ttm_bo_unreserve_pinned
[07:39:39] [PASSED] ttm_bo_unreserve_bulk
[07:39:39] [PASSED] ttm_bo_fini_basic
[07:39:39] [PASSED] ttm_bo_fini_shared_resv
[07:39:39] [PASSED] ttm_bo_pin_basic
[07:39:39] [PASSED] ttm_bo_pin_unpin_resource
[07:39:39] [PASSED] ttm_bo_multiple_pin_one_unpin
[07:39:39] ===================== [PASSED] ttm_bo ======================
[07:39:39] ============== ttm_bo_validate (22 subtests) ===============
[07:39:39] ============== ttm_bo_init_reserved_sys_man ===============
[07:39:39] [PASSED] Buffer object for userspace
[07:39:39] [PASSED] Kernel buffer object
[07:39:39] [PASSED] Shared buffer object
[07:39:39] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[07:39:39] ============== ttm_bo_init_reserved_mock_man ==============
[07:39:39] [PASSED] Buffer object for userspace
[07:39:39] [PASSED] Kernel buffer object
[07:39:39] [PASSED] Shared buffer object
[07:39:39] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[07:39:39] [PASSED] ttm_bo_init_reserved_resv
[07:39:39] ================== ttm_bo_validate_basic ==================
[07:39:39] [PASSED] Buffer object for userspace
[07:39:39] [PASSED] Kernel buffer object
[07:39:39] [PASSED] Shared buffer object
[07:39:39] ============== [PASSED] ttm_bo_validate_basic ==============
[07:39:39] [PASSED] ttm_bo_validate_invalid_placement
[07:39:39] ============= ttm_bo_validate_same_placement ==============
[07:39:39] [PASSED] System manager
[07:39:39] [PASSED] VRAM manager
[07:39:39] ========= [PASSED] ttm_bo_validate_same_placement ==========
[07:39:39] [PASSED] ttm_bo_validate_failed_alloc
[07:39:39] [PASSED] ttm_bo_validate_pinned
[07:39:39] [PASSED] ttm_bo_validate_busy_placement
[07:39:39] ================ ttm_bo_validate_multihop =================
[07:39:39] [PASSED] Buffer object for userspace
[07:39:39] [PASSED] Kernel buffer object
[07:39:39] [PASSED] Shared buffer object
[07:39:39] ============ [PASSED] ttm_bo_validate_multihop =============
[07:39:39] ========== ttm_bo_validate_no_placement_signaled ==========
[07:39:39] [PASSED] Buffer object in system domain, no page vector
[07:39:39] [PASSED] Buffer object in system domain with an existing page vector
[07:39:39] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[07:39:39] ======== ttm_bo_validate_no_placement_not_signaled ========
[07:39:39] [PASSED] Buffer object for userspace
[07:39:39] [PASSED] Kernel buffer object
[07:39:39] [PASSED] Shared buffer object
[07:39:39] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[07:39:39] [PASSED] ttm_bo_validate_move_fence_signaled
[07:39:39] ========= ttm_bo_validate_move_fence_not_signaled =========
[07:39:39] [PASSED] Waits for GPU
[07:39:39] [PASSED] Tries to lock straight away
[07:39:39] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[07:39:39] [PASSED] ttm_bo_validate_swapout
[07:39:39] [PASSED] ttm_bo_validate_happy_evict
[07:39:39] [PASSED] ttm_bo_validate_all_pinned_evict
[07:39:39] [PASSED] ttm_bo_validate_allowed_only_evict
[07:39:39] [PASSED] ttm_bo_validate_deleted_evict
[07:39:39] [PASSED] ttm_bo_validate_busy_domain_evict
[07:39:39] [PASSED] ttm_bo_validate_evict_gutting
[07:39:39] [PASSED] ttm_bo_validate_recrusive_evict
[07:39:39] ================= [PASSED] ttm_bo_validate =================
[07:39:39] ============================================================
[07:39:39] Testing complete. Ran 102 tests: passed: 102
[07:39:39] Elapsed time: 11.660s total, 1.733s configuring, 9.713s building, 0.184s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 13+ messages in thread
* ✓ Xe.CI.BAT: success for Add reclaim to the dmem cgroup controller (rev2)
2026-04-28 7:31 [PATCH v2 0/4] Add reclaim to the dmem cgroup controller Thomas Hellström
` (5 preceding siblings ...)
2026-04-28 7:39 ` ✓ CI.KUnit: success " Patchwork
@ 2026-04-28 8:28 ` Patchwork
2026-04-28 16:02 ` ✗ Xe.CI.FULL: failure " Patchwork
7 siblings, 0 replies; 13+ messages in thread
From: Patchwork @ 2026-04-28 8:28 UTC (permalink / raw)
To: Thomas Hellström; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 962 bytes --]
== Series Details ==
Series: Add reclaim to the dmem cgroup controller (rev2)
URL : https://patchwork.freedesktop.org/series/163970/
State : success
== Summary ==
CI Bug Log - changes from xe-4944-aea2c496abcf55b647c14fe720bfc4ea555aac6a_BAT -> xe-pw-163970v2_BAT
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (13 -> 13)
------------------------------
No changes in participating hosts
Changes
-------
No changes found
Build changes
-------------
* Linux: xe-4944-aea2c496abcf55b647c14fe720bfc4ea555aac6a -> xe-pw-163970v2
IGT_8874: 4568b2c141ab630c34f8eb2b9afab8cbf8f3ce9e @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-4944-aea2c496abcf55b647c14fe720bfc4ea555aac6a: aea2c496abcf55b647c14fe720bfc4ea555aac6a
xe-pw-163970v2: 163970v2
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-163970v2/index.html
[-- Attachment #2: Type: text/html, Size: 1510 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
* RE: [PATCH v2 3/4] drm/xe: Wire up dmem cgroup reclaim for VRAM manager
2026-04-28 7:31 ` [PATCH v2 3/4] drm/xe: Wire up dmem cgroup reclaim for VRAM manager Thomas Hellström
@ 2026-04-28 9:38 ` Upadhyay, Tejas
2026-04-28 9:50 ` Maarten Lankhorst
1 sibling, 0 replies; 13+ messages in thread
From: Upadhyay, Tejas @ 2026-04-28 9:38 UTC (permalink / raw)
To: Thomas Hellström, intel-xe@lists.freedesktop.org
Cc: Natalie Vock, Johannes Weiner, Tejun Heo, Michal Koutný,
cgroups@vger.kernel.org, Huang Rui, Brost, Matthew, Auld, Matthew,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
Simona Vetter, David Airlie, Christian König, Alex Deucher,
Vivi, Rodrigo, dri-devel@lists.freedesktop.org,
amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org
> -----Original Message-----
> From: Intel-xe <intel-xe-bounces@lists.freedesktop.org> On Behalf Of Thomas
> Hellström
> Sent: 28 April 2026 13:01
> To: intel-xe@lists.freedesktop.org
> Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>; Natalie Vock
> <natalie.vock@gmx.de>; Johannes Weiner <hannes@cmpxchg.org>; Tejun Heo
> <tj@kernel.org>; Michal Koutný <mkoutny@suse.com>;
> cgroups@vger.kernel.org; Huang Rui <ray.huang@amd.com>; Brost, Matthew
> <matthew.brost@intel.com>; Auld, Matthew <matthew.auld@intel.com>;
> Maarten Lankhorst <maarten.lankhorst@linux.intel.com>; Maxime Ripard
> <mripard@kernel.org>; Thomas Zimmermann <tzimmermann@suse.de>;
> Simona Vetter <simona@ffwll.ch>; David Airlie <airlied@gmail.com>; Christian
> König <christian.koenig@amd.com>; Alex Deucher
> <alexander.deucher@amd.com>; Vivi, Rodrigo <rodrigo.vivi@intel.com>; dri-
> devel@lists.freedesktop.org; amd-gfx@lists.freedesktop.org; linux-
> kernel@vger.kernel.org
> Subject: [PATCH v2 3/4] drm/xe: Wire up dmem cgroup reclaim for VRAM
> manager
>
> Register the VRAM manager with the dmem cgroup reclaim infrastructure so
> that lowering dmem.max below current VRAM usage triggers TTM eviction
> rather than failing with -EBUSY.
>
> Assisted-by: GitHub Copilot:claude-sonnet-4.6
> Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> ---
> drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 19 ++++++++++++-------
> 1 file changed, 12 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> index 5fd0d5506a7e..1bdcb3fee901 100644
> --- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> +++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> @@ -303,13 +303,6 @@ int __xe_ttm_vram_mgr_init(struct xe_device *xe,
> struct xe_ttm_vram_mgr *mgr,
> struct ttm_resource_manager *man = &mgr->manager;
> int err;
>
> - if (mem_type != XE_PL_STOLEN) {
> - const char *name = mem_type == XE_PL_VRAM0 ? "vram0" :
> "vram1";
> - man->cg = drmm_cgroup_register_region(&xe->drm, name,
> size);
> - if (IS_ERR(man->cg))
> - return PTR_ERR(man->cg);
> - }
> -
> man->func = &xe_ttm_vram_mgr_func;
> mgr->mem_type = mem_type;
> mutex_init(&mgr->lock);
> @@ -318,6 +311,18 @@ int __xe_ttm_vram_mgr_init(struct xe_device *xe,
> struct xe_ttm_vram_mgr *mgr,
> mgr->visible_avail = io_size;
>
> ttm_resource_manager_init(man, &xe->ttm, size);
> +
> + if (mem_type != XE_PL_STOLEN) {
> + const char *name = mem_type == XE_PL_VRAM0 ? "vram0" :
> "vram1";
> + struct dmem_cgroup_region *cg =
> + drmm_cgroup_register_region(&xe->drm, name,
> size);
> +
> + if (IS_ERR(cg))
> + return PTR_ERR(cg);
> +
> + ttm_resource_manager_set_dmem_region(man, cg);
> + }
> +
I think, this reordering is reasonable cleanup, LGTM:
Reviewed-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
Tejas
> err = gpu_buddy_init(&mgr->mm, man->size, default_page_size);
> if (err)
> return err;
> --
> 2.53.0
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2 3/4] drm/xe: Wire up dmem cgroup reclaim for VRAM manager
2026-04-28 7:31 ` [PATCH v2 3/4] drm/xe: Wire up dmem cgroup reclaim for VRAM manager Thomas Hellström
2026-04-28 9:38 ` Upadhyay, Tejas
@ 2026-04-28 9:50 ` Maarten Lankhorst
2026-04-28 10:02 ` Thomas Hellström
1 sibling, 1 reply; 13+ messages in thread
From: Maarten Lankhorst @ 2026-04-28 9:50 UTC (permalink / raw)
To: Thomas Hellström, intel-xe
Cc: Natalie Vock, Johannes Weiner, Tejun Heo, Michal Koutný,
cgroups, Huang Rui, Matthew Brost, Matthew Auld, Maxime Ripard,
Thomas Zimmermann, Simona Vetter, David Airlie,
Christian König, Alex Deucher, Rodrigo Vivi, dri-devel,
amd-gfx, linux-kernel
Den 2026-04-28 kl. 09:31, skrev Thomas Hellström:
> Register the VRAM manager with the dmem cgroup reclaim infrastructure
> so that lowering dmem.max below current VRAM usage triggers TTM
> eviction rather than failing with -EBUSY.
>
> Assisted-by: GitHub Copilot:claude-sonnet-4.6
> Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> ---
> drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 19 ++++++++++++-------
> 1 file changed, 12 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> index 5fd0d5506a7e..1bdcb3fee901 100644
> --- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> +++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> @@ -303,13 +303,6 @@ int __xe_ttm_vram_mgr_init(struct xe_device *xe, struct xe_ttm_vram_mgr *mgr,
> struct ttm_resource_manager *man = &mgr->manager;
> int err;
>
> - if (mem_type != XE_PL_STOLEN) {
> - const char *name = mem_type == XE_PL_VRAM0 ? "vram0" : "vram1";
> - man->cg = drmm_cgroup_register_region(&xe->drm, name, size);
> - if (IS_ERR(man->cg))
> - return PTR_ERR(man->cg);
> - }
> -
> man->func = &xe_ttm_vram_mgr_func;
> mgr->mem_type = mem_type;
> mutex_init(&mgr->lock);
> @@ -318,6 +311,18 @@ int __xe_ttm_vram_mgr_init(struct xe_device *xe, struct xe_ttm_vram_mgr *mgr,
> mgr->visible_avail = io_size;
>
> ttm_resource_manager_init(man, &xe->ttm, size);
> +
> + if (mem_type != XE_PL_STOLEN) {
> + const char *name = mem_type == XE_PL_VRAM0 ? "vram0" : "vram1";
> + struct dmem_cgroup_region *cg =
> + drmm_cgroup_register_region(&xe->drm, name, size);
> +
> + if (IS_ERR(cg))
> + return PTR_ERR(cg);
> +
> + ttm_resource_manager_set_dmem_region(man, cg);
> + }
> +
> err = gpu_buddy_init(&mgr->mm, man->size, default_page_size);
> if (err)
> return err;
This patch will conflict with
https://patchwork.freedesktop.org/series/164694/ which removes
stolen support, can we merge that patch first while we wait for AMD acks?
Do I need an ack to get the series through drm-misc?
Kind regards,
~Maarten Lankhorst
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2 3/4] drm/xe: Wire up dmem cgroup reclaim for VRAM manager
2026-04-28 9:50 ` Maarten Lankhorst
@ 2026-04-28 10:02 ` Thomas Hellström
2026-04-28 10:03 ` Maarten Lankhorst
0 siblings, 1 reply; 13+ messages in thread
From: Thomas Hellström @ 2026-04-28 10:02 UTC (permalink / raw)
To: Maarten Lankhorst, intel-xe
Cc: Natalie Vock, Johannes Weiner, Tejun Heo, Michal Koutný,
cgroups, Huang Rui, Matthew Brost, Matthew Auld, Maxime Ripard,
Thomas Zimmermann, Simona Vetter, David Airlie,
Christian König, Alex Deucher, Rodrigo Vivi, dri-devel,
amd-gfx, linux-kernel
On Tue, 2026-04-28 at 11:50 +0200, Maarten Lankhorst wrote:
>
>
> Den 2026-04-28 kl. 09:31, skrev Thomas Hellström:
> > Register the VRAM manager with the dmem cgroup reclaim
> > infrastructure
> > so that lowering dmem.max below current VRAM usage triggers TTM
> > eviction rather than failing with -EBUSY.
> >
> > Assisted-by: GitHub Copilot:claude-sonnet-4.6
> > Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> > ---
> > drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 19 ++++++++++++-------
> > 1 file changed, 12 insertions(+), 7 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> > b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> > index 5fd0d5506a7e..1bdcb3fee901 100644
> > --- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> > +++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> > @@ -303,13 +303,6 @@ int __xe_ttm_vram_mgr_init(struct xe_device
> > *xe, struct xe_ttm_vram_mgr *mgr,
> > struct ttm_resource_manager *man = &mgr->manager;
> > int err;
> >
> > - if (mem_type != XE_PL_STOLEN) {
> > - const char *name = mem_type == XE_PL_VRAM0 ?
> > "vram0" : "vram1";
> > - man->cg = drmm_cgroup_register_region(&xe->drm,
> > name, size);
> > - if (IS_ERR(man->cg))
> > - return PTR_ERR(man->cg);
> > - }
> > -
> > man->func = &xe_ttm_vram_mgr_func;
> > mgr->mem_type = mem_type;
> > mutex_init(&mgr->lock);
> > @@ -318,6 +311,18 @@ int __xe_ttm_vram_mgr_init(struct xe_device
> > *xe, struct xe_ttm_vram_mgr *mgr,
> > mgr->visible_avail = io_size;
> >
> > ttm_resource_manager_init(man, &xe->ttm, size);
> > +
> > + if (mem_type != XE_PL_STOLEN) {
> > + const char *name = mem_type == XE_PL_VRAM0 ?
> > "vram0" : "vram1";
> > + struct dmem_cgroup_region *cg =
> > + drmm_cgroup_register_region(&xe->drm,
> > name, size);
> > +
> > + if (IS_ERR(cg))
> > + return PTR_ERR(cg);
> > +
> > + ttm_resource_manager_set_dmem_region(man, cg);
> > + }
> > +
> > err = gpu_buddy_init(&mgr->mm, man->size,
> > default_page_size);
> > if (err)
> > return err;
>
> This patch will conflict with
> https://patchwork.freedesktop.org/series/164694/ which removes
> stolen support, can we merge that patch first while we wait for AMD
> acks?
Sure, np.
>
> Do I need an ack to get the series through drm-misc?
Which series? The stolen support or this cgroup series?
Thanks,
Thomas
>
> Kind regards,
> ~Maarten Lankhorst
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2 3/4] drm/xe: Wire up dmem cgroup reclaim for VRAM manager
2026-04-28 10:02 ` Thomas Hellström
@ 2026-04-28 10:03 ` Maarten Lankhorst
0 siblings, 0 replies; 13+ messages in thread
From: Maarten Lankhorst @ 2026-04-28 10:03 UTC (permalink / raw)
To: Thomas Hellström, intel-xe
Cc: Natalie Vock, Johannes Weiner, Tejun Heo, Michal Koutný,
cgroups, Huang Rui, Matthew Brost, Matthew Auld, Maxime Ripard,
Thomas Zimmermann, Simona Vetter, David Airlie,
Christian König, Alex Deucher, Rodrigo Vivi, dri-devel,
amd-gfx, linux-kernel
Hey,
Den 2026-04-28 kl. 12:02, skrev Thomas Hellström:
> On Tue, 2026-04-28 at 11:50 +0200, Maarten Lankhorst wrote:
>>
>>
>> Den 2026-04-28 kl. 09:31, skrev Thomas Hellström:
>>> Register the VRAM manager with the dmem cgroup reclaim
>>> infrastructure
>>> so that lowering dmem.max below current VRAM usage triggers TTM
>>> eviction rather than failing with -EBUSY.
>>>
>>> Assisted-by: GitHub Copilot:claude-sonnet-4.6
>>> Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
>>> ---
>>> drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 19 ++++++++++++-------
>>> 1 file changed, 12 insertions(+), 7 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
>>> b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
>>> index 5fd0d5506a7e..1bdcb3fee901 100644
>>> --- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
>>> +++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
>>> @@ -303,13 +303,6 @@ int __xe_ttm_vram_mgr_init(struct xe_device
>>> *xe, struct xe_ttm_vram_mgr *mgr,
>>> struct ttm_resource_manager *man = &mgr->manager;
>>> int err;
>>>
>>> - if (mem_type != XE_PL_STOLEN) {
>>> - const char *name = mem_type == XE_PL_VRAM0 ?
>>> "vram0" : "vram1";
>>> - man->cg = drmm_cgroup_register_region(&xe->drm,
>>> name, size);
>>> - if (IS_ERR(man->cg))
>>> - return PTR_ERR(man->cg);
>>> - }
>>> -
>>> man->func = &xe_ttm_vram_mgr_func;
>>> mgr->mem_type = mem_type;
>>> mutex_init(&mgr->lock);
>>> @@ -318,6 +311,18 @@ int __xe_ttm_vram_mgr_init(struct xe_device
>>> *xe, struct xe_ttm_vram_mgr *mgr,
>>> mgr->visible_avail = io_size;
>>>
>>> ttm_resource_manager_init(man, &xe->ttm, size);
>>> +
>>> + if (mem_type != XE_PL_STOLEN) {
>>> + const char *name = mem_type == XE_PL_VRAM0 ?
>>> "vram0" : "vram1";
>>> + struct dmem_cgroup_region *cg =
>>> + drmm_cgroup_register_region(&xe->drm,
>>> name, size);
>>> +
>>> + if (IS_ERR(cg))
>>> + return PTR_ERR(cg);
>>> +
>>> + ttm_resource_manager_set_dmem_region(man, cg);
>>> + }
>>> +
>>> err = gpu_buddy_init(&mgr->mm, man->size,
>>> default_page_size);
>>> if (err)
>>> return err;
>>
>> This patch will conflict with
>> https://patchwork.freedesktop.org/series/164694/ which removes
>> stolen support, can we merge that patch first while we wait for AMD
>> acks?
>
> Sure, np.
>
>>
>> Do I need an ack to get the series through drm-misc?
>
> Which series? The stolen support or this cgroup series?
This one, I think it might be easiest to just merge stolen through xe,
and then backmerge into drm-misc.
^ permalink raw reply [flat|nested] 13+ messages in thread
* ✗ Xe.CI.FULL: failure for Add reclaim to the dmem cgroup controller (rev2)
2026-04-28 7:31 [PATCH v2 0/4] Add reclaim to the dmem cgroup controller Thomas Hellström
` (6 preceding siblings ...)
2026-04-28 8:28 ` ✓ Xe.CI.BAT: " Patchwork
@ 2026-04-28 16:02 ` Patchwork
7 siblings, 0 replies; 13+ messages in thread
From: Patchwork @ 2026-04-28 16:02 UTC (permalink / raw)
To: Thomas Hellström; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 379 bytes --]
== Series Details ==
Series: Add reclaim to the dmem cgroup controller (rev2)
URL : https://patchwork.freedesktop.org/series/163970/
State : failure
== Summary ==
ERROR: The runconfig 'xe-4944-aea2c496abcf55b647c14fe720bfc4ea555aac6a_FULL' does not exist in the database
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-163970v2/index.html
[-- Attachment #2: Type: text/html, Size: 944 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2026-04-28 16:02 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-28 7:31 [PATCH v2 0/4] Add reclaim to the dmem cgroup controller Thomas Hellström
2026-04-28 7:31 ` [PATCH v2 1/4] cgroup/dmem: Add reclaim callback for lowering max below current usage Thomas Hellström
2026-04-28 7:31 ` [PATCH v2 2/4] drm/ttm: Hook up a cgroup-aware reclaim callback for the dmem controller Thomas Hellström
2026-04-28 7:31 ` [PATCH v2 3/4] drm/xe: Wire up dmem cgroup reclaim for VRAM manager Thomas Hellström
2026-04-28 9:38 ` Upadhyay, Tejas
2026-04-28 9:50 ` Maarten Lankhorst
2026-04-28 10:02 ` Thomas Hellström
2026-04-28 10:03 ` Maarten Lankhorst
2026-04-28 7:31 ` [PATCH v2 4/4] drm/amdgpu: " Thomas Hellström
2026-04-28 7:38 ` ✗ CI.checkpatch: warning for Add reclaim to the dmem cgroup controller (rev2) Patchwork
2026-04-28 7:39 ` ✓ CI.KUnit: success " Patchwork
2026-04-28 8:28 ` ✓ Xe.CI.BAT: " Patchwork
2026-04-28 16:02 ` ✗ Xe.CI.FULL: failure " Patchwork
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox