* [PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation
@ 2026-04-30 19:18 Matthew Brost
2026-04-30 19:18 ` [PATCH v4 1/6] mm: Wire up order in shrink_control Matthew Brost
` (11 more replies)
0 siblings, 12 replies; 24+ messages in thread
From: Matthew Brost @ 2026-04-30 19:18 UTC (permalink / raw)
To: intel-xe, dri-devel
Cc: Dave Chinner, Qi Zheng, Roman Gushchin, Johannes Weiner,
Shakeel Butt, Kairui Song, Barry Song, Axel Rasmussen,
Yuanchu Xie, Wei Xu, Tvrtko Ursulin, Thomas Hellström,
Carlos Santa, Christian Koenig, Huang Rui, Matthew Auld,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
Simona Vetter, Daniel Colascione, Andrew Morton,
David Hildenbrand, Lorenzo Stoakes, Liam R. Howlett,
Vlastimil Babka, Mike Rapoport, Suren Baghdasaryan, Michal Hocko,
linux-mm, linux-kernel
TTM allocations at higher orders can drive Xe into a pathological
reclaim loop when memory is fragmented:
kswapd → shrinker → eviction → rebind (exec ioctl) → repeat
In this state, reclaim is triggered despite substantial free memory,
but fails to produce contiguous higher-order pages. The Xe shrinker then
evicts active buffer objects, increasing faulting and rebind activity
and further feeding the loop. The result is high CPU overhead and poor
GPU forward progress.
This issue was first reported in [1] and independently observed
internally and by Google.
A simple reproducer is:
- Boot an iGPU system with mem=8G
- Launch 10 Chrome tabs running the WebGL aquarium demo
- Configure each tab with ~5k fish
Under this workload, ftrace shows a continuous loop of:
xe_shrinker_scan (kswapd)
xe_vma_rebind_exec
Performance degrades significantly, with each tab dropping to ~2 FPS on
PTL (Ubuntu 24.04).
At the same time, /proc/buddyinfo shows substantial free memory but no
higher-order availability. For example, the Normal zone:
Count: 4063 4595 3455 3400 3139 2762 2293 1655 643 0 0
This corresponds to ~2.8GB free memory, but no order-9 (2MB) blocks,
indicating severe fragmentation.
This series addresses the issue in two ways:
TTM: Restrict direct reclaim to beneficial_order. Larger allocations
use __GFP_NORETRY to fail quickly rather than triggering reclaim.
Xe: Introduce a heuristic in the shrinker to avoid eviction when
running under kswapd and the system appears memory-rich but
fragmented.
With these changes, the reclaim/eviction loop is eliminated. The same
workload improves to ~10 FPS per tab (Ubuntu 24.04) or ~15 FPS per tab
(Ubuntu 24.10), and kswapd activity subsides.
Buddyinfo after applying this series shows restored higher-order
availability:
Count: 8526 7067 3092 1959 1292 660 194 28 20 13 1
Matt
v2:
- Layer with core MM / TTM helpers (Thomas)
v4:
- Fix build (CI)
[1] https://patchwork.freedesktop.org/patch/716404/?series=164353&rev=1
Cc: Dave Chinner <david@fromorbit.com>
Cc: Qi Zheng <zhengqi.arch@bytedance.com>
Cc: Roman Gushchin <roman.gushchin@linux.dev>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Shakeel Butt <shakeel.butt@linux.dev>
Cc: Kairui Song <kasong@tencent.com>
Cc: Barry Song <baohua@kernel.org>
Cc: Axel Rasmussen <axelrasmussen@google.com>
Cc: Yuanchu Xie <yuanchu@google.com>
Cc: Wei Xu <weixugc@google.com>
Cc: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Carlos Santa <carlos.santa@intel.com>
Cc: Christian Koenig <christian.koenig@amd.com>
Cc: Huang Rui <ray.huang@amd.com>
Cc: Matthew Auld <matthew.auld@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Maxime Ripard <mripard@kernel.org>
Cc: Thomas Zimmermann <tzimmermann@suse.de>
Cc: David Airlie <airlied@gmail.com>
Cc: Simona Vetter <simona@ffwll.ch>
CC: dri-devel@lists.freedesktop.org
Cc: Daniel Colascione <dancol@dancol.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: David Hildenbrand <david@kernel.org>
Cc: Lorenzo Stoakes <ljs@kernel.org>
Cc: "Liam R. Howlett" <Liam.Howlett@oracle.com>
Cc: Vlastimil Babka <vbabka@kernel.org>
Cc: Mike Rapoport <rppt@kernel.org>
Cc: Suren Baghdasaryan <surenb@google.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: linux-mm@kvack.org
Cc: linux-kernel@vger.kernel.org
Matthew Brost (6):
mm: Wire up order in shrink_control
mm: Introduce zone_maybe_fragmented_in_shrinker()
drm/ttm: Issue direct reclaim at beneficial_order
drm/ttm: Introduce ttm_bo_shrink_kswap_maybe_fragmented()
drm/xe: Set TTM device beneficial_order to 9 (2M)
drm/xe: Avoid shrinker reclaim from kswapd under fragmentation
drivers/gpu/drm/ttm/ttm_bo_util.c | 38 +++++++++++++++++++++++++++++++
drivers/gpu/drm/ttm/ttm_pool.c | 4 ++--
drivers/gpu/drm/xe/xe_device.c | 3 ++-
drivers/gpu/drm/xe/xe_shrinker.c | 3 +++
include/drm/ttm/ttm_bo.h | 2 ++
include/linux/shrinker.h | 3 +++
include/linux/vmstat.h | 12 ++++++++++
mm/internal.h | 4 ++--
mm/shrinker.c | 13 +++++++----
mm/vmscan.c | 7 +++---
10 files changed, 76 insertions(+), 13 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH v4 1/6] mm: Wire up order in shrink_control
2026-04-30 19:18 [PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation Matthew Brost
@ 2026-04-30 19:18 ` Matthew Brost
2026-04-30 19:18 ` [PATCH v4 2/6] mm: Introduce zone_maybe_fragmented_in_shrinker() Matthew Brost
` (10 subsequent siblings)
11 siblings, 0 replies; 24+ messages in thread
From: Matthew Brost @ 2026-04-30 19:18 UTC (permalink / raw)
To: intel-xe, dri-devel
Cc: Andrew Morton, Dave Chinner, Qi Zheng, Roman Gushchin,
Muchun Song, David Hildenbrand, Lorenzo Stoakes, Liam R. Howlett,
Vlastimil Babka, Mike Rapoport, Suren Baghdasaryan, Michal Hocko,
Johannes Weiner, Shakeel Butt, Kairui Song, Barry Song,
Axel Rasmussen, Yuanchu Xie, Wei Xu, linux-mm, linux-kernel,
Thomas Hellström
Pass the allocation order through shrink_control so shrinkers have
visibility into the order that triggered reclaim.
This allows shrinkers to implement better heuristics, such as detecting
high-order allocation pressure or fragmentation and avoiding eviction
of working sets when reclaim is invoked from kswapd.
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Dave Chinner <david@fromorbit.com>
Cc: Qi Zheng <zhengqi.arch@bytedance.com>
Cc: Roman Gushchin <roman.gushchin@linux.dev>
Cc: Muchun Song <muchun.song@linux.dev>
Cc: David Hildenbrand <david@kernel.org>
Cc: Lorenzo Stoakes <ljs@kernel.org>
Cc: "Liam R. Howlett" <Liam.Howlett@oracle.com>
Cc: Vlastimil Babka <vbabka@kernel.org>
Cc: Mike Rapoport <rppt@kernel.org>
Cc: Suren Baghdasaryan <surenb@google.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Shakeel Butt <shakeel.butt@linux.dev>
Cc: Kairui Song <kasong@tencent.com>
Cc: Barry Song <baohua@kernel.org>
Cc: Axel Rasmussen <axelrasmussen@google.com>
Cc: Yuanchu Xie <yuanchu@google.com>
Cc: Wei Xu <weixugc@google.com>
Cc: linux-mm@kvack.org
Cc: linux-kernel@vger.kernel.org
Suggested-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
---
v4: Fix build without CONFIG_MEMCG (CI)
---
include/linux/shrinker.h | 3 +++
mm/internal.h | 4 ++--
mm/shrinker.c | 13 ++++++++-----
mm/vmscan.c | 7 ++++---
4 files changed, 17 insertions(+), 10 deletions(-)
diff --git a/include/linux/shrinker.h b/include/linux/shrinker.h
index 1a00be90d93a..7072f693b9be 100644
--- a/include/linux/shrinker.h
+++ b/include/linux/shrinker.h
@@ -37,6 +37,9 @@ struct shrink_control {
/* current node being shrunk (for NUMA aware shrinkers) */
int nid;
+ /* Allocation order we are currently trying to fulfil. */
+ s8 order;
+
/*
* How many objects scan_objects should scan and try to reclaim.
* This is reset before every call, so it is safe for callees
diff --git a/mm/internal.h b/mm/internal.h
index 5a2ddcf68e0b..ff8671dccf7b 100644
--- a/mm/internal.h
+++ b/mm/internal.h
@@ -1759,8 +1759,8 @@ void __meminit __init_single_page(struct page *page, unsigned long pfn,
void __meminit __init_page_from_nid(unsigned long pfn, int nid);
/* shrinker related functions */
-unsigned long shrink_slab(gfp_t gfp_mask, int nid, struct mem_cgroup *memcg,
- int priority);
+unsigned long shrink_slab(gfp_t gfp_mask, int nid, s8 order,
+ struct mem_cgroup *memcg, int priority);
int shmem_add_to_page_cache(struct folio *folio,
struct address_space *mapping,
diff --git a/mm/shrinker.c b/mm/shrinker.c
index 76b3f750cf65..c83f3b3daa08 100644
--- a/mm/shrinker.c
+++ b/mm/shrinker.c
@@ -466,7 +466,7 @@ static unsigned long do_shrink_slab(struct shrink_control *shrinkctl,
}
#ifdef CONFIG_MEMCG
-static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid,
+static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid, s8 order,
struct mem_cgroup *memcg, int priority)
{
struct shrinker_info *info;
@@ -528,6 +528,7 @@ static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid,
struct shrink_control sc = {
.gfp_mask = gfp_mask,
.nid = nid,
+ .order = order,
.memcg = memcg,
};
struct shrinker *shrinker;
@@ -587,7 +588,7 @@ static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid,
return freed;
}
#else /* !CONFIG_MEMCG */
-static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid,
+static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid, s8 order,
struct mem_cgroup *memcg, int priority)
{
return 0;
@@ -598,6 +599,7 @@ static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid,
* shrink_slab - shrink slab caches
* @gfp_mask: allocation context
* @nid: node whose slab caches to target
+ * @order: order of allocation
* @memcg: memory cgroup whose slab caches to target
* @priority: the reclaim priority
*
@@ -614,8 +616,8 @@ static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid,
*
* Returns the number of reclaimed slab objects.
*/
-unsigned long shrink_slab(gfp_t gfp_mask, int nid, struct mem_cgroup *memcg,
- int priority)
+unsigned long shrink_slab(gfp_t gfp_mask, int nid, s8 order,
+ struct mem_cgroup *memcg, int priority)
{
unsigned long ret, freed = 0;
struct shrinker *shrinker;
@@ -628,7 +630,7 @@ unsigned long shrink_slab(gfp_t gfp_mask, int nid, struct mem_cgroup *memcg,
* oom.
*/
if (!mem_cgroup_disabled() && !mem_cgroup_is_root(memcg))
- return shrink_slab_memcg(gfp_mask, nid, memcg, priority);
+ return shrink_slab_memcg(gfp_mask, nid, order, memcg, priority);
/*
* lockless algorithm of global shrink.
@@ -656,6 +658,7 @@ unsigned long shrink_slab(gfp_t gfp_mask, int nid, struct mem_cgroup *memcg,
struct shrink_control sc = {
.gfp_mask = gfp_mask,
.nid = nid,
+ .order = order,
.memcg = memcg,
};
diff --git a/mm/vmscan.c b/mm/vmscan.c
index bd1b1aa12581..a54d14ecad25 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -412,7 +412,7 @@ static unsigned long drop_slab_node(int nid)
memcg = mem_cgroup_iter(NULL, NULL, NULL);
do {
- freed += shrink_slab(GFP_KERNEL, nid, memcg, 0);
+ freed += shrink_slab(GFP_KERNEL, nid, 0, memcg, 0);
} while ((memcg = mem_cgroup_iter(NULL, memcg, NULL)) != NULL);
return freed;
@@ -5068,7 +5068,8 @@ static int shrink_one(struct lruvec *lruvec, struct scan_control *sc)
success = try_to_shrink_lruvec(lruvec, sc);
- shrink_slab(sc->gfp_mask, pgdat->node_id, memcg, sc->priority);
+ shrink_slab(sc->gfp_mask, pgdat->node_id, sc->order, memcg,
+ sc->priority);
if (!sc->proactive)
vmpressure(sc->gfp_mask, memcg, false, sc->nr_scanned - scanned,
@@ -6170,7 +6171,7 @@ static void shrink_node_memcgs(pg_data_t *pgdat, struct scan_control *sc)
shrink_lruvec(lruvec, sc);
- shrink_slab(sc->gfp_mask, pgdat->node_id, memcg,
+ shrink_slab(sc->gfp_mask, pgdat->node_id, sc->order, memcg,
sc->priority);
/* Record the group's reclaim efficiency */
--
2.34.1
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v4 2/6] mm: Introduce zone_maybe_fragmented_in_shrinker()
2026-04-30 19:18 [PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation Matthew Brost
2026-04-30 19:18 ` [PATCH v4 1/6] mm: Wire up order in shrink_control Matthew Brost
@ 2026-04-30 19:18 ` Matthew Brost
2026-05-01 0:50 ` Santa, Carlos
2026-05-01 19:08 ` PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation Kenneth Crudup
2026-04-30 19:18 ` [PATCH v4 3/6] drm/ttm: Issue direct reclaim at beneficial_order Matthew Brost
` (9 subsequent siblings)
11 siblings, 2 replies; 24+ messages in thread
From: Matthew Brost @ 2026-04-30 19:18 UTC (permalink / raw)
To: intel-xe, dri-devel
Cc: Thomas Hellström, Andrew Morton, David Hildenbrand,
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka, Mike Rapoport,
Suren Baghdasaryan, Michal Hocko, linux-mm, linux-kernel
Introduce zone_maybe_fragmented_in_shrinker() as a lightweight helper to
allow subsystems to make coarse decisions about reclaim behavior in the
presence of likely fragmentation.
The helper implements a simple heuristic: if the number of free pages
in a zone exceeds twice the high watermark, the zone is considered to
have ample free memory and allocation failures are more likely due to
fragmentation than overall memory pressure.
This is intentionally imprecise and is not meant to replace the core
MM compaction or fragmentation accounting logic. Instead, it provides
a cheap signal for callers (e.g., shrinkers) that wish to avoid
overly aggressive reclaim when sufficient free memory exists but
high-order allocations may still fail.
No functional changes; this is a preparatory helper for future users.
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: David Hildenbrand <david@kernel.org>
Cc: Lorenzo Stoakes <ljs@kernel.org>
Cc: "Liam R. Howlett" <Liam.Howlett@oracle.com>
Cc: Vlastimil Babka <vbabka@kernel.org>
Cc: Mike Rapoport <rppt@kernel.org>
Cc: Suren Baghdasaryan <surenb@google.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: linux-mm@kvack.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
---
v3: s/zone_appear_fragmented/zone_maybe_fragmented_in_shrinker (David
Hildenbrand)
---
include/linux/vmstat.h | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/include/linux/vmstat.h b/include/linux/vmstat.h
index 3c9c266cf782..1ad48f70c9d9 100644
--- a/include/linux/vmstat.h
+++ b/include/linux/vmstat.h
@@ -483,6 +483,18 @@ static inline const char *zone_stat_name(enum zone_stat_item item)
return vmstat_text[item];
}
+static inline bool zone_maybe_fragmented_in_shrinker(struct zone *zone)
+{
+ /*
+ * Simple heuristic: if the number of free pages is more than twice the
+ * high watermark, this may suggest that the zone is heavily fragmented.
+ * When called from a shrinker, aggressively evicting memory in this case
+ * may do more harm to overall system performance than good.
+ */
+ return zone_page_state(zone, NR_FREE_PAGES) >
+ high_wmark_pages(zone) * 2;
+}
+
#ifdef CONFIG_NUMA
static inline const char *numa_stat_name(enum numa_stat_item item)
{
--
2.34.1
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v4 3/6] drm/ttm: Issue direct reclaim at beneficial_order
2026-04-30 19:18 [PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation Matthew Brost
2026-04-30 19:18 ` [PATCH v4 1/6] mm: Wire up order in shrink_control Matthew Brost
2026-04-30 19:18 ` [PATCH v4 2/6] mm: Introduce zone_maybe_fragmented_in_shrinker() Matthew Brost
@ 2026-04-30 19:18 ` Matthew Brost
2026-05-04 7:16 ` Christian König
2026-04-30 19:18 ` [PATCH v4 4/6] drm/ttm: Introduce ttm_bo_shrink_kswap_maybe_fragmented() Matthew Brost
` (8 subsequent siblings)
11 siblings, 1 reply; 24+ messages in thread
From: Matthew Brost @ 2026-04-30 19:18 UTC (permalink / raw)
To: intel-xe, dri-devel
Cc: Tvrtko Ursulin, Thomas Hellström, Carlos Santa,
Christian Koenig, Huang Rui, Matthew Auld, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter,
Daniel Colascione, Andi Shyti
Triggering kswap at an order higher than beneficial_order makes little
sense, as the driver has already indicated the optimal order at which
reclaim is effective. Similarly, issuing direct reclaim or triggering
kswap at a lower order than beneficial_order is ineffective, since the
driver does not benefit from reclaiming lower-order pages.
As a result, direct reclaim should only be issued with __GFP_NORETRY at
exactly beneficial_order, or as a fallback, direct reclaim without
__GFP_NORETRY at order 0 when failure is not an option.
Cc: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Carlos Santa <carlos.santa@intel.com>
Cc: Christian Koenig <christian.koenig@amd.com>
Cc: Huang Rui <ray.huang@amd.com>
Cc: Matthew Auld <matthew.auld@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Maxime Ripard <mripard@kernel.org>
Cc: Thomas Zimmermann <tzimmermann@suse.de>
Cc: David Airlie <airlied@gmail.com>
Cc: Simona Vetter <simona@ffwll.ch>
CC: dri-devel@lists.freedesktop.org
Cc: Daniel Colascione <dancol@dancol.org>
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Christian Koenig <christian.koenig@amd.com>
Reviewed-by: Andi Shyti <andi.shyti@linux.intel.com>
---
drivers/gpu/drm/ttm/ttm_pool.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/ttm/ttm_pool.c b/drivers/gpu/drm/ttm/ttm_pool.c
index 26a3689e5fd9..8425dbcc6c68 100644
--- a/drivers/gpu/drm/ttm/ttm_pool.c
+++ b/drivers/gpu/drm/ttm/ttm_pool.c
@@ -165,8 +165,8 @@ static struct page *ttm_pool_alloc_page(struct ttm_pool *pool, gfp_t gfp_flags,
* Do not add latency to the allocation path for allocations orders
* device tolds us do not bring them additional performance gains.
*/
- if (beneficial_order && order > beneficial_order)
- gfp_flags &= ~__GFP_DIRECT_RECLAIM;
+ if (order && beneficial_order && order != beneficial_order)
+ gfp_flags &= ~__GFP_RECLAIM;
if (!ttm_pool_uses_dma_alloc(pool)) {
p = alloc_pages_node(pool->nid, gfp_flags, order);
--
2.34.1
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v4 4/6] drm/ttm: Introduce ttm_bo_shrink_kswap_maybe_fragmented()
2026-04-30 19:18 [PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation Matthew Brost
` (2 preceding siblings ...)
2026-04-30 19:18 ` [PATCH v4 3/6] drm/ttm: Issue direct reclaim at beneficial_order Matthew Brost
@ 2026-04-30 19:18 ` Matthew Brost
2026-04-30 19:18 ` [PATCH v4 5/6] drm/xe: Set TTM device beneficial_order to 9 (2M) Matthew Brost
` (7 subsequent siblings)
11 siblings, 0 replies; 24+ messages in thread
From: Matthew Brost @ 2026-04-30 19:18 UTC (permalink / raw)
To: intel-xe, dri-devel
Cc: Thomas Hellström, Carlos Santa, Christian Koenig, Huang Rui,
Matthew Auld, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
David Airlie, Simona Vetter, Daniel Colascione
Introduce ttm_bo_shrink_kswap_maybe_fragmented() to allow TTM users to
distinguish background reclaim from kswapd that is likely driven by
high-order allocation failures under fragmentation.
The helper returns true when:
- order of shrinker invocation is zero
- reclaim is running in kswapd, and
- the target node is valid, and
- one of the relevant zones reports free pages significantly above
its high watermark (via zone_appears_fragmented()).
This provides a coarse signal that overall free memory is available,
and that reclaim activity may be driven by fragmentation rather than
true memory pressure.
The intent is to allow drivers to adjust shrinker behavior in this
case, for example by preferring purgeable or low-value objects instead
of aggressively evicting active working sets in the background reclaim
path.
The heuristic is intentionally simple and conservative, and is not
intended to replace core MM fragmentation or compaction decisions.
No functional change; this is a preparatory helper for TTM users.
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Carlos Santa <carlos.santa@intel.com>
Cc: Christian Koenig <christian.koenig@amd.com>
Cc: Huang Rui <ray.huang@amd.com>
Cc: Matthew Auld <matthew.auld@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Maxime Ripard <mripard@kernel.org>
Cc: Thomas Zimmermann <tzimmermann@suse.de>
Cc: David Airlie <airlied@gmail.com>
Cc: Simona Vetter <simona@ffwll.ch>
CC: dri-devel@lists.freedesktop.org
Cc: Daniel Colascione <dancol@dancol.org>
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
---
v3:
- s/ttm_bo_shrink_kswap_fragmented/ttm_bo_shrink_kswap_maybe_fragmented
(Andi)
- Wire in order (Thomas)
---
drivers/gpu/drm/ttm/ttm_bo_util.c | 38 +++++++++++++++++++++++++++++++
include/drm/ttm/ttm_bo.h | 2 ++
2 files changed, 40 insertions(+)
diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c
index f83b7d5ec6c6..a6a4255c10cc 100644
--- a/drivers/gpu/drm/ttm/ttm_bo_util.c
+++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
@@ -1169,3 +1169,41 @@ bool ttm_bo_shrink_avoid_wait(void)
return !current_is_kswapd();
}
EXPORT_SYMBOL(ttm_bo_shrink_avoid_wait);
+
+/**
+ * ttm_bo_shrink_kswap_maybe_fragmented() - Whether in kswap and memory might be
+ * fragmented
+ * @nid: current node being shrunk
+ * @order: order of shrinker invocation
+ *
+ * Return: true if in kswap and memory appears fragmented, false is not.
+ */
+bool ttm_bo_shrink_kswap_maybe_fragmented(int nid, s8 order)
+{
+ enum zone_type zone_type;
+
+ if (!order)
+ return false;
+
+ if (!current_is_kswapd())
+ return false;
+
+ if (!numa_valid_node(nid))
+ return false;
+
+#if IS_ENABLED(CONFIG_ZONE_DMA32)
+ zone_type = ZONE_DMA32;
+#else
+ zone_type = ZONE_NORMAL;
+#endif
+
+ for (; zone_type <= ZONE_NORMAL; ++zone_type) {
+ struct zone *zone = &NODE_DATA(nid)->node_zones[zone_type];
+
+ if (zone_maybe_fragmented_in_shrinker(zone))
+ return true;
+ }
+
+ return false;
+}
+EXPORT_SYMBOL(ttm_bo_shrink_kswap_maybe_fragmented);
diff --git a/include/drm/ttm/ttm_bo.h b/include/drm/ttm/ttm_bo.h
index 8310bc3d55f9..4d00f9aa90a1 100644
--- a/include/drm/ttm/ttm_bo.h
+++ b/include/drm/ttm/ttm_bo.h
@@ -262,6 +262,8 @@ bool ttm_bo_shrink_suitable(struct ttm_buffer_object *bo, struct ttm_operation_c
bool ttm_bo_shrink_avoid_wait(void);
+bool ttm_bo_shrink_kswap_maybe_fragmented(int nid, s8 order);
+
/**
* ttm_bo_reserve:
*
--
2.34.1
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v4 5/6] drm/xe: Set TTM device beneficial_order to 9 (2M)
2026-04-30 19:18 [PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation Matthew Brost
` (3 preceding siblings ...)
2026-04-30 19:18 ` [PATCH v4 4/6] drm/ttm: Introduce ttm_bo_shrink_kswap_maybe_fragmented() Matthew Brost
@ 2026-04-30 19:18 ` Matthew Brost
2026-04-30 19:18 ` [PATCH v4 6/6] drm/xe: Avoid shrinker reclaim from kswapd under fragmentation Matthew Brost
` (6 subsequent siblings)
11 siblings, 0 replies; 24+ messages in thread
From: Matthew Brost @ 2026-04-30 19:18 UTC (permalink / raw)
To: intel-xe, dri-devel
Cc: Thomas Hellström, Carlos Santa, Matthew Auld, Andi Shyti
Set the TTM device beneficial_order to 9 (2M), which is the sweet
spot for Xe when attempting reclaim on system memory BOs, as it matches
the large GPU page size. This ensures reclaim is attempted at the most
effective order for the driver.
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Carlos Santa <carlos.santa@intel.com>
Cc: Matthew Auld <matthew.auld@intel.com>
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Andi Shyti <andi.shyti@linux.intel.com>
---
drivers/gpu/drm/xe/xe_device.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index 4b45b617a039..3f719ab08d1c 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -500,7 +500,8 @@ struct xe_device *xe_device_create(struct pci_dev *pdev,
err = ttm_device_init(&xe->ttm, &xe_ttm_funcs, xe->drm.dev,
xe->drm.anon_inode->i_mapping,
- xe->drm.vma_offset_manager, 0);
+ xe->drm.vma_offset_manager,
+ TTM_ALLOCATION_POOL_BENEFICIAL_ORDER(get_order(SZ_2M)));
if (WARN_ON(err))
return ERR_PTR(err);
--
2.34.1
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v4 6/6] drm/xe: Avoid shrinker reclaim from kswapd under fragmentation
2026-04-30 19:18 [PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation Matthew Brost
` (4 preceding siblings ...)
2026-04-30 19:18 ` [PATCH v4 5/6] drm/xe: Set TTM device beneficial_order to 9 (2M) Matthew Brost
@ 2026-04-30 19:18 ` Matthew Brost
2026-04-30 20:04 ` ✗ CI.checkpatch: warning for mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation (rev3) Patchwork
` (5 subsequent siblings)
11 siblings, 0 replies; 24+ messages in thread
From: Matthew Brost @ 2026-04-30 19:18 UTC (permalink / raw)
To: intel-xe, dri-devel; +Cc: Thomas Hellström, Carlos Santa, Matthew Auld
When the Xe shrinker is invoked from kswapd, a large amount of free
memory in usable zones relative to the high watermark is a strong
signal that reclaim is being driven by fragmentation rather than true
memory pressure.
In this case, shrinking Xe memory is unlikely to help kswapd make
forward progress. Instead it can evict active GPU memory despite the
system still having substantial free memory, increasing residency churn
and reducing GPU forward progress.
Detect this case and bail out early from the Xe shrinker when running in
kswapd, shrinker invocation is a higher order, and any usable zone has
more than 2x its high watermark free.
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Carlos Santa <carlos.santa@intel.com>
Cc: Matthew Auld <matthew.auld@intel.com>
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
---
v3:
- Wire in order to heuristic (Thomas)
---
drivers/gpu/drm/xe/xe_shrinker.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_shrinker.c b/drivers/gpu/drm/xe/xe_shrinker.c
index 83374cd57660..792e0e216442 100644
--- a/drivers/gpu/drm/xe/xe_shrinker.c
+++ b/drivers/gpu/drm/xe/xe_shrinker.c
@@ -236,6 +236,9 @@ static unsigned long xe_shrinker_scan(struct shrinker *shrink, struct shrink_con
if (nr_scanned >= nr_to_scan || !can_backup)
goto out;
+ if (ttm_bo_shrink_kswap_maybe_fragmented(sc->nid, sc->order))
+ goto out;
+
/* If we didn't wake before, try to do it now if needed. */
if (!runtime_pm)
runtime_pm = xe_shrinker_runtime_pm_get(shrinker, true, 0, can_backup);
--
2.34.1
^ permalink raw reply related [flat|nested] 24+ messages in thread
* ✗ CI.checkpatch: warning for mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation (rev3)
2026-04-30 19:18 [PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation Matthew Brost
` (5 preceding siblings ...)
2026-04-30 19:18 ` [PATCH v4 6/6] drm/xe: Avoid shrinker reclaim from kswapd under fragmentation Matthew Brost
@ 2026-04-30 20:04 ` Patchwork
2026-04-30 20:06 ` ✓ CI.KUnit: success " Patchwork
` (4 subsequent siblings)
11 siblings, 0 replies; 24+ messages in thread
From: Patchwork @ 2026-04-30 20:04 UTC (permalink / raw)
To: Matthew Brost; +Cc: intel-xe
== Series Details ==
Series: mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation (rev3)
URL : https://patchwork.freedesktop.org/series/165329/
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 baa0e85108cdb5402d65fe0838430a8e98ecf188
Author: Matthew Brost <matthew.brost@intel.com>
Date: Thu Apr 30 12:18:09 2026 -0700
drm/xe: Avoid shrinker reclaim from kswapd under fragmentation
When the Xe shrinker is invoked from kswapd, a large amount of free
memory in usable zones relative to the high watermark is a strong
signal that reclaim is being driven by fragmentation rather than true
memory pressure.
In this case, shrinking Xe memory is unlikely to help kswapd make
forward progress. Instead it can evict active GPU memory despite the
system still having substantial free memory, increasing residency churn
and reducing GPU forward progress.
Detect this case and bail out early from the Xe shrinker when running in
kswapd, shrinker invocation is a higher order, and any usable zone has
more than 2x its high watermark free.
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Carlos Santa <carlos.santa@intel.com>
Cc: Matthew Auld <matthew.auld@intel.com>
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
+ /mt/dim checkpatch 6472756e8384e3945f12b6726dd9dc1ac12f3bb4 drm-intel
f0c13668a40c mm: Wire up order in shrink_control
-:79: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#79: FILE: mm/shrinker.c:470:
+static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid, s8 order,
struct mem_cgroup *memcg, int priority)
-:96: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#96: FILE: mm/shrinker.c:592:
+static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid, s8 order,
struct mem_cgroup *memcg, int priority)
total: 0 errors, 0 warnings, 2 checks, 99 lines checked
5377446e132a mm: Introduce zone_maybe_fragmented_in_shrinker()
5dc5b8f49f0b drm/ttm: Issue direct reclaim at beneficial_order
b8ae9b5049f4 drm/ttm: Introduce ttm_bo_shrink_kswap_maybe_fragmented()
7150b7681ccd drm/xe: Set TTM device beneficial_order to 9 (2M)
baa0e85108cd drm/xe: Avoid shrinker reclaim from kswapd under fragmentation
^ permalink raw reply [flat|nested] 24+ messages in thread
* ✓ CI.KUnit: success for mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation (rev3)
2026-04-30 19:18 [PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation Matthew Brost
` (6 preceding siblings ...)
2026-04-30 20:04 ` ✗ CI.checkpatch: warning for mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation (rev3) Patchwork
@ 2026-04-30 20:06 ` Patchwork
2026-04-30 21:15 ` ✓ Xe.CI.BAT: " Patchwork
` (3 subsequent siblings)
11 siblings, 0 replies; 24+ messages in thread
From: Patchwork @ 2026-04-30 20:06 UTC (permalink / raw)
To: Matthew Brost; +Cc: intel-xe
== Series Details ==
Series: mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation (rev3)
URL : https://patchwork.freedesktop.org/series/165329/
State : success
== Summary ==
+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[20:04:52] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[20:04:56] 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
[20:05:28] Starting KUnit Kernel (1/1)...
[20:05:28] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[20:05:28] ================== guc_buf (11 subtests) ===================
[20:05:28] [PASSED] test_smallest
[20:05:28] [PASSED] test_largest
[20:05:28] [PASSED] test_granular
[20:05:28] [PASSED] test_unique
[20:05:28] [PASSED] test_overlap
[20:05:28] [PASSED] test_reusable
[20:05:28] [PASSED] test_too_big
[20:05:28] [PASSED] test_flush
[20:05:28] [PASSED] test_lookup
[20:05:28] [PASSED] test_data
[20:05:28] [PASSED] test_class
[20:05:28] ===================== [PASSED] guc_buf =====================
[20:05:28] =================== guc_dbm (7 subtests) ===================
[20:05:28] [PASSED] test_empty
[20:05:28] [PASSED] test_default
[20:05:28] ======================== test_size ========================
[20:05:28] [PASSED] 4
[20:05:28] [PASSED] 8
[20:05:28] [PASSED] 32
[20:05:28] [PASSED] 256
[20:05:28] ==================== [PASSED] test_size ====================
[20:05:28] ======================= test_reuse ========================
[20:05:28] [PASSED] 4
[20:05:28] [PASSED] 8
[20:05:28] [PASSED] 32
[20:05:28] [PASSED] 256
[20:05:28] =================== [PASSED] test_reuse ====================
[20:05:28] =================== test_range_overlap ====================
[20:05:28] [PASSED] 4
[20:05:28] [PASSED] 8
[20:05:28] [PASSED] 32
[20:05:28] [PASSED] 256
[20:05:28] =============== [PASSED] test_range_overlap ================
[20:05:28] =================== test_range_compact ====================
[20:05:28] [PASSED] 4
[20:05:28] [PASSED] 8
[20:05:28] [PASSED] 32
[20:05:28] [PASSED] 256
[20:05:28] =============== [PASSED] test_range_compact ================
[20:05:28] ==================== test_range_spare =====================
[20:05:28] [PASSED] 4
[20:05:28] [PASSED] 8
[20:05:28] [PASSED] 32
[20:05:28] [PASSED] 256
[20:05:28] ================ [PASSED] test_range_spare =================
[20:05:28] ===================== [PASSED] guc_dbm =====================
[20:05:28] =================== guc_idm (6 subtests) ===================
[20:05:28] [PASSED] bad_init
[20:05:28] [PASSED] no_init
[20:05:28] [PASSED] init_fini
[20:05:28] [PASSED] check_used
[20:05:28] [PASSED] check_quota
[20:05:28] [PASSED] check_all
[20:05:28] ===================== [PASSED] guc_idm =====================
[20:05:28] ================== no_relay (3 subtests) ===================
[20:05:28] [PASSED] xe_drops_guc2pf_if_not_ready
[20:05:28] [PASSED] xe_drops_guc2vf_if_not_ready
[20:05:28] [PASSED] xe_rejects_send_if_not_ready
[20:05:28] ==================== [PASSED] no_relay =====================
[20:05:28] ================== pf_relay (14 subtests) ==================
[20:05:28] [PASSED] pf_rejects_guc2pf_too_short
[20:05:28] [PASSED] pf_rejects_guc2pf_too_long
[20:05:28] [PASSED] pf_rejects_guc2pf_no_payload
[20:05:28] [PASSED] pf_fails_no_payload
[20:05:28] [PASSED] pf_fails_bad_origin
[20:05:28] [PASSED] pf_fails_bad_type
[20:05:28] [PASSED] pf_txn_reports_error
[20:05:28] [PASSED] pf_txn_sends_pf2guc
[20:05:28] [PASSED] pf_sends_pf2guc
[20:05:28] [SKIPPED] pf_loopback_nop
[20:05:28] [SKIPPED] pf_loopback_echo
[20:05:28] [SKIPPED] pf_loopback_fail
[20:05:28] [SKIPPED] pf_loopback_busy
[20:05:28] [SKIPPED] pf_loopback_retry
[20:05:28] ==================== [PASSED] pf_relay =====================
[20:05:28] ================== vf_relay (3 subtests) ===================
[20:05:28] [PASSED] vf_rejects_guc2vf_too_short
[20:05:28] [PASSED] vf_rejects_guc2vf_too_long
[20:05:28] [PASSED] vf_rejects_guc2vf_no_payload
[20:05:28] ==================== [PASSED] vf_relay =====================
[20:05:28] ================ pf_gt_config (9 subtests) =================
[20:05:28] [PASSED] fair_contexts_1vf
[20:05:28] [PASSED] fair_doorbells_1vf
[20:05:28] [PASSED] fair_ggtt_1vf
[20:05:28] ====================== fair_vram_1vf ======================
[20:05:28] [PASSED] 3.50 GiB
[20:05:28] [PASSED] 11.5 GiB
[20:05:28] [PASSED] 15.5 GiB
[20:05:28] [PASSED] 31.5 GiB
[20:05:28] [PASSED] 63.5 GiB
[20:05:28] [PASSED] 1.91 GiB
[20:05:28] ================== [PASSED] fair_vram_1vf ==================
[20:05:28] ================ fair_vram_1vf_admin_only =================
[20:05:28] [PASSED] 3.50 GiB
[20:05:28] [PASSED] 11.5 GiB
[20:05:28] [PASSED] 15.5 GiB
[20:05:28] [PASSED] 31.5 GiB
[20:05:28] [PASSED] 63.5 GiB
[20:05:28] [PASSED] 1.91 GiB
[20:05:28] ============ [PASSED] fair_vram_1vf_admin_only =============
[20:05:28] ====================== fair_contexts ======================
[20:05:28] [PASSED] 1 VF
[20:05:28] [PASSED] 2 VFs
[20:05:28] [PASSED] 3 VFs
[20:05:28] [PASSED] 4 VFs
[20:05:28] [PASSED] 5 VFs
[20:05:28] [PASSED] 6 VFs
[20:05:28] [PASSED] 7 VFs
[20:05:28] [PASSED] 8 VFs
[20:05:28] [PASSED] 9 VFs
[20:05:28] [PASSED] 10 VFs
[20:05:28] [PASSED] 11 VFs
[20:05:28] [PASSED] 12 VFs
[20:05:28] [PASSED] 13 VFs
[20:05:28] [PASSED] 14 VFs
[20:05:28] [PASSED] 15 VFs
[20:05:28] [PASSED] 16 VFs
[20:05:28] [PASSED] 17 VFs
[20:05:28] [PASSED] 18 VFs
[20:05:28] [PASSED] 19 VFs
[20:05:28] [PASSED] 20 VFs
[20:05:28] [PASSED] 21 VFs
[20:05:28] [PASSED] 22 VFs
[20:05:28] [PASSED] 23 VFs
[20:05:28] [PASSED] 24 VFs
[20:05:28] [PASSED] 25 VFs
[20:05:28] [PASSED] 26 VFs
[20:05:28] [PASSED] 27 VFs
[20:05:28] [PASSED] 28 VFs
[20:05:28] [PASSED] 29 VFs
[20:05:28] [PASSED] 30 VFs
[20:05:28] [PASSED] 31 VFs
[20:05:28] [PASSED] 32 VFs
[20:05:28] [PASSED] 33 VFs
[20:05:28] [PASSED] 34 VFs
[20:05:28] [PASSED] 35 VFs
[20:05:28] [PASSED] 36 VFs
[20:05:28] [PASSED] 37 VFs
[20:05:28] [PASSED] 38 VFs
[20:05:28] [PASSED] 39 VFs
[20:05:28] [PASSED] 40 VFs
[20:05:28] [PASSED] 41 VFs
[20:05:28] [PASSED] 42 VFs
[20:05:28] [PASSED] 43 VFs
[20:05:28] [PASSED] 44 VFs
[20:05:28] [PASSED] 45 VFs
[20:05:28] [PASSED] 46 VFs
[20:05:28] [PASSED] 47 VFs
[20:05:28] [PASSED] 48 VFs
[20:05:28] [PASSED] 49 VFs
[20:05:28] [PASSED] 50 VFs
[20:05:28] [PASSED] 51 VFs
[20:05:28] [PASSED] 52 VFs
[20:05:28] [PASSED] 53 VFs
[20:05:28] [PASSED] 54 VFs
[20:05:28] [PASSED] 55 VFs
[20:05:28] [PASSED] 56 VFs
[20:05:28] [PASSED] 57 VFs
[20:05:28] [PASSED] 58 VFs
[20:05:28] [PASSED] 59 VFs
[20:05:28] [PASSED] 60 VFs
[20:05:28] [PASSED] 61 VFs
[20:05:28] [PASSED] 62 VFs
[20:05:28] [PASSED] 63 VFs
[20:05:28] ================== [PASSED] fair_contexts ==================
[20:05:28] ===================== fair_doorbells ======================
[20:05:28] [PASSED] 1 VF
[20:05:28] [PASSED] 2 VFs
[20:05:28] [PASSED] 3 VFs
[20:05:28] [PASSED] 4 VFs
[20:05:28] [PASSED] 5 VFs
[20:05:28] [PASSED] 6 VFs
[20:05:28] [PASSED] 7 VFs
[20:05:28] [PASSED] 8 VFs
[20:05:28] [PASSED] 9 VFs
[20:05:28] [PASSED] 10 VFs
[20:05:28] [PASSED] 11 VFs
[20:05:28] [PASSED] 12 VFs
[20:05:28] [PASSED] 13 VFs
[20:05:28] [PASSED] 14 VFs
[20:05:28] [PASSED] 15 VFs
[20:05:28] [PASSED] 16 VFs
[20:05:28] [PASSED] 17 VFs
[20:05:28] [PASSED] 18 VFs
[20:05:28] [PASSED] 19 VFs
[20:05:28] [PASSED] 20 VFs
[20:05:28] [PASSED] 21 VFs
[20:05:28] [PASSED] 22 VFs
[20:05:28] [PASSED] 23 VFs
[20:05:28] [PASSED] 24 VFs
[20:05:28] [PASSED] 25 VFs
[20:05:28] [PASSED] 26 VFs
[20:05:28] [PASSED] 27 VFs
[20:05:28] [PASSED] 28 VFs
[20:05:28] [PASSED] 29 VFs
[20:05:28] [PASSED] 30 VFs
[20:05:28] [PASSED] 31 VFs
[20:05:28] [PASSED] 32 VFs
[20:05:28] [PASSED] 33 VFs
[20:05:28] [PASSED] 34 VFs
[20:05:28] [PASSED] 35 VFs
[20:05:28] [PASSED] 36 VFs
[20:05:28] [PASSED] 37 VFs
[20:05:28] [PASSED] 38 VFs
[20:05:28] [PASSED] 39 VFs
[20:05:28] [PASSED] 40 VFs
[20:05:28] [PASSED] 41 VFs
[20:05:28] [PASSED] 42 VFs
[20:05:28] [PASSED] 43 VFs
[20:05:28] [PASSED] 44 VFs
[20:05:28] [PASSED] 45 VFs
[20:05:28] [PASSED] 46 VFs
[20:05:28] [PASSED] 47 VFs
[20:05:28] [PASSED] 48 VFs
[20:05:28] [PASSED] 49 VFs
[20:05:28] [PASSED] 50 VFs
[20:05:28] [PASSED] 51 VFs
[20:05:28] [PASSED] 52 VFs
[20:05:28] [PASSED] 53 VFs
[20:05:28] [PASSED] 54 VFs
[20:05:28] [PASSED] 55 VFs
[20:05:28] [PASSED] 56 VFs
[20:05:28] [PASSED] 57 VFs
[20:05:28] [PASSED] 58 VFs
[20:05:28] [PASSED] 59 VFs
[20:05:28] [PASSED] 60 VFs
[20:05:28] [PASSED] 61 VFs
[20:05:28] [PASSED] 62 VFs
[20:05:28] [PASSED] 63 VFs
[20:05:28] ================= [PASSED] fair_doorbells ==================
[20:05:28] ======================== fair_ggtt ========================
[20:05:28] [PASSED] 1 VF
[20:05:28] [PASSED] 2 VFs
[20:05:28] [PASSED] 3 VFs
[20:05:28] [PASSED] 4 VFs
[20:05:28] [PASSED] 5 VFs
[20:05:28] [PASSED] 6 VFs
[20:05:28] [PASSED] 7 VFs
[20:05:28] [PASSED] 8 VFs
[20:05:28] [PASSED] 9 VFs
[20:05:28] [PASSED] 10 VFs
[20:05:28] [PASSED] 11 VFs
[20:05:28] [PASSED] 12 VFs
[20:05:28] [PASSED] 13 VFs
[20:05:28] [PASSED] 14 VFs
[20:05:28] [PASSED] 15 VFs
[20:05:28] [PASSED] 16 VFs
[20:05:28] [PASSED] 17 VFs
[20:05:28] [PASSED] 18 VFs
[20:05:28] [PASSED] 19 VFs
[20:05:28] [PASSED] 20 VFs
[20:05:28] [PASSED] 21 VFs
[20:05:28] [PASSED] 22 VFs
[20:05:28] [PASSED] 23 VFs
[20:05:28] [PASSED] 24 VFs
[20:05:28] [PASSED] 25 VFs
[20:05:28] [PASSED] 26 VFs
[20:05:28] [PASSED] 27 VFs
[20:05:28] [PASSED] 28 VFs
[20:05:28] [PASSED] 29 VFs
[20:05:28] [PASSED] 30 VFs
[20:05:28] [PASSED] 31 VFs
[20:05:28] [PASSED] 32 VFs
[20:05:28] [PASSED] 33 VFs
[20:05:28] [PASSED] 34 VFs
[20:05:28] [PASSED] 35 VFs
[20:05:28] [PASSED] 36 VFs
[20:05:28] [PASSED] 37 VFs
[20:05:28] [PASSED] 38 VFs
[20:05:28] [PASSED] 39 VFs
[20:05:28] [PASSED] 40 VFs
[20:05:28] [PASSED] 41 VFs
[20:05:28] [PASSED] 42 VFs
[20:05:28] [PASSED] 43 VFs
[20:05:28] [PASSED] 44 VFs
[20:05:28] [PASSED] 45 VFs
[20:05:28] [PASSED] 46 VFs
[20:05:28] [PASSED] 47 VFs
[20:05:28] [PASSED] 48 VFs
[20:05:28] [PASSED] 49 VFs
[20:05:28] [PASSED] 50 VFs
[20:05:28] [PASSED] 51 VFs
[20:05:28] [PASSED] 52 VFs
[20:05:28] [PASSED] 53 VFs
[20:05:28] [PASSED] 54 VFs
[20:05:28] [PASSED] 55 VFs
[20:05:28] [PASSED] 56 VFs
[20:05:28] [PASSED] 57 VFs
[20:05:28] [PASSED] 58 VFs
[20:05:28] [PASSED] 59 VFs
[20:05:28] [PASSED] 60 VFs
[20:05:28] [PASSED] 61 VFs
[20:05:28] [PASSED] 62 VFs
[20:05:28] [PASSED] 63 VFs
[20:05:28] ==================== [PASSED] fair_ggtt ====================
[20:05:28] ======================== fair_vram ========================
[20:05:28] [PASSED] 1 VF
[20:05:28] [PASSED] 2 VFs
[20:05:28] [PASSED] 3 VFs
[20:05:28] [PASSED] 4 VFs
[20:05:28] [PASSED] 5 VFs
[20:05:28] [PASSED] 6 VFs
[20:05:28] [PASSED] 7 VFs
[20:05:28] [PASSED] 8 VFs
[20:05:28] [PASSED] 9 VFs
[20:05:28] [PASSED] 10 VFs
[20:05:28] [PASSED] 11 VFs
[20:05:28] [PASSED] 12 VFs
[20:05:28] [PASSED] 13 VFs
[20:05:28] [PASSED] 14 VFs
[20:05:28] [PASSED] 15 VFs
[20:05:28] [PASSED] 16 VFs
[20:05:28] [PASSED] 17 VFs
[20:05:28] [PASSED] 18 VFs
[20:05:28] [PASSED] 19 VFs
[20:05:28] [PASSED] 20 VFs
[20:05:28] [PASSED] 21 VFs
[20:05:28] [PASSED] 22 VFs
[20:05:28] [PASSED] 23 VFs
[20:05:28] [PASSED] 24 VFs
[20:05:28] [PASSED] 25 VFs
[20:05:28] [PASSED] 26 VFs
[20:05:28] [PASSED] 27 VFs
[20:05:28] [PASSED] 28 VFs
[20:05:28] [PASSED] 29 VFs
[20:05:28] [PASSED] 30 VFs
[20:05:28] [PASSED] 31 VFs
[20:05:28] [PASSED] 32 VFs
[20:05:28] [PASSED] 33 VFs
[20:05:28] [PASSED] 34 VFs
[20:05:28] [PASSED] 35 VFs
[20:05:28] [PASSED] 36 VFs
[20:05:28] [PASSED] 37 VFs
[20:05:28] [PASSED] 38 VFs
[20:05:28] [PASSED] 39 VFs
[20:05:28] [PASSED] 40 VFs
[20:05:28] [PASSED] 41 VFs
[20:05:28] [PASSED] 42 VFs
[20:05:28] [PASSED] 43 VFs
[20:05:28] [PASSED] 44 VFs
[20:05:28] [PASSED] 45 VFs
[20:05:28] [PASSED] 46 VFs
[20:05:28] [PASSED] 47 VFs
[20:05:28] [PASSED] 48 VFs
[20:05:28] [PASSED] 49 VFs
[20:05:28] [PASSED] 50 VFs
[20:05:28] [PASSED] 51 VFs
[20:05:28] [PASSED] 52 VFs
[20:05:28] [PASSED] 53 VFs
[20:05:28] [PASSED] 54 VFs
[20:05:28] [PASSED] 55 VFs
[20:05:28] [PASSED] 56 VFs
[20:05:28] [PASSED] 57 VFs
[20:05:28] [PASSED] 58 VFs
[20:05:28] [PASSED] 59 VFs
[20:05:28] [PASSED] 60 VFs
[20:05:28] [PASSED] 61 VFs
[20:05:28] [PASSED] 62 VFs
[20:05:28] [PASSED] 63 VFs
[20:05:28] ==================== [PASSED] fair_vram ====================
[20:05:28] ================== [PASSED] pf_gt_config ===================
[20:05:28] ===================== lmtt (1 subtest) =====================
[20:05:28] ======================== test_ops =========================
[20:05:28] [PASSED] 2-level
[20:05:28] [PASSED] multi-level
[20:05:28] ==================== [PASSED] test_ops =====================
[20:05:28] ====================== [PASSED] lmtt =======================
[20:05:28] ================= pf_service (11 subtests) =================
[20:05:28] [PASSED] pf_negotiate_any
[20:05:28] [PASSED] pf_negotiate_base_match
[20:05:28] [PASSED] pf_negotiate_base_newer
[20:05:28] [PASSED] pf_negotiate_base_next
[20:05:28] [SKIPPED] pf_negotiate_base_older
[20:05:28] [PASSED] pf_negotiate_base_prev
[20:05:28] [PASSED] pf_negotiate_latest_match
[20:05:28] [PASSED] pf_negotiate_latest_newer
[20:05:28] [PASSED] pf_negotiate_latest_next
[20:05:28] [SKIPPED] pf_negotiate_latest_older
[20:05:28] [SKIPPED] pf_negotiate_latest_prev
[20:05:28] =================== [PASSED] pf_service ====================
[20:05:28] ================= xe_guc_g2g (2 subtests) ==================
[20:05:28] ============== xe_live_guc_g2g_kunit_default ==============
[20:05:28] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[20:05:28] ============== xe_live_guc_g2g_kunit_allmem ===============
[20:05:28] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[20:05:28] =================== [SKIPPED] xe_guc_g2g ===================
[20:05:28] =================== xe_mocs (2 subtests) ===================
[20:05:28] ================ xe_live_mocs_kernel_kunit ================
[20:05:28] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[20:05:28] ================ xe_live_mocs_reset_kunit =================
[20:05:28] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[20:05:28] ==================== [SKIPPED] xe_mocs =====================
[20:05:28] ================= xe_migrate (2 subtests) ==================
[20:05:28] ================= xe_migrate_sanity_kunit =================
[20:05:28] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[20:05:28] ================== xe_validate_ccs_kunit ==================
[20:05:28] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[20:05:28] =================== [SKIPPED] xe_migrate ===================
[20:05:28] ================== xe_dma_buf (1 subtest) ==================
[20:05:28] ==================== xe_dma_buf_kunit =====================
[20:05:28] ================ [SKIPPED] xe_dma_buf_kunit ================
[20:05:28] =================== [SKIPPED] xe_dma_buf ===================
[20:05:28] ================= xe_bo_shrink (1 subtest) =================
[20:05:28] =================== xe_bo_shrink_kunit ====================
[20:05:28] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[20:05:28] ================== [SKIPPED] xe_bo_shrink ==================
[20:05:28] ==================== xe_bo (2 subtests) ====================
[20:05:28] ================== xe_ccs_migrate_kunit ===================
[20:05:28] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[20:05:28] ==================== xe_bo_evict_kunit ====================
[20:05:28] =============== [SKIPPED] xe_bo_evict_kunit ================
[20:05:28] ===================== [SKIPPED] xe_bo ======================
[20:05:28] ==================== args (13 subtests) ====================
[20:05:28] [PASSED] count_args_test
[20:05:28] [PASSED] call_args_example
[20:05:28] [PASSED] call_args_test
[20:05:28] [PASSED] drop_first_arg_example
[20:05:28] [PASSED] drop_first_arg_test
[20:05:28] [PASSED] first_arg_example
[20:05:28] [PASSED] first_arg_test
[20:05:28] [PASSED] last_arg_example
[20:05:28] [PASSED] last_arg_test
[20:05:28] [PASSED] pick_arg_example
[20:05:28] [PASSED] if_args_example
[20:05:28] [PASSED] if_args_test
[20:05:28] [PASSED] sep_comma_example
[20:05:28] ====================== [PASSED] args =======================
[20:05:28] =================== xe_pci (3 subtests) ====================
[20:05:28] ==================== check_graphics_ip ====================
[20:05:28] [PASSED] 12.00 Xe_LP
[20:05:28] [PASSED] 12.10 Xe_LP+
[20:05:28] [PASSED] 12.55 Xe_HPG
[20:05:28] [PASSED] 12.60 Xe_HPC
[20:05:28] [PASSED] 12.70 Xe_LPG
[20:05:28] [PASSED] 12.71 Xe_LPG
[20:05:28] [PASSED] 12.74 Xe_LPG+
[20:05:28] [PASSED] 20.01 Xe2_HPG
[20:05:28] [PASSED] 20.02 Xe2_HPG
[20:05:28] [PASSED] 20.04 Xe2_LPG
[20:05:28] [PASSED] 30.00 Xe3_LPG
[20:05:28] [PASSED] 30.01 Xe3_LPG
[20:05:28] [PASSED] 30.03 Xe3_LPG
[20:05:28] [PASSED] 30.04 Xe3_LPG
[20:05:28] [PASSED] 30.05 Xe3_LPG
[20:05:28] [PASSED] 35.10 Xe3p_LPG
[20:05:28] [PASSED] 35.11 Xe3p_XPC
[20:05:28] ================ [PASSED] check_graphics_ip ================
[20:05:28] ===================== check_media_ip ======================
[20:05:28] [PASSED] 12.00 Xe_M
[20:05:28] [PASSED] 12.55 Xe_HPM
[20:05:28] [PASSED] 13.00 Xe_LPM+
[20:05:28] [PASSED] 13.01 Xe2_HPM
[20:05:28] [PASSED] 20.00 Xe2_LPM
[20:05:28] [PASSED] 30.00 Xe3_LPM
[20:05:28] [PASSED] 30.02 Xe3_LPM
[20:05:28] [PASSED] 35.00 Xe3p_LPM
[20:05:28] [PASSED] 35.03 Xe3p_HPM
[20:05:28] ================= [PASSED] check_media_ip ==================
[20:05:28] =================== check_platform_desc ===================
[20:05:28] [PASSED] 0x9A60 (TIGERLAKE)
[20:05:28] [PASSED] 0x9A68 (TIGERLAKE)
[20:05:28] [PASSED] 0x9A70 (TIGERLAKE)
[20:05:28] [PASSED] 0x9A40 (TIGERLAKE)
[20:05:28] [PASSED] 0x9A49 (TIGERLAKE)
[20:05:28] [PASSED] 0x9A59 (TIGERLAKE)
[20:05:28] [PASSED] 0x9A78 (TIGERLAKE)
[20:05:28] [PASSED] 0x9AC0 (TIGERLAKE)
[20:05:28] [PASSED] 0x9AC9 (TIGERLAKE)
[20:05:28] [PASSED] 0x9AD9 (TIGERLAKE)
[20:05:28] [PASSED] 0x9AF8 (TIGERLAKE)
[20:05:28] [PASSED] 0x4C80 (ROCKETLAKE)
[20:05:28] [PASSED] 0x4C8A (ROCKETLAKE)
[20:05:28] [PASSED] 0x4C8B (ROCKETLAKE)
[20:05:28] [PASSED] 0x4C8C (ROCKETLAKE)
[20:05:28] [PASSED] 0x4C90 (ROCKETLAKE)
[20:05:28] [PASSED] 0x4C9A (ROCKETLAKE)
[20:05:28] [PASSED] 0x4680 (ALDERLAKE_S)
[20:05:28] [PASSED] 0x4682 (ALDERLAKE_S)
[20:05:28] [PASSED] 0x4688 (ALDERLAKE_S)
[20:05:28] [PASSED] 0x468A (ALDERLAKE_S)
[20:05:28] [PASSED] 0x468B (ALDERLAKE_S)
[20:05:28] [PASSED] 0x4690 (ALDERLAKE_S)
[20:05:28] [PASSED] 0x4692 (ALDERLAKE_S)
[20:05:28] [PASSED] 0x4693 (ALDERLAKE_S)
[20:05:28] [PASSED] 0x46A0 (ALDERLAKE_P)
[20:05:28] [PASSED] 0x46A1 (ALDERLAKE_P)
[20:05:28] [PASSED] 0x46A2 (ALDERLAKE_P)
[20:05:28] [PASSED] 0x46A3 (ALDERLAKE_P)
[20:05:28] [PASSED] 0x46A6 (ALDERLAKE_P)
[20:05:28] [PASSED] 0x46A8 (ALDERLAKE_P)
[20:05:28] [PASSED] 0x46AA (ALDERLAKE_P)
[20:05:28] [PASSED] 0x462A (ALDERLAKE_P)
[20:05:28] [PASSED] 0x4626 (ALDERLAKE_P)
[20:05:28] [PASSED] 0x4628 (ALDERLAKE_P)
[20:05:28] [PASSED] 0x46B0 (ALDERLAKE_P)
[20:05:28] [PASSED] 0x46B1 (ALDERLAKE_P)
[20:05:28] [PASSED] 0x46B2 (ALDERLAKE_P)
[20:05:28] [PASSED] 0x46B3 (ALDERLAKE_P)
[20:05:28] [PASSED] 0x46C0 (ALDERLAKE_P)
[20:05:28] [PASSED] 0x46C1 (ALDERLAKE_P)
[20:05:28] [PASSED] 0x46C2 (ALDERLAKE_P)
[20:05:28] [PASSED] 0x46C3 (ALDERLAKE_P)
[20:05:28] [PASSED] 0x46D0 (ALDERLAKE_N)
[20:05:28] [PASSED] 0x46D1 (ALDERLAKE_N)
[20:05:28] [PASSED] 0x46D2 (ALDERLAKE_N)
[20:05:28] [PASSED] 0x46D3 (ALDERLAKE_N)
[20:05:28] [PASSED] 0x46D4 (ALDERLAKE_N)
[20:05:28] [PASSED] 0xA721 (ALDERLAKE_P)
[20:05:28] [PASSED] 0xA7A1 (ALDERLAKE_P)
[20:05:28] [PASSED] 0xA7A9 (ALDERLAKE_P)
[20:05:28] [PASSED] 0xA7AC (ALDERLAKE_P)
[20:05:28] [PASSED] 0xA7AD (ALDERLAKE_P)
[20:05:28] [PASSED] 0xA720 (ALDERLAKE_P)
[20:05:28] [PASSED] 0xA7A0 (ALDERLAKE_P)
[20:05:28] [PASSED] 0xA7A8 (ALDERLAKE_P)
[20:05:28] [PASSED] 0xA7AA (ALDERLAKE_P)
[20:05:28] [PASSED] 0xA7AB (ALDERLAKE_P)
[20:05:28] [PASSED] 0xA780 (ALDERLAKE_S)
[20:05:28] [PASSED] 0xA781 (ALDERLAKE_S)
[20:05:28] [PASSED] 0xA782 (ALDERLAKE_S)
[20:05:28] [PASSED] 0xA783 (ALDERLAKE_S)
[20:05:28] [PASSED] 0xA788 (ALDERLAKE_S)
[20:05:28] [PASSED] 0xA789 (ALDERLAKE_S)
[20:05:28] [PASSED] 0xA78A (ALDERLAKE_S)
[20:05:28] [PASSED] 0xA78B (ALDERLAKE_S)
[20:05:28] [PASSED] 0x4905 (DG1)
[20:05:28] [PASSED] 0x4906 (DG1)
[20:05:28] [PASSED] 0x4907 (DG1)
[20:05:28] [PASSED] 0x4908 (DG1)
[20:05:28] [PASSED] 0x4909 (DG1)
[20:05:28] [PASSED] 0x56C0 (DG2)
[20:05:28] [PASSED] 0x56C2 (DG2)
[20:05:28] [PASSED] 0x56C1 (DG2)
[20:05:28] [PASSED] 0x7D51 (METEORLAKE)
[20:05:28] [PASSED] 0x7DD1 (METEORLAKE)
[20:05:28] [PASSED] 0x7D41 (METEORLAKE)
[20:05:28] [PASSED] 0x7D67 (METEORLAKE)
[20:05:28] [PASSED] 0xB640 (METEORLAKE)
[20:05:28] [PASSED] 0x56A0 (DG2)
[20:05:28] [PASSED] 0x56A1 (DG2)
[20:05:28] [PASSED] 0x56A2 (DG2)
[20:05:28] [PASSED] 0x56BE (DG2)
[20:05:28] [PASSED] 0x56BF (DG2)
[20:05:28] [PASSED] 0x5690 (DG2)
[20:05:28] [PASSED] 0x5691 (DG2)
[20:05:28] [PASSED] 0x5692 (DG2)
[20:05:28] [PASSED] 0x56A5 (DG2)
[20:05:28] [PASSED] 0x56A6 (DG2)
[20:05:28] [PASSED] 0x56B0 (DG2)
[20:05:28] [PASSED] 0x56B1 (DG2)
[20:05:28] [PASSED] 0x56BA (DG2)
[20:05:28] [PASSED] 0x56BB (DG2)
[20:05:28] [PASSED] 0x56BC (DG2)
[20:05:28] [PASSED] 0x56BD (DG2)
[20:05:28] [PASSED] 0x5693 (DG2)
[20:05:28] [PASSED] 0x5694 (DG2)
[20:05:28] [PASSED] 0x5695 (DG2)
[20:05:28] [PASSED] 0x56A3 (DG2)
[20:05:28] [PASSED] 0x56A4 (DG2)
[20:05:28] [PASSED] 0x56B2 (DG2)
[20:05:28] [PASSED] 0x56B3 (DG2)
[20:05:28] [PASSED] 0x5696 (DG2)
[20:05:28] [PASSED] 0x5697 (DG2)
[20:05:28] [PASSED] 0xB69 (PVC)
[20:05:28] [PASSED] 0xB6E (PVC)
[20:05:28] [PASSED] 0xBD4 (PVC)
[20:05:28] [PASSED] 0xBD5 (PVC)
[20:05:28] [PASSED] 0xBD6 (PVC)
[20:05:28] [PASSED] 0xBD7 (PVC)
[20:05:28] [PASSED] 0xBD8 (PVC)
[20:05:28] [PASSED] 0xBD9 (PVC)
[20:05:28] [PASSED] 0xBDA (PVC)
[20:05:28] [PASSED] 0xBDB (PVC)
[20:05:28] [PASSED] 0xBE0 (PVC)
[20:05:28] [PASSED] 0xBE1 (PVC)
[20:05:28] [PASSED] 0xBE5 (PVC)
[20:05:28] [PASSED] 0x7D40 (METEORLAKE)
[20:05:28] [PASSED] 0x7D45 (METEORLAKE)
[20:05:28] [PASSED] 0x7D55 (METEORLAKE)
[20:05:28] [PASSED] 0x7D60 (METEORLAKE)
[20:05:28] [PASSED] 0x7DD5 (METEORLAKE)
[20:05:28] [PASSED] 0x6420 (LUNARLAKE)
[20:05:28] [PASSED] 0x64A0 (LUNARLAKE)
[20:05:28] [PASSED] 0x64B0 (LUNARLAKE)
[20:05:28] [PASSED] 0xE202 (BATTLEMAGE)
[20:05:28] [PASSED] 0xE209 (BATTLEMAGE)
[20:05:28] [PASSED] 0xE20B (BATTLEMAGE)
[20:05:28] [PASSED] 0xE20C (BATTLEMAGE)
[20:05:28] [PASSED] 0xE20D (BATTLEMAGE)
[20:05:28] [PASSED] 0xE210 (BATTLEMAGE)
[20:05:28] [PASSED] 0xE211 (BATTLEMAGE)
[20:05:28] [PASSED] 0xE212 (BATTLEMAGE)
[20:05:28] [PASSED] 0xE216 (BATTLEMAGE)
[20:05:28] [PASSED] 0xE220 (BATTLEMAGE)
[20:05:28] [PASSED] 0xE221 (BATTLEMAGE)
[20:05:28] [PASSED] 0xE222 (BATTLEMAGE)
[20:05:28] [PASSED] 0xE223 (BATTLEMAGE)
[20:05:28] [PASSED] 0xB080 (PANTHERLAKE)
[20:05:28] [PASSED] 0xB081 (PANTHERLAKE)
[20:05:28] [PASSED] 0xB082 (PANTHERLAKE)
[20:05:28] [PASSED] 0xB083 (PANTHERLAKE)
[20:05:28] [PASSED] 0xB084 (PANTHERLAKE)
[20:05:28] [PASSED] 0xB085 (PANTHERLAKE)
[20:05:28] [PASSED] 0xB086 (PANTHERLAKE)
[20:05:28] [PASSED] 0xB087 (PANTHERLAKE)
[20:05:28] [PASSED] 0xB08F (PANTHERLAKE)
[20:05:28] [PASSED] 0xB090 (PANTHERLAKE)
[20:05:28] [PASSED] 0xB0A0 (PANTHERLAKE)
[20:05:28] [PASSED] 0xB0B0 (PANTHERLAKE)
[20:05:28] [PASSED] 0xFD80 (PANTHERLAKE)
[20:05:28] [PASSED] 0xFD81 (PANTHERLAKE)
[20:05:28] [PASSED] 0xD740 (NOVALAKE_S)
[20:05:28] [PASSED] 0xD741 (NOVALAKE_S)
[20:05:28] [PASSED] 0xD742 (NOVALAKE_S)
[20:05:28] [PASSED] 0xD743 (NOVALAKE_S)
[20:05:28] [PASSED] 0xD744 (NOVALAKE_S)
[20:05:28] [PASSED] 0xD745 (NOVALAKE_S)
[20:05:28] [PASSED] 0x674C (CRESCENTISLAND)
[20:05:28] [PASSED] 0xD750 (NOVALAKE_P)
[20:05:28] [PASSED] 0xD751 (NOVALAKE_P)
[20:05:28] [PASSED] 0xD752 (NOVALAKE_P)
[20:05:28] [PASSED] 0xD753 (NOVALAKE_P)
[20:05:28] [PASSED] 0xD754 (NOVALAKE_P)
[20:05:28] [PASSED] 0xD755 (NOVALAKE_P)
[20:05:28] [PASSED] 0xD756 (NOVALAKE_P)
[20:05:28] [PASSED] 0xD757 (NOVALAKE_P)
[20:05:28] [PASSED] 0xD75F (NOVALAKE_P)
[20:05:28] =============== [PASSED] check_platform_desc ===============
[20:05:28] ===================== [PASSED] xe_pci ======================
[20:05:28] =================== xe_rtp (2 subtests) ====================
[20:05:28] =============== xe_rtp_process_to_sr_tests ================
[20:05:28] [PASSED] coalesce-same-reg
[20:05:28] [PASSED] no-match-no-add
[20:05:28] [PASSED] match-or
[20:05:28] [PASSED] match-or-xfail
[20:05:28] [PASSED] no-match-no-add-multiple-rules
[20:05:28] [PASSED] two-regs-two-entries
[20:05:28] [PASSED] clr-one-set-other
[20:05:28] [PASSED] set-field
[20:05:28] [PASSED] conflict-duplicate
[20:05:28] [PASSED] conflict-not-disjoint
[20:05:28] [PASSED] conflict-reg-type
[20:05:28] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[20:05:28] ================== xe_rtp_process_tests ===================
[20:05:28] [PASSED] active1
[20:05:28] [PASSED] active2
[20:05:28] [PASSED] active-inactive
[20:05:28] [PASSED] inactive-active
[20:05:28] [PASSED] inactive-1st_or_active-inactive
[20:05:28] [PASSED] inactive-2nd_or_active-inactive
[20:05:28] [PASSED] inactive-last_or_active-inactive
[20:05:28] [PASSED] inactive-no_or_active-inactive
[20:05:28] ============== [PASSED] xe_rtp_process_tests ===============
[20:05:28] ===================== [PASSED] xe_rtp ======================
[20:05:28] ==================== xe_wa (1 subtest) =====================
[20:05:28] ======================== xe_wa_gt =========================
[20:05:28] [PASSED] TIGERLAKE B0
[20:05:28] [PASSED] DG1 A0
[20:05:28] [PASSED] DG1 B0
[20:05:28] [PASSED] ALDERLAKE_S A0
[20:05:28] [PASSED] ALDERLAKE_S B0
[20:05:28] [PASSED] ALDERLAKE_S C0
[20:05:28] [PASSED] ALDERLAKE_S D0
[20:05:28] [PASSED] ALDERLAKE_P A0
[20:05:28] [PASSED] ALDERLAKE_P B0
[20:05:28] [PASSED] ALDERLAKE_P C0
[20:05:28] [PASSED] ALDERLAKE_S RPLS D0
[20:05:28] [PASSED] ALDERLAKE_P RPLU E0
[20:05:28] [PASSED] DG2 G10 C0
[20:05:28] [PASSED] DG2 G11 B1
[20:05:28] [PASSED] DG2 G12 A1
[20:05:28] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[20:05:28] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[20:05:28] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[20:05:28] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[20:05:28] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[20:05:28] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[20:05:28] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[20:05:28] ==================== [PASSED] xe_wa_gt =====================
[20:05:28] ====================== [PASSED] xe_wa ======================
[20:05:28] ============================================================
[20:05:28] Testing complete. Ran 597 tests: passed: 579, skipped: 18
[20:05:28] Elapsed time: 35.990s total, 4.282s configuring, 31.092s building, 0.597s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[20:05:28] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[20:05:30] 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
[20:05:54] Starting KUnit Kernel (1/1)...
[20:05:54] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[20:05:54] ============ drm_test_pick_cmdline (2 subtests) ============
[20:05:54] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[20:05:54] =============== drm_test_pick_cmdline_named ===============
[20:05:54] [PASSED] NTSC
[20:05:54] [PASSED] NTSC-J
[20:05:54] [PASSED] PAL
[20:05:54] [PASSED] PAL-M
[20:05:54] =========== [PASSED] drm_test_pick_cmdline_named ===========
[20:05:54] ============== [PASSED] drm_test_pick_cmdline ==============
[20:05:54] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[20:05:54] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[20:05:54] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[20:05:54] =========== drm_validate_clone_mode (2 subtests) ===========
[20:05:54] ============== drm_test_check_in_clone_mode ===============
[20:05:54] [PASSED] in_clone_mode
[20:05:54] [PASSED] not_in_clone_mode
[20:05:54] ========== [PASSED] drm_test_check_in_clone_mode ===========
[20:05:54] =============== drm_test_check_valid_clones ===============
[20:05:54] [PASSED] not_in_clone_mode
[20:05:54] [PASSED] valid_clone
[20:05:54] [PASSED] invalid_clone
[20:05:54] =========== [PASSED] drm_test_check_valid_clones ===========
[20:05:54] ============= [PASSED] drm_validate_clone_mode =============
[20:05:54] ============= drm_validate_modeset (1 subtest) =============
[20:05:54] [PASSED] drm_test_check_connector_changed_modeset
[20:05:54] ============== [PASSED] drm_validate_modeset ===============
[20:05:54] ====== drm_test_bridge_get_current_state (2 subtests) ======
[20:05:54] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[20:05:54] [PASSED] drm_test_drm_bridge_get_current_state_legacy
[20:05:54] ======== [PASSED] drm_test_bridge_get_current_state ========
[20:05:54] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[20:05:54] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[20:05:54] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[20:05:54] [PASSED] drm_test_drm_bridge_helper_reset_crtc_legacy
[20:05:54] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[20:05:54] ============== drm_bridge_alloc (2 subtests) ===============
[20:05:54] [PASSED] drm_test_drm_bridge_alloc_basic
[20:05:54] [PASSED] drm_test_drm_bridge_alloc_get_put
[20:05:54] ================ [PASSED] drm_bridge_alloc =================
[20:05:54] ============= drm_cmdline_parser (40 subtests) =============
[20:05:54] [PASSED] drm_test_cmdline_force_d_only
[20:05:54] [PASSED] drm_test_cmdline_force_D_only_dvi
[20:05:54] [PASSED] drm_test_cmdline_force_D_only_hdmi
[20:05:54] [PASSED] drm_test_cmdline_force_D_only_not_digital
[20:05:54] [PASSED] drm_test_cmdline_force_e_only
[20:05:54] [PASSED] drm_test_cmdline_res
[20:05:54] [PASSED] drm_test_cmdline_res_vesa
[20:05:54] [PASSED] drm_test_cmdline_res_vesa_rblank
[20:05:54] [PASSED] drm_test_cmdline_res_rblank
[20:05:54] [PASSED] drm_test_cmdline_res_bpp
[20:05:54] [PASSED] drm_test_cmdline_res_refresh
[20:05:54] [PASSED] drm_test_cmdline_res_bpp_refresh
[20:05:54] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[20:05:54] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[20:05:54] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[20:05:54] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[20:05:54] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[20:05:54] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[20:05:54] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[20:05:54] [PASSED] drm_test_cmdline_res_margins_force_on
[20:05:54] [PASSED] drm_test_cmdline_res_vesa_margins
[20:05:54] [PASSED] drm_test_cmdline_name
[20:05:54] [PASSED] drm_test_cmdline_name_bpp
[20:05:54] [PASSED] drm_test_cmdline_name_option
[20:05:54] [PASSED] drm_test_cmdline_name_bpp_option
[20:05:54] [PASSED] drm_test_cmdline_rotate_0
[20:05:54] [PASSED] drm_test_cmdline_rotate_90
[20:05:54] [PASSED] drm_test_cmdline_rotate_180
[20:05:54] [PASSED] drm_test_cmdline_rotate_270
[20:05:54] [PASSED] drm_test_cmdline_hmirror
[20:05:54] [PASSED] drm_test_cmdline_vmirror
[20:05:54] [PASSED] drm_test_cmdline_margin_options
[20:05:54] [PASSED] drm_test_cmdline_multiple_options
[20:05:54] [PASSED] drm_test_cmdline_bpp_extra_and_option
[20:05:54] [PASSED] drm_test_cmdline_extra_and_option
[20:05:54] [PASSED] drm_test_cmdline_freestanding_options
[20:05:54] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[20:05:54] [PASSED] drm_test_cmdline_panel_orientation
[20:05:54] ================ drm_test_cmdline_invalid =================
[20:05:54] [PASSED] margin_only
[20:05:54] [PASSED] interlace_only
[20:05:54] [PASSED] res_missing_x
[20:05:54] [PASSED] res_missing_y
[20:05:54] [PASSED] res_bad_y
[20:05:54] [PASSED] res_missing_y_bpp
[20:05:54] [PASSED] res_bad_bpp
[20:05:54] [PASSED] res_bad_refresh
[20:05:54] [PASSED] res_bpp_refresh_force_on_off
[20:05:54] [PASSED] res_invalid_mode
[20:05:54] [PASSED] res_bpp_wrong_place_mode
[20:05:54] [PASSED] name_bpp_refresh
[20:05:54] [PASSED] name_refresh
[20:05:54] [PASSED] name_refresh_wrong_mode
[20:05:54] [PASSED] name_refresh_invalid_mode
[20:05:54] [PASSED] rotate_multiple
[20:05:54] [PASSED] rotate_invalid_val
[20:05:54] [PASSED] rotate_truncated
[20:05:54] [PASSED] invalid_option
[20:05:54] [PASSED] invalid_tv_option
[20:05:54] [PASSED] truncated_tv_option
[20:05:54] ============ [PASSED] drm_test_cmdline_invalid =============
[20:05:54] =============== drm_test_cmdline_tv_options ===============
[20:05:54] [PASSED] NTSC
[20:05:54] [PASSED] NTSC_443
[20:05:54] [PASSED] NTSC_J
[20:05:54] [PASSED] PAL
[20:05:54] [PASSED] PAL_M
[20:05:54] [PASSED] PAL_N
[20:05:54] [PASSED] SECAM
[20:05:54] [PASSED] MONO_525
[20:05:54] [PASSED] MONO_625
[20:05:54] =========== [PASSED] drm_test_cmdline_tv_options ===========
[20:05:54] =============== [PASSED] drm_cmdline_parser ================
[20:05:54] ========== drmm_connector_hdmi_init (20 subtests) ==========
[20:05:54] [PASSED] drm_test_connector_hdmi_init_valid
[20:05:54] [PASSED] drm_test_connector_hdmi_init_bpc_8
[20:05:54] [PASSED] drm_test_connector_hdmi_init_bpc_10
[20:05:54] [PASSED] drm_test_connector_hdmi_init_bpc_12
[20:05:54] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[20:05:54] [PASSED] drm_test_connector_hdmi_init_bpc_null
[20:05:54] [PASSED] drm_test_connector_hdmi_init_formats_empty
[20:05:54] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[20:05:54] === drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[20:05:54] [PASSED] supported_formats=0x9 yuv420_allowed=1
[20:05:54] [PASSED] supported_formats=0x9 yuv420_allowed=0
[20:05:54] [PASSED] supported_formats=0x5 yuv420_allowed=1
[20:05:54] [PASSED] supported_formats=0x5 yuv420_allowed=0
[20:05:54] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[20:05:54] [PASSED] drm_test_connector_hdmi_init_null_ddc
[20:05:54] [PASSED] drm_test_connector_hdmi_init_null_product
[20:05:54] [PASSED] drm_test_connector_hdmi_init_null_vendor
[20:05:54] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[20:05:54] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[20:05:54] [PASSED] drm_test_connector_hdmi_init_product_valid
[20:05:54] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[20:05:54] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[20:05:54] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[20:05:54] ========= drm_test_connector_hdmi_init_type_valid =========
[20:05:54] [PASSED] HDMI-A
[20:05:54] [PASSED] HDMI-B
[20:05:54] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[20:05:54] ======== drm_test_connector_hdmi_init_type_invalid ========
[20:05:54] [PASSED] Unknown
[20:05:54] [PASSED] VGA
[20:05:54] [PASSED] DVI-I
[20:05:54] [PASSED] DVI-D
[20:05:54] [PASSED] DVI-A
[20:05:54] [PASSED] Composite
[20:05:54] [PASSED] SVIDEO
[20:05:54] [PASSED] LVDS
[20:05:54] [PASSED] Component
[20:05:54] [PASSED] DIN
[20:05:54] [PASSED] DP
[20:05:54] [PASSED] TV
[20:05:54] [PASSED] eDP
[20:05:54] [PASSED] Virtual
[20:05:54] [PASSED] DSI
[20:05:54] [PASSED] DPI
[20:05:54] [PASSED] Writeback
[20:05:54] [PASSED] SPI
[20:05:54] [PASSED] USB
[20:05:54] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[20:05:54] ============ [PASSED] drmm_connector_hdmi_init =============
[20:05:54] ============= drmm_connector_init (3 subtests) =============
[20:05:54] [PASSED] drm_test_drmm_connector_init
[20:05:54] [PASSED] drm_test_drmm_connector_init_null_ddc
[20:05:54] ========= drm_test_drmm_connector_init_type_valid =========
[20:05:54] [PASSED] Unknown
[20:05:54] [PASSED] VGA
[20:05:54] [PASSED] DVI-I
[20:05:54] [PASSED] DVI-D
[20:05:54] [PASSED] DVI-A
[20:05:54] [PASSED] Composite
[20:05:54] [PASSED] SVIDEO
[20:05:54] [PASSED] LVDS
[20:05:54] [PASSED] Component
[20:05:54] [PASSED] DIN
[20:05:54] [PASSED] DP
[20:05:54] [PASSED] HDMI-A
[20:05:54] [PASSED] HDMI-B
[20:05:54] [PASSED] TV
[20:05:54] [PASSED] eDP
[20:05:54] [PASSED] Virtual
[20:05:54] [PASSED] DSI
[20:05:54] [PASSED] DPI
[20:05:54] [PASSED] Writeback
[20:05:54] [PASSED] SPI
[20:05:54] [PASSED] USB
[20:05:54] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[20:05:54] =============== [PASSED] drmm_connector_init ===============
[20:05:54] ========= drm_connector_dynamic_init (6 subtests) ==========
[20:05:54] [PASSED] drm_test_drm_connector_dynamic_init
[20:05:54] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[20:05:54] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[20:05:54] [PASSED] drm_test_drm_connector_dynamic_init_properties
[20:05:54] ===== drm_test_drm_connector_dynamic_init_type_valid ======
[20:05:54] [PASSED] Unknown
[20:05:54] [PASSED] VGA
[20:05:54] [PASSED] DVI-I
[20:05:54] [PASSED] DVI-D
[20:05:54] [PASSED] DVI-A
[20:05:54] [PASSED] Composite
[20:05:54] [PASSED] SVIDEO
[20:05:54] [PASSED] LVDS
[20:05:54] [PASSED] Component
[20:05:54] [PASSED] DIN
[20:05:54] [PASSED] DP
[20:05:54] [PASSED] HDMI-A
[20:05:54] [PASSED] HDMI-B
[20:05:54] [PASSED] TV
[20:05:54] [PASSED] eDP
[20:05:54] [PASSED] Virtual
[20:05:54] [PASSED] DSI
[20:05:54] [PASSED] DPI
[20:05:54] [PASSED] Writeback
[20:05:54] [PASSED] SPI
[20:05:54] [PASSED] USB
[20:05:54] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[20:05:54] ======== drm_test_drm_connector_dynamic_init_name =========
[20:05:54] [PASSED] Unknown
[20:05:54] [PASSED] VGA
[20:05:54] [PASSED] DVI-I
[20:05:54] [PASSED] DVI-D
[20:05:54] [PASSED] DVI-A
[20:05:54] [PASSED] Composite
[20:05:54] [PASSED] SVIDEO
[20:05:54] [PASSED] LVDS
[20:05:54] [PASSED] Component
[20:05:54] [PASSED] DIN
[20:05:54] [PASSED] DP
[20:05:54] [PASSED] HDMI-A
[20:05:54] [PASSED] HDMI-B
[20:05:54] [PASSED] TV
[20:05:54] [PASSED] eDP
[20:05:54] [PASSED] Virtual
[20:05:54] [PASSED] DSI
[20:05:54] [PASSED] DPI
[20:05:54] [PASSED] Writeback
[20:05:54] [PASSED] SPI
[20:05:54] [PASSED] USB
[20:05:54] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[20:05:54] =========== [PASSED] drm_connector_dynamic_init ============
[20:05:54] ==== drm_connector_dynamic_register_early (4 subtests) =====
[20:05:54] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[20:05:54] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[20:05:54] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[20:05:54] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[20:05:54] ====== [PASSED] drm_connector_dynamic_register_early =======
[20:05:54] ======= drm_connector_dynamic_register (7 subtests) ========
[20:05:54] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[20:05:54] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[20:05:54] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[20:05:54] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[20:05:54] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[20:05:54] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[20:05:54] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[20:05:54] ========= [PASSED] drm_connector_dynamic_register ==========
[20:05:54] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[20:05:54] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[20:05:54] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[20:05:54] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[20:05:54] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[20:05:54] ========== drm_test_get_tv_mode_from_name_valid ===========
[20:05:54] [PASSED] NTSC
[20:05:54] [PASSED] NTSC-443
[20:05:54] [PASSED] NTSC-J
[20:05:54] [PASSED] PAL
[20:05:54] [PASSED] PAL-M
[20:05:54] [PASSED] PAL-N
[20:05:54] [PASSED] SECAM
[20:05:54] [PASSED] Mono
[20:05:54] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[20:05:54] [PASSED] drm_test_get_tv_mode_from_name_truncated
[20:05:54] ============ [PASSED] drm_get_tv_mode_from_name ============
[20:05:54] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[20:05:54] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[20:05:54] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[20:05:54] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[20:05:54] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[20:05:54] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[20:05:54] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[20:05:54] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[20:05:54] [PASSED] VIC 96
[20:05:54] [PASSED] VIC 97
[20:05:54] [PASSED] VIC 101
[20:05:54] [PASSED] VIC 102
[20:05:54] [PASSED] VIC 106
[20:05:54] [PASSED] VIC 107
[20:05:54] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[20:05:54] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[20:05:54] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[20:05:54] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[20:05:54] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[20:05:54] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[20:05:54] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[20:05:54] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[20:05:54] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[20:05:54] [PASSED] Automatic
[20:05:54] [PASSED] Full
[20:05:54] [PASSED] Limited 16:235
[20:05:54] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[20:05:54] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[20:05:54] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[20:05:54] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[20:05:54] === drm_test_drm_hdmi_connector_get_output_format_name ====
[20:05:54] [PASSED] RGB
[20:05:54] [PASSED] YUV 4:2:0
[20:05:54] [PASSED] YUV 4:2:2
[20:05:54] [PASSED] YUV 4:4:4
[20:05:54] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[20:05:54] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[20:05:54] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[20:05:54] ============= drm_damage_helper (21 subtests) ==============
[20:05:54] [PASSED] drm_test_damage_iter_no_damage
[20:05:54] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[20:05:54] [PASSED] drm_test_damage_iter_no_damage_src_moved
[20:05:54] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[20:05:54] [PASSED] drm_test_damage_iter_no_damage_not_visible
[20:05:54] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[20:05:54] [PASSED] drm_test_damage_iter_no_damage_no_fb
[20:05:54] [PASSED] drm_test_damage_iter_simple_damage
[20:05:54] [PASSED] drm_test_damage_iter_single_damage
[20:05:54] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[20:05:54] [PASSED] drm_test_damage_iter_single_damage_outside_src
[20:05:54] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[20:05:54] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[20:05:54] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[20:05:54] [PASSED] drm_test_damage_iter_single_damage_src_moved
[20:05:54] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[20:05:54] [PASSED] drm_test_damage_iter_damage
[20:05:54] [PASSED] drm_test_damage_iter_damage_one_intersect
[20:05:54] [PASSED] drm_test_damage_iter_damage_one_outside
[20:05:54] [PASSED] drm_test_damage_iter_damage_src_moved
[20:05:54] [PASSED] drm_test_damage_iter_damage_not_visible
[20:05:54] ================ [PASSED] drm_damage_helper ================
[20:05:54] ============== drm_dp_mst_helper (3 subtests) ==============
[20:05:54] ============== drm_test_dp_mst_calc_pbn_mode ==============
[20:05:54] [PASSED] Clock 154000 BPP 30 DSC disabled
[20:05:54] [PASSED] Clock 234000 BPP 30 DSC disabled
[20:05:54] [PASSED] Clock 297000 BPP 24 DSC disabled
[20:05:54] [PASSED] Clock 332880 BPP 24 DSC enabled
[20:05:54] [PASSED] Clock 324540 BPP 24 DSC enabled
[20:05:54] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[20:05:54] ============== drm_test_dp_mst_calc_pbn_div ===============
[20:05:54] [PASSED] Link rate 2000000 lane count 4
[20:05:54] [PASSED] Link rate 2000000 lane count 2
[20:05:54] [PASSED] Link rate 2000000 lane count 1
[20:05:54] [PASSED] Link rate 1350000 lane count 4
[20:05:54] [PASSED] Link rate 1350000 lane count 2
[20:05:54] [PASSED] Link rate 1350000 lane count 1
[20:05:54] [PASSED] Link rate 1000000 lane count 4
[20:05:54] [PASSED] Link rate 1000000 lane count 2
[20:05:54] [PASSED] Link rate 1000000 lane count 1
[20:05:54] [PASSED] Link rate 810000 lane count 4
[20:05:54] [PASSED] Link rate 810000 lane count 2
[20:05:54] [PASSED] Link rate 810000 lane count 1
[20:05:54] [PASSED] Link rate 540000 lane count 4
[20:05:54] [PASSED] Link rate 540000 lane count 2
[20:05:54] [PASSED] Link rate 540000 lane count 1
[20:05:54] [PASSED] Link rate 270000 lane count 4
[20:05:54] [PASSED] Link rate 270000 lane count 2
[20:05:54] [PASSED] Link rate 270000 lane count 1
[20:05:54] [PASSED] Link rate 162000 lane count 4
[20:05:54] [PASSED] Link rate 162000 lane count 2
[20:05:54] [PASSED] Link rate 162000 lane count 1
[20:05:54] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[20:05:54] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[20:05:54] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[20:05:54] [PASSED] DP_POWER_UP_PHY with port number
[20:05:54] [PASSED] DP_POWER_DOWN_PHY with port number
[20:05:54] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[20:05:54] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[20:05:54] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[20:05:54] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[20:05:54] [PASSED] DP_QUERY_PAYLOAD with port number
[20:05:54] [PASSED] DP_QUERY_PAYLOAD with VCPI
[20:05:54] [PASSED] DP_REMOTE_DPCD_READ with port number
[20:05:54] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[20:05:54] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[20:05:54] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[20:05:54] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[20:05:54] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[20:05:54] [PASSED] DP_REMOTE_I2C_READ with port number
[20:05:54] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[20:05:54] [PASSED] DP_REMOTE_I2C_READ with transactions array
[20:05:54] [PASSED] DP_REMOTE_I2C_WRITE with port number
[20:05:54] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[20:05:54] [PASSED] DP_REMOTE_I2C_WRITE with data array
[20:05:54] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[20:05:54] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[20:05:54] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[20:05:54] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[20:05:54] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[20:05:54] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[20:05:54] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[20:05:54] ================ [PASSED] drm_dp_mst_helper ================
[20:05:54] ================== drm_exec (7 subtests) ===================
[20:05:54] [PASSED] sanitycheck
[20:05:54] [PASSED] test_lock
[20:05:54] [PASSED] test_lock_unlock
[20:05:54] [PASSED] test_duplicates
[20:05:54] [PASSED] test_prepare
[20:05:54] [PASSED] test_prepare_array
[20:05:54] [PASSED] test_multiple_loops
[20:05:54] ==================== [PASSED] drm_exec =====================
[20:05:54] =========== drm_format_helper_test (17 subtests) ===========
[20:05:54] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[20:05:54] [PASSED] single_pixel_source_buffer
[20:05:54] [PASSED] single_pixel_clip_rectangle
[20:05:54] [PASSED] well_known_colors
[20:05:54] [PASSED] destination_pitch
[20:05:54] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[20:05:54] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[20:05:54] [PASSED] single_pixel_source_buffer
[20:05:54] [PASSED] single_pixel_clip_rectangle
[20:05:54] [PASSED] well_known_colors
[20:05:54] [PASSED] destination_pitch
[20:05:54] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[20:05:54] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[20:05:54] [PASSED] single_pixel_source_buffer
[20:05:54] [PASSED] single_pixel_clip_rectangle
[20:05:54] [PASSED] well_known_colors
[20:05:54] [PASSED] destination_pitch
[20:05:54] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[20:05:54] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[20:05:54] [PASSED] single_pixel_source_buffer
[20:05:54] [PASSED] single_pixel_clip_rectangle
[20:05:54] [PASSED] well_known_colors
[20:05:54] [PASSED] destination_pitch
[20:05:54] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[20:05:54] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[20:05:54] [PASSED] single_pixel_source_buffer
[20:05:54] [PASSED] single_pixel_clip_rectangle
[20:05:54] [PASSED] well_known_colors
[20:05:54] [PASSED] destination_pitch
[20:05:54] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[20:05:54] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[20:05:54] [PASSED] single_pixel_source_buffer
[20:05:54] [PASSED] single_pixel_clip_rectangle
[20:05:54] [PASSED] well_known_colors
[20:05:54] [PASSED] destination_pitch
[20:05:54] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[20:05:54] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[20:05:54] [PASSED] single_pixel_source_buffer
[20:05:54] [PASSED] single_pixel_clip_rectangle
[20:05:54] [PASSED] well_known_colors
[20:05:54] [PASSED] destination_pitch
[20:05:54] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[20:05:54] ============= drm_test_fb_xrgb8888_to_bgr888 ==============
[20:05:54] [PASSED] single_pixel_source_buffer
[20:05:54] [PASSED] single_pixel_clip_rectangle
[20:05:54] [PASSED] well_known_colors
[20:05:54] [PASSED] destination_pitch
[20:05:54] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[20:05:54] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[20:05:54] [PASSED] single_pixel_source_buffer
[20:05:54] [PASSED] single_pixel_clip_rectangle
[20:05:54] [PASSED] well_known_colors
[20:05:54] [PASSED] destination_pitch
[20:05:54] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[20:05:54] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[20:05:54] [PASSED] single_pixel_source_buffer
[20:05:54] [PASSED] single_pixel_clip_rectangle
[20:05:54] [PASSED] well_known_colors
[20:05:54] [PASSED] destination_pitch
[20:05:54] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[20:05:54] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[20:05:54] [PASSED] single_pixel_source_buffer
[20:05:54] [PASSED] single_pixel_clip_rectangle
[20:05:54] [PASSED] well_known_colors
[20:05:54] [PASSED] destination_pitch
[20:05:54] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[20:05:54] ============== drm_test_fb_xrgb8888_to_mono ===============
[20:05:54] [PASSED] single_pixel_source_buffer
[20:05:54] [PASSED] single_pixel_clip_rectangle
[20:05:54] [PASSED] well_known_colors
[20:05:54] [PASSED] destination_pitch
[20:05:54] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[20:05:54] ==================== drm_test_fb_swab =====================
[20:05:54] [PASSED] single_pixel_source_buffer
[20:05:54] [PASSED] single_pixel_clip_rectangle
[20:05:54] [PASSED] well_known_colors
[20:05:54] [PASSED] destination_pitch
[20:05:54] ================ [PASSED] drm_test_fb_swab =================
[20:05:54] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[20:05:54] [PASSED] single_pixel_source_buffer
[20:05:54] [PASSED] single_pixel_clip_rectangle
[20:05:54] [PASSED] well_known_colors
[20:05:54] [PASSED] destination_pitch
[20:05:54] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[20:05:54] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[20:05:54] [PASSED] single_pixel_source_buffer
[20:05:54] [PASSED] single_pixel_clip_rectangle
[20:05:54] [PASSED] well_known_colors
[20:05:54] [PASSED] destination_pitch
[20:05:54] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[20:05:54] ================= drm_test_fb_clip_offset =================
[20:05:54] [PASSED] pass through
[20:05:54] [PASSED] horizontal offset
[20:05:54] [PASSED] vertical offset
[20:05:54] [PASSED] horizontal and vertical offset
[20:05:54] [PASSED] horizontal offset (custom pitch)
[20:05:54] [PASSED] vertical offset (custom pitch)
[20:05:54] [PASSED] horizontal and vertical offset (custom pitch)
[20:05:54] ============= [PASSED] drm_test_fb_clip_offset =============
[20:05:54] =================== drm_test_fb_memcpy ====================
[20:05:54] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[20:05:54] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[20:05:54] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[20:05:54] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[20:05:54] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[20:05:54] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[20:05:54] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[20:05:54] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[20:05:54] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[20:05:54] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[20:05:54] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[20:05:54] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[20:05:54] =============== [PASSED] drm_test_fb_memcpy ================
[20:05:54] ============= [PASSED] drm_format_helper_test ==============
[20:05:54] ================= drm_format (18 subtests) =================
[20:05:54] [PASSED] drm_test_format_block_width_invalid
[20:05:54] [PASSED] drm_test_format_block_width_one_plane
[20:05:54] [PASSED] drm_test_format_block_width_two_plane
[20:05:54] [PASSED] drm_test_format_block_width_three_plane
[20:05:54] [PASSED] drm_test_format_block_width_tiled
[20:05:54] [PASSED] drm_test_format_block_height_invalid
[20:05:54] [PASSED] drm_test_format_block_height_one_plane
[20:05:54] [PASSED] drm_test_format_block_height_two_plane
[20:05:54] [PASSED] drm_test_format_block_height_three_plane
[20:05:54] [PASSED] drm_test_format_block_height_tiled
[20:05:54] [PASSED] drm_test_format_min_pitch_invalid
[20:05:54] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[20:05:54] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[20:05:54] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[20:05:54] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[20:05:54] [PASSED] drm_test_format_min_pitch_two_plane
[20:05:54] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[20:05:54] [PASSED] drm_test_format_min_pitch_tiled
[20:05:54] =================== [PASSED] drm_format ====================
[20:05:54] ============== drm_framebuffer (10 subtests) ===============
[20:05:54] ========== drm_test_framebuffer_check_src_coords ==========
[20:05:54] [PASSED] Success: source fits into fb
[20:05:54] [PASSED] Fail: overflowing fb with x-axis coordinate
[20:05:54] [PASSED] Fail: overflowing fb with y-axis coordinate
[20:05:54] [PASSED] Fail: overflowing fb with source width
[20:05:54] [PASSED] Fail: overflowing fb with source height
[20:05:54] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[20:05:54] [PASSED] drm_test_framebuffer_cleanup
[20:05:54] =============== drm_test_framebuffer_create ===============
[20:05:54] [PASSED] ABGR8888 normal sizes
[20:05:54] [PASSED] ABGR8888 max sizes
[20:05:54] [PASSED] ABGR8888 pitch greater than min required
[20:05:54] [PASSED] ABGR8888 pitch less than min required
[20:05:54] [PASSED] ABGR8888 Invalid width
[20:05:54] [PASSED] ABGR8888 Invalid buffer handle
[20:05:54] [PASSED] No pixel format
[20:05:54] [PASSED] ABGR8888 Width 0
[20:05:54] [PASSED] ABGR8888 Height 0
[20:05:54] [PASSED] ABGR8888 Out of bound height * pitch combination
[20:05:54] [PASSED] ABGR8888 Large buffer offset
[20:05:54] [PASSED] ABGR8888 Buffer offset for inexistent plane
[20:05:54] [PASSED] ABGR8888 Invalid flag
[20:05:54] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[20:05:54] [PASSED] ABGR8888 Valid buffer modifier
[20:05:54] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[20:05:54] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[20:05:54] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[20:05:54] [PASSED] NV12 Normal sizes
[20:05:54] [PASSED] NV12 Max sizes
[20:05:54] [PASSED] NV12 Invalid pitch
[20:05:54] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[20:05:54] [PASSED] NV12 different modifier per-plane
[20:05:54] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[20:05:54] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[20:05:54] [PASSED] NV12 Modifier for inexistent plane
[20:05:54] [PASSED] NV12 Handle for inexistent plane
[20:05:54] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[20:05:54] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[20:05:54] [PASSED] YVU420 Normal sizes
[20:05:54] [PASSED] YVU420 Max sizes
[20:05:54] [PASSED] YVU420 Invalid pitch
[20:05:54] [PASSED] YVU420 Different pitches
[20:05:54] [PASSED] YVU420 Different buffer offsets/pitches
[20:05:54] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[20:05:54] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[20:05:54] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[20:05:54] [PASSED] YVU420 Valid modifier
[20:05:54] [PASSED] YVU420 Different modifiers per plane
[20:05:54] [PASSED] YVU420 Modifier for inexistent plane
[20:05:54] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[20:05:54] [PASSED] X0L2 Normal sizes
[20:05:54] [PASSED] X0L2 Max sizes
[20:05:54] [PASSED] X0L2 Invalid pitch
[20:05:54] [PASSED] X0L2 Pitch greater than minimum required
[20:05:54] [PASSED] X0L2 Handle for inexistent plane
[20:05:54] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[20:05:54] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[20:05:54] [PASSED] X0L2 Valid modifier
[20:05:54] [PASSED] X0L2 Modifier for inexistent plane
[20:05:54] =========== [PASSED] drm_test_framebuffer_create ===========
[20:05:54] [PASSED] drm_test_framebuffer_free
[20:05:54] [PASSED] drm_test_framebuffer_init
[20:05:54] [PASSED] drm_test_framebuffer_init_bad_format
[20:05:54] [PASSED] drm_test_framebuffer_init_dev_mismatch
[20:05:54] [PASSED] drm_test_framebuffer_lookup
[20:05:54] [PASSED] drm_test_framebuffer_lookup_inexistent
[20:05:54] [PASSED] drm_test_framebuffer_modifiers_not_supported
[20:05:54] ================= [PASSED] drm_framebuffer =================
[20:05:54] ================ drm_gem_shmem (8 subtests) ================
[20:05:54] [PASSED] drm_gem_shmem_test_obj_create
[20:05:54] [PASSED] drm_gem_shmem_test_obj_create_private
[20:05:54] [PASSED] drm_gem_shmem_test_pin_pages
[20:05:54] [PASSED] drm_gem_shmem_test_vmap
[20:05:54] [PASSED] drm_gem_shmem_test_get_sg_table
[20:05:54] [PASSED] drm_gem_shmem_test_get_pages_sgt
[20:05:54] [PASSED] drm_gem_shmem_test_madvise
[20:05:54] [PASSED] drm_gem_shmem_test_purge
[20:05:54] ================== [PASSED] drm_gem_shmem ==================
[20:05:54] === drm_atomic_helper_connector_hdmi_check (27 subtests) ===
[20:05:54] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[20:05:54] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[20:05:54] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[20:05:54] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[20:05:54] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[20:05:54] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[20:05:54] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 =======
[20:05:54] [PASSED] Automatic
[20:05:54] [PASSED] Full
[20:05:54] [PASSED] Limited 16:235
[20:05:54] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[20:05:54] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[20:05:54] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[20:05:54] [PASSED] drm_test_check_disable_connector
[20:05:54] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[20:05:54] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[20:05:54] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[20:05:54] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[20:05:54] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[20:05:54] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[20:05:54] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[20:05:54] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[20:05:54] [PASSED] drm_test_check_output_bpc_dvi
[20:05:54] [PASSED] drm_test_check_output_bpc_format_vic_1
[20:05:54] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[20:05:54] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[20:05:54] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[20:05:54] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[20:05:54] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[20:05:54] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[20:05:54] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[20:05:54] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[20:05:54] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[20:05:54] [PASSED] drm_test_check_broadcast_rgb_value
[20:05:54] [PASSED] drm_test_check_bpc_8_value
[20:05:54] [PASSED] drm_test_check_bpc_10_value
[20:05:54] [PASSED] drm_test_check_bpc_12_value
[20:05:54] [PASSED] drm_test_check_format_value
[20:05:54] [PASSED] drm_test_check_tmds_char_value
[20:05:54] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[20:05:54] = drm_atomic_helper_connector_hdmi_mode_valid (4 subtests) =
[20:05:54] [PASSED] drm_test_check_mode_valid
[20:05:54] [PASSED] drm_test_check_mode_valid_reject
[20:05:54] [PASSED] drm_test_check_mode_valid_reject_rate
[20:05:54] [PASSED] drm_test_check_mode_valid_reject_max_clock
[20:05:54] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[20:05:54] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[20:05:54] [PASSED] drm_test_check_infoframes
[20:05:54] [PASSED] drm_test_check_reject_avi_infoframe
[20:05:54] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[20:05:54] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[20:05:54] [PASSED] drm_test_check_reject_audio_infoframe
[20:05:54] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[20:05:54] ================= drm_managed (2 subtests) =================
[20:05:54] [PASSED] drm_test_managed_release_action
[20:05:54] [PASSED] drm_test_managed_run_action
[20:05:54] =================== [PASSED] drm_managed ===================
[20:05:54] =================== drm_mm (6 subtests) ====================
[20:05:54] [PASSED] drm_test_mm_init
[20:05:54] [PASSED] drm_test_mm_debug
[20:05:54] [PASSED] drm_test_mm_align32
[20:05:54] [PASSED] drm_test_mm_align64
[20:05:54] [PASSED] drm_test_mm_lowest
[20:05:54] [PASSED] drm_test_mm_highest
[20:05:54] ===================== [PASSED] drm_mm ======================
[20:05:54] ============= drm_modes_analog_tv (5 subtests) =============
[20:05:54] [PASSED] drm_test_modes_analog_tv_mono_576i
[20:05:54] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[20:05:54] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[20:05:54] [PASSED] drm_test_modes_analog_tv_pal_576i
[20:05:54] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[20:05:54] =============== [PASSED] drm_modes_analog_tv ===============
[20:05:54] ============== drm_plane_helper (2 subtests) ===============
[20:05:54] =============== drm_test_check_plane_state ================
[20:05:54] [PASSED] clipping_simple
[20:05:54] [PASSED] clipping_rotate_reflect
[20:05:54] [PASSED] positioning_simple
[20:05:54] [PASSED] upscaling
[20:05:54] [PASSED] downscaling
[20:05:54] [PASSED] rounding1
[20:05:54] [PASSED] rounding2
[20:05:54] [PASSED] rounding3
[20:05:54] [PASSED] rounding4
[20:05:54] =========== [PASSED] drm_test_check_plane_state ============
[20:05:54] =========== drm_test_check_invalid_plane_state ============
[20:05:54] [PASSED] positioning_invalid
[20:05:54] [PASSED] upscaling_invalid
[20:05:54] [PASSED] downscaling_invalid
[20:05:54] ======= [PASSED] drm_test_check_invalid_plane_state ========
[20:05:54] ================ [PASSED] drm_plane_helper =================
[20:05:54] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[20:05:54] ====== drm_test_connector_helper_tv_get_modes_check =======
[20:05:54] [PASSED] None
[20:05:54] [PASSED] PAL
[20:05:54] [PASSED] NTSC
[20:05:54] [PASSED] Both, NTSC Default
[20:05:54] [PASSED] Both, PAL Default
[20:05:54] [PASSED] Both, NTSC Default, with PAL on command-line
[20:05:54] [PASSED] Both, PAL Default, with NTSC on command-line
[20:05:54] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[20:05:54] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[20:05:54] ================== drm_rect (9 subtests) ===================
[20:05:54] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[20:05:54] [PASSED] drm_test_rect_clip_scaled_not_clipped
[20:05:54] [PASSED] drm_test_rect_clip_scaled_clipped
[20:05:54] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[20:05:54] ================= drm_test_rect_intersect =================
[20:05:54] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[20:05:54] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[20:05:54] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[20:05:54] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[20:05:54] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[20:05:54] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[20:05:54] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[20:05:54] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[20:05:54] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[20:05:54] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[20:05:54] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[20:05:54] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[20:05:54] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[20:05:54] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[20:05:54] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[20:05:54] ============= [PASSED] drm_test_rect_intersect =============
[20:05:54] ================ drm_test_rect_calc_hscale ================
[20:05:54] [PASSED] normal use
[20:05:54] [PASSED] out of max range
[20:05:54] [PASSED] out of min range
[20:05:54] [PASSED] zero dst
[20:05:54] [PASSED] negative src
[20:05:54] [PASSED] negative dst
[20:05:54] ============ [PASSED] drm_test_rect_calc_hscale ============
[20:05:54] ================ drm_test_rect_calc_vscale ================
[20:05:54] [PASSED] normal use
[20:05:54] [PASSED] out of max range
[20:05:54] [PASSED] out of min range
[20:05:54] [PASSED] zero dst
[20:05:54] [PASSED] negative src
[20:05:54] [PASSED] negative dst
[20:05:54] ============ [PASSED] drm_test_rect_calc_vscale ============
[20:05:54] ================== drm_test_rect_rotate ===================
[20:05:54] [PASSED] reflect-x
[20:05:54] [PASSED] reflect-y
[20:05:54] [PASSED] rotate-0
[20:05:54] [PASSED] rotate-90
[20:05:54] [PASSED] rotate-180
[20:05:54] [PASSED] rotate-270
[20:05:54] ============== [PASSED] drm_test_rect_rotate ===============
[20:05:54] ================ drm_test_rect_rotate_inv =================
[20:05:54] [PASSED] reflect-x
[20:05:54] [PASSED] reflect-y
[20:05:54] [PASSED] rotate-0
[20:05:54] [PASSED] rotate-90
[20:05:54] [PASSED] rotate-180
[20:05:54] [PASSED] rotate-270
[20:05:54] ============ [PASSED] drm_test_rect_rotate_inv =============
[20:05:54] ==================== [PASSED] drm_rect =====================
[20:05:54] ============ drm_sysfb_modeset_test (1 subtest) ============
[20:05:54] ============ drm_test_sysfb_build_fourcc_list =============
[20:05:54] [PASSED] no native formats
[20:05:54] [PASSED] XRGB8888 as native format
[20:05:54] [PASSED] remove duplicates
[20:05:54] [PASSED] convert alpha formats
[20:05:54] [PASSED] random formats
[20:05:54] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[20:05:54] ============= [PASSED] drm_sysfb_modeset_test ==============
[20:05:54] ================== drm_fixp (2 subtests) ===================
[20:05:54] [PASSED] drm_test_int2fixp
[20:05:54] [PASSED] drm_test_sm2fixp
[20:05:54] ==================== [PASSED] drm_fixp =====================
[20:05:54] ============================================================
[20:05:54] Testing complete. Ran 621 tests: passed: 621
[20:05:54] Elapsed time: 25.906s total, 1.679s configuring, 24.059s building, 0.133s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[20:05:54] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[20:05:56] 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
[20:06:06] Starting KUnit Kernel (1/1)...
[20:06:06] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[20:06:06] ================= ttm_device (5 subtests) ==================
[20:06:06] [PASSED] ttm_device_init_basic
[20:06:06] [PASSED] ttm_device_init_multiple
[20:06:06] [PASSED] ttm_device_fini_basic
[20:06:06] [PASSED] ttm_device_init_no_vma_man
[20:06:06] ================== ttm_device_init_pools ==================
[20:06:06] [PASSED] No DMA allocations, no DMA32 required
[20:06:06] [PASSED] DMA allocations, DMA32 required
[20:06:06] [PASSED] No DMA allocations, DMA32 required
[20:06:06] [PASSED] DMA allocations, no DMA32 required
[20:06:06] ============== [PASSED] ttm_device_init_pools ==============
[20:06:06] =================== [PASSED] ttm_device ====================
[20:06:06] ================== ttm_pool (8 subtests) ===================
[20:06:06] ================== ttm_pool_alloc_basic ===================
[20:06:06] [PASSED] One page
[20:06:06] [PASSED] More than one page
[20:06:06] [PASSED] Above the allocation limit
[20:06:06] [PASSED] One page, with coherent DMA mappings enabled
[20:06:06] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[20:06:06] ============== [PASSED] ttm_pool_alloc_basic ===============
[20:06:06] ============== ttm_pool_alloc_basic_dma_addr ==============
[20:06:06] [PASSED] One page
[20:06:06] [PASSED] More than one page
[20:06:06] [PASSED] Above the allocation limit
[20:06:06] [PASSED] One page, with coherent DMA mappings enabled
[20:06:06] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[20:06:06] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[20:06:06] [PASSED] ttm_pool_alloc_order_caching_match
[20:06:06] [PASSED] ttm_pool_alloc_caching_mismatch
[20:06:06] [PASSED] ttm_pool_alloc_order_mismatch
[20:06:06] [PASSED] ttm_pool_free_dma_alloc
[20:06:06] [PASSED] ttm_pool_free_no_dma_alloc
[20:06:06] [PASSED] ttm_pool_fini_basic
[20:06:06] ==================== [PASSED] ttm_pool =====================
[20:06:06] ================ ttm_resource (8 subtests) =================
[20:06:06] ================= ttm_resource_init_basic =================
[20:06:06] [PASSED] Init resource in TTM_PL_SYSTEM
[20:06:06] [PASSED] Init resource in TTM_PL_VRAM
[20:06:06] [PASSED] Init resource in a private placement
[20:06:06] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[20:06:06] ============= [PASSED] ttm_resource_init_basic =============
[20:06:06] [PASSED] ttm_resource_init_pinned
[20:06:06] [PASSED] ttm_resource_fini_basic
[20:06:06] [PASSED] ttm_resource_manager_init_basic
[20:06:06] [PASSED] ttm_resource_manager_usage_basic
[20:06:06] [PASSED] ttm_resource_manager_set_used_basic
[20:06:06] [PASSED] ttm_sys_man_alloc_basic
[20:06:06] [PASSED] ttm_sys_man_free_basic
[20:06:06] ================== [PASSED] ttm_resource ===================
[20:06:06] =================== ttm_tt (15 subtests) ===================
[20:06:06] ==================== ttm_tt_init_basic ====================
[20:06:06] [PASSED] Page-aligned size
[20:06:06] [PASSED] Extra pages requested
[20:06:06] ================ [PASSED] ttm_tt_init_basic ================
[20:06:06] [PASSED] ttm_tt_init_misaligned
[20:06:06] [PASSED] ttm_tt_fini_basic
[20:06:06] [PASSED] ttm_tt_fini_sg
[20:06:06] [PASSED] ttm_tt_fini_shmem
[20:06:06] [PASSED] ttm_tt_create_basic
[20:06:06] [PASSED] ttm_tt_create_invalid_bo_type
[20:06:06] [PASSED] ttm_tt_create_ttm_exists
[20:06:06] [PASSED] ttm_tt_create_failed
[20:06:06] [PASSED] ttm_tt_destroy_basic
[20:06:06] [PASSED] ttm_tt_populate_null_ttm
[20:06:06] [PASSED] ttm_tt_populate_populated_ttm
[20:06:06] [PASSED] ttm_tt_unpopulate_basic
[20:06:06] [PASSED] ttm_tt_unpopulate_empty_ttm
[20:06:06] [PASSED] ttm_tt_swapin_basic
[20:06:06] ===================== [PASSED] ttm_tt ======================
[20:06:06] =================== ttm_bo (14 subtests) ===================
[20:06:06] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[20:06:06] [PASSED] Cannot be interrupted and sleeps
[20:06:06] [PASSED] Cannot be interrupted, locks straight away
[20:06:06] [PASSED] Can be interrupted, sleeps
[20:06:06] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[20:06:06] [PASSED] ttm_bo_reserve_locked_no_sleep
[20:06:06] [PASSED] ttm_bo_reserve_no_wait_ticket
[20:06:06] [PASSED] ttm_bo_reserve_double_resv
[20:06:06] [PASSED] ttm_bo_reserve_interrupted
[20:06:06] [PASSED] ttm_bo_reserve_deadlock
[20:06:06] [PASSED] ttm_bo_unreserve_basic
[20:06:06] [PASSED] ttm_bo_unreserve_pinned
[20:06:06] [PASSED] ttm_bo_unreserve_bulk
[20:06:06] [PASSED] ttm_bo_fini_basic
[20:06:06] [PASSED] ttm_bo_fini_shared_resv
[20:06:06] [PASSED] ttm_bo_pin_basic
[20:06:06] [PASSED] ttm_bo_pin_unpin_resource
[20:06:06] [PASSED] ttm_bo_multiple_pin_one_unpin
[20:06:06] ===================== [PASSED] ttm_bo ======================
[20:06:06] ============== ttm_bo_validate (22 subtests) ===============
[20:06:06] ============== ttm_bo_init_reserved_sys_man ===============
[20:06:06] [PASSED] Buffer object for userspace
[20:06:06] [PASSED] Kernel buffer object
[20:06:06] [PASSED] Shared buffer object
[20:06:06] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[20:06:06] ============== ttm_bo_init_reserved_mock_man ==============
[20:06:06] [PASSED] Buffer object for userspace
[20:06:06] [PASSED] Kernel buffer object
[20:06:06] [PASSED] Shared buffer object
[20:06:06] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[20:06:06] [PASSED] ttm_bo_init_reserved_resv
[20:06:06] ================== ttm_bo_validate_basic ==================
[20:06:06] [PASSED] Buffer object for userspace
[20:06:06] [PASSED] Kernel buffer object
[20:06:06] [PASSED] Shared buffer object
[20:06:06] ============== [PASSED] ttm_bo_validate_basic ==============
[20:06:06] [PASSED] ttm_bo_validate_invalid_placement
[20:06:06] ============= ttm_bo_validate_same_placement ==============
[20:06:06] [PASSED] System manager
[20:06:06] [PASSED] VRAM manager
[20:06:06] ========= [PASSED] ttm_bo_validate_same_placement ==========
[20:06:06] [PASSED] ttm_bo_validate_failed_alloc
[20:06:06] [PASSED] ttm_bo_validate_pinned
[20:06:06] [PASSED] ttm_bo_validate_busy_placement
[20:06:06] ================ ttm_bo_validate_multihop =================
[20:06:06] [PASSED] Buffer object for userspace
[20:06:06] [PASSED] Kernel buffer object
[20:06:06] [PASSED] Shared buffer object
[20:06:06] ============ [PASSED] ttm_bo_validate_multihop =============
[20:06:06] ========== ttm_bo_validate_no_placement_signaled ==========
[20:06:06] [PASSED] Buffer object in system domain, no page vector
[20:06:06] [PASSED] Buffer object in system domain with an existing page vector
[20:06:06] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[20:06:06] ======== ttm_bo_validate_no_placement_not_signaled ========
[20:06:06] [PASSED] Buffer object for userspace
[20:06:06] [PASSED] Kernel buffer object
[20:06:06] [PASSED] Shared buffer object
[20:06:06] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[20:06:06] [PASSED] ttm_bo_validate_move_fence_signaled
[20:06:06] ========= ttm_bo_validate_move_fence_not_signaled =========
[20:06:06] [PASSED] Waits for GPU
[20:06:06] [PASSED] Tries to lock straight away
[20:06:06] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[20:06:06] [PASSED] ttm_bo_validate_swapout
[20:06:06] [PASSED] ttm_bo_validate_happy_evict
[20:06:06] [PASSED] ttm_bo_validate_all_pinned_evict
[20:06:06] [PASSED] ttm_bo_validate_allowed_only_evict
[20:06:06] [PASSED] ttm_bo_validate_deleted_evict
[20:06:06] [PASSED] ttm_bo_validate_busy_domain_evict
[20:06:06] [PASSED] ttm_bo_validate_evict_gutting
[20:06:06] [PASSED] ttm_bo_validate_recrusive_evict
[20:06:06] ================= [PASSED] ttm_bo_validate =================
[20:06:06] ============================================================
[20:06:06] Testing complete. Ran 102 tests: passed: 102
[20:06:06] Elapsed time: 11.657s total, 1.681s configuring, 9.761s building, 0.184s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 24+ messages in thread
* ✓ Xe.CI.BAT: success for mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation (rev3)
2026-04-30 19:18 [PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation Matthew Brost
` (7 preceding siblings ...)
2026-04-30 20:06 ` ✓ CI.KUnit: success " Patchwork
@ 2026-04-30 21:15 ` Patchwork
2026-04-30 23:01 ` [PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation Andrew Morton
` (2 subsequent siblings)
11 siblings, 0 replies; 24+ messages in thread
From: Patchwork @ 2026-04-30 21:15 UTC (permalink / raw)
To: Matthew Brost; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 2026 bytes --]
== Series Details ==
Series: mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation (rev3)
URL : https://patchwork.freedesktop.org/series/165329/
State : success
== Summary ==
CI Bug Log - changes from xe-4960-6472756e8384e3945f12b6726dd9dc1ac12f3bb4_BAT -> xe-pw-165329v3_BAT
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (13 -> 13)
------------------------------
No changes in participating hosts
Known issues
------------
Here are the changes found in xe-pw-165329v3_BAT that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@kms_flip@basic-flip-vs-wf_vblank@d-edp1:
- bat-adlp-7: [PASS][1] -> [DMESG-WARN][2] ([Intel XE#7483])
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4960-6472756e8384e3945f12b6726dd9dc1ac12f3bb4/bat-adlp-7/igt@kms_flip@basic-flip-vs-wf_vblank@d-edp1.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165329v3/bat-adlp-7/igt@kms_flip@basic-flip-vs-wf_vblank@d-edp1.html
#### Possible fixes ####
* igt@kms_flip@basic-flip-vs-wf_vblank@c-edp1:
- bat-adlp-7: [DMESG-WARN][3] ([Intel XE#7483]) -> [PASS][4]
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4960-6472756e8384e3945f12b6726dd9dc1ac12f3bb4/bat-adlp-7/igt@kms_flip@basic-flip-vs-wf_vblank@c-edp1.html
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165329v3/bat-adlp-7/igt@kms_flip@basic-flip-vs-wf_vblank@c-edp1.html
[Intel XE#7483]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7483
Build changes
-------------
* Linux: xe-4960-6472756e8384e3945f12b6726dd9dc1ac12f3bb4 -> xe-pw-165329v3
IGT_8881: aa5853ef5b379b1e4558218c21ef4caeae112184 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-4960-6472756e8384e3945f12b6726dd9dc1ac12f3bb4: 6472756e8384e3945f12b6726dd9dc1ac12f3bb4
xe-pw-165329v3: 165329v3
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165329v3/index.html
[-- Attachment #2: Type: text/html, Size: 2689 bytes --]
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation
2026-04-30 19:18 [PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation Matthew Brost
` (8 preceding siblings ...)
2026-04-30 21:15 ` ✓ Xe.CI.BAT: " Patchwork
@ 2026-04-30 23:01 ` Andrew Morton
2026-05-01 6:28 ` Matthew Brost
2026-05-01 1:42 ` Dave Chinner
2026-05-01 8:00 ` ✓ Xe.CI.FULL: success for mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation (rev3) Patchwork
11 siblings, 1 reply; 24+ messages in thread
From: Andrew Morton @ 2026-04-30 23:01 UTC (permalink / raw)
To: Matthew Brost
Cc: intel-xe, dri-devel, Dave Chinner, Qi Zheng, Roman Gushchin,
Johannes Weiner, Shakeel Butt, Kairui Song, Barry Song,
Axel Rasmussen, Yuanchu Xie, Wei Xu, Tvrtko Ursulin,
Thomas Hellström, Carlos Santa, Christian Koenig, Huang Rui,
Matthew Auld, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
David Airlie, Simona Vetter, Daniel Colascione, David Hildenbrand,
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka, Mike Rapoport,
Suren Baghdasaryan, Michal Hocko, linux-mm, linux-kernel
On Thu, 30 Apr 2026 12:18:03 -0700 Matthew Brost <matthew.brost@intel.com> wrote:
> TTM allocations at higher orders can drive Xe into a pathological
> reclaim loop when memory is fragmented:
>
> kswapd → shrinker → eviction → rebind (exec ioctl) → repeat
>
> In this state, reclaim is triggered despite substantial free memory,
> but fails to produce contiguous higher-order pages. The Xe shrinker then
> evicts active buffer objects, increasing faulting and rebind activity
> and further feeding the loop. The result is high CPU overhead and poor
> GPU forward progress.
>
> ...
>
> This series addresses the issue in two ways:
>
> TTM: Restrict direct reclaim to beneficial_order. Larger allocations
> use __GFP_NORETRY to fail quickly rather than triggering reclaim.
>
> Xe: Introduce a heuristic in the shrinker to avoid eviction when
> running under kswapd and the system appears memory-rich but
> fragmented.
Please cc everyone on all the patches? It's kind of annoying to have
to hunt around to find out how these proposed changes will be used.
Personal preference, anyway.
AI review flagged a few possible issues:
https://sashiko.dev/#/patchset/20260430191809.2142544-1-matthew.brost@intel.com
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v4 2/6] mm: Introduce zone_maybe_fragmented_in_shrinker()
2026-04-30 19:18 ` [PATCH v4 2/6] mm: Introduce zone_maybe_fragmented_in_shrinker() Matthew Brost
@ 2026-05-01 0:50 ` Santa, Carlos
2026-05-01 19:08 ` PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation Kenneth Crudup
1 sibling, 0 replies; 24+ messages in thread
From: Santa, Carlos @ 2026-05-01 0:50 UTC (permalink / raw)
To: intel-xe@lists.freedesktop.org, Brost, Matthew,
dri-devel@lists.freedesktop.org
Cc: linux-kernel@vger.kernel.org, Liam.Howlett@oracle.com,
david@kernel.org, surenb@google.com, akpm@linux-foundation.org,
thomas.hellstrom@linux.intel.com, ljs@kernel.org,
vbabka@kernel.org, linux-mm@kvack.org, rppt@kernel.org,
mhocko@suse.com
On Thu, 2026-04-30 at 12:18 -0700, Matthew Brost wrote:
> Introduce zone_maybe_fragmented_in_shrinker() as a lightweight helper
> to
> allow subsystems to make coarse decisions about reclaim behavior in
> the
> presence of likely fragmentation.
>
> The helper implements a simple heuristic: if the number of free pages
> in a zone exceeds twice the high watermark, the zone is considered to
> have ample free memory and allocation failures are more likely due to
> fragmentation than overall memory pressure.
>
> This is intentionally imprecise and is not meant to replace the core
> MM compaction or fragmentation accounting logic. Instead, it provides
> a cheap signal for callers (e.g., shrinkers) that wish to avoid
> overly aggressive reclaim when sufficient free memory exists but
> high-order allocations may still fail.
>
> No functional changes; this is a preparatory helper for future users.
>
> Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: David Hildenbrand <david@kernel.org>
> Cc: Lorenzo Stoakes <ljs@kernel.org>
> Cc: "Liam R. Howlett" <Liam.Howlett@oracle.com>
> Cc: Vlastimil Babka <vbabka@kernel.org>
> Cc: Mike Rapoport <rppt@kernel.org>
> Cc: Suren Baghdasaryan <surenb@google.com>
> Cc: Michal Hocko <mhocko@suse.com>
> Cc: linux-mm@kvack.org
> Cc: linux-kernel@vger.kernel.org
> Signed-off-by: Matthew Brost <matthew.brost@intel.com>
>
> ---
>
> v3: s/zone_appear_fragmented/zone_maybe_fragmented_in_shrinker (David
> Hildenbrand)
> ---
> include/linux/vmstat.h | 12 ++++++++++++
> 1 file changed, 12 insertions(+)
>
> diff --git a/include/linux/vmstat.h b/include/linux/vmstat.h
> index 3c9c266cf782..1ad48f70c9d9 100644
> --- a/include/linux/vmstat.h
> +++ b/include/linux/vmstat.h
> @@ -483,6 +483,18 @@ static inline const char *zone_stat_name(enum
> zone_stat_item item)
> return vmstat_text[item];
> }
>
on the below heuristic, I was thinking of the following case: a large
memory system (say 16G, 32G), heavily fragmented (for whatever reason)
but constraint by the IOMMU requiring large pages due to hw alignment,
if I am not mistaken the below check will cause the shrinker to bail
out too 'early' since the there's plenty of available memory but none
of that is contiguous, then end result should be giving back small
pages which should reduce performance, right?
below are some made up numbers:
Metric | 8GB | 16GB
----------------|-------------------|-------------------
High Wmark | ~45MB (11k pgs) | ~90MB (23k pgs)
Bail Gate (2x) | ~90MB (22k pgs) | ~180MB (46k pgs)
Free RAM | 120MB | 7100MB (7.1GB)
Shrinker | RUNS (Free<Gate) | BAILS (Free>Gate)
Outcome | Merges 2MB blocks | 4KB pages
In other words, replacing the check with numbers:
System | Free RAM (Pages) | Gate (Pages) | Free < Gate? | Result
-------------|------------------|--------------|--------------|-------
8GB | 20,480 (80MB) | 22,946 | 20480 < 22946| RUNS
16GB | 1,832,740 (7.1G) | 45,894 | 1.8M < 45k? | BAILS
Carlos
> +static inline bool zone_maybe_fragmented_in_shrinker(struct zone
> *zone)
> +{
> + /*
> + * Simple heuristic: if the number of free pages is more
> than twice the
> + * high watermark, this may suggest that the zone is heavily
> fragmented.
> + * When called from a shrinker, aggressively evicting memory
> in this case
> + * may do more harm to overall system performance than good.
> + */
> + return zone_page_state(zone, NR_FREE_PAGES) >
> + high_wmark_pages(zone) * 2;
> +}
> +
> #ifdef CONFIG_NUMA
> static inline const char *numa_stat_name(enum numa_stat_item item)
> {
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation
2026-04-30 19:18 [PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation Matthew Brost
` (9 preceding siblings ...)
2026-04-30 23:01 ` [PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation Andrew Morton
@ 2026-05-01 1:42 ` Dave Chinner
2026-05-01 7:09 ` Matthew Brost
2026-05-01 8:00 ` ✓ Xe.CI.FULL: success for mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation (rev3) Patchwork
11 siblings, 1 reply; 24+ messages in thread
From: Dave Chinner @ 2026-05-01 1:42 UTC (permalink / raw)
To: Matthew Brost
Cc: intel-xe, dri-devel, Dave Chinner, Qi Zheng, Roman Gushchin,
Johannes Weiner, Shakeel Butt, Kairui Song, Barry Song,
Axel Rasmussen, Yuanchu Xie, Wei Xu, Tvrtko Ursulin,
Thomas Hellström, Carlos Santa, Christian Koenig, Huang Rui,
Matthew Auld, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
David Airlie, Simona Vetter, Daniel Colascione, Andrew Morton,
David Hildenbrand, Lorenzo Stoakes, Liam R. Howlett,
Vlastimil Babka, Mike Rapoport, Suren Baghdasaryan, Michal Hocko,
linux-mm, linux-kernel
On Thu, Apr 30, 2026 at 12:18:03PM -0700, Matthew Brost wrote:
> TTM allocations at higher orders can drive Xe into a pathological
> reclaim loop when memory is fragmented:
>
> kswapd → shrinker → eviction → rebind (exec ioctl) → repeat
>
> In this state, reclaim is triggered despite substantial free memory,
> but fails to produce contiguous higher-order pages. The Xe shrinker then
> evicts active buffer objects, increasing faulting and rebind activity
> and further feeding the loop. The result is high CPU overhead and poor
> GPU forward progress.
>
> This issue was first reported in [1] and independently observed
> internally and by Google.
>
> A simple reproducer is:
>
> - Boot an iGPU system with mem=8G
> - Launch 10 Chrome tabs running the WebGL aquarium demo
> - Configure each tab with ~5k fish
>
> Under this workload, ftrace shows a continuous loop of:
>
> xe_shrinker_scan (kswapd)
> xe_vma_rebind_exec
>
> Performance degrades significantly, with each tab dropping to ~2 FPS on
> PTL (Ubuntu 24.04).
>
> At the same time, /proc/buddyinfo shows substantial free memory but no
> higher-order availability. For example, the Normal zone:
>
> Count: 4063 4595 3455 3400 3139 2762 2293 1655 643 0 0
>
> This corresponds to ~2.8GB free memory, but no order-9 (2MB) blocks,
> indicating severe fragmentation.
>
> This series addresses the issue in two ways:
>
> TTM: Restrict direct reclaim to beneficial_order. Larger allocations
> use __GFP_NORETRY to fail quickly rather than triggering reclaim.
NACK.
As I have said to the people trying to hack around direct reclaim
for high order allocations being costly for the page cache, fix the
problem with direct reclaim. (e.g.
https://lore.kernel.org/linux-xfs/adLlrSZ5oRAa_Hfd@dread/)
We should not be hacking around a problem in the mm infrastructure
by changing allocation context flags every high order allocation
call site that needs high order allocations. Understand and fix the
infrastructure problem once and for all.
> Xe: Introduce a heuristic in the shrinker to avoid eviction when
> running under kswapd and the system appears memory-rich but
> fragmented.
NACK on architectural grounds.
Custom heuristics in individual shrinkers to decide whether the
should do what the mm subsystem has asked them to do has -always-
been a mistake to allow. The mm subsystem makes the decision on how
much cache shrinkage needs to occur, the shrinkers just do what they
are told to do.
If we have a problem where a workload causes excessive shrinker
reclaim, then we need to address the problem in the infrastructure
because excessive reclaim affects the performance of -all-
subsystems with shrinkable caches, not just the TTM subsystem.
As it is, I can't review what you've actually implemented because
you only cc'd me on a single patch in the series. In future, please
cc me on the whole patchset because shrinkers need to work as a
coherent whole, not just in isolation....
-Dave.
--
Dave Chinner
dgc@kernel.org
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation
2026-04-30 23:01 ` [PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation Andrew Morton
@ 2026-05-01 6:28 ` Matthew Brost
2026-05-01 12:51 ` Andrew Morton
0 siblings, 1 reply; 24+ messages in thread
From: Matthew Brost @ 2026-05-01 6:28 UTC (permalink / raw)
To: Andrew Morton
Cc: intel-xe, dri-devel, Dave Chinner, Qi Zheng, Roman Gushchin,
Johannes Weiner, Shakeel Butt, Kairui Song, Barry Song,
Axel Rasmussen, Yuanchu Xie, Wei Xu, Tvrtko Ursulin,
Thomas Hellström, Carlos Santa, Christian Koenig, Huang Rui,
Matthew Auld, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
David Airlie, Simona Vetter, Daniel Colascione, David Hildenbrand,
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka, Mike Rapoport,
Suren Baghdasaryan, Michal Hocko, linux-mm, linux-kernel
On Thu, Apr 30, 2026 at 04:01:05PM -0700, Andrew Morton wrote:
> On Thu, 30 Apr 2026 12:18:03 -0700 Matthew Brost <matthew.brost@intel.com> wrote:
>
> > TTM allocations at higher orders can drive Xe into a pathological
> > reclaim loop when memory is fragmented:
> >
> > kswapd → shrinker → eviction → rebind (exec ioctl) → repeat
> >
> > In this state, reclaim is triggered despite substantial free memory,
> > but fails to produce contiguous higher-order pages. The Xe shrinker then
> > evicts active buffer objects, increasing faulting and rebind activity
> > and further feeding the loop. The result is high CPU overhead and poor
> > GPU forward progress.
> >
> > ...
> >
> > This series addresses the issue in two ways:
> >
> > TTM: Restrict direct reclaim to beneficial_order. Larger allocations
> > use __GFP_NORETRY to fail quickly rather than triggering reclaim.
> >
> > Xe: Introduce a heuristic in the shrinker to avoid eviction when
> > running under kswapd and the system appears memory-rich but
> > fragmented.
>
> Please cc everyone on all the patches? It's kind of annoying to have
> to hunt around to find out how these proposed changes will be used.
> Personal preference, anyway.
>
Will do - we discussed this in the past and thought we landed on Cc
everyone on the cover then individual patches but will blast everyone
going forward.
> AI review flagged a few possible issues:
> https://sashiko.dev/#/patchset/20260430191809.2142544-1-matthew.brost@intel.com
Idk, who authors sashiko but what make it really nice if you could reply
to it to talk things out.
Looking at replies...
- 'Could this global counter drift significantly'
this is looks right for multi-CPU which isn't really the target
here, but will adjust
- 'Additionally, does NR_FREE_PAGES implicitly include CMA pages?'
this is looks right, will adjust
- 'Can high_wmark_pages(zone) evaluate to zero during early boot'
theoretically possible (?), but non-issue IMO, certainly a GPU
shrinker which is current use case this is impossible but maybe
add a warn_on if high_wmark_pages(zone) returns zero
- 'Is this description accurate?'
I inverted the TTM kernel doc vs the code, will fix
Matt
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation
2026-05-01 1:42 ` Dave Chinner
@ 2026-05-01 7:09 ` Matthew Brost
0 siblings, 0 replies; 24+ messages in thread
From: Matthew Brost @ 2026-05-01 7:09 UTC (permalink / raw)
To: Dave Chinner
Cc: intel-xe, dri-devel, Dave Chinner, Qi Zheng, Roman Gushchin,
Johannes Weiner, Shakeel Butt, Kairui Song, Barry Song,
Axel Rasmussen, Yuanchu Xie, Wei Xu, Tvrtko Ursulin,
Thomas Hellström, Carlos Santa, Christian Koenig, Huang Rui,
Matthew Auld, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
David Airlie, Simona Vetter, Daniel Colascione, Andrew Morton,
David Hildenbrand, Lorenzo Stoakes, Liam R. Howlett,
Vlastimil Babka, Mike Rapoport, Suren Baghdasaryan, Michal Hocko,
linux-mm, linux-kernel
On Fri, May 01, 2026 at 11:42:19AM +1000, Dave Chinner wrote:
Thanks for the feedback. I’m looking into this more, and it’s becoming
clear that this is a hard problem—one that will likely require
coordinated work between DRM and core MM to really sort out. That said,
I do think what I have in place is a reasonable short-term fix.
More below.
> On Thu, Apr 30, 2026 at 12:18:03PM -0700, Matthew Brost wrote:
> > TTM allocations at higher orders can drive Xe into a pathological
> > reclaim loop when memory is fragmented:
> >
> > kswapd → shrinker → eviction → rebind (exec ioctl) → repeat
> >
> > In this state, reclaim is triggered despite substantial free memory,
> > but fails to produce contiguous higher-order pages. The Xe shrinker then
> > evicts active buffer objects, increasing faulting and rebind activity
> > and further feeding the loop. The result is high CPU overhead and poor
> > GPU forward progress.
> >
> > This issue was first reported in [1] and independently observed
> > internally and by Google.
> >
> > A simple reproducer is:
> >
> > - Boot an iGPU system with mem=8G
> > - Launch 10 Chrome tabs running the WebGL aquarium demo
> > - Configure each tab with ~5k fish
> >
> > Under this workload, ftrace shows a continuous loop of:
> >
> > xe_shrinker_scan (kswapd)
> > xe_vma_rebind_exec
> >
> > Performance degrades significantly, with each tab dropping to ~2 FPS on
> > PTL (Ubuntu 24.04).
> >
> > At the same time, /proc/buddyinfo shows substantial free memory but no
> > higher-order availability. For example, the Normal zone:
> >
> > Count: 4063 4595 3455 3400 3139 2762 2293 1655 643 0 0
> >
> > This corresponds to ~2.8GB free memory, but no order-9 (2MB) blocks,
> > indicating severe fragmentation.
> >
> > This series addresses the issue in two ways:
> >
> > TTM: Restrict direct reclaim to beneficial_order. Larger allocations
> > use __GFP_NORETRY to fail quickly rather than triggering reclaim.
>
> NACK.
>
> As I have said to the people trying to hack around direct reclaim
> for high order allocations being costly for the page cache, fix the
> problem with direct reclaim. (e.g.
> https://lore.kernel.org/linux-xfs/adLlrSZ5oRAa_Hfd@dread/)
>
I read your response. Maybe this isn't clear what is going here.
At beneficial_order: gfp == __GFP_RECLAIM | __GFP_NORETRY
At order zero: gfp == __GFP_RECLAIM
This roughly existing behavior, the exact changes are here [1].
[1] https://patchwork.freedesktop.org/patch/722247/?series=165329&rev=3
If this is truly a NACK, then we can rethink it—likely by disabling
reclaim at higher orders—but that has its own downsides for DRM and
GPUs. Ideally, you want purgeable BOs to be evicted when a higher-order
allocation fails; you really don’t want to end up in an insane kswap
loop.
> We should not be hacking around a problem in the mm infrastructure
> by changing allocation context flags every high order allocation
> call site that needs high order allocations. Understand and fix the
> infrastructure problem once and for all.
>
Well, I agree that we should aim to fix this in core MM, but as the
saying goes, Rome wasn’t built in a day. The fact is that these GFP
flags do exist, and suddenly drawing a line and declaring them no longer
valid feels a bit unfair. I’ll also note that Intel—and I
personally—have an interest in fixing shrinking, so you can expect
follow-up work here.
> > Xe: Introduce a heuristic in the shrinker to avoid eviction when
> > running under kswapd and the system appears memory-rich but
> > fragmented.
>
> NACK on architectural grounds.
>
> Custom heuristics in individual shrinkers to decide whether the
> should do what the mm subsystem has asked them to do has -always-
> been a mistake to allow. The mm subsystem makes the decision on how
I’m not going to disagree with using custom heuristics in individual
shrinkers, but I’d wager that most shrinkers sadly already implement
custom heuristics.
> much cache shrinkage needs to occur, the shrinkers just do what they
> are told to do.
>
> If we have a problem where a workload causes excessive shrinker
> reclaim, then we need to address the problem in the infrastructure
> because excessive reclaim affects the performance of -all-
> subsystems with shrinkable caches, not just the TTM subsystem.
>
Yes, I agree, and I’ve thought about the implications of simply having
TTM back off when a higher-order allocation fails, even when we actually
have enough memory, and how that would affect everyone. This series at
least fixes the “well, there goes my GUI” problem.
I do have another patch locally that prevents TTM from accidentally
fragmenting memory and triggering the kswap loop, but under enough
pressure I can still get the GUI to lock up for periods of time. With
this series, however, I can’t reproduce that issue.
> As it is, I can't review what you've actually implemented because
> you only cc'd me on a single patch in the series. In future, please
> cc me on the whole patchset because shrinkers need to work as a
> coherent whole, not just in isolation....
>
Sorry about this - Andrew just said the same thing. Here is PW link [2].
Or:
b4 mbox 20260430191809.2142544-1-matthew.brost@intel.com
[2] https://patchwork.freedesktop.org/series/165329/
If you have any ideas on how to fix this in the core, let’s discuss. I
have a bunch of ideas in my head, but core MM isn’t my native domain.
Matt
> -Dave.
> --
> Dave Chinner
> dgc@kernel.org
^ permalink raw reply [flat|nested] 24+ messages in thread
* ✓ Xe.CI.FULL: success for mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation (rev3)
2026-04-30 19:18 [PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation Matthew Brost
` (10 preceding siblings ...)
2026-05-01 1:42 ` Dave Chinner
@ 2026-05-01 8:00 ` Patchwork
11 siblings, 0 replies; 24+ messages in thread
From: Patchwork @ 2026-05-01 8:00 UTC (permalink / raw)
To: Matthew Brost; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 5151 bytes --]
== Series Details ==
Series: mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation (rev3)
URL : https://patchwork.freedesktop.org/series/165329/
State : success
== Summary ==
CI Bug Log - changes from xe-4960-6472756e8384e3945f12b6726dd9dc1ac12f3bb4_FULL -> xe-pw-165329v3_FULL
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (2 -> 2)
------------------------------
No changes in participating hosts
Known issues
------------
Here are the changes found in xe-pw-165329v3_FULL that come from known issues:
### IGT changes ###
#### Possible fixes ####
* igt@kms_cursor_edge_walk@256x256-top-edge@pipe-d-dp-2:
- shard-bmg: [FAIL][1] ([Intel XE#6841]) -> [PASS][2] +1 other test pass
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4960-6472756e8384e3945f12b6726dd9dc1ac12f3bb4/shard-bmg-2/igt@kms_cursor_edge_walk@256x256-top-edge@pipe-d-dp-2.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165329v3/shard-bmg-1/igt@kms_cursor_edge_walk@256x256-top-edge@pipe-d-dp-2.html
* igt@kms_flip@flip-vs-expired-vblank-interruptible:
- shard-lnl: [FAIL][3] ([Intel XE#301] / [Intel XE#3149]) -> [PASS][4] +1 other test pass
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4960-6472756e8384e3945f12b6726dd9dc1ac12f3bb4/shard-lnl-5/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165329v3/shard-lnl-1/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
* igt@kms_hdr@invalid-hdr:
- shard-bmg: [SKIP][5] ([Intel XE#1503]) -> [PASS][6]
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4960-6472756e8384e3945f12b6726dd9dc1ac12f3bb4/shard-bmg-5/igt@kms_hdr@invalid-hdr.html
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165329v3/shard-bmg-7/igt@kms_hdr@invalid-hdr.html
* igt@xe_evict@evict-beng-mixed-many-threads-small:
- shard-bmg: [INCOMPLETE][7] ([Intel XE#6321]) -> [PASS][8]
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4960-6472756e8384e3945f12b6726dd9dc1ac12f3bb4/shard-bmg-4/igt@xe_evict@evict-beng-mixed-many-threads-small.html
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165329v3/shard-bmg-1/igt@xe_evict@evict-beng-mixed-many-threads-small.html
#### Warnings ####
* igt@kms_hdr@brightness-with-hdr:
- shard-bmg: [SKIP][9] ([Intel XE#3544]) -> [SKIP][10] ([Intel XE#3374] / [Intel XE#3544])
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4960-6472756e8384e3945f12b6726dd9dc1ac12f3bb4/shard-bmg-6/igt@kms_hdr@brightness-with-hdr.html
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165329v3/shard-bmg-1/igt@kms_hdr@brightness-with-hdr.html
* igt@kms_tiled_display@basic-test-pattern:
- shard-bmg: [FAIL][11] ([Intel XE#1729] / [Intel XE#7424]) -> [SKIP][12] ([Intel XE#2426] / [Intel XE#5848])
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4960-6472756e8384e3945f12b6726dd9dc1ac12f3bb4/shard-bmg-5/igt@kms_tiled_display@basic-test-pattern.html
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165329v3/shard-bmg-7/igt@kms_tiled_display@basic-test-pattern.html
* igt@kms_tiled_display@basic-test-pattern-with-chamelium:
- shard-bmg: [SKIP][13] ([Intel XE#2426] / [Intel XE#5848]) -> [SKIP][14] ([Intel XE#2509] / [Intel XE#7437])
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4960-6472756e8384e3945f12b6726dd9dc1ac12f3bb4/shard-bmg-9/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165329v3/shard-bmg-5/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
[Intel XE#1503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1503
[Intel XE#1729]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1729
[Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
[Intel XE#2509]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2509
[Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
[Intel XE#3149]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3149
[Intel XE#3374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3374
[Intel XE#3544]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3544
[Intel XE#5848]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5848
[Intel XE#6321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6321
[Intel XE#6841]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6841
[Intel XE#7424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7424
[Intel XE#7437]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7437
Build changes
-------------
* Linux: xe-4960-6472756e8384e3945f12b6726dd9dc1ac12f3bb4 -> xe-pw-165329v3
IGT_8881: aa5853ef5b379b1e4558218c21ef4caeae112184 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-4960-6472756e8384e3945f12b6726dd9dc1ac12f3bb4: 6472756e8384e3945f12b6726dd9dc1ac12f3bb4
xe-pw-165329v3: 165329v3
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165329v3/index.html
[-- Attachment #2: Type: text/html, Size: 6037 bytes --]
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation
2026-05-01 6:28 ` Matthew Brost
@ 2026-05-01 12:51 ` Andrew Morton
0 siblings, 0 replies; 24+ messages in thread
From: Andrew Morton @ 2026-05-01 12:51 UTC (permalink / raw)
To: Matthew Brost
Cc: intel-xe, dri-devel, Dave Chinner, Qi Zheng, Roman Gushchin,
Johannes Weiner, Shakeel Butt, Kairui Song, Barry Song,
Axel Rasmussen, Yuanchu Xie, Wei Xu, Tvrtko Ursulin,
Thomas Hellström, Carlos Santa, Christian Koenig, Huang Rui,
Matthew Auld, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
David Airlie, Simona Vetter, Daniel Colascione, David Hildenbrand,
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka, Mike Rapoport,
Suren Baghdasaryan, Michal Hocko, linux-mm, linux-kernel
On Thu, 30 Apr 2026 23:28:08 -0700 Matthew Brost <matthew.brost@intel.com> wrote:
> > AI review flagged a few possible issues:
> > https://sashiko.dev/#/patchset/20260430191809.2142544-1-matthew.brost@intel.com
>
> Idk, who authors sashiko but what make it really nice if you could reply
> to it to talk things out.
It's a gemini 3 thing, based on prompts developed by Roman
Gushchin and Chris Mason and others. Google is making this available
to kernel developers at a non-trivial expense.
And yes, it would be great if Sashiko were able to learn from our
replies and to fine-tune its checking based on the human corrections.
I've asked for this a few times but didn't really understand the reply
;)
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation
2026-04-30 19:18 ` [PATCH v4 2/6] mm: Introduce zone_maybe_fragmented_in_shrinker() Matthew Brost
2026-05-01 0:50 ` Santa, Carlos
@ 2026-05-01 19:08 ` Kenneth Crudup
2026-05-01 20:00 ` Matthew Brost
1 sibling, 1 reply; 24+ messages in thread
From: Kenneth Crudup @ 2026-05-01 19:08 UTC (permalink / raw)
To: Matthew Brost, intel-xe, dri-devel
Cc: Thomas Hellström, Andrew Morton, David Hildenbrand,
Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka, Mike Rapoport,
Suren Baghdasaryan, Michal Hocko, linux-mm, linux-kernel,
Kenneth C
On 4/30/26 12:18, Matthew Brost wrote:
> Introduce zone_maybe_fragmented_in_shrinker() as a lightweight helper to
> allow subsystems to make coarse decisions about reclaim behavior in the
> presence of likely fragmentation
I'm running Linus' master on my LunarLake (258v) laptop, and sometimes
after compiling a kernel (of all things) I'd see kswapd0 thrash despite
having quite a bit of free memory.
I finally traced it to the xe driver after seeing the "GPUActive" field
in /proc/meminfo suddenly start rising, eventually growing larger than
real memory by several times (see below).
This patchset fixes the issue, and I'm sure there'll be a fix going into
Linus' master soon, but what I'M wondering is how could building a
kernel (which is just in a KDE Konsole running on Wayland) make the
GPActive grow from ~1.6G to > 30G (and continue to rise, RN I'm seeing
91839848 kBs and still growing).
-Kenny
----
SwapTotal: 33554428 kB
MemTotal: 32345672 kB
GPUActive: 652640 kB
GPUReclaim: 403988 kB
SwapTotal: 33554428 kB
MemTotal: 32345672 kB
GPUActive: 651180 kB
GPUReclaim: 406812 kB
SwapTotal: 33554428 kB
MemTotal: 32345672 kB
GPUActive: 659004 kB
GPUReclaim: 399396 kB
SwapTotal: 33554428 kB
MemTotal: 32345672 kB
GPUActive: 666996 kB
GPUReclaim: 392764 kB
<some hours later>
GPUActive: 91832468 kB
SwapTotal: 33554428 kB
MemTotal: 32345672 kB
GPUReclaim: 488000 kB
GPUActive: 91832332 kB
SwapTotal: 33554428 kB
MemTotal: 32345672 kB
GPUReclaim: 487988 kB
GPUActive: 91869376 kB
SwapTotal: 33554428 kB
MemTotal: 32345672 kB
GPUReclaim: 486504 kB
----
--
Kenneth R. Crudup / Sr. SW Engineer, Scott County Consulting, Orange
County CA
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation
2026-05-01 19:08 ` PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation Kenneth Crudup
@ 2026-05-01 20:00 ` Matthew Brost
2026-05-01 20:05 ` Kenneth Crudup
0 siblings, 1 reply; 24+ messages in thread
From: Matthew Brost @ 2026-05-01 20:00 UTC (permalink / raw)
To: Kenneth Crudup, airlied
Cc: intel-xe, dri-devel, Thomas Hellström, Andrew Morton,
David Hildenbrand, Lorenzo Stoakes, Liam R. Howlett,
Vlastimil Babka, Mike Rapoport, Suren Baghdasaryan, Michal Hocko,
linux-mm, linux-kernel
On Fri, May 01, 2026 at 12:08:48PM -0700, Kenneth Crudup wrote:
>
> On 4/30/26 12:18, Matthew Brost wrote:
>
> > Introduce zone_maybe_fragmented_in_shrinker() as a lightweight helper to
> > allow subsystems to make coarse decisions about reclaim behavior in the
> > presence of likely fragmentation
>
> I'm running Linus' master on my LunarLake (258v) laptop, and sometimes after
+Dave
So is this 7.1-rc1? It looks like new feature to 7.1 added by Dave [1] and
something look off here. Thanks for pointing this out.
I'm grabbing a machine now to see if I can recreate this...
Matt
[1] git format-patch -1 2232ba9c7931d
> compiling a kernel (of all things) I'd see kswapd0 thrash despite having
> quite a bit of free memory.
>
> I finally traced it to the xe driver after seeing the "GPUActive" field in
> /proc/meminfo suddenly start rising, eventually growing larger than real
> memory by several times (see below).
>
> This patchset fixes the issue, and I'm sure there'll be a fix going into
> Linus' master soon, but what I'M wondering is how could building a kernel
> (which is just in a KDE Konsole running on Wayland) make the GPActive grow
> from ~1.6G to > 30G (and continue to rise, RN I'm seeing 91839848 kBs and
> still growing).
>
> -Kenny
>
> ----
> SwapTotal: 33554428 kB
> MemTotal: 32345672 kB
> GPUActive: 652640 kB
> GPUReclaim: 403988 kB
>
> SwapTotal: 33554428 kB
> MemTotal: 32345672 kB
> GPUActive: 651180 kB
> GPUReclaim: 406812 kB
>
> SwapTotal: 33554428 kB
> MemTotal: 32345672 kB
> GPUActive: 659004 kB
> GPUReclaim: 399396 kB
>
> SwapTotal: 33554428 kB
> MemTotal: 32345672 kB
> GPUActive: 666996 kB
> GPUReclaim: 392764 kB
>
> <some hours later>
> GPUActive: 91832468 kB
> SwapTotal: 33554428 kB
> MemTotal: 32345672 kB
> GPUReclaim: 488000 kB
>
> GPUActive: 91832332 kB
> SwapTotal: 33554428 kB
> MemTotal: 32345672 kB
> GPUReclaim: 487988 kB
>
> GPUActive: 91869376 kB
> SwapTotal: 33554428 kB
> MemTotal: 32345672 kB
> GPUReclaim: 486504 kB
> ----
>
> --
> Kenneth R. Crudup / Sr. SW Engineer, Scott County Consulting, Orange County
> CA
>
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation
2026-05-01 20:00 ` Matthew Brost
@ 2026-05-01 20:05 ` Kenneth Crudup
2026-05-01 21:10 ` Matthew Brost
0 siblings, 1 reply; 24+ messages in thread
From: Kenneth Crudup @ 2026-05-01 20:05 UTC (permalink / raw)
To: Matthew Brost, airlied
Cc: intel-xe, dri-devel, Thomas Hellström, Andrew Morton,
David Hildenbrand, Lorenzo Stoakes, Liam R. Howlett,
Vlastimil Babka, Mike Rapoport, Suren Baghdasaryan, Michal Hocko,
linux-mm, linux-kernel
On 5/1/26 13:00, Matthew Brost wrote:
> So is this 7.1-rc1? It looks like new feature to 7.1 added by Dave [1] and
> something look off here. Thanks for pointing this out.
Yeah. I grab his master branch daily (as of 6fe0be6dc7fa RN).
Is this a "shoot the messenger" thing? IOW, is the reporting off, or is
the memory usage really that high?
(BTW, those are in 30-second intervals)
>> ----
>> SwapTotal: 33554428 kB
>> MemTotal: 32345672 kB
>> GPUActive: 652640 kB
>> GPUReclaim: 403988 kB
>>
>> SwapTotal: 33554428 kB
>> MemTotal: 32345672 kB
>> GPUActive: 651180 kB
>> GPUReclaim: 406812 kB
>>
>> SwapTotal: 33554428 kB
>> MemTotal: 32345672 kB
>> GPUActive: 659004 kB
>> GPUReclaim: 399396 kB
>>
>> SwapTotal: 33554428 kB
>> MemTotal: 32345672 kB
>> GPUActive: 666996 kB
>> GPUReclaim: 392764 kB
>>
>> <some hours later>
>> GPUActive: 91832468 kB
>> SwapTotal: 33554428 kB
>> MemTotal: 32345672 kB
>> GPUReclaim: 488000 kB
>>
>> GPUActive: 91832332 kB
>> SwapTotal: 33554428 kB
>> MemTotal: 32345672 kB
>> GPUReclaim: 487988 kB
>>
>> GPUActive: 91869376 kB
>> SwapTotal: 33554428 kB
>> MemTotal: 32345672 kB
>> GPUReclaim: 486504 kB
>> ----
-K
--
Kenneth R. Crudup / Sr. SW Engineer, Scott County Consulting, Orange
County CA
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation
2026-05-01 20:05 ` Kenneth Crudup
@ 2026-05-01 21:10 ` Matthew Brost
2026-05-01 22:33 ` Matthew Brost
0 siblings, 1 reply; 24+ messages in thread
From: Matthew Brost @ 2026-05-01 21:10 UTC (permalink / raw)
To: Kenneth Crudup
Cc: airlied, intel-xe, dri-devel, Thomas Hellström,
Andrew Morton, David Hildenbrand, Lorenzo Stoakes,
Liam R. Howlett, Vlastimil Babka, Mike Rapoport,
Suren Baghdasaryan, Michal Hocko, linux-mm, linux-kernel
On Fri, May 01, 2026 at 01:05:57PM -0700, Kenneth Crudup wrote:
>
> On 5/1/26 13:00, Matthew Brost wrote:
>
> > So is this 7.1-rc1? It looks like new feature to 7.1 added by Dave [1] and
> > something look off here. Thanks for pointing this out.
>
> Yeah. I grab his master branch daily (as of 6fe0be6dc7fa RN).
>
> Is this a "shoot the messenger" thing? IOW, is the reporting off, or is the
I don't think I'm firing any shots.
> memory usage really that high?
I've been able to recreate this. It looks like accounting is correct
until the Xe shrinker runs - every time it kicks in GPUActive grows and
will not reduce past some new floor value. It looks like an accounting
bug in TTM or Xe (?).
Here is my output on a 8G PTL where I have intentionally triggered
shrinker to evict at least 23875 BOs (most likey quite few more but this
what I easily see in dmesg) after closing everything on desktop.
cat /proc/meminfo | grep GPU; cat /proc/buddyinfo;
GPUActive: 13100036 kB
GPUReclaim: 152 kB
Node 0, zone DMA 0 1 0 0 0 0 0 0 1 1 3
Node 0, zone DMA32 2320 1882 1523 1238 980 740 482 275 114 88 205
Node 0, zone Normal 9751 9343 6466 4237 2703 1162 805 420 191 145 289
Let me spend a bit of time here to see if I figure out where the
accounting goes wrong.
Matt
>
> (BTW, those are in 30-second intervals)
>
> > > ----
> > > SwapTotal: 33554428 kB
> > > MemTotal: 32345672 kB
> > > GPUActive: 652640 kB
> > > GPUReclaim: 403988 kB
> > >
> > > SwapTotal: 33554428 kB
> > > MemTotal: 32345672 kB
> > > GPUActive: 651180 kB
> > > GPUReclaim: 406812 kB
> > >
> > > SwapTotal: 33554428 kB
> > > MemTotal: 32345672 kB
> > > GPUActive: 659004 kB
> > > GPUReclaim: 399396 kB
> > >
> > > SwapTotal: 33554428 kB
> > > MemTotal: 32345672 kB
> > > GPUActive: 666996 kB
> > > GPUReclaim: 392764 kB
> > >
> > > <some hours later>
> > > GPUActive: 91832468 kB
> > > SwapTotal: 33554428 kB
> > > MemTotal: 32345672 kB
> > > GPUReclaim: 488000 kB
> > >
> > > GPUActive: 91832332 kB
> > > SwapTotal: 33554428 kB
> > > MemTotal: 32345672 kB
> > > GPUReclaim: 487988 kB
> > >
> > > GPUActive: 91869376 kB
> > > SwapTotal: 33554428 kB
> > > MemTotal: 32345672 kB
> > > GPUReclaim: 486504 kB
> > > ----
>
> -K
>
> --
> Kenneth R. Crudup / Sr. SW Engineer, Scott County Consulting, Orange County
> CA
>
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation
2026-05-01 21:10 ` Matthew Brost
@ 2026-05-01 22:33 ` Matthew Brost
2026-05-01 23:23 ` Kenneth Crudup
0 siblings, 1 reply; 24+ messages in thread
From: Matthew Brost @ 2026-05-01 22:33 UTC (permalink / raw)
To: Kenneth Crudup
Cc: airlied, intel-xe, dri-devel, Thomas Hellström,
Andrew Morton, David Hildenbrand, Lorenzo Stoakes,
Liam R. Howlett, Vlastimil Babka, Mike Rapoport,
Suren Baghdasaryan, Michal Hocko, linux-mm, linux-kernel
On Fri, May 01, 2026 at 02:10:07PM -0700, Matthew Brost wrote:
> On Fri, May 01, 2026 at 01:05:57PM -0700, Kenneth Crudup wrote:
> >
> > On 5/1/26 13:00, Matthew Brost wrote:
> >
> > > So is this 7.1-rc1? It looks like new feature to 7.1 added by Dave [1] and
> > > something look off here. Thanks for pointing this out.
> >
> > Yeah. I grab his master branch daily (as of 6fe0be6dc7fa RN).
> >
> > Is this a "shoot the messenger" thing? IOW, is the reporting off, or is the
>
> I don't think I'm firing any shots.
>
> > memory usage really that high?
>
> I've been able to recreate this. It looks like accounting is correct
> until the Xe shrinker runs - every time it kicks in GPUActive grows and
> will not reduce past some new floor value. It looks like an accounting
> bug in TTM or Xe (?).
>
> Here is my output on a 8G PTL where I have intentionally triggered
> shrinker to evict at least 23875 BOs (most likey quite few more but this
> what I easily see in dmesg) after closing everything on desktop.
>
> cat /proc/meminfo | grep GPU; cat /proc/buddyinfo;
> GPUActive: 13100036 kB
> GPUReclaim: 152 kB
> Node 0, zone DMA 0 1 0 0 0 0 0 0 1 1 3
> Node 0, zone DMA32 2320 1882 1523 1238 980 740 482 275 114 88 205
> Node 0, zone Normal 9751 9343 6466 4237 2703 1162 805 420 191 145 289
>
> Let me spend a bit of time here to see if I figure out where the
> accounting goes wrong.
>
Looks like a simple accounting error in the shrinking path. Here is a fix
[1] that seems to work for me.
If you want to give a it try, that would be helpful.
Matt
[1] https://patchwork.freedesktop.org/series/165862/
> Matt
>
> >
> > (BTW, those are in 30-second intervals)
> >
> > > > ----
> > > > SwapTotal: 33554428 kB
> > > > MemTotal: 32345672 kB
> > > > GPUActive: 652640 kB
> > > > GPUReclaim: 403988 kB
> > > >
> > > > SwapTotal: 33554428 kB
> > > > MemTotal: 32345672 kB
> > > > GPUActive: 651180 kB
> > > > GPUReclaim: 406812 kB
> > > >
> > > > SwapTotal: 33554428 kB
> > > > MemTotal: 32345672 kB
> > > > GPUActive: 659004 kB
> > > > GPUReclaim: 399396 kB
> > > >
> > > > SwapTotal: 33554428 kB
> > > > MemTotal: 32345672 kB
> > > > GPUActive: 666996 kB
> > > > GPUReclaim: 392764 kB
> > > >
> > > > <some hours later>
> > > > GPUActive: 91832468 kB
> > > > SwapTotal: 33554428 kB
> > > > MemTotal: 32345672 kB
> > > > GPUReclaim: 488000 kB
> > > >
> > > > GPUActive: 91832332 kB
> > > > SwapTotal: 33554428 kB
> > > > MemTotal: 32345672 kB
> > > > GPUReclaim: 487988 kB
> > > >
> > > > GPUActive: 91869376 kB
> > > > SwapTotal: 33554428 kB
> > > > MemTotal: 32345672 kB
> > > > GPUReclaim: 486504 kB
> > > > ----
> >
> > -K
> >
> > --
> > Kenneth R. Crudup / Sr. SW Engineer, Scott County Consulting, Orange County
> > CA
> >
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation
2026-05-01 22:33 ` Matthew Brost
@ 2026-05-01 23:23 ` Kenneth Crudup
0 siblings, 0 replies; 24+ messages in thread
From: Kenneth Crudup @ 2026-05-01 23:23 UTC (permalink / raw)
To: Matthew Brost; +Cc: airlied, intel-xe
On 5/1/26 15:33, Matthew Brost wrote:
> Looks like a simple accounting error in the shrinking path. Here is a fix
> [1] that seems to work for me.
NGL, I lucked out with this error; I wouldn't have tracked down your
patch series if I hadn't started looking at the Xe driver 'cause of that
huge GPUActive value, rightly or wrongly- I was about to begin the
potentially-painful process of un-merging the last DRM/Xe series from
Linus' master (the thrashing doesn't happen in 7.0).
-Kenny "So ... thanks, Dave! :)" Crudup
--
Kenneth R. Crudup / Sr. SW Engineer, Scott County Consulting, Orange
County CA
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v4 3/6] drm/ttm: Issue direct reclaim at beneficial_order
2026-04-30 19:18 ` [PATCH v4 3/6] drm/ttm: Issue direct reclaim at beneficial_order Matthew Brost
@ 2026-05-04 7:16 ` Christian König
0 siblings, 0 replies; 24+ messages in thread
From: Christian König @ 2026-05-04 7:16 UTC (permalink / raw)
To: Matthew Brost, intel-xe, dri-devel
Cc: Tvrtko Ursulin, Thomas Hellström, Carlos Santa, Huang Rui,
Matthew Auld, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
David Airlie, Simona Vetter, Daniel Colascione, Andi Shyti
On 4/30/26 21:18, Matthew Brost wrote:
> Triggering kswap at an order higher than beneficial_order makes little
> sense, as the driver has already indicated the optimal order at which
> reclaim is effective. Similarly, issuing direct reclaim or triggering
> kswap at a lower order than beneficial_order is ineffective, since the
> driver does not benefit from reclaiming lower-order pages.
>
> As a result, direct reclaim should only be issued with __GFP_NORETRY at
> exactly beneficial_order, or as a fallback, direct reclaim without
> __GFP_NORETRY at order 0 when failure is not an option.
>
> Cc: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
> Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> Cc: Carlos Santa <carlos.santa@intel.com>
> Cc: Christian Koenig <christian.koenig@amd.com>
> Cc: Huang Rui <ray.huang@amd.com>
> Cc: Matthew Auld <matthew.auld@intel.com>
> Cc: Matthew Brost <matthew.brost@intel.com>
> Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> Cc: Maxime Ripard <mripard@kernel.org>
> Cc: Thomas Zimmermann <tzimmermann@suse.de>
> Cc: David Airlie <airlied@gmail.com>
> Cc: Simona Vetter <simona@ffwll.ch>
> CC: dri-devel@lists.freedesktop.org
> Cc: Daniel Colascione <dancol@dancol.org>
> Signed-off-by: Matthew Brost <matthew.brost@intel.com>
> Reviewed-by: Christian Koenig <christian.koenig@amd.com>
> Reviewed-by: Andi Shyti <andi.shyti@linux.intel.com>
> ---
> drivers/gpu/drm/ttm/ttm_pool.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/ttm/ttm_pool.c b/drivers/gpu/drm/ttm/ttm_pool.c
> index 26a3689e5fd9..8425dbcc6c68 100644
> --- a/drivers/gpu/drm/ttm/ttm_pool.c
> +++ b/drivers/gpu/drm/ttm/ttm_pool.c
> @@ -165,8 +165,8 @@ static struct page *ttm_pool_alloc_page(struct ttm_pool *pool, gfp_t gfp_flags,
> * Do not add latency to the allocation path for allocations orders
> * device tolds us do not bring them additional performance gains.
> */
> - if (beneficial_order && order > beneficial_order)
> - gfp_flags &= ~__GFP_DIRECT_RECLAIM;
> + if (order && beneficial_order && order != beneficial_order)
> + gfp_flags &= ~__GFP_RECLAIM;
Just one additional nit: The subject line says "direct reclaim" but we disable both direct as well as kswapd based reclaim.
Potentially just update the subject line.
Regards,
Christian.
>
> if (!ttm_pool_uses_dma_alloc(pool)) {
> p = alloc_pages_node(pool->nid, gfp_flags, order);
^ permalink raw reply [flat|nested] 24+ messages in thread
end of thread, other threads:[~2026-05-04 12:43 UTC | newest]
Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-30 19:18 [PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation Matthew Brost
2026-04-30 19:18 ` [PATCH v4 1/6] mm: Wire up order in shrink_control Matthew Brost
2026-04-30 19:18 ` [PATCH v4 2/6] mm: Introduce zone_maybe_fragmented_in_shrinker() Matthew Brost
2026-05-01 0:50 ` Santa, Carlos
2026-05-01 19:08 ` PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation Kenneth Crudup
2026-05-01 20:00 ` Matthew Brost
2026-05-01 20:05 ` Kenneth Crudup
2026-05-01 21:10 ` Matthew Brost
2026-05-01 22:33 ` Matthew Brost
2026-05-01 23:23 ` Kenneth Crudup
2026-04-30 19:18 ` [PATCH v4 3/6] drm/ttm: Issue direct reclaim at beneficial_order Matthew Brost
2026-05-04 7:16 ` Christian König
2026-04-30 19:18 ` [PATCH v4 4/6] drm/ttm: Introduce ttm_bo_shrink_kswap_maybe_fragmented() Matthew Brost
2026-04-30 19:18 ` [PATCH v4 5/6] drm/xe: Set TTM device beneficial_order to 9 (2M) Matthew Brost
2026-04-30 19:18 ` [PATCH v4 6/6] drm/xe: Avoid shrinker reclaim from kswapd under fragmentation Matthew Brost
2026-04-30 20:04 ` ✗ CI.checkpatch: warning for mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation (rev3) Patchwork
2026-04-30 20:06 ` ✓ CI.KUnit: success " Patchwork
2026-04-30 21:15 ` ✓ Xe.CI.BAT: " Patchwork
2026-04-30 23:01 ` [PATCH v4 0/6] mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation Andrew Morton
2026-05-01 6:28 ` Matthew Brost
2026-05-01 12:51 ` Andrew Morton
2026-05-01 1:42 ` Dave Chinner
2026-05-01 7:09 ` Matthew Brost
2026-05-01 8:00 ` ✓ Xe.CI.FULL: success for mm, drm/ttm, drm/xe: Avoid reclaim/eviction loops under fragmentation (rev3) Patchwork
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox