* [PATCH 02/12] drm/xe: Introduce GGTT documentation
2024-08-21 19:38 [PATCH 01/12] drm/xe: Removed unused xe_ggtt_printk Rodrigo Vivi
@ 2024-08-21 19:38 ` Rodrigo Vivi
2024-08-21 19:38 ` [PATCH 03/12] drm/xe: Remove unnecessary drm_mm.h includes Rodrigo Vivi
` (17 subsequent siblings)
18 siblings, 0 replies; 28+ messages in thread
From: Rodrigo Vivi @ 2024-08-21 19:38 UTC (permalink / raw)
To: intel-xe
Cc: lucas.demarchi, Rodrigo Vivi, Matthew Brost, Michal Wajdeczko,
Himal Prasad Ghimiray
Document xe_ggtt and ensure it is part of the built kernel docs.
v2: - Accepted all Michal's suggestions
- Rebased on top of new set_pte per platform/wa function pointer
v3: - Typos and other acronym fixes (Michal)
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com> #v1
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
Documentation/gpu/xe/xe_mm.rst | 15 ++++
drivers/gpu/drm/xe/xe_ggtt.c | 136 +++++++++++++++++++++++------
drivers/gpu/drm/xe/xe_ggtt_types.h | 34 ++++++--
3 files changed, 150 insertions(+), 35 deletions(-)
diff --git a/Documentation/gpu/xe/xe_mm.rst b/Documentation/gpu/xe/xe_mm.rst
index 6c8fd8b4a466..95864a4502dd 100644
--- a/Documentation/gpu/xe/xe_mm.rst
+++ b/Documentation/gpu/xe/xe_mm.rst
@@ -7,6 +7,21 @@ Memory Management
.. kernel-doc:: drivers/gpu/drm/xe/xe_bo_doc.h
:doc: Buffer Objects (BO)
+GGTT
+====
+
+.. kernel-doc:: drivers/gpu/drm/xe/xe_ggtt.c
+ :doc: Global Graphics Translation Table (GGTT)
+
+GGTT Internal API
+-----------------
+
+.. kernel-doc:: drivers/gpu/drm/xe/xe_ggtt_types.h
+ :internal:
+
+.. kernel-doc:: drivers/gpu/drm/xe/xe_ggtt.c
+ :internal:
+
Pagetable building
==================
diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
index add14f3dea1f..dd5cd0df705c 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.c
+++ b/drivers/gpu/drm/xe/xe_ggtt.c
@@ -30,6 +30,39 @@
#include "xe_wa.h"
#include "xe_wopcm.h"
+/**
+ * DOC: Global Graphics Translation Table (GGTT)
+ *
+ * Xe GGTT implements the support for a Global Virtual Address space that is used
+ * for resources that are accessible to privileged (i.e. kernel-mode) processes,
+ * and not tied to a specific user-level process. For example, the Graphics
+ * micro-Controller (GuC) and Display Engine (if present) utilize this Global
+ * address space.
+ *
+ * The Global GTT (GGTT) translates from the Global virtual address to a physical
+ * address that can be accessed by HW. The GGTT is a flat, single-level table.
+ *
+ * Xe implements a simplified version of the GGTT specifically managing only a
+ * certain range of it that goes from the Write Once Protected Content Memory (WOPCM)
+ * Layout to a predefined GUC_GGTT_TOP. This approach avoids complications related to
+ * the GuC (Graphics Microcontroller) hardware limitations. The GuC address space
+ * is limited on both ends of the GGTT, because the GuC shim HW redirects
+ * accesses to those addresses to other HW areas instead of going through the
+ * GGTT. On the bottom end, the GuC can't access offsets below the WOPCM size,
+ * while on the top side the limit is fixed at GUC_GGTT_TOP. To keep things
+ * simple, instead of checking each object to see if they are accessed by GuC or
+ * not, we just exclude those areas from the allocator. Additionally, to simplify
+ * the driver load, we use the maximum WOPCM size in this logic instead of the
+ * programmed one, so we don't need to wait until the actual size to be
+ * programmed is determined (which requires FW fetch) before initializing the
+ * GGTT. These simplifications might waste space in the GGTT (about 20-25 MBs
+ * depending on the platform) but we can live with this. Another benefit of this
+ * is the GuC bootrom can't access anything below the WOPCM max size so anything
+ * the bootrom needs to access (e.g. a RSA key) needs to be placed in the GGTT
+ * above the WOPCM max size. Starting the GGTT allocations above the WOPCM max
+ * give us the correct placement for free.
+ */
+
static u64 xelp_ggtt_pte_encode_bo(struct xe_bo *bo, u64 bo_offset,
u16 pat_index)
{
@@ -164,12 +197,16 @@ static const struct xe_ggtt_pt_ops xelpg_pt_wa_ops = {
.ggtt_set_pte = xe_ggtt_set_pte_and_flush,
};
-/*
- * Early GGTT initialization, which allows to create new mappings usable by the
- * GuC.
- * Mappings are not usable by the HW engines, as it doesn't have scratch /
+/**
+ * xe_ggtt_init_early - Early GGTT initialization
+ * @ggtt: the &xe_ggtt to be initialized
+ *
+ * It allows to create new mappings usable by the GuC.
+ * Mappings are not usable by the HW engines, as it doesn't have scratch nor
* initial clear done to it yet. That will happen in the regular, non-early
- * GGTT init.
+ * GGTT initialization.
+ *
+ * Return: 0 on success or a negative error code on failure.
*/
int xe_ggtt_init_early(struct xe_ggtt *ggtt)
{
@@ -194,29 +231,6 @@ int xe_ggtt_init_early(struct xe_ggtt *ggtt)
if (IS_DGFX(xe) && xe->info.vram_flags & XE_VRAM_FLAGS_NEED64K)
ggtt->flags |= XE_GGTT_FLAGS_64K;
- /*
- * 8B per entry, each points to a 4KB page.
- *
- * The GuC address space is limited on both ends of the GGTT, because
- * the GuC shim HW redirects accesses to those addresses to other HW
- * areas instead of going through the GGTT. On the bottom end, the GuC
- * can't access offsets below the WOPCM size, while on the top side the
- * limit is fixed at GUC_GGTT_TOP. To keep things simple, instead of
- * checking each object to see if they are accessed by GuC or not, we
- * just exclude those areas from the allocator. Additionally, to
- * simplify the driver load, we use the maximum WOPCM size in this logic
- * instead of the programmed one, so we don't need to wait until the
- * actual size to be programmed is determined (which requires FW fetch)
- * before initializing the GGTT. These simplifications might waste space
- * in the GGTT (about 20-25 MBs depending on the platform) but we can
- * live with this.
- *
- * Another benifit of this is the GuC bootrom can't access anything
- * below the WOPCM max size so anything the bootom needs to access (e.g.
- * a RSA key) needs to be placed in the GGTT above the WOPCM max size.
- * Starting the GGTT allocations above the WOPCM max give us the correct
- * placement for free.
- */
if (ggtt->size > GUC_GGTT_TOP)
ggtt->size = GUC_GGTT_TOP;
@@ -262,6 +276,12 @@ static void xe_ggtt_initial_clear(struct xe_ggtt *ggtt)
mutex_unlock(&ggtt->lock);
}
+/**
+ * xe_ggtt_init - Regular non-early GGTT initialization
+ * @ggtt: the &xe_ggtt to be initialized
+ *
+ * Return: 0 on success or a negative error code on failure.
+ */
int xe_ggtt_init(struct xe_ggtt *ggtt)
{
struct xe_device *xe = tile_to_xe(ggtt->tile);
@@ -382,6 +402,18 @@ void xe_ggtt_deballoon(struct xe_ggtt *ggtt, struct drm_mm_node *node)
mutex_unlock(&ggtt->lock);
}
+/**
+ * xe_ggtt_insert_special_node_locked - Locked version to insert a &drm_mm_node into the GGTT
+ * @ggtt: the &xe_ggtt where node will be inserted
+ * @node: the &drm_mm_node to be inserted
+ * @size: size of the node
+ * @align: alignment constrain of the node
+ * @mm_flags: flags to control the node behavior
+ *
+ * To be used in cases where ggtt->lock is already taken.
+ *
+ * Return: 0 on success or a negative error code on failure.
+ */
int xe_ggtt_insert_special_node_locked(struct xe_ggtt *ggtt, struct drm_mm_node *node,
u32 size, u32 align, u32 mm_flags)
{
@@ -389,6 +421,15 @@ int xe_ggtt_insert_special_node_locked(struct xe_ggtt *ggtt, struct drm_mm_node
mm_flags);
}
+/**
+ * xe_ggtt_insert_special_node - Insert a &drm_mm_node into the GGTT
+ * @ggtt: the &xe_ggtt where node will be inserted
+ * @node: the &drm_mm_node to be inserted
+ * @size: size of the node
+ * @align: alignment constrain of the node
+ *
+ * Return: 0 on success or a negative error code on failure.
+ */
int xe_ggtt_insert_special_node(struct xe_ggtt *ggtt, struct drm_mm_node *node,
u32 size, u32 align)
{
@@ -402,6 +443,11 @@ int xe_ggtt_insert_special_node(struct xe_ggtt *ggtt, struct drm_mm_node *node,
return ret;
}
+/**
+ * xe_ggtt_map_bo - Map the BO into GGTT
+ * @ggtt: the &xe_ggtt where node will be mapped
+ * @bo: the &xe_bo to be mapped
+ */
void xe_ggtt_map_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
{
u16 cache_mode = bo->flags & XE_BO_FLAG_NEEDS_UC ? XE_CACHE_NONE : XE_CACHE_WB;
@@ -449,17 +495,39 @@ static int __xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
return err;
}
+/**
+ * xe_ggtt_insert_bo_at - Insert BO at a specific GGTT space
+ * @ggtt: the &xe_ggtt where bo will be inserted
+ * @bo: the &xe_bo to be inserted
+ * @start: address where it will be inserted
+ * @end: end of the range where it will be inserted
+ *
+ * Return: 0 on success or a negative error code on failure.
+ */
int xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
u64 start, u64 end)
{
return __xe_ggtt_insert_bo_at(ggtt, bo, start, end);
}
+/**
+ * xe_ggtt_insert_bo - Insert BO into GGTT
+ * @ggtt: the &xe_ggtt where bo will be inserted
+ * @bo: the &xe_bo to be inserted
+ *
+ * Return: 0 on success or a negative error code on failure.
+ */
int xe_ggtt_insert_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
{
return __xe_ggtt_insert_bo_at(ggtt, bo, 0, U64_MAX);
}
+/**
+ * xe_ggtt_remove_node - Remove a &drm_mm_node from the GGTT
+ * @ggtt: the &xe_ggtt where node will be removed
+ * @node: the &drm_mm_node to be removed
+ * @invalidate: if node needs invalidation upon removal
+ */
void xe_ggtt_remove_node(struct xe_ggtt *ggtt, struct drm_mm_node *node,
bool invalidate)
{
@@ -488,6 +556,11 @@ void xe_ggtt_remove_node(struct xe_ggtt *ggtt, struct drm_mm_node *node,
drm_dev_exit(idx);
}
+/**
+ * xe_ggtt_remove_bo - Remove a BO from the GGTT
+ * @ggtt: the &xe_ggtt where node will be removed
+ * @bo: the &xe_bo to be removed
+ */
void xe_ggtt_remove_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
{
if (XE_WARN_ON(!bo->ggtt_node.size))
@@ -544,6 +617,13 @@ void xe_ggtt_assign(struct xe_ggtt *ggtt, const struct drm_mm_node *node, u16 vf
}
#endif
+/**
+ * xe_ggtt_dump - Dump GGTT for debug
+ * @ggtt: the &xe_ggtt to be dumped
+ * @p: the &drm_mm_printer helper handle to be used to dump the information
+ *
+ * Return: 0 on success or a negative error code on failure.
+ */
int xe_ggtt_dump(struct xe_ggtt *ggtt, struct drm_printer *p)
{
int err;
diff --git a/drivers/gpu/drm/xe/xe_ggtt_types.h b/drivers/gpu/drm/xe/xe_ggtt_types.h
index 2245d88d8f39..154de298a4e3 100644
--- a/drivers/gpu/drm/xe/xe_ggtt_types.h
+++ b/drivers/gpu/drm/xe/xe_ggtt_types.h
@@ -13,30 +13,50 @@
struct xe_bo;
struct xe_gt;
+/**
+ * struct xe_ggtt - Main GGTT struct
+ *
+ * In general, each tile can contains its own Global Graphics Translation Table
+ * (GGTT) instance.
+ */
struct xe_ggtt {
+ /** @tile: Back pointer to tile where this GGTT belongs */
struct xe_tile *tile;
-
+ /** @size: Total size of this GGTT */
u64 size;
#define XE_GGTT_FLAGS_64K BIT(0)
+ /**
+ * @flags: Flags for this GGTT
+ * Acceptable flags:
+ * - %XE_GGTT_FLAGS_64K - if PTE size is 64K. Otherwise, regular is 4K.
+ */
unsigned int flags;
-
+ /** @scratch: Internal object allocation used as a scratch page */
struct xe_bo *scratch;
-
+ /** @lock: Mutex lock to protect GGTT data */
struct mutex lock;
-
+ /**
+ * @gsm: The iomem pointer to the actual location of the translation
+ * table located in the GSM for easy PTE manipulation
+ */
u64 __iomem *gsm;
-
+ /** @pt_ops: Page Table operations per platform */
const struct xe_ggtt_pt_ops *pt_ops;
-
+ /** @mm: The memory manager used to manage individual GGTT allocations */
struct drm_mm mm;
-
/** @access_count: counts GGTT writes */
unsigned int access_count;
};
+/**
+ * struct xe_ggtt_pt_ops - GGTT Page table operations
+ * Which can vary from platform to platform.
+ */
struct xe_ggtt_pt_ops {
+ /** @pte_encode_bo: Encode PTE address for a given BO */
u64 (*pte_encode_bo)(struct xe_bo *bo, u64 bo_offset, u16 pat_index);
+ /** @ggtt_set_pte: Directly write into GGTT's PTE */
void (*ggtt_set_pte)(struct xe_ggtt *ggtt, u64 addr, u64 pte);
};
--
2.46.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* [PATCH 03/12] drm/xe: Remove unnecessary drm_mm.h includes
2024-08-21 19:38 [PATCH 01/12] drm/xe: Removed unused xe_ggtt_printk Rodrigo Vivi
2024-08-21 19:38 ` [PATCH 02/12] drm/xe: Introduce GGTT documentation Rodrigo Vivi
@ 2024-08-21 19:38 ` Rodrigo Vivi
2024-08-21 19:38 ` [PATCH 04/12] drm/{i915, xe}: Avoid direct inspection of dpt_vma from outside dpt Rodrigo Vivi
` (16 subsequent siblings)
18 siblings, 0 replies; 28+ messages in thread
From: Rodrigo Vivi @ 2024-08-21 19:38 UTC (permalink / raw)
To: intel-xe; +Cc: lucas.demarchi, Rodrigo Vivi, Jonathan Cavitt
These includes are no longer necessary, and where appropriate
are replaced by the linux/types.h one.
Reviewed-by: Jonathan Cavitt <jonathan.cavitt@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
drivers/gpu/drm/xe/xe_migrate.h | 2 +-
drivers/gpu/drm/xe/xe_res_cursor.h | 1 -
drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c | 1 -
3 files changed, 1 insertion(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_migrate.h b/drivers/gpu/drm/xe/xe_migrate.h
index 7929cc2425e8..0109866e398a 100644
--- a/drivers/gpu/drm/xe/xe_migrate.h
+++ b/drivers/gpu/drm/xe/xe_migrate.h
@@ -6,7 +6,7 @@
#ifndef _XE_MIGRATE_
#define _XE_MIGRATE_
-#include <drm/drm_mm.h>
+#include <linux/types.h>
struct dma_fence;
struct iosys_map;
diff --git a/drivers/gpu/drm/xe/xe_res_cursor.h b/drivers/gpu/drm/xe/xe_res_cursor.h
index 655af89b31a9..dca374b6521c 100644
--- a/drivers/gpu/drm/xe/xe_res_cursor.h
+++ b/drivers/gpu/drm/xe/xe_res_cursor.h
@@ -26,7 +26,6 @@
#include <linux/scatterlist.h>
-#include <drm/drm_mm.h>
#include <drm/ttm/ttm_placement.h>
#include <drm/ttm/ttm_range_manager.h>
#include <drm/ttm/ttm_resource.h>
diff --git a/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c b/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c
index f46fd2df84de..f7113cf6109d 100644
--- a/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c
@@ -5,7 +5,6 @@
*/
#include <drm/drm_managed.h>
-#include <drm/drm_mm.h>
#include <drm/ttm/ttm_device.h>
#include <drm/ttm/ttm_placement.h>
--
2.46.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* [PATCH 04/12] drm/{i915, xe}: Avoid direct inspection of dpt_vma from outside dpt
2024-08-21 19:38 [PATCH 01/12] drm/xe: Removed unused xe_ggtt_printk Rodrigo Vivi
2024-08-21 19:38 ` [PATCH 02/12] drm/xe: Introduce GGTT documentation Rodrigo Vivi
2024-08-21 19:38 ` [PATCH 03/12] drm/xe: Remove unnecessary drm_mm.h includes Rodrigo Vivi
@ 2024-08-21 19:38 ` Rodrigo Vivi
2024-08-21 19:38 ` [PATCH 05/12] drm/xe: Encapsulate drm_mm_node inside xe_ggtt_node Rodrigo Vivi
` (15 subsequent siblings)
18 siblings, 0 replies; 28+ messages in thread
From: Rodrigo Vivi @ 2024-08-21 19:38 UTC (permalink / raw)
To: intel-xe
Cc: lucas.demarchi, Rodrigo Vivi, Matthew Brost, Maarten Lankhorst,
Juha-Pekka Heikkila, Jonathan Cavitt
DPT code is so dependent on i915 vma implementation and it is not
ported yet to Xe.
This patch limits inspection to DPT's VMA struct to intel_dpt
component only, so the Xe GGTT code can evolve.
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com>
Reviewed-by: Jonathan Cavitt <jonathan.cavitt@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
drivers/gpu/drm/i915/display/intel_dpt.c | 4 ++++
drivers/gpu/drm/i915/display/intel_dpt.h | 3 +++
drivers/gpu/drm/i915/display/skl_universal_plane.c | 3 ++-
drivers/gpu/drm/xe/display/xe_fb_pin.c | 9 +++++++--
4 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dpt.c b/drivers/gpu/drm/i915/display/intel_dpt.c
index 73a1918e2537..3a6d99044828 100644
--- a/drivers/gpu/drm/i915/display/intel_dpt.c
+++ b/drivers/gpu/drm/i915/display/intel_dpt.c
@@ -317,3 +317,7 @@ void intel_dpt_destroy(struct i915_address_space *vm)
i915_vm_put(&dpt->vm);
}
+u64 intel_dpt_offset(struct i915_vma *dpt_vma)
+{
+ return dpt_vma->node.start;
+}
diff --git a/drivers/gpu/drm/i915/display/intel_dpt.h b/drivers/gpu/drm/i915/display/intel_dpt.h
index ff18a525bfbe..1f88b0ee17e7 100644
--- a/drivers/gpu/drm/i915/display/intel_dpt.h
+++ b/drivers/gpu/drm/i915/display/intel_dpt.h
@@ -6,6 +6,8 @@
#ifndef __INTEL_DPT_H__
#define __INTEL_DPT_H__
+#include <linux/types.h>
+
struct drm_i915_private;
struct i915_address_space;
@@ -20,5 +22,6 @@ void intel_dpt_suspend(struct drm_i915_private *i915);
void intel_dpt_resume(struct drm_i915_private *i915);
struct i915_address_space *
intel_dpt_create(struct intel_framebuffer *fb);
+u64 intel_dpt_offset(struct i915_vma *dpt_vma);
#endif /* __INTEL_DPT_H__ */
diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane.c b/drivers/gpu/drm/i915/display/skl_universal_plane.c
index ba5a628b4757..1cf1d5c8b9dc 100644
--- a/drivers/gpu/drm/i915/display/skl_universal_plane.c
+++ b/drivers/gpu/drm/i915/display/skl_universal_plane.c
@@ -14,6 +14,7 @@
#include "intel_de.h"
#include "intel_display_irq.h"
#include "intel_display_types.h"
+#include "intel_dpt.h"
#include "intel_fb.h"
#include "intel_fbc.h"
#include "intel_frontbuffer.h"
@@ -1162,7 +1163,7 @@ static u32 skl_surf_address(const struct intel_plane_state *plane_state,
* within the DPT is always 0.
*/
drm_WARN_ON(&i915->drm, plane_state->dpt_vma &&
- plane_state->dpt_vma->node.start);
+ intel_dpt_offset(plane_state->dpt_vma));
drm_WARN_ON(&i915->drm, offset & 0x1fffff);
return offset >> 9;
} else {
diff --git a/drivers/gpu/drm/xe/display/xe_fb_pin.c b/drivers/gpu/drm/xe/display/xe_fb_pin.c
index d7db44e79eaf..42d431ff14e7 100644
--- a/drivers/gpu/drm/xe/display/xe_fb_pin.c
+++ b/drivers/gpu/drm/xe/display/xe_fb_pin.c
@@ -377,8 +377,8 @@ void intel_plane_unpin_fb(struct intel_plane_state *old_plane_state)
}
/*
- * For Xe introduce dummy intel_dpt_create which just return NULL and
- * intel_dpt_destroy which does nothing.
+ * For Xe introduce dummy intel_dpt_create which just return NULL,
+ * intel_dpt_destroy which does nothing, and fake intel_dpt_ofsset returning 0;
*/
struct i915_address_space *intel_dpt_create(struct intel_framebuffer *fb)
{
@@ -389,3 +389,8 @@ void intel_dpt_destroy(struct i915_address_space *vm)
{
return;
}
+
+u64 intel_dpt_offset(struct i915_vma *dpt_vma)
+{
+ return 0;
+}
--
2.46.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* [PATCH 05/12] drm/xe: Encapsulate drm_mm_node inside xe_ggtt_node
2024-08-21 19:38 [PATCH 01/12] drm/xe: Removed unused xe_ggtt_printk Rodrigo Vivi
` (2 preceding siblings ...)
2024-08-21 19:38 ` [PATCH 04/12] drm/{i915, xe}: Avoid direct inspection of dpt_vma from outside dpt Rodrigo Vivi
@ 2024-08-21 19:38 ` Rodrigo Vivi
2024-08-21 19:38 ` [PATCH 06/12] drm/xe: Rename xe_ggtt_node related functions Rodrigo Vivi
` (14 subsequent siblings)
18 siblings, 0 replies; 28+ messages in thread
From: Rodrigo Vivi @ 2024-08-21 19:38 UTC (permalink / raw)
To: intel-xe; +Cc: lucas.demarchi, Rodrigo Vivi, Matthew Brost
The xe_ggtt component uses drm_mm to manage the GGTT.
The drm_mm_node is just a node inside drm_mm, but in Xe we use that
only in the GGTT context. So, this patch encapsulates the drm_mm_node
into a xe_ggtt's new struct.
This is the first step towards limiting all the drm_mm access
through xe_ggtt. The ultimate goal is to have a better control of
the node insertion and removal, so the removal can be delegated
to a delayed workqueue.
v2: Fix includes and typos (Michal and Brost)
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
| 7 +-
drivers/gpu/drm/xe/display/xe_fb_pin.c | 10 +--
drivers/gpu/drm/xe/xe_bo.c | 2 +-
drivers/gpu/drm/xe/xe_bo.h | 6 +-
drivers/gpu/drm/xe/xe_bo_types.h | 5 +-
drivers/gpu/drm/xe/xe_device_types.h | 2 +-
drivers/gpu/drm/xe/xe_ggtt.c | 72 +++++++++----------
drivers/gpu/drm/xe/xe_ggtt.h | 12 ++--
drivers/gpu/drm/xe/xe_ggtt_types.h | 8 +++
drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c | 39 +++++-----
.../gpu/drm/xe/xe_gt_sriov_pf_config_types.h | 5 +-
11 files changed, 90 insertions(+), 78 deletions(-)
--git a/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h b/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
index a20d2638ea7a..3028ac1ba72f 100644
--- a/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
+++ b/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
@@ -7,7 +7,8 @@
#define I915_VMA_H
#include <uapi/drm/i915_drm.h>
-#include <drm/drm_mm.h>
+
+#include "xe_ggtt_types.h"
/* We don't want these from i915_drm.h in case of Xe */
#undef I915_TILING_X
@@ -19,7 +20,7 @@ struct xe_bo;
struct i915_vma {
struct xe_bo *bo, *dpt;
- struct drm_mm_node node;
+ struct xe_ggtt_node node;
};
#define i915_ggtt_clear_scanout(bo) do { } while (0)
@@ -28,7 +29,7 @@ struct i915_vma {
static inline u32 i915_ggtt_offset(const struct i915_vma *vma)
{
- return vma->node.start;
+ return vma->node.base.start;
}
#endif
diff --git a/drivers/gpu/drm/xe/display/xe_fb_pin.c b/drivers/gpu/drm/xe/display/xe_fb_pin.c
index 42d431ff14e7..a93923fb8721 100644
--- a/drivers/gpu/drm/xe/display/xe_fb_pin.c
+++ b/drivers/gpu/drm/xe/display/xe_fb_pin.c
@@ -204,7 +204,7 @@ static int __xe_pin_fb_vma_ggtt(const struct intel_framebuffer *fb,
if (xe_bo_is_vram(bo) && ggtt->flags & XE_GGTT_FLAGS_64K)
align = max_t(u32, align, SZ_64K);
- if (bo->ggtt_node.size && view->type == I915_GTT_VIEW_NORMAL) {
+ if (bo->ggtt_node.base.size && view->type == I915_GTT_VIEW_NORMAL) {
vma->node = bo->ggtt_node;
} else if (view->type == I915_GTT_VIEW_NORMAL) {
u32 x, size = bo->ttm.base.size;
@@ -218,7 +218,7 @@ static int __xe_pin_fb_vma_ggtt(const struct intel_framebuffer *fb,
u64 pte = ggtt->pt_ops->pte_encode_bo(bo, x,
xe->pat.idx[XE_CACHE_NONE]);
- ggtt->pt_ops->ggtt_set_pte(ggtt, vma->node.start + x, pte);
+ ggtt->pt_ops->ggtt_set_pte(ggtt, vma->node.base.start + x, pte);
}
} else {
u32 i, ggtt_ofs;
@@ -232,7 +232,7 @@ static int __xe_pin_fb_vma_ggtt(const struct intel_framebuffer *fb,
if (ret)
goto out_unlock;
- ggtt_ofs = vma->node.start;
+ ggtt_ofs = vma->node.base.start;
for (i = 0; i < ARRAY_SIZE(rot_info->plane); i++)
write_ggtt_rotated(bo, ggtt, &ggtt_ofs,
@@ -325,8 +325,8 @@ static void __xe_unpin_fb_vma(struct i915_vma *vma)
if (vma->dpt)
xe_bo_unpin_map_no_vm(vma->dpt);
- else if (!drm_mm_node_allocated(&vma->bo->ggtt_node) ||
- vma->bo->ggtt_node.start != vma->node.start)
+ else if (!drm_mm_node_allocated(&vma->bo->ggtt_node.base) ||
+ vma->bo->ggtt_node.base.start != vma->node.base.start)
xe_ggtt_remove_node(ggtt, &vma->node, false);
ttm_bo_reserve(&vma->bo->ttm, false, false, NULL);
diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index 6ed0e1955215..1faef9903b87 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -1120,7 +1120,7 @@ static void xe_ttm_bo_destroy(struct ttm_buffer_object *ttm_bo)
xe_assert(xe, list_empty(&ttm_bo->base.gpuva.list));
- if (bo->ggtt_node.size)
+ if (bo->ggtt_node.base.size)
xe_ggtt_remove_bo(bo->tile->mem.ggtt, bo);
#ifdef CONFIG_PROC_FS
diff --git a/drivers/gpu/drm/xe/xe_bo.h b/drivers/gpu/drm/xe/xe_bo.h
index 935a94279026..9904b410be37 100644
--- a/drivers/gpu/drm/xe/xe_bo.h
+++ b/drivers/gpu/drm/xe/xe_bo.h
@@ -194,9 +194,9 @@ xe_bo_main_addr(struct xe_bo *bo, size_t page_size)
static inline u32
xe_bo_ggtt_addr(struct xe_bo *bo)
{
- XE_WARN_ON(bo->ggtt_node.size > bo->size);
- XE_WARN_ON(bo->ggtt_node.start + bo->ggtt_node.size > (1ull << 32));
- return bo->ggtt_node.start;
+ XE_WARN_ON(bo->ggtt_node.base.size > bo->size);
+ XE_WARN_ON(bo->ggtt_node.base.start + bo->ggtt_node.base.size > (1ull << 32));
+ return bo->ggtt_node.base.start;
}
int xe_bo_vmap(struct xe_bo *bo);
diff --git a/drivers/gpu/drm/xe/xe_bo_types.h b/drivers/gpu/drm/xe/xe_bo_types.h
index ebc8abf7930a..4b1de9f5be00 100644
--- a/drivers/gpu/drm/xe/xe_bo_types.h
+++ b/drivers/gpu/drm/xe/xe_bo_types.h
@@ -8,12 +8,13 @@
#include <linux/iosys-map.h>
-#include <drm/drm_mm.h>
#include <drm/ttm/ttm_bo.h>
#include <drm/ttm/ttm_device.h>
#include <drm/ttm/ttm_execbuf_util.h>
#include <drm/ttm/ttm_placement.h>
+#include "xe_ggtt_types.h"
+
struct xe_device;
struct xe_vm;
@@ -39,7 +40,7 @@ struct xe_bo {
/** @placement: current placement for this BO */
struct ttm_placement placement;
/** @ggtt_node: GGTT node if this BO is mapped in the GGTT */
- struct drm_mm_node ggtt_node;
+ struct xe_ggtt_node ggtt_node;
/** @vmap: iosys map of this buffer */
struct iosys_map vmap;
/** @ttm_kmap: TTM bo kmap object for internal use only. Keep off. */
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index 5ed6f5434f42..f6810e73da1f 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -204,7 +204,7 @@ struct xe_tile {
struct xe_memirq memirq;
/** @sriov.vf.ggtt_balloon: GGTT regions excluded from use. */
- struct drm_mm_node ggtt_balloon[2];
+ struct xe_ggtt_node ggtt_balloon[2];
} vf;
} sriov;
diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
index dd5cd0df705c..1cf682d15253 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.c
+++ b/drivers/gpu/drm/xe/xe_ggtt.c
@@ -351,61 +351,61 @@ static void xe_ggtt_dump_node(struct xe_ggtt *ggtt,
* @ggtt: the &xe_ggtt where we want to make reservation
* @start: the starting GGTT address of the reserved region
* @end: then end GGTT address of the reserved region
- * @node: the &drm_mm_node to hold reserved GGTT node
+ * @node: the &xe_ggtt_node to hold reserved GGTT node
*
* Use xe_ggtt_deballoon() to release a reserved GGTT node.
*
* Return: 0 on success or a negative error code on failure.
*/
-int xe_ggtt_balloon(struct xe_ggtt *ggtt, u64 start, u64 end, struct drm_mm_node *node)
+int xe_ggtt_balloon(struct xe_ggtt *ggtt, u64 start, u64 end, struct xe_ggtt_node *node)
{
int err;
xe_tile_assert(ggtt->tile, start < end);
xe_tile_assert(ggtt->tile, IS_ALIGNED(start, XE_PAGE_SIZE));
xe_tile_assert(ggtt->tile, IS_ALIGNED(end, XE_PAGE_SIZE));
- xe_tile_assert(ggtt->tile, !drm_mm_node_allocated(node));
+ xe_tile_assert(ggtt->tile, !drm_mm_node_allocated(&node->base));
- node->color = 0;
- node->start = start;
- node->size = end - start;
+ node->base.color = 0;
+ node->base.start = start;
+ node->base.size = end - start;
mutex_lock(&ggtt->lock);
- err = drm_mm_reserve_node(&ggtt->mm, node);
+ err = drm_mm_reserve_node(&ggtt->mm, &node->base);
mutex_unlock(&ggtt->lock);
if (xe_gt_WARN(ggtt->tile->primary_gt, err,
"Failed to balloon GGTT %#llx-%#llx (%pe)\n",
- node->start, node->start + node->size, ERR_PTR(err)))
+ node->base.start, node->base.start + node->base.size, ERR_PTR(err)))
return err;
- xe_ggtt_dump_node(ggtt, node, "balloon");
+ xe_ggtt_dump_node(ggtt, &node->base, "balloon");
return 0;
}
/**
* xe_ggtt_deballoon - release a reserved GGTT region
* @ggtt: the &xe_ggtt where reserved node belongs
- * @node: the &drm_mm_node with reserved GGTT region
+ * @node: the &xe_ggtt_node with reserved GGTT region
*
* See xe_ggtt_balloon() for details.
*/
-void xe_ggtt_deballoon(struct xe_ggtt *ggtt, struct drm_mm_node *node)
+void xe_ggtt_deballoon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node)
{
- if (!drm_mm_node_allocated(node))
+ if (!drm_mm_node_allocated(&node->base))
return;
- xe_ggtt_dump_node(ggtt, node, "deballoon");
+ xe_ggtt_dump_node(ggtt, &node->base, "deballoon");
mutex_lock(&ggtt->lock);
- drm_mm_remove_node(node);
+ drm_mm_remove_node(&node->base);
mutex_unlock(&ggtt->lock);
}
/**
- * xe_ggtt_insert_special_node_locked - Locked version to insert a &drm_mm_node into the GGTT
+ * xe_ggtt_insert_special_node_locked - Locked version to insert a &xe_ggtt_node into the GGTT
* @ggtt: the &xe_ggtt where node will be inserted
- * @node: the &drm_mm_node to be inserted
+ * @node: the &xe_ggtt_node to be inserted
* @size: size of the node
* @align: alignment constrain of the node
* @mm_flags: flags to control the node behavior
@@ -414,23 +414,23 @@ void xe_ggtt_deballoon(struct xe_ggtt *ggtt, struct drm_mm_node *node)
*
* Return: 0 on success or a negative error code on failure.
*/
-int xe_ggtt_insert_special_node_locked(struct xe_ggtt *ggtt, struct drm_mm_node *node,
+int xe_ggtt_insert_special_node_locked(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
u32 size, u32 align, u32 mm_flags)
{
- return drm_mm_insert_node_generic(&ggtt->mm, node, size, align, 0,
+ return drm_mm_insert_node_generic(&ggtt->mm, &node->base, size, align, 0,
mm_flags);
}
/**
- * xe_ggtt_insert_special_node - Insert a &drm_mm_node into the GGTT
+ * xe_ggtt_insert_special_node - Insert a &xe_ggtt_node into the GGTT
* @ggtt: the &xe_ggtt where node will be inserted
- * @node: the &drm_mm_node to be inserted
+ * @node: the &xe_ggtt_node to be inserted
* @size: size of the node
* @align: alignment constrain of the node
*
* Return: 0 on success or a negative error code on failure.
*/
-int xe_ggtt_insert_special_node(struct xe_ggtt *ggtt, struct drm_mm_node *node,
+int xe_ggtt_insert_special_node(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
u32 size, u32 align)
{
int ret;
@@ -452,7 +452,7 @@ void xe_ggtt_map_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
{
u16 cache_mode = bo->flags & XE_BO_FLAG_NEEDS_UC ? XE_CACHE_NONE : XE_CACHE_WB;
u16 pat_index = tile_to_xe(ggtt->tile)->pat.idx[cache_mode];
- u64 start = bo->ggtt_node.start;
+ u64 start = bo->ggtt_node.base.start;
u64 offset, pte;
for (offset = 0; offset < bo->size; offset += XE_PAGE_SIZE) {
@@ -470,9 +470,9 @@ static int __xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
if (xe_bo_is_vram(bo) && ggtt->flags & XE_GGTT_FLAGS_64K)
alignment = SZ_64K;
- if (XE_WARN_ON(bo->ggtt_node.size)) {
+ if (XE_WARN_ON(bo->ggtt_node.base.size)) {
/* Someone's already inserted this BO in the GGTT */
- xe_tile_assert(ggtt->tile, bo->ggtt_node.size == bo->size);
+ xe_tile_assert(ggtt->tile, bo->ggtt_node.base.size == bo->size);
return 0;
}
@@ -482,7 +482,7 @@ static int __xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
xe_pm_runtime_get_noresume(tile_to_xe(ggtt->tile));
mutex_lock(&ggtt->lock);
- err = drm_mm_insert_node_in_range(&ggtt->mm, &bo->ggtt_node, bo->size,
+ err = drm_mm_insert_node_in_range(&ggtt->mm, &bo->ggtt_node.base, bo->size,
alignment, 0, start, end, 0);
if (!err)
xe_ggtt_map_bo(ggtt, bo);
@@ -523,12 +523,12 @@ int xe_ggtt_insert_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
}
/**
- * xe_ggtt_remove_node - Remove a &drm_mm_node from the GGTT
+ * xe_ggtt_remove_node - Remove a &xe_ggtt_node from the GGTT
* @ggtt: the &xe_ggtt where node will be removed
- * @node: the &drm_mm_node to be removed
+ * @node: the &xe_ggtt_node to be removed
* @invalidate: if node needs invalidation upon removal
*/
-void xe_ggtt_remove_node(struct xe_ggtt *ggtt, struct drm_mm_node *node,
+void xe_ggtt_remove_node(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
bool invalidate)
{
struct xe_device *xe = tile_to_xe(ggtt->tile);
@@ -541,9 +541,9 @@ void xe_ggtt_remove_node(struct xe_ggtt *ggtt, struct drm_mm_node *node,
mutex_lock(&ggtt->lock);
if (bound)
- xe_ggtt_clear(ggtt, node->start, node->size);
- drm_mm_remove_node(node);
- node->size = 0;
+ xe_ggtt_clear(ggtt, node->base.start, node->base.size);
+ drm_mm_remove_node(&node->base);
+ node->base.size = 0;
mutex_unlock(&ggtt->lock);
if (!bound)
@@ -563,11 +563,11 @@ void xe_ggtt_remove_node(struct xe_ggtt *ggtt, struct drm_mm_node *node,
*/
void xe_ggtt_remove_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
{
- if (XE_WARN_ON(!bo->ggtt_node.size))
+ if (XE_WARN_ON(!bo->ggtt_node.base.size))
return;
/* This BO is not currently in the GGTT */
- xe_tile_assert(ggtt->tile, bo->ggtt_node.size == bo->size);
+ xe_tile_assert(ggtt->tile, bo->ggtt_node.base.size == bo->size);
xe_ggtt_remove_node(ggtt, &bo->ggtt_node,
bo->flags & XE_BO_FLAG_GGTT_INVALIDATE);
@@ -602,17 +602,17 @@ static void xe_ggtt_assign_locked(struct xe_ggtt *ggtt, const struct drm_mm_node
/**
* xe_ggtt_assign - assign a GGTT region to the VF
* @ggtt: the &xe_ggtt where the node belongs
- * @node: the &drm_mm_node to update
+ * @node: the &xe_ggtt_node to update
* @vfid: the VF identifier
*
* This function is used by the PF driver to assign a GGTT region to the VF.
* In addition to PTE's VFID bits 11:2 also PRESENT bit 0 is set as on some
* platforms VFs can't modify that either.
*/
-void xe_ggtt_assign(struct xe_ggtt *ggtt, const struct drm_mm_node *node, u16 vfid)
+void xe_ggtt_assign(struct xe_ggtt *ggtt, const struct xe_ggtt_node *node, u16 vfid)
{
mutex_lock(&ggtt->lock);
- xe_ggtt_assign_locked(ggtt, node, vfid);
+ xe_ggtt_assign_locked(ggtt, &node->base, vfid);
mutex_unlock(&ggtt->lock);
}
#endif
diff --git a/drivers/gpu/drm/xe/xe_ggtt.h b/drivers/gpu/drm/xe/xe_ggtt.h
index 2546bab97507..30a521f7b075 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.h
+++ b/drivers/gpu/drm/xe/xe_ggtt.h
@@ -13,15 +13,15 @@ struct drm_printer;
int xe_ggtt_init_early(struct xe_ggtt *ggtt);
int xe_ggtt_init(struct xe_ggtt *ggtt);
-int xe_ggtt_balloon(struct xe_ggtt *ggtt, u64 start, u64 size, struct drm_mm_node *node);
-void xe_ggtt_deballoon(struct xe_ggtt *ggtt, struct drm_mm_node *node);
+int xe_ggtt_balloon(struct xe_ggtt *ggtt, u64 start, u64 size, struct xe_ggtt_node *node);
+void xe_ggtt_deballoon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node);
-int xe_ggtt_insert_special_node(struct xe_ggtt *ggtt, struct drm_mm_node *node,
+int xe_ggtt_insert_special_node(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
u32 size, u32 align);
int xe_ggtt_insert_special_node_locked(struct xe_ggtt *ggtt,
- struct drm_mm_node *node,
+ struct xe_ggtt_node *node,
u32 size, u32 align, u32 mm_flags);
-void xe_ggtt_remove_node(struct xe_ggtt *ggtt, struct drm_mm_node *node,
+void xe_ggtt_remove_node(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
bool invalidate);
void xe_ggtt_map_bo(struct xe_ggtt *ggtt, struct xe_bo *bo);
int xe_ggtt_insert_bo(struct xe_ggtt *ggtt, struct xe_bo *bo);
@@ -32,7 +32,7 @@ void xe_ggtt_remove_bo(struct xe_ggtt *ggtt, struct xe_bo *bo);
int xe_ggtt_dump(struct xe_ggtt *ggtt, struct drm_printer *p);
#ifdef CONFIG_PCI_IOV
-void xe_ggtt_assign(struct xe_ggtt *ggtt, const struct drm_mm_node *node, u16 vfid);
+void xe_ggtt_assign(struct xe_ggtt *ggtt, const struct xe_ggtt_node *node, u16 vfid);
#endif
#endif
diff --git a/drivers/gpu/drm/xe/xe_ggtt_types.h b/drivers/gpu/drm/xe/xe_ggtt_types.h
index 154de298a4e3..af312a7d1031 100644
--- a/drivers/gpu/drm/xe/xe_ggtt_types.h
+++ b/drivers/gpu/drm/xe/xe_ggtt_types.h
@@ -49,6 +49,14 @@ struct xe_ggtt {
unsigned int access_count;
};
+/**
+ * struct xe_ggtt_node - A node in GGTT
+ */
+struct xe_ggtt_node {
+ /** @base: A drm_mm_node */
+ struct drm_mm_node base;
+};
+
/**
* struct xe_ggtt_pt_ops - GGTT Page table operations
* Which can vary from platform to platform.
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
index 227527785afd..f107ae550c0f 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
@@ -6,6 +6,9 @@
#include <linux/string_choices.h>
#include <linux/wordpart.h>
+/* FIXME: remove this after encapsulating all drm_mm_node access into xe_ggtt */
+#include <drm/drm_mm.h>
+
#include "abi/guc_actions_sriov_abi.h"
#include "abi/guc_klvs_abi.h"
@@ -232,14 +235,14 @@ static u32 encode_config_ggtt(u32 *cfg, const struct xe_gt_sriov_config *config)
{
u32 n = 0;
- if (drm_mm_node_allocated(&config->ggtt_region)) {
+ if (drm_mm_node_allocated(&config->ggtt_region.base)) {
cfg[n++] = PREP_GUC_KLV_TAG(VF_CFG_GGTT_START);
- cfg[n++] = lower_32_bits(config->ggtt_region.start);
- cfg[n++] = upper_32_bits(config->ggtt_region.start);
+ cfg[n++] = lower_32_bits(config->ggtt_region.base.start);
+ cfg[n++] = upper_32_bits(config->ggtt_region.base.start);
cfg[n++] = PREP_GUC_KLV_TAG(VF_CFG_GGTT_SIZE);
- cfg[n++] = lower_32_bits(config->ggtt_region.size);
- cfg[n++] = upper_32_bits(config->ggtt_region.size);
+ cfg[n++] = lower_32_bits(config->ggtt_region.base.size);
+ cfg[n++] = upper_32_bits(config->ggtt_region.base.size);
}
return n;
@@ -369,11 +372,11 @@ static int pf_distribute_config_ggtt(struct xe_tile *tile, unsigned int vfid, u6
return err ?: err2;
}
-static void pf_release_ggtt(struct xe_tile *tile, struct drm_mm_node *node)
+static void pf_release_ggtt(struct xe_tile *tile, struct xe_ggtt_node *node)
{
struct xe_ggtt *ggtt = tile->mem.ggtt;
- if (drm_mm_node_allocated(node)) {
+ if (drm_mm_node_allocated(&node->base)) {
/*
* explicit GGTT PTE assignment to the PF using xe_ggtt_assign()
* is redundant, as PTE will be implicitly re-assigned to PF by
@@ -391,7 +394,7 @@ static void pf_release_vf_config_ggtt(struct xe_gt *gt, struct xe_gt_sriov_confi
static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
{
struct xe_gt_sriov_config *config = pf_pick_vf_config(gt, vfid);
- struct drm_mm_node *node = &config->ggtt_region;
+ struct xe_ggtt_node *node = &config->ggtt_region;
struct xe_tile *tile = gt_to_tile(gt);
struct xe_ggtt *ggtt = tile->mem.ggtt;
u64 alignment = pf_get_ggtt_alignment(gt);
@@ -403,14 +406,14 @@ static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
size = round_up(size, alignment);
- if (drm_mm_node_allocated(node)) {
+ if (drm_mm_node_allocated(&node->base)) {
err = pf_distribute_config_ggtt(tile, vfid, 0, 0);
if (unlikely(err))
return err;
pf_release_ggtt(tile, node);
}
- xe_gt_assert(gt, !drm_mm_node_allocated(node));
+ xe_gt_assert(gt, !drm_mm_node_allocated(&node->base));
if (!size)
return 0;
@@ -421,9 +424,9 @@ static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
xe_ggtt_assign(ggtt, node, vfid);
xe_gt_sriov_dbg_verbose(gt, "VF%u assigned GGTT %llx-%llx\n",
- vfid, node->start, node->start + node->size - 1);
+ vfid, node->base.start, node->base.start + node->base.size - 1);
- err = pf_distribute_config_ggtt(gt->tile, vfid, node->start, node->size);
+ err = pf_distribute_config_ggtt(gt->tile, vfid, node->base.start, node->base.size);
if (unlikely(err))
return err;
@@ -433,10 +436,10 @@ static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
static u64 pf_get_vf_config_ggtt(struct xe_gt *gt, unsigned int vfid)
{
struct xe_gt_sriov_config *config = pf_pick_vf_config(gt, vfid);
- struct drm_mm_node *node = &config->ggtt_region;
+ struct xe_ggtt_node *node = &config->ggtt_region;
xe_gt_assert(gt, !xe_gt_is_media_type(gt));
- return drm_mm_node_allocated(node) ? node->size : 0;
+ return drm_mm_node_allocated(&node->base) ? node->base.size : 0;
}
/**
@@ -2025,13 +2028,13 @@ int xe_gt_sriov_pf_config_print_ggtt(struct xe_gt *gt, struct drm_printer *p)
for (n = 1; n <= total_vfs; n++) {
config = >->sriov.pf.vfs[n].config;
- if (!drm_mm_node_allocated(&config->ggtt_region))
+ if (!drm_mm_node_allocated(&config->ggtt_region.base))
continue;
- string_get_size(config->ggtt_region.size, 1, STRING_UNITS_2, buf, sizeof(buf));
+ string_get_size(config->ggtt_region.base.size, 1, STRING_UNITS_2, buf, sizeof(buf));
drm_printf(p, "VF%u:\t%#0llx-%#llx\t(%s)\n",
- n, config->ggtt_region.start,
- config->ggtt_region.start + config->ggtt_region.size - 1, buf);
+ n, config->ggtt_region.base.start,
+ config->ggtt_region.base.start + config->ggtt_region.base.size - 1, buf);
}
return 0;
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h
index 7bc66656fcc7..a73d9a4b9e64 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h
@@ -6,8 +6,7 @@
#ifndef _XE_GT_SRIOV_PF_CONFIG_TYPES_H_
#define _XE_GT_SRIOV_PF_CONFIG_TYPES_H_
-#include <drm/drm_mm.h>
-
+#include "xe_ggtt_types.h"
#include "xe_guc_klv_thresholds_set_types.h"
struct xe_bo;
@@ -19,7 +18,7 @@ struct xe_bo;
*/
struct xe_gt_sriov_config {
/** @ggtt_region: GGTT region assigned to the VF. */
- struct drm_mm_node ggtt_region;
+ struct xe_ggtt_node ggtt_region;
/** @lmem_obj: LMEM allocation for use by the VF. */
struct xe_bo *lmem_obj;
/** @num_ctxs: number of GuC contexts IDs. */
--
2.46.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* [PATCH 06/12] drm/xe: Rename xe_ggtt_node related functions
2024-08-21 19:38 [PATCH 01/12] drm/xe: Removed unused xe_ggtt_printk Rodrigo Vivi
` (3 preceding siblings ...)
2024-08-21 19:38 ` [PATCH 05/12] drm/xe: Encapsulate drm_mm_node inside xe_ggtt_node Rodrigo Vivi
@ 2024-08-21 19:38 ` Rodrigo Vivi
2024-08-21 19:38 ` [PATCH 07/12] drm/xe: Limit drm_mm_node_allocated access to xe_ggtt_node Rodrigo Vivi
` (13 subsequent siblings)
18 siblings, 0 replies; 28+ messages in thread
From: Rodrigo Vivi @ 2024-08-21 19:38 UTC (permalink / raw)
To: intel-xe; +Cc: lucas.demarchi, Rodrigo Vivi, Matthew Brost
Bring some consistency and prepare for more xe_ggtt_node related
functions to be introduced.
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
drivers/gpu/drm/xe/display/xe_fb_pin.c | 8 +-
drivers/gpu/drm/xe/xe_ggtt.c | 86 +++++++++++-----------
drivers/gpu/drm/xe/xe_ggtt.h | 12 +--
drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c | 4 +-
4 files changed, 54 insertions(+), 56 deletions(-)
diff --git a/drivers/gpu/drm/xe/display/xe_fb_pin.c b/drivers/gpu/drm/xe/display/xe_fb_pin.c
index a93923fb8721..db74c3395ef8 100644
--- a/drivers/gpu/drm/xe/display/xe_fb_pin.c
+++ b/drivers/gpu/drm/xe/display/xe_fb_pin.c
@@ -209,8 +209,7 @@ static int __xe_pin_fb_vma_ggtt(const struct intel_framebuffer *fb,
} else if (view->type == I915_GTT_VIEW_NORMAL) {
u32 x, size = bo->ttm.base.size;
- ret = xe_ggtt_insert_special_node_locked(ggtt, &vma->node, size,
- align, 0);
+ ret = xe_ggtt_node_insert_locked(ggtt, &vma->node, size, align, 0);
if (ret)
goto out_unlock;
@@ -227,8 +226,7 @@ static int __xe_pin_fb_vma_ggtt(const struct intel_framebuffer *fb,
/* display seems to use tiles instead of bytes here, so convert it back.. */
u32 size = intel_rotation_info_size(rot_info) * XE_PAGE_SIZE;
- ret = xe_ggtt_insert_special_node_locked(ggtt, &vma->node, size,
- align, 0);
+ ret = xe_ggtt_node_insert_locked(ggtt, &vma->node, size, align, 0);
if (ret)
goto out_unlock;
@@ -327,7 +325,7 @@ static void __xe_unpin_fb_vma(struct i915_vma *vma)
xe_bo_unpin_map_no_vm(vma->dpt);
else if (!drm_mm_node_allocated(&vma->bo->ggtt_node.base) ||
vma->bo->ggtt_node.base.start != vma->node.base.start)
- xe_ggtt_remove_node(ggtt, &vma->node, false);
+ xe_ggtt_node_remove(ggtt, &vma->node, false);
ttm_bo_reserve(&vma->bo->ttm, false, false, NULL);
ttm_bo_unpin(&vma->bo->ttm);
diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
index 1cf682d15253..e0da24bb5774 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.c
+++ b/drivers/gpu/drm/xe/xe_ggtt.c
@@ -403,7 +403,7 @@ void xe_ggtt_deballoon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node)
}
/**
- * xe_ggtt_insert_special_node_locked - Locked version to insert a &xe_ggtt_node into the GGTT
+ * xe_ggtt_node_insert_locked - Locked version to insert a &xe_ggtt_node into the GGTT
* @ggtt: the &xe_ggtt where node will be inserted
* @node: the &xe_ggtt_node to be inserted
* @size: size of the node
@@ -414,15 +414,15 @@ void xe_ggtt_deballoon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node)
*
* Return: 0 on success or a negative error code on failure.
*/
-int xe_ggtt_insert_special_node_locked(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
- u32 size, u32 align, u32 mm_flags)
+int xe_ggtt_node_insert_locked(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
+ u32 size, u32 align, u32 mm_flags)
{
return drm_mm_insert_node_generic(&ggtt->mm, &node->base, size, align, 0,
mm_flags);
}
/**
- * xe_ggtt_insert_special_node - Insert a &xe_ggtt_node into the GGTT
+ * xe_ggtt_node_insert - Insert a &xe_ggtt_node into the GGTT
* @ggtt: the &xe_ggtt where node will be inserted
* @node: the &xe_ggtt_node to be inserted
* @size: size of the node
@@ -430,19 +430,53 @@ int xe_ggtt_insert_special_node_locked(struct xe_ggtt *ggtt, struct xe_ggtt_node
*
* Return: 0 on success or a negative error code on failure.
*/
-int xe_ggtt_insert_special_node(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
- u32 size, u32 align)
+int xe_ggtt_node_insert(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
+ u32 size, u32 align)
{
int ret;
mutex_lock(&ggtt->lock);
- ret = xe_ggtt_insert_special_node_locked(ggtt, node, size,
- align, DRM_MM_INSERT_HIGH);
+ ret = xe_ggtt_node_insert_locked(ggtt, node, size,
+ align, DRM_MM_INSERT_HIGH);
mutex_unlock(&ggtt->lock);
return ret;
}
+/**
+ * xe_ggtt_node_remove - Remove a &xe_ggtt_node from the GGTT
+ * @ggtt: the &xe_ggtt where node will be removed
+ * @node: the &xe_ggtt_node to be removed
+ * @invalidate: if node needs invalidation upon removal
+ */
+void xe_ggtt_node_remove(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
+ bool invalidate)
+{
+ struct xe_device *xe = tile_to_xe(ggtt->tile);
+ bool bound;
+ int idx;
+
+ bound = drm_dev_enter(&xe->drm, &idx);
+ if (bound)
+ xe_pm_runtime_get_noresume(xe);
+
+ mutex_lock(&ggtt->lock);
+ if (bound)
+ xe_ggtt_clear(ggtt, node->base.start, node->base.size);
+ drm_mm_remove_node(&node->base);
+ node->base.size = 0;
+ mutex_unlock(&ggtt->lock);
+
+ if (!bound)
+ return;
+
+ if (invalidate)
+ xe_ggtt_invalidate(ggtt);
+
+ xe_pm_runtime_put(xe);
+ drm_dev_exit(idx);
+}
+
/**
* xe_ggtt_map_bo - Map the BO into GGTT
* @ggtt: the &xe_ggtt where node will be mapped
@@ -522,40 +556,6 @@ int xe_ggtt_insert_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
return __xe_ggtt_insert_bo_at(ggtt, bo, 0, U64_MAX);
}
-/**
- * xe_ggtt_remove_node - Remove a &xe_ggtt_node from the GGTT
- * @ggtt: the &xe_ggtt where node will be removed
- * @node: the &xe_ggtt_node to be removed
- * @invalidate: if node needs invalidation upon removal
- */
-void xe_ggtt_remove_node(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
- bool invalidate)
-{
- struct xe_device *xe = tile_to_xe(ggtt->tile);
- bool bound;
- int idx;
-
- bound = drm_dev_enter(&xe->drm, &idx);
- if (bound)
- xe_pm_runtime_get_noresume(xe);
-
- mutex_lock(&ggtt->lock);
- if (bound)
- xe_ggtt_clear(ggtt, node->base.start, node->base.size);
- drm_mm_remove_node(&node->base);
- node->base.size = 0;
- mutex_unlock(&ggtt->lock);
-
- if (!bound)
- return;
-
- if (invalidate)
- xe_ggtt_invalidate(ggtt);
-
- xe_pm_runtime_put(xe);
- drm_dev_exit(idx);
-}
-
/**
* xe_ggtt_remove_bo - Remove a BO from the GGTT
* @ggtt: the &xe_ggtt where node will be removed
@@ -569,7 +569,7 @@ void xe_ggtt_remove_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
/* This BO is not currently in the GGTT */
xe_tile_assert(ggtt->tile, bo->ggtt_node.base.size == bo->size);
- xe_ggtt_remove_node(ggtt, &bo->ggtt_node,
+ xe_ggtt_node_remove(ggtt, &bo->ggtt_node,
bo->flags & XE_BO_FLAG_GGTT_INVALIDATE);
}
diff --git a/drivers/gpu/drm/xe/xe_ggtt.h b/drivers/gpu/drm/xe/xe_ggtt.h
index 30a521f7b075..5147930357de 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.h
+++ b/drivers/gpu/drm/xe/xe_ggtt.h
@@ -16,12 +16,12 @@ int xe_ggtt_init(struct xe_ggtt *ggtt);
int xe_ggtt_balloon(struct xe_ggtt *ggtt, u64 start, u64 size, struct xe_ggtt_node *node);
void xe_ggtt_deballoon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node);
-int xe_ggtt_insert_special_node(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
- u32 size, u32 align);
-int xe_ggtt_insert_special_node_locked(struct xe_ggtt *ggtt,
- struct xe_ggtt_node *node,
- u32 size, u32 align, u32 mm_flags);
-void xe_ggtt_remove_node(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
+int xe_ggtt_node_insert(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
+ u32 size, u32 align);
+int xe_ggtt_node_insert_locked(struct xe_ggtt *ggtt,
+ struct xe_ggtt_node *node,
+ u32 size, u32 align, u32 mm_flags);
+void xe_ggtt_node_remove(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
bool invalidate);
void xe_ggtt_map_bo(struct xe_ggtt *ggtt, struct xe_bo *bo);
int xe_ggtt_insert_bo(struct xe_ggtt *ggtt, struct xe_bo *bo);
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
index f107ae550c0f..3ca98f8a0eae 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
@@ -382,7 +382,7 @@ static void pf_release_ggtt(struct xe_tile *tile, struct xe_ggtt_node *node)
* is redundant, as PTE will be implicitly re-assigned to PF by
* the xe_ggtt_clear() called by below xe_ggtt_remove_node().
*/
- xe_ggtt_remove_node(ggtt, node, false);
+ xe_ggtt_node_remove(ggtt, node, false);
}
}
@@ -418,7 +418,7 @@ static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
if (!size)
return 0;
- err = xe_ggtt_insert_special_node(ggtt, node, size, alignment);
+ err = xe_ggtt_node_insert(ggtt, node, size, alignment);
if (unlikely(err))
return err;
--
2.46.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* [PATCH 07/12] drm/xe: Limit drm_mm_node_allocated access to xe_ggtt_node
2024-08-21 19:38 [PATCH 01/12] drm/xe: Removed unused xe_ggtt_printk Rodrigo Vivi
` (4 preceding siblings ...)
2024-08-21 19:38 ` [PATCH 06/12] drm/xe: Rename xe_ggtt_node related functions Rodrigo Vivi
@ 2024-08-21 19:38 ` Rodrigo Vivi
2024-08-21 19:38 ` [PATCH 08/12] drm/xe: Introduce xe_ggtt_largest_hole Rodrigo Vivi
` (12 subsequent siblings)
18 siblings, 0 replies; 28+ messages in thread
From: Rodrigo Vivi @ 2024-08-21 19:38 UTC (permalink / raw)
To: intel-xe; +Cc: lucas.demarchi, Rodrigo Vivi, Michal Wajdeczko, Matthew Brost
Continue with the encapsulation of drm_mm_node inside xe_ggtt.
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
drivers/gpu/drm/xe/display/xe_fb_pin.c | 2 +-
drivers/gpu/drm/xe/xe_ggtt.c | 11 +++++++++++
drivers/gpu/drm/xe/xe_ggtt.h | 1 +
drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c | 12 ++++++------
4 files changed, 19 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/xe/display/xe_fb_pin.c b/drivers/gpu/drm/xe/display/xe_fb_pin.c
index db74c3395ef8..de4930b67a29 100644
--- a/drivers/gpu/drm/xe/display/xe_fb_pin.c
+++ b/drivers/gpu/drm/xe/display/xe_fb_pin.c
@@ -323,7 +323,7 @@ static void __xe_unpin_fb_vma(struct i915_vma *vma)
if (vma->dpt)
xe_bo_unpin_map_no_vm(vma->dpt);
- else if (!drm_mm_node_allocated(&vma->bo->ggtt_node.base) ||
+ else if (!xe_ggtt_node_allocated(&vma->bo->ggtt_node) ||
vma->bo->ggtt_node.base.start != vma->node.base.start)
xe_ggtt_node_remove(ggtt, &vma->node, false);
diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
index e0da24bb5774..7c8bbaa30fca 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.c
+++ b/drivers/gpu/drm/xe/xe_ggtt.c
@@ -477,6 +477,17 @@ void xe_ggtt_node_remove(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
drm_dev_exit(idx);
}
+/**
+ * xe_ggtt_node_allocated - Check if node is allocated
+ * @node: the &xe_ggtt_node to be inspected
+ *
+ * Return: True if allocated, False otherwise.
+ */
+bool xe_ggtt_node_allocated(const struct xe_ggtt_node *node)
+{
+ return drm_mm_node_allocated(&node->base);
+}
+
/**
* xe_ggtt_map_bo - Map the BO into GGTT
* @ggtt: the &xe_ggtt where node will be mapped
diff --git a/drivers/gpu/drm/xe/xe_ggtt.h b/drivers/gpu/drm/xe/xe_ggtt.h
index 5147930357de..f816b3c0732b 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.h
+++ b/drivers/gpu/drm/xe/xe_ggtt.h
@@ -23,6 +23,7 @@ int xe_ggtt_node_insert_locked(struct xe_ggtt *ggtt,
u32 size, u32 align, u32 mm_flags);
void xe_ggtt_node_remove(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
bool invalidate);
+bool xe_ggtt_node_allocated(const struct xe_ggtt_node *node);
void xe_ggtt_map_bo(struct xe_ggtt *ggtt, struct xe_bo *bo);
int xe_ggtt_insert_bo(struct xe_ggtt *ggtt, struct xe_bo *bo);
int xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
index 3ca98f8a0eae..947750d97d7d 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
@@ -235,7 +235,7 @@ static u32 encode_config_ggtt(u32 *cfg, const struct xe_gt_sriov_config *config)
{
u32 n = 0;
- if (drm_mm_node_allocated(&config->ggtt_region.base)) {
+ if (xe_ggtt_node_allocated(&config->ggtt_region)) {
cfg[n++] = PREP_GUC_KLV_TAG(VF_CFG_GGTT_START);
cfg[n++] = lower_32_bits(config->ggtt_region.base.start);
cfg[n++] = upper_32_bits(config->ggtt_region.base.start);
@@ -376,7 +376,7 @@ static void pf_release_ggtt(struct xe_tile *tile, struct xe_ggtt_node *node)
{
struct xe_ggtt *ggtt = tile->mem.ggtt;
- if (drm_mm_node_allocated(&node->base)) {
+ if (xe_ggtt_node_allocated(node)) {
/*
* explicit GGTT PTE assignment to the PF using xe_ggtt_assign()
* is redundant, as PTE will be implicitly re-assigned to PF by
@@ -406,14 +406,14 @@ static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
size = round_up(size, alignment);
- if (drm_mm_node_allocated(&node->base)) {
+ if (xe_ggtt_node_allocated(node)) {
err = pf_distribute_config_ggtt(tile, vfid, 0, 0);
if (unlikely(err))
return err;
pf_release_ggtt(tile, node);
}
- xe_gt_assert(gt, !drm_mm_node_allocated(&node->base));
+ xe_gt_assert(gt, !xe_ggtt_node_allocated(node));
if (!size)
return 0;
@@ -439,7 +439,7 @@ static u64 pf_get_vf_config_ggtt(struct xe_gt *gt, unsigned int vfid)
struct xe_ggtt_node *node = &config->ggtt_region;
xe_gt_assert(gt, !xe_gt_is_media_type(gt));
- return drm_mm_node_allocated(&node->base) ? node->base.size : 0;
+ return xe_ggtt_node_allocated(node) ? node->base.size : 0;
}
/**
@@ -2028,7 +2028,7 @@ int xe_gt_sriov_pf_config_print_ggtt(struct xe_gt *gt, struct drm_printer *p)
for (n = 1; n <= total_vfs; n++) {
config = >->sriov.pf.vfs[n].config;
- if (!drm_mm_node_allocated(&config->ggtt_region.base))
+ if (!xe_ggtt_node_allocated(&config->ggtt_region))
continue;
string_get_size(config->ggtt_region.base.size, 1, STRING_UNITS_2, buf, sizeof(buf));
--
2.46.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* [PATCH 08/12] drm/xe: Introduce xe_ggtt_largest_hole
2024-08-21 19:38 [PATCH 01/12] drm/xe: Removed unused xe_ggtt_printk Rodrigo Vivi
` (5 preceding siblings ...)
2024-08-21 19:38 ` [PATCH 07/12] drm/xe: Limit drm_mm_node_allocated access to xe_ggtt_node Rodrigo Vivi
@ 2024-08-21 19:38 ` Rodrigo Vivi
2024-08-21 19:38 ` [PATCH 09/12] drm/xe: Introduce xe_ggtt_print_holes Rodrigo Vivi
` (11 subsequent siblings)
18 siblings, 0 replies; 28+ messages in thread
From: Rodrigo Vivi @ 2024-08-21 19:38 UTC (permalink / raw)
To: intel-xe; +Cc: lucas.demarchi, Rodrigo Vivi, Michal Wajdeczko
Introduce a new xe_ggtt_largest_hole helper that attends the SRIOV
demand and continue with the goal of limiting drm_mm access to xe_ggtt.
v2: Fix a typo (Michal)
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
drivers/gpu/drm/xe/xe_ggtt.c | 35 ++++++++++++++++++++++
drivers/gpu/drm/xe/xe_ggtt.h | 1 +
drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c | 23 ++------------
3 files changed, 38 insertions(+), 21 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
index 7c8bbaa30fca..2d055f489879 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.c
+++ b/drivers/gpu/drm/xe/xe_ggtt.c
@@ -584,6 +584,41 @@ void xe_ggtt_remove_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
bo->flags & XE_BO_FLAG_GGTT_INVALIDATE);
}
+/**
+ * xe_ggtt_largest_hole - Largest GGTT hole
+ * @ggtt: the &xe_ggtt that will be inspected
+ * @alignment: minimum alignment
+ * @spare: If not NULL: in: desired memory size to be spared / out: Adjusted possible spare
+ *
+ * Return: size of the largest continuous GGTT region
+ */
+u64 xe_ggtt_largest_hole(struct xe_ggtt *ggtt, u64 alignment, u64 *spare)
+{
+ const struct drm_mm *mm = &ggtt->mm;
+ const struct drm_mm_node *entry;
+ u64 hole_min_start = xe_wopcm_size(tile_to_xe(ggtt->tile));
+ u64 hole_start, hole_end, hole_size;
+ u64 max_hole = 0;
+
+ mutex_lock(&ggtt->lock);
+
+ drm_mm_for_each_hole(entry, mm, hole_start, hole_end) {
+ hole_start = max(hole_start, hole_min_start);
+ hole_start = ALIGN(hole_start, alignment);
+ hole_end = ALIGN_DOWN(hole_end, alignment);
+ if (hole_start >= hole_end)
+ continue;
+ hole_size = hole_end - hole_start;
+ if (spare)
+ *spare -= min3(*spare, hole_size, max_hole);
+ max_hole = max(max_hole, hole_size);
+ }
+
+ mutex_unlock(&ggtt->lock);
+
+ return max_hole;
+}
+
#ifdef CONFIG_PCI_IOV
static u64 xe_encode_vfid_pte(u16 vfid)
{
diff --git a/drivers/gpu/drm/xe/xe_ggtt.h b/drivers/gpu/drm/xe/xe_ggtt.h
index f816b3c0732b..31060fe7644b 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.h
+++ b/drivers/gpu/drm/xe/xe_ggtt.h
@@ -29,6 +29,7 @@ int xe_ggtt_insert_bo(struct xe_ggtt *ggtt, struct xe_bo *bo);
int xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
u64 start, u64 end);
void xe_ggtt_remove_bo(struct xe_ggtt *ggtt, struct xe_bo *bo);
+u64 xe_ggtt_largest_hole(struct xe_ggtt *ggtt, u64 alignment, u64 *spare);
int xe_ggtt_dump(struct xe_ggtt *ggtt, struct drm_printer *p);
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
index 947750d97d7d..1852ff45bea4 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
@@ -590,30 +590,11 @@ int xe_gt_sriov_pf_config_bulk_set_ggtt(struct xe_gt *gt, unsigned int vfid,
static u64 pf_get_max_ggtt(struct xe_gt *gt)
{
struct xe_ggtt *ggtt = gt_to_tile(gt)->mem.ggtt;
- const struct drm_mm *mm = &ggtt->mm;
- const struct drm_mm_node *entry;
u64 alignment = pf_get_ggtt_alignment(gt);
u64 spare = pf_get_spare_ggtt(gt);
- u64 hole_min_start = xe_wopcm_size(gt_to_xe(gt));
- u64 hole_start, hole_end, hole_size;
- u64 max_hole = 0;
-
- mutex_lock(&ggtt->lock);
-
- drm_mm_for_each_hole(entry, mm, hole_start, hole_end) {
- hole_start = max(hole_start, hole_min_start);
- hole_start = ALIGN(hole_start, alignment);
- hole_end = ALIGN_DOWN(hole_end, alignment);
- if (hole_start >= hole_end)
- continue;
- hole_size = hole_end - hole_start;
- xe_gt_sriov_dbg_verbose(gt, "HOLE start %llx size %lluK\n",
- hole_start, hole_size / SZ_1K);
- spare -= min3(spare, hole_size, max_hole);
- max_hole = max(max_hole, hole_size);
- }
+ u64 max_hole;
- mutex_unlock(&ggtt->lock);
+ max_hole = xe_ggtt_largest_hole(ggtt, alignment, &spare);
xe_gt_sriov_dbg_verbose(gt, "HOLE max %lluK reserved %lluK\n",
max_hole / SZ_1K, spare / SZ_1K);
--
2.46.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* [PATCH 09/12] drm/xe: Introduce xe_ggtt_print_holes
2024-08-21 19:38 [PATCH 01/12] drm/xe: Removed unused xe_ggtt_printk Rodrigo Vivi
` (6 preceding siblings ...)
2024-08-21 19:38 ` [PATCH 08/12] drm/xe: Introduce xe_ggtt_largest_hole Rodrigo Vivi
@ 2024-08-21 19:38 ` Rodrigo Vivi
2024-08-21 19:38 ` [PATCH 10/12] drm/xe: Refactor xe_ggtt balloon functions to make the node clear Rodrigo Vivi
` (10 subsequent siblings)
18 siblings, 0 replies; 28+ messages in thread
From: Rodrigo Vivi @ 2024-08-21 19:38 UTC (permalink / raw)
To: intel-xe; +Cc: lucas.demarchi, Rodrigo Vivi, Michal Wajdeczko, Jonathan Cavitt
Introduce a new xe_ggtt_print_holes helper that attends the SRIOV
demand and finishes the goal of limiting drm_mm access to xe_ggtt.
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Reviewed-by: Jonathan Cavitt <jonathan.cavitt@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
drivers/gpu/drm/xe/xe_ggtt.c | 40 ++++++++++++++++++++++
drivers/gpu/drm/xe/xe_ggtt.h | 1 +
drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c | 25 +-------------
3 files changed, 42 insertions(+), 24 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
index 2d055f489879..960f5a28b7ed 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.c
+++ b/drivers/gpu/drm/xe/xe_ggtt.c
@@ -682,3 +682,43 @@ int xe_ggtt_dump(struct xe_ggtt *ggtt, struct drm_printer *p)
mutex_unlock(&ggtt->lock);
return err;
}
+
+/**
+ * xe_ggtt_print_holes - Print holes
+ * @ggtt: the &xe_ggtt to be inspected
+ * @alignment: min alignment
+ * @p: the &drm_printer
+ *
+ * Print GGTT ranges that are available and return total size available.
+ *
+ * Return: Total available size.
+ */
+u64 xe_ggtt_print_holes(struct xe_ggtt *ggtt, u64 alignment, struct drm_printer *p)
+{
+ const struct drm_mm *mm = &ggtt->mm;
+ const struct drm_mm_node *entry;
+ u64 hole_min_start = xe_wopcm_size(tile_to_xe(ggtt->tile));
+ u64 hole_start, hole_end, hole_size;
+ u64 total;
+ char buf[10];
+
+ mutex_lock(&ggtt->lock);
+
+ drm_mm_for_each_hole(entry, mm, hole_start, hole_end) {
+ hole_start = max(hole_start, hole_min_start);
+ hole_start = ALIGN(hole_start, alignment);
+ hole_end = ALIGN_DOWN(hole_end, alignment);
+ if (hole_start >= hole_end)
+ continue;
+ hole_size = hole_end - hole_start;
+ total += hole_size;
+
+ string_get_size(hole_size, 1, STRING_UNITS_2, buf, sizeof(buf));
+ drm_printf(p, "range:\t%#llx-%#llx\t(%s)\n",
+ hole_start, hole_end - 1, buf);
+ }
+
+ mutex_unlock(&ggtt->lock);
+
+ return total;
+}
diff --git a/drivers/gpu/drm/xe/xe_ggtt.h b/drivers/gpu/drm/xe/xe_ggtt.h
index 31060fe7644b..67ae5f1602a3 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.h
+++ b/drivers/gpu/drm/xe/xe_ggtt.h
@@ -32,6 +32,7 @@ void xe_ggtt_remove_bo(struct xe_ggtt *ggtt, struct xe_bo *bo);
u64 xe_ggtt_largest_hole(struct xe_ggtt *ggtt, u64 alignment, u64 *spare);
int xe_ggtt_dump(struct xe_ggtt *ggtt, struct drm_printer *p);
+u64 xe_ggtt_print_holes(struct xe_ggtt *ggtt, u64 alignment, struct drm_printer *p);
#ifdef CONFIG_PCI_IOV
void xe_ggtt_assign(struct xe_ggtt *ggtt, const struct xe_ggtt_node *node, u16 vfid);
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
index 1852ff45bea4..e133594cc6bd 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
@@ -6,9 +6,6 @@
#include <linux/string_choices.h>
#include <linux/wordpart.h>
-/* FIXME: remove this after encapsulating all drm_mm_node access into xe_ggtt */
-#include <drm/drm_mm.h>
-
#include "abi/guc_actions_sriov_abi.h"
#include "abi/guc_klvs_abi.h"
@@ -2103,11 +2100,7 @@ int xe_gt_sriov_pf_config_print_dbs(struct xe_gt *gt, struct drm_printer *p)
int xe_gt_sriov_pf_config_print_available_ggtt(struct xe_gt *gt, struct drm_printer *p)
{
struct xe_ggtt *ggtt = gt_to_tile(gt)->mem.ggtt;
- const struct drm_mm *mm = &ggtt->mm;
- const struct drm_mm_node *entry;
u64 alignment = pf_get_ggtt_alignment(gt);
- u64 hole_min_start = xe_wopcm_size(gt_to_xe(gt));
- u64 hole_start, hole_end, hole_size;
u64 spare, avail, total = 0;
char buf[10];
@@ -2116,24 +2109,8 @@ int xe_gt_sriov_pf_config_print_available_ggtt(struct xe_gt *gt, struct drm_prin
mutex_lock(xe_gt_sriov_pf_master_mutex(gt));
spare = pf_get_spare_ggtt(gt);
+ total = xe_ggtt_print_holes(ggtt, alignment, p);
- mutex_lock(&ggtt->lock);
-
- drm_mm_for_each_hole(entry, mm, hole_start, hole_end) {
- hole_start = max(hole_start, hole_min_start);
- hole_start = ALIGN(hole_start, alignment);
- hole_end = ALIGN_DOWN(hole_end, alignment);
- if (hole_start >= hole_end)
- continue;
- hole_size = hole_end - hole_start;
- total += hole_size;
-
- string_get_size(hole_size, 1, STRING_UNITS_2, buf, sizeof(buf));
- drm_printf(p, "range:\t%#llx-%#llx\t(%s)\n",
- hole_start, hole_end - 1, buf);
- }
-
- mutex_unlock(&ggtt->lock);
mutex_unlock(xe_gt_sriov_pf_master_mutex(gt));
string_get_size(total, 1, STRING_UNITS_2, buf, sizeof(buf));
--
2.46.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* [PATCH 10/12] drm/xe: Refactor xe_ggtt balloon functions to make the node clear
2024-08-21 19:38 [PATCH 01/12] drm/xe: Removed unused xe_ggtt_printk Rodrigo Vivi
` (7 preceding siblings ...)
2024-08-21 19:38 ` [PATCH 09/12] drm/xe: Introduce xe_ggtt_print_holes Rodrigo Vivi
@ 2024-08-21 19:38 ` Rodrigo Vivi
2024-08-21 19:38 ` [PATCH 11/12] drm/xe: Make xe_ggtt_node struct independent Rodrigo Vivi
` (9 subsequent siblings)
18 siblings, 0 replies; 28+ messages in thread
From: Rodrigo Vivi @ 2024-08-21 19:38 UTC (permalink / raw)
To: intel-xe; +Cc: lucas.demarchi, Rodrigo Vivi, Michal Wajdeczko
These operations are related to node. Convert them to the
new appropriate name space xe_ggtt_node.
v2: Also move arguments around for consistency (Lucas).
v3: s/node_balloon/node_insert_balloon and
s/node_deballoon/node_remove_balloon (Michal).
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
drivers/gpu/drm/xe/xe_ggtt.c | 16 ++++++++--------
drivers/gpu/drm/xe/xe_ggtt.h | 5 +++--
drivers/gpu/drm/xe/xe_gt_sriov_vf.c | 12 +++++++-----
3 files changed, 18 insertions(+), 15 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
index 960f5a28b7ed..d21474715bdb 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.c
+++ b/drivers/gpu/drm/xe/xe_ggtt.c
@@ -347,17 +347,17 @@ static void xe_ggtt_dump_node(struct xe_ggtt *ggtt,
}
/**
- * xe_ggtt_balloon - prevent allocation of specified GGTT addresses
+ * xe_ggtt_node_insert_balloon - prevent allocation of specified GGTT addresses
* @ggtt: the &xe_ggtt where we want to make reservation
+ * @node: the &xe_ggtt_node to hold reserved GGTT node
* @start: the starting GGTT address of the reserved region
* @end: then end GGTT address of the reserved region
- * @node: the &xe_ggtt_node to hold reserved GGTT node
*
- * Use xe_ggtt_deballoon() to release a reserved GGTT node.
+ * Use xe_ggtt_node_remove_balloon() to release a reserved GGTT node.
*
* Return: 0 on success or a negative error code on failure.
*/
-int xe_ggtt_balloon(struct xe_ggtt *ggtt, u64 start, u64 end, struct xe_ggtt_node *node)
+int xe_ggtt_node_insert_balloon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node, u64 start, u64 end)
{
int err;
@@ -384,18 +384,18 @@ int xe_ggtt_balloon(struct xe_ggtt *ggtt, u64 start, u64 end, struct xe_ggtt_nod
}
/**
- * xe_ggtt_deballoon - release a reserved GGTT region
+ * xe_ggtt_node_remove_balloon - release a reserved GGTT region
* @ggtt: the &xe_ggtt where reserved node belongs
* @node: the &xe_ggtt_node with reserved GGTT region
*
- * See xe_ggtt_balloon() for details.
+ * See xe_ggtt_node_insert_balloon() for details.
*/
-void xe_ggtt_deballoon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node)
+void xe_ggtt_node_remove_balloon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node)
{
if (!drm_mm_node_allocated(&node->base))
return;
- xe_ggtt_dump_node(ggtt, &node->base, "deballoon");
+ xe_ggtt_dump_node(ggtt, &node->base, "remove-balloon");
mutex_lock(&ggtt->lock);
drm_mm_remove_node(&node->base);
diff --git a/drivers/gpu/drm/xe/xe_ggtt.h b/drivers/gpu/drm/xe/xe_ggtt.h
index 67ae5f1602a3..e258a4f381b4 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.h
+++ b/drivers/gpu/drm/xe/xe_ggtt.h
@@ -13,8 +13,9 @@ struct drm_printer;
int xe_ggtt_init_early(struct xe_ggtt *ggtt);
int xe_ggtt_init(struct xe_ggtt *ggtt);
-int xe_ggtt_balloon(struct xe_ggtt *ggtt, u64 start, u64 size, struct xe_ggtt_node *node);
-void xe_ggtt_deballoon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node);
+int xe_ggtt_node_insert_balloon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
+ u64 start, u64 size);
+void xe_ggtt_node_remove_balloon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node);
int xe_ggtt_node_insert(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
u32 size, u32 align);
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
index 47222bd9988d..39ff4e7f902e 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
@@ -528,7 +528,8 @@ static int vf_balloon_ggtt(struct xe_gt *gt)
start = xe_wopcm_size(xe);
end = config->ggtt_base;
if (end != start) {
- err = xe_ggtt_balloon(ggtt, start, end, &tile->sriov.vf.ggtt_balloon[0]);
+ err = xe_ggtt_node_insert_balloon(ggtt, &tile->sriov.vf.ggtt_balloon[0],
+ start, end);
if (err)
goto failed;
}
@@ -536,7 +537,8 @@ static int vf_balloon_ggtt(struct xe_gt *gt)
start = config->ggtt_base + config->ggtt_size;
end = GUC_GGTT_TOP;
if (end != start) {
- err = xe_ggtt_balloon(ggtt, start, end, &tile->sriov.vf.ggtt_balloon[1]);
+ err = xe_ggtt_node_insert_balloon(ggtt, &tile->sriov.vf.ggtt_balloon[1],
+ start, end);
if (err)
goto deballoon;
}
@@ -544,7 +546,7 @@ static int vf_balloon_ggtt(struct xe_gt *gt)
return 0;
deballoon:
- xe_ggtt_deballoon(ggtt, &tile->sriov.vf.ggtt_balloon[0]);
+ xe_ggtt_node_remove_balloon(ggtt, &tile->sriov.vf.ggtt_balloon[0]);
failed:
return err;
}
@@ -555,8 +557,8 @@ static void deballoon_ggtt(struct drm_device *drm, void *arg)
struct xe_ggtt *ggtt = tile->mem.ggtt;
xe_tile_assert(tile, IS_SRIOV_VF(tile_to_xe(tile)));
- xe_ggtt_deballoon(ggtt, &tile->sriov.vf.ggtt_balloon[1]);
- xe_ggtt_deballoon(ggtt, &tile->sriov.vf.ggtt_balloon[0]);
+ xe_ggtt_node_remove_balloon(ggtt, &tile->sriov.vf.ggtt_balloon[1]);
+ xe_ggtt_node_remove_balloon(ggtt, &tile->sriov.vf.ggtt_balloon[0]);
}
/**
--
2.46.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* [PATCH 11/12] drm/xe: Make xe_ggtt_node struct independent
2024-08-21 19:38 [PATCH 01/12] drm/xe: Removed unused xe_ggtt_printk Rodrigo Vivi
` (8 preceding siblings ...)
2024-08-21 19:38 ` [PATCH 10/12] drm/xe: Refactor xe_ggtt balloon functions to make the node clear Rodrigo Vivi
@ 2024-08-21 19:38 ` Rodrigo Vivi
2024-08-22 17:52 ` Matthew Brost
2024-08-21 19:38 ` [PATCH 12/12] drm/xe: Fix missing runtime outer protection for ggtt_remove_node Rodrigo Vivi
` (8 subsequent siblings)
18 siblings, 1 reply; 28+ messages in thread
From: Rodrigo Vivi @ 2024-08-21 19:38 UTC (permalink / raw)
To: intel-xe
Cc: lucas.demarchi, Rodrigo Vivi, Matthew Auld, Michal Wajdeczko,
Matthew Brost
In some rare cases, the drm_mm node cannot be removed synchronously
due to runtime PM conditions. In this situation, the node removal will
be delegated to a workqueue that will be able to wake up the device
before removing the node.
However, in this situation, the lifetime of the xe_ggtt_node cannot
be restricted to the lifetime of the parent object. So, this patch
introduces the infrastructure so the xe_ggtt_node struct can be
allocated in advance and freed when needed.
By having the ggtt backpointer, it also ensure that the init function
is always called before any attempt to insert or reserve the node
in the GGTT.
v2: s/xe_ggtt_node_force_fini/xe_ggtt_node_fini and use it
internaly (Brost)
v3: - Use GF_NOFS for node allocation (CI)
- Avoid ggtt argument, now that we have it inside the node (Lucas)
- Fix some missed fini cases (CI)
v4: - Fix SRIOV critical case where config->ggtt_region was
lost (Michal)
- Avoid ggtt argument also on removal (missed case on v3) (Michal)
- Remove useless checks (Michal)
- Return 0 instead of negative errno on a u32 addr. (Michal)
- s/xe_ggtt_assign/xe_ggtt_node_assign for coherence, while we
are touching it (Michal)
v5: - Fix VFs' ggtt_balloon
Cc: Matthew Auld <matthew.auld@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
| 4 +-
drivers/gpu/drm/xe/display/xe_fb_pin.c | 39 +++--
drivers/gpu/drm/xe/xe_bo.c | 2 +-
drivers/gpu/drm/xe/xe_bo.h | 9 +-
drivers/gpu/drm/xe/xe_bo_types.h | 2 +-
drivers/gpu/drm/xe/xe_device_types.h | 2 +-
drivers/gpu/drm/xe/xe_ggtt.c | 140 +++++++++++++-----
drivers/gpu/drm/xe/xe_ggtt.h | 17 +--
drivers/gpu/drm/xe/xe_ggtt_types.h | 8 +-
drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c | 47 +++---
.../gpu/drm/xe/xe_gt_sriov_pf_config_types.h | 2 +-
drivers/gpu/drm/xe/xe_gt_sriov_vf.c | 46 +++---
12 files changed, 214 insertions(+), 104 deletions(-)
--git a/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h b/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
index 3028ac1ba72f..bdae8392e125 100644
--- a/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
+++ b/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
@@ -20,7 +20,7 @@ struct xe_bo;
struct i915_vma {
struct xe_bo *bo, *dpt;
- struct xe_ggtt_node node;
+ struct xe_ggtt_node *node;
};
#define i915_ggtt_clear_scanout(bo) do { } while (0)
@@ -29,7 +29,7 @@ struct i915_vma {
static inline u32 i915_ggtt_offset(const struct i915_vma *vma)
{
- return vma->node.base.start;
+ return vma->node->base.start;
}
#endif
diff --git a/drivers/gpu/drm/xe/display/xe_fb_pin.c b/drivers/gpu/drm/xe/display/xe_fb_pin.c
index de4930b67a29..d650c5ac41a4 100644
--- a/drivers/gpu/drm/xe/display/xe_fb_pin.c
+++ b/drivers/gpu/drm/xe/display/xe_fb_pin.c
@@ -204,20 +204,28 @@ static int __xe_pin_fb_vma_ggtt(const struct intel_framebuffer *fb,
if (xe_bo_is_vram(bo) && ggtt->flags & XE_GGTT_FLAGS_64K)
align = max_t(u32, align, SZ_64K);
- if (bo->ggtt_node.base.size && view->type == I915_GTT_VIEW_NORMAL) {
+ if (bo->ggtt_node && view->type == I915_GTT_VIEW_NORMAL) {
vma->node = bo->ggtt_node;
} else if (view->type == I915_GTT_VIEW_NORMAL) {
u32 x, size = bo->ttm.base.size;
- ret = xe_ggtt_node_insert_locked(ggtt, &vma->node, size, align, 0);
- if (ret)
+ vma->node = xe_ggtt_node_init(ggtt);
+ if (IS_ERR(vma->node)) {
+ ret = PTR_ERR(vma->node);
goto out_unlock;
+ }
+
+ ret = xe_ggtt_node_insert_locked(vma->node, size, align, 0);
+ if (ret) {
+ xe_ggtt_node_fini(vma->node);
+ goto out_unlock;
+ }
for (x = 0; x < size; x += XE_PAGE_SIZE) {
u64 pte = ggtt->pt_ops->pte_encode_bo(bo, x,
xe->pat.idx[XE_CACHE_NONE]);
- ggtt->pt_ops->ggtt_set_pte(ggtt, vma->node.base.start + x, pte);
+ ggtt->pt_ops->ggtt_set_pte(ggtt, vma->node->base.start + x, pte);
}
} else {
u32 i, ggtt_ofs;
@@ -226,11 +234,19 @@ static int __xe_pin_fb_vma_ggtt(const struct intel_framebuffer *fb,
/* display seems to use tiles instead of bytes here, so convert it back.. */
u32 size = intel_rotation_info_size(rot_info) * XE_PAGE_SIZE;
- ret = xe_ggtt_node_insert_locked(ggtt, &vma->node, size, align, 0);
- if (ret)
+ vma->node = xe_ggtt_node_init(ggtt);
+ if (IS_ERR(vma->node)) {
+ ret = PTR_ERR(vma->node);
+ goto out_unlock;
+ }
+
+ ret = xe_ggtt_node_insert_locked(vma->node, size, align, 0);
+ if (ret) {
+ xe_ggtt_node_fini(vma->node);
goto out_unlock;
+ }
- ggtt_ofs = vma->node.base.start;
+ ggtt_ofs = vma->node->base.start;
for (i = 0; i < ARRAY_SIZE(rot_info->plane); i++)
write_ggtt_rotated(bo, ggtt, &ggtt_ofs,
@@ -318,14 +334,11 @@ static struct i915_vma *__xe_pin_fb_vma(const struct intel_framebuffer *fb,
static void __xe_unpin_fb_vma(struct i915_vma *vma)
{
- struct xe_device *xe = to_xe_device(vma->bo->ttm.base.dev);
- struct xe_ggtt *ggtt = xe_device_get_root_tile(xe)->mem.ggtt;
-
if (vma->dpt)
xe_bo_unpin_map_no_vm(vma->dpt);
- else if (!xe_ggtt_node_allocated(&vma->bo->ggtt_node) ||
- vma->bo->ggtt_node.base.start != vma->node.base.start)
- xe_ggtt_node_remove(ggtt, &vma->node, false);
+ else if (!xe_ggtt_node_allocated(vma->bo->ggtt_node) ||
+ vma->bo->ggtt_node->base.start != vma->node->base.start)
+ xe_ggtt_node_remove(vma->node, false);
ttm_bo_reserve(&vma->bo->ttm, false, false, NULL);
ttm_bo_unpin(&vma->bo->ttm);
diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index 1faef9903b87..cbe7bf098970 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -1120,7 +1120,7 @@ static void xe_ttm_bo_destroy(struct ttm_buffer_object *ttm_bo)
xe_assert(xe, list_empty(&ttm_bo->base.gpuva.list));
- if (bo->ggtt_node.base.size)
+ if (bo->ggtt_node && bo->ggtt_node->base.size)
xe_ggtt_remove_bo(bo->tile->mem.ggtt, bo);
#ifdef CONFIG_PROC_FS
diff --git a/drivers/gpu/drm/xe/xe_bo.h b/drivers/gpu/drm/xe/xe_bo.h
index 9904b410be37..dbfb3209615d 100644
--- a/drivers/gpu/drm/xe/xe_bo.h
+++ b/drivers/gpu/drm/xe/xe_bo.h
@@ -194,9 +194,12 @@ xe_bo_main_addr(struct xe_bo *bo, size_t page_size)
static inline u32
xe_bo_ggtt_addr(struct xe_bo *bo)
{
- XE_WARN_ON(bo->ggtt_node.base.size > bo->size);
- XE_WARN_ON(bo->ggtt_node.base.start + bo->ggtt_node.base.size > (1ull << 32));
- return bo->ggtt_node.base.start;
+ if (XE_WARN_ON(!bo->ggtt_node))
+ return 0;
+
+ XE_WARN_ON(bo->ggtt_node->base.size > bo->size);
+ XE_WARN_ON(bo->ggtt_node->base.start + bo->ggtt_node->base.size > (1ull << 32));
+ return bo->ggtt_node->base.start;
}
int xe_bo_vmap(struct xe_bo *bo);
diff --git a/drivers/gpu/drm/xe/xe_bo_types.h b/drivers/gpu/drm/xe/xe_bo_types.h
index 4b1de9f5be00..2ed558ac2264 100644
--- a/drivers/gpu/drm/xe/xe_bo_types.h
+++ b/drivers/gpu/drm/xe/xe_bo_types.h
@@ -40,7 +40,7 @@ struct xe_bo {
/** @placement: current placement for this BO */
struct ttm_placement placement;
/** @ggtt_node: GGTT node if this BO is mapped in the GGTT */
- struct xe_ggtt_node ggtt_node;
+ struct xe_ggtt_node *ggtt_node;
/** @vmap: iosys map of this buffer */
struct iosys_map vmap;
/** @ttm_kmap: TTM bo kmap object for internal use only. Keep off. */
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index f6810e73da1f..4ecd620921a3 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -204,7 +204,7 @@ struct xe_tile {
struct xe_memirq memirq;
/** @sriov.vf.ggtt_balloon: GGTT regions excluded from use. */
- struct xe_ggtt_node ggtt_balloon[2];
+ struct xe_ggtt_node *ggtt_balloon[2];
} vf;
} sriov;
diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
index d21474715bdb..58d7cad2425b 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.c
+++ b/drivers/gpu/drm/xe/xe_ggtt.c
@@ -348,7 +348,6 @@ static void xe_ggtt_dump_node(struct xe_ggtt *ggtt,
/**
* xe_ggtt_node_insert_balloon - prevent allocation of specified GGTT addresses
- * @ggtt: the &xe_ggtt where we want to make reservation
* @node: the &xe_ggtt_node to hold reserved GGTT node
* @start: the starting GGTT address of the reserved region
* @end: then end GGTT address of the reserved region
@@ -357,8 +356,9 @@ static void xe_ggtt_dump_node(struct xe_ggtt *ggtt,
*
* Return: 0 on success or a negative error code on failure.
*/
-int xe_ggtt_node_insert_balloon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node, u64 start, u64 end)
+int xe_ggtt_node_insert_balloon(struct xe_ggtt_node *node, u64 start, u64 end)
{
+ struct xe_ggtt *ggtt = node->ggtt;
int err;
xe_tile_assert(ggtt->tile, start < end);
@@ -385,77 +385,124 @@ int xe_ggtt_node_insert_balloon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
/**
* xe_ggtt_node_remove_balloon - release a reserved GGTT region
- * @ggtt: the &xe_ggtt where reserved node belongs
* @node: the &xe_ggtt_node with reserved GGTT region
*
* See xe_ggtt_node_insert_balloon() for details.
*/
-void xe_ggtt_node_remove_balloon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node)
+void xe_ggtt_node_remove_balloon(struct xe_ggtt_node *node)
{
- if (!drm_mm_node_allocated(&node->base))
+ if (!node || !node->ggtt)
return;
- xe_ggtt_dump_node(ggtt, &node->base, "remove-balloon");
+ if (!drm_mm_node_allocated(&node->base))
+ goto free_node;
- mutex_lock(&ggtt->lock);
+ xe_ggtt_dump_node(node->ggtt, &node->base, "remove-balloon");
+
+ mutex_lock(&node->ggtt->lock);
drm_mm_remove_node(&node->base);
- mutex_unlock(&ggtt->lock);
+ mutex_unlock(&node->ggtt->lock);
+
+free_node:
+ xe_ggtt_node_fini(node);
}
/**
* xe_ggtt_node_insert_locked - Locked version to insert a &xe_ggtt_node into the GGTT
- * @ggtt: the &xe_ggtt where node will be inserted
* @node: the &xe_ggtt_node to be inserted
* @size: size of the node
* @align: alignment constrain of the node
* @mm_flags: flags to control the node behavior
*
+ * It cannot be called without first having called xe_ggtt_init() once.
* To be used in cases where ggtt->lock is already taken.
*
* Return: 0 on success or a negative error code on failure.
*/
-int xe_ggtt_node_insert_locked(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
+int xe_ggtt_node_insert_locked(struct xe_ggtt_node *node,
u32 size, u32 align, u32 mm_flags)
{
- return drm_mm_insert_node_generic(&ggtt->mm, &node->base, size, align, 0,
+ return drm_mm_insert_node_generic(&node->ggtt->mm, &node->base, size, align, 0,
mm_flags);
}
/**
* xe_ggtt_node_insert - Insert a &xe_ggtt_node into the GGTT
- * @ggtt: the &xe_ggtt where node will be inserted
* @node: the &xe_ggtt_node to be inserted
* @size: size of the node
* @align: alignment constrain of the node
*
+ * It cannot be called without first having called xe_ggtt_init() once.
+ *
* Return: 0 on success or a negative error code on failure.
*/
-int xe_ggtt_node_insert(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
- u32 size, u32 align)
+int xe_ggtt_node_insert(struct xe_ggtt_node *node, u32 size, u32 align)
{
int ret;
- mutex_lock(&ggtt->lock);
- ret = xe_ggtt_node_insert_locked(ggtt, node, size,
- align, DRM_MM_INSERT_HIGH);
- mutex_unlock(&ggtt->lock);
+ if (!node || !node->ggtt)
+ return -ENOENT;
+
+ mutex_lock(&node->ggtt->lock);
+ ret = xe_ggtt_node_insert_locked(node, size, align,
+ DRM_MM_INSERT_HIGH);
+ mutex_unlock(&node->ggtt->lock);
return ret;
}
+/**
+ * xe_ggtt_node_init - Initialize %xe_ggtt_node struct
+ * @ggtt: the &xe_ggtt where the new node will later be inserted/reserved.
+ *
+ * This function will allocated the struct %xe_ggtt_node and return it's pointer.
+ * This struct will then be freed after the node removal upon xe_ggtt_node_remove()
+ * or xe_ggtt_node_remove_balloon().
+ * Having %xe_ggtt_node struct allocated doesn't mean that the node is already allocated
+ * in GGTT. Only the xe_ggtt_node_insert(), xe_ggtt_node_insert_locked(),
+ * xe_ggtt_node_insert_balloon() will ensure the node is inserted or reserved in GGTT.
+ *
+ * Return: A pointer to %xe_ggtt_node struct on success. An ERR_PTR otherwise.
+ **/
+struct xe_ggtt_node *xe_ggtt_node_init(struct xe_ggtt *ggtt)
+{
+ struct xe_ggtt_node *node = kzalloc(sizeof(*node), GFP_NOFS);
+
+ if (!node)
+ return ERR_PTR(-ENOMEM);
+
+ node->ggtt = ggtt;
+ return node;
+}
+
+/**
+ * xe_ggtt_node_fini - Forcebly finalize %xe_ggtt_node struct
+ * @node: the &xe_ggtt_node to be freed
+ *
+ * If anything went wrong with either xe_ggtt_node_insert(), xe_ggtt_node_insert_locked(),
+ * or xe_ggtt_node_insert_balloon(); and this @node is not going to be reused, then,
+ * this function needs to be called to free the %xe_ggtt_node struct
+ **/
+void xe_ggtt_node_fini(struct xe_ggtt_node *node)
+{
+ kfree(node);
+}
+
/**
* xe_ggtt_node_remove - Remove a &xe_ggtt_node from the GGTT
- * @ggtt: the &xe_ggtt where node will be removed
* @node: the &xe_ggtt_node to be removed
* @invalidate: if node needs invalidation upon removal
*/
-void xe_ggtt_node_remove(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
- bool invalidate)
+void xe_ggtt_node_remove(struct xe_ggtt_node *node, bool invalidate)
{
+ struct xe_ggtt *ggtt = node->ggtt;
struct xe_device *xe = tile_to_xe(ggtt->tile);
bool bound;
int idx;
+ if (!node || !node->ggtt)
+ return;
+
bound = drm_dev_enter(&xe->drm, &idx);
if (bound)
xe_pm_runtime_get_noresume(xe);
@@ -468,23 +515,29 @@ void xe_ggtt_node_remove(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
mutex_unlock(&ggtt->lock);
if (!bound)
- return;
+ goto free_node;
if (invalidate)
xe_ggtt_invalidate(ggtt);
xe_pm_runtime_put(xe);
drm_dev_exit(idx);
+
+free_node:
+ xe_ggtt_node_fini(node);
}
/**
- * xe_ggtt_node_allocated - Check if node is allocated
+ * xe_ggtt_node_allocated - Check if node is allocated in GGTT
* @node: the &xe_ggtt_node to be inspected
*
* Return: True if allocated, False otherwise.
*/
bool xe_ggtt_node_allocated(const struct xe_ggtt_node *node)
{
+ if (!node || !node->ggtt)
+ return false;
+
return drm_mm_node_allocated(&node->base);
}
@@ -497,9 +550,14 @@ void xe_ggtt_map_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
{
u16 cache_mode = bo->flags & XE_BO_FLAG_NEEDS_UC ? XE_CACHE_NONE : XE_CACHE_WB;
u16 pat_index = tile_to_xe(ggtt->tile)->pat.idx[cache_mode];
- u64 start = bo->ggtt_node.base.start;
+ u64 start;
u64 offset, pte;
+ if (XE_WARN_ON(!bo->ggtt_node))
+ return;
+
+ start = bo->ggtt_node->base.start;
+
for (offset = 0; offset < bo->size; offset += XE_PAGE_SIZE) {
pte = ggtt->pt_ops->pte_encode_bo(bo, offset, pat_index);
ggtt->pt_ops->ggtt_set_pte(ggtt, start + offset, pte);
@@ -515,9 +573,9 @@ static int __xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
if (xe_bo_is_vram(bo) && ggtt->flags & XE_GGTT_FLAGS_64K)
alignment = SZ_64K;
- if (XE_WARN_ON(bo->ggtt_node.base.size)) {
+ if (XE_WARN_ON(bo->ggtt_node)) {
/* Someone's already inserted this BO in the GGTT */
- xe_tile_assert(ggtt->tile, bo->ggtt_node.base.size == bo->size);
+ xe_tile_assert(ggtt->tile, bo->ggtt_node->base.size == bo->size);
return 0;
}
@@ -526,15 +584,26 @@ static int __xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
return err;
xe_pm_runtime_get_noresume(tile_to_xe(ggtt->tile));
+
+ bo->ggtt_node = xe_ggtt_node_init(ggtt);
+ if (IS_ERR(bo->ggtt_node)) {
+ err = PTR_ERR(bo->ggtt_node);
+ goto out;
+ }
+
mutex_lock(&ggtt->lock);
- err = drm_mm_insert_node_in_range(&ggtt->mm, &bo->ggtt_node.base, bo->size,
+ err = drm_mm_insert_node_in_range(&ggtt->mm, &bo->ggtt_node->base, bo->size,
alignment, 0, start, end, 0);
- if (!err)
+ if (err)
+ xe_ggtt_node_fini(bo->ggtt_node);
+ else
xe_ggtt_map_bo(ggtt, bo);
mutex_unlock(&ggtt->lock);
if (!err && bo->flags & XE_BO_FLAG_GGTT_INVALIDATE)
xe_ggtt_invalidate(ggtt);
+
+out:
xe_pm_runtime_put(tile_to_xe(ggtt->tile));
return err;
@@ -574,13 +643,13 @@ int xe_ggtt_insert_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
*/
void xe_ggtt_remove_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
{
- if (XE_WARN_ON(!bo->ggtt_node.base.size))
+ if (XE_WARN_ON(!bo->ggtt_node))
return;
/* This BO is not currently in the GGTT */
- xe_tile_assert(ggtt->tile, bo->ggtt_node.base.size == bo->size);
+ xe_tile_assert(ggtt->tile, bo->ggtt_node->base.size == bo->size);
- xe_ggtt_node_remove(ggtt, &bo->ggtt_node,
+ xe_ggtt_node_remove(bo->ggtt_node,
bo->flags & XE_BO_FLAG_GGTT_INVALIDATE);
}
@@ -647,7 +716,6 @@ static void xe_ggtt_assign_locked(struct xe_ggtt *ggtt, const struct drm_mm_node
/**
* xe_ggtt_assign - assign a GGTT region to the VF
- * @ggtt: the &xe_ggtt where the node belongs
* @node: the &xe_ggtt_node to update
* @vfid: the VF identifier
*
@@ -655,11 +723,11 @@ static void xe_ggtt_assign_locked(struct xe_ggtt *ggtt, const struct drm_mm_node
* In addition to PTE's VFID bits 11:2 also PRESENT bit 0 is set as on some
* platforms VFs can't modify that either.
*/
-void xe_ggtt_assign(struct xe_ggtt *ggtt, const struct xe_ggtt_node *node, u16 vfid)
+void xe_ggtt_assign(const struct xe_ggtt_node *node, u16 vfid)
{
- mutex_lock(&ggtt->lock);
- xe_ggtt_assign_locked(ggtt, &node->base, vfid);
- mutex_unlock(&ggtt->lock);
+ mutex_lock(&node->ggtt->lock);
+ xe_ggtt_assign_locked(node->ggtt, &node->base, vfid);
+ mutex_unlock(&node->ggtt->lock);
}
#endif
diff --git a/drivers/gpu/drm/xe/xe_ggtt.h b/drivers/gpu/drm/xe/xe_ggtt.h
index e258a4f381b4..27e7d67de004 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.h
+++ b/drivers/gpu/drm/xe/xe_ggtt.h
@@ -13,17 +13,16 @@ struct drm_printer;
int xe_ggtt_init_early(struct xe_ggtt *ggtt);
int xe_ggtt_init(struct xe_ggtt *ggtt);
-int xe_ggtt_node_insert_balloon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
+struct xe_ggtt_node *xe_ggtt_node_init(struct xe_ggtt *ggtt);
+void xe_ggtt_node_fini(struct xe_ggtt_node *node);
+int xe_ggtt_node_insert_balloon(struct xe_ggtt_node *node,
u64 start, u64 size);
-void xe_ggtt_node_remove_balloon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node);
+void xe_ggtt_node_remove_balloon(struct xe_ggtt_node *node);
-int xe_ggtt_node_insert(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
- u32 size, u32 align);
-int xe_ggtt_node_insert_locked(struct xe_ggtt *ggtt,
- struct xe_ggtt_node *node,
+int xe_ggtt_node_insert(struct xe_ggtt_node *node, u32 size, u32 align);
+int xe_ggtt_node_insert_locked(struct xe_ggtt_node *node,
u32 size, u32 align, u32 mm_flags);
-void xe_ggtt_node_remove(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
- bool invalidate);
+void xe_ggtt_node_remove(struct xe_ggtt_node *node, bool invalidate);
bool xe_ggtt_node_allocated(const struct xe_ggtt_node *node);
void xe_ggtt_map_bo(struct xe_ggtt *ggtt, struct xe_bo *bo);
int xe_ggtt_insert_bo(struct xe_ggtt *ggtt, struct xe_bo *bo);
@@ -36,7 +35,7 @@ int xe_ggtt_dump(struct xe_ggtt *ggtt, struct drm_printer *p);
u64 xe_ggtt_print_holes(struct xe_ggtt *ggtt, u64 alignment, struct drm_printer *p);
#ifdef CONFIG_PCI_IOV
-void xe_ggtt_assign(struct xe_ggtt *ggtt, const struct xe_ggtt_node *node, u16 vfid);
+void xe_ggtt_assign(const struct xe_ggtt_node *node, u16 vfid);
#endif
#endif
diff --git a/drivers/gpu/drm/xe/xe_ggtt_types.h b/drivers/gpu/drm/xe/xe_ggtt_types.h
index af312a7d1031..0e8822ae13fc 100644
--- a/drivers/gpu/drm/xe/xe_ggtt_types.h
+++ b/drivers/gpu/drm/xe/xe_ggtt_types.h
@@ -50,9 +50,15 @@ struct xe_ggtt {
};
/**
- * struct xe_ggtt_node - A node in GGTT
+ * struct xe_ggtt_node - A node in GGTT.
+ *
+ * This struct needs to be initialized (only-once) with xe_ggtt_node_init() before any node
+ * insertion, reservation, or 'ballooning'.
+ * It will, then, be finalized by either xe_ggtt_node_remove() or xe_ggtt_node_deballoon().
*/
struct xe_ggtt_node {
+ /** @ggtt: Back pointer to xe_ggtt where this region will be inserted at */
+ struct xe_ggtt *ggtt;
/** @base: A drm_mm_node */
struct drm_mm_node base;
};
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
index e133594cc6bd..c8835d9eead6 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
@@ -232,14 +232,14 @@ static u32 encode_config_ggtt(u32 *cfg, const struct xe_gt_sriov_config *config)
{
u32 n = 0;
- if (xe_ggtt_node_allocated(&config->ggtt_region)) {
+ if (xe_ggtt_node_allocated(config->ggtt_region)) {
cfg[n++] = PREP_GUC_KLV_TAG(VF_CFG_GGTT_START);
- cfg[n++] = lower_32_bits(config->ggtt_region.base.start);
- cfg[n++] = upper_32_bits(config->ggtt_region.base.start);
+ cfg[n++] = lower_32_bits(config->ggtt_region->base.start);
+ cfg[n++] = upper_32_bits(config->ggtt_region->base.start);
cfg[n++] = PREP_GUC_KLV_TAG(VF_CFG_GGTT_SIZE);
- cfg[n++] = lower_32_bits(config->ggtt_region.base.size);
- cfg[n++] = upper_32_bits(config->ggtt_region.base.size);
+ cfg[n++] = lower_32_bits(config->ggtt_region->base.size);
+ cfg[n++] = upper_32_bits(config->ggtt_region->base.size);
}
return n;
@@ -371,27 +371,26 @@ static int pf_distribute_config_ggtt(struct xe_tile *tile, unsigned int vfid, u6
static void pf_release_ggtt(struct xe_tile *tile, struct xe_ggtt_node *node)
{
- struct xe_ggtt *ggtt = tile->mem.ggtt;
-
if (xe_ggtt_node_allocated(node)) {
/*
* explicit GGTT PTE assignment to the PF using xe_ggtt_assign()
* is redundant, as PTE will be implicitly re-assigned to PF by
* the xe_ggtt_clear() called by below xe_ggtt_remove_node().
*/
- xe_ggtt_node_remove(ggtt, node, false);
+ xe_ggtt_node_remove(node, false);
}
}
static void pf_release_vf_config_ggtt(struct xe_gt *gt, struct xe_gt_sriov_config *config)
{
- pf_release_ggtt(gt_to_tile(gt), &config->ggtt_region);
+ pf_release_ggtt(gt_to_tile(gt), config->ggtt_region);
+ config->ggtt_region = NULL;
}
static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
{
struct xe_gt_sriov_config *config = pf_pick_vf_config(gt, vfid);
- struct xe_ggtt_node *node = &config->ggtt_region;
+ struct xe_ggtt_node *node = config->ggtt_region;
struct xe_tile *tile = gt_to_tile(gt);
struct xe_ggtt *ggtt = tile->mem.ggtt;
u64 alignment = pf_get_ggtt_alignment(gt);
@@ -415,25 +414,33 @@ static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
if (!size)
return 0;
- err = xe_ggtt_node_insert(ggtt, node, size, alignment);
+ node = xe_ggtt_node_init(ggtt);
+ if (IS_ERR(node))
+ return PTR_ERR(node);
+
+ err = xe_ggtt_node_insert(node, size, alignment);
if (unlikely(err))
- return err;
+ goto err;
- xe_ggtt_assign(ggtt, node, vfid);
+ xe_ggtt_assign(node, vfid);
xe_gt_sriov_dbg_verbose(gt, "VF%u assigned GGTT %llx-%llx\n",
vfid, node->base.start, node->base.start + node->base.size - 1);
err = pf_distribute_config_ggtt(gt->tile, vfid, node->base.start, node->base.size);
if (unlikely(err))
- return err;
+ goto err;
+ config->ggtt_region = node;
return 0;
+err:
+ xe_ggtt_node_fini(node);
+ return err;
}
static u64 pf_get_vf_config_ggtt(struct xe_gt *gt, unsigned int vfid)
{
struct xe_gt_sriov_config *config = pf_pick_vf_config(gt, vfid);
- struct xe_ggtt_node *node = &config->ggtt_region;
+ struct xe_ggtt_node *node = config->ggtt_region;
xe_gt_assert(gt, !xe_gt_is_media_type(gt));
return xe_ggtt_node_allocated(node) ? node->base.size : 0;
@@ -2006,13 +2013,15 @@ int xe_gt_sriov_pf_config_print_ggtt(struct xe_gt *gt, struct drm_printer *p)
for (n = 1; n <= total_vfs; n++) {
config = >->sriov.pf.vfs[n].config;
- if (!xe_ggtt_node_allocated(&config->ggtt_region))
+ if (!xe_ggtt_node_allocated(config->ggtt_region))
continue;
- string_get_size(config->ggtt_region.base.size, 1, STRING_UNITS_2, buf, sizeof(buf));
+ string_get_size(config->ggtt_region->base.size, 1, STRING_UNITS_2,
+ buf, sizeof(buf));
drm_printf(p, "VF%u:\t%#0llx-%#llx\t(%s)\n",
- n, config->ggtt_region.base.start,
- config->ggtt_region.base.start + config->ggtt_region.base.size - 1, buf);
+ n, config->ggtt_region->base.start,
+ config->ggtt_region->base.start + config->ggtt_region->base.size - 1,
+ buf);
}
return 0;
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h
index a73d9a4b9e64..2d3b73d78f14 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h
@@ -18,7 +18,7 @@ struct xe_bo;
*/
struct xe_gt_sriov_config {
/** @ggtt_region: GGTT region assigned to the VF. */
- struct xe_ggtt_node ggtt_region;
+ struct xe_ggtt_node *ggtt_region;
/** @lmem_obj: LMEM allocation for use by the VF. */
struct xe_bo *lmem_obj;
/** @num_ctxs: number of GuC contexts IDs. */
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
index 39ff4e7f902e..4ebc82e607af 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
@@ -495,6 +495,25 @@ u64 xe_gt_sriov_vf_lmem(struct xe_gt *gt)
return gt->sriov.vf.self_config.lmem_size;
}
+static struct xe_ggtt_node *
+vf_balloon_ggtt_node(struct xe_ggtt *ggtt, u64 start, u64 end)
+{
+ struct xe_ggtt_node *node;
+ int err;
+
+ node = xe_ggtt_node_init(ggtt);
+ if (IS_ERR(node))
+ return node;
+
+ err = xe_ggtt_node_insert_balloon(node, start, end);
+ if (err) {
+ xe_ggtt_node_fini(node);
+ return ERR_PTR(err);
+ }
+
+ return node;
+}
+
static int vf_balloon_ggtt(struct xe_gt *gt)
{
struct xe_gt_sriov_vf_selfconfig *config = >->sriov.vf.self_config;
@@ -502,7 +521,6 @@ static int vf_balloon_ggtt(struct xe_gt *gt)
struct xe_ggtt *ggtt = tile->mem.ggtt;
struct xe_device *xe = gt_to_xe(gt);
u64 start, end;
- int err;
xe_gt_assert(gt, IS_SRIOV_VF(xe));
xe_gt_assert(gt, !xe_gt_is_media_type(gt));
@@ -528,37 +546,31 @@ static int vf_balloon_ggtt(struct xe_gt *gt)
start = xe_wopcm_size(xe);
end = config->ggtt_base;
if (end != start) {
- err = xe_ggtt_node_insert_balloon(ggtt, &tile->sriov.vf.ggtt_balloon[0],
- start, end);
- if (err)
- goto failed;
+ tile->sriov.vf.ggtt_balloon[0] = vf_balloon_ggtt_node(ggtt, start, end);
+ if (IS_ERR(tile->sriov.vf.ggtt_balloon[0]))
+ return PTR_ERR(tile->sriov.vf.ggtt_balloon[0]);
}
start = config->ggtt_base + config->ggtt_size;
end = GUC_GGTT_TOP;
if (end != start) {
- err = xe_ggtt_node_insert_balloon(ggtt, &tile->sriov.vf.ggtt_balloon[1],
- start, end);
- if (err)
- goto deballoon;
+ tile->sriov.vf.ggtt_balloon[1] = vf_balloon_ggtt_node(ggtt, start, end);
+ if (IS_ERR(tile->sriov.vf.ggtt_balloon[1])) {
+ xe_ggtt_node_remove_balloon(tile->sriov.vf.ggtt_balloon[0]);
+ return PTR_ERR(tile->sriov.vf.ggtt_balloon[1]);
+ }
}
return 0;
-
-deballoon:
- xe_ggtt_node_remove_balloon(ggtt, &tile->sriov.vf.ggtt_balloon[0]);
-failed:
- return err;
}
static void deballoon_ggtt(struct drm_device *drm, void *arg)
{
struct xe_tile *tile = arg;
- struct xe_ggtt *ggtt = tile->mem.ggtt;
xe_tile_assert(tile, IS_SRIOV_VF(tile_to_xe(tile)));
- xe_ggtt_node_remove_balloon(ggtt, &tile->sriov.vf.ggtt_balloon[1]);
- xe_ggtt_node_remove_balloon(ggtt, &tile->sriov.vf.ggtt_balloon[0]);
+ xe_ggtt_node_remove_balloon(tile->sriov.vf.ggtt_balloon[1]);
+ xe_ggtt_node_remove_balloon(tile->sriov.vf.ggtt_balloon[0]);
}
/**
--
2.46.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* Re: [PATCH 11/12] drm/xe: Make xe_ggtt_node struct independent
2024-08-21 19:38 ` [PATCH 11/12] drm/xe: Make xe_ggtt_node struct independent Rodrigo Vivi
@ 2024-08-22 17:52 ` Matthew Brost
0 siblings, 0 replies; 28+ messages in thread
From: Matthew Brost @ 2024-08-22 17:52 UTC (permalink / raw)
To: Rodrigo Vivi; +Cc: intel-xe, lucas.demarchi, Matthew Auld, Michal Wajdeczko
On Wed, Aug 21, 2024 at 03:38:41PM -0400, Rodrigo Vivi wrote:
> In some rare cases, the drm_mm node cannot be removed synchronously
> due to runtime PM conditions. In this situation, the node removal will
> be delegated to a workqueue that will be able to wake up the device
> before removing the node.
>
> However, in this situation, the lifetime of the xe_ggtt_node cannot
> be restricted to the lifetime of the parent object. So, this patch
> introduces the infrastructure so the xe_ggtt_node struct can be
> allocated in advance and freed when needed.
>
> By having the ggtt backpointer, it also ensure that the init function
> is always called before any attempt to insert or reserve the node
> in the GGTT.
>
> v2: s/xe_ggtt_node_force_fini/xe_ggtt_node_fini and use it
> internaly (Brost)
> v3: - Use GF_NOFS for node allocation (CI)
> - Avoid ggtt argument, now that we have it inside the node (Lucas)
> - Fix some missed fini cases (CI)
> v4: - Fix SRIOV critical case where config->ggtt_region was
> lost (Michal)
> - Avoid ggtt argument also on removal (missed case on v3) (Michal)
> - Remove useless checks (Michal)
> - Return 0 instead of negative errno on a u32 addr. (Michal)
> - s/xe_ggtt_assign/xe_ggtt_node_assign for coherence, while we
> are touching it (Michal)
> v5: - Fix VFs' ggtt_balloon
>
> Cc: Matthew Auld <matthew.auld@intel.com>
> Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
> Cc: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> ---
> .../gpu/drm/xe/compat-i915-headers/i915_vma.h | 4 +-
> drivers/gpu/drm/xe/display/xe_fb_pin.c | 39 +++--
> drivers/gpu/drm/xe/xe_bo.c | 2 +-
> drivers/gpu/drm/xe/xe_bo.h | 9 +-
> drivers/gpu/drm/xe/xe_bo_types.h | 2 +-
> drivers/gpu/drm/xe/xe_device_types.h | 2 +-
> drivers/gpu/drm/xe/xe_ggtt.c | 140 +++++++++++++-----
> drivers/gpu/drm/xe/xe_ggtt.h | 17 +--
> drivers/gpu/drm/xe/xe_ggtt_types.h | 8 +-
> drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c | 47 +++---
> .../gpu/drm/xe/xe_gt_sriov_pf_config_types.h | 2 +-
> drivers/gpu/drm/xe/xe_gt_sriov_vf.c | 46 +++---
> 12 files changed, 214 insertions(+), 104 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h b/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
> index 3028ac1ba72f..bdae8392e125 100644
> --- a/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
> +++ b/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
> @@ -20,7 +20,7 @@ struct xe_bo;
>
> struct i915_vma {
> struct xe_bo *bo, *dpt;
> - struct xe_ggtt_node node;
> + struct xe_ggtt_node *node;
> };
>
> #define i915_ggtt_clear_scanout(bo) do { } while (0)
> @@ -29,7 +29,7 @@ struct i915_vma {
>
> static inline u32 i915_ggtt_offset(const struct i915_vma *vma)
> {
> - return vma->node.base.start;
> + return vma->node->base.start;
> }
>
> #endif
> diff --git a/drivers/gpu/drm/xe/display/xe_fb_pin.c b/drivers/gpu/drm/xe/display/xe_fb_pin.c
> index de4930b67a29..d650c5ac41a4 100644
> --- a/drivers/gpu/drm/xe/display/xe_fb_pin.c
> +++ b/drivers/gpu/drm/xe/display/xe_fb_pin.c
> @@ -204,20 +204,28 @@ static int __xe_pin_fb_vma_ggtt(const struct intel_framebuffer *fb,
> if (xe_bo_is_vram(bo) && ggtt->flags & XE_GGTT_FLAGS_64K)
> align = max_t(u32, align, SZ_64K);
>
> - if (bo->ggtt_node.base.size && view->type == I915_GTT_VIEW_NORMAL) {
> + if (bo->ggtt_node && view->type == I915_GTT_VIEW_NORMAL) {
> vma->node = bo->ggtt_node;
> } else if (view->type == I915_GTT_VIEW_NORMAL) {
> u32 x, size = bo->ttm.base.size;
>
> - ret = xe_ggtt_node_insert_locked(ggtt, &vma->node, size, align, 0);
> - if (ret)
> + vma->node = xe_ggtt_node_init(ggtt);
> + if (IS_ERR(vma->node)) {
> + ret = PTR_ERR(vma->node);
> goto out_unlock;
> + }
> +
> + ret = xe_ggtt_node_insert_locked(vma->node, size, align, 0);
> + if (ret) {
> + xe_ggtt_node_fini(vma->node);
> + goto out_unlock;
> + }
>
> for (x = 0; x < size; x += XE_PAGE_SIZE) {
> u64 pte = ggtt->pt_ops->pte_encode_bo(bo, x,
> xe->pat.idx[XE_CACHE_NONE]);
>
> - ggtt->pt_ops->ggtt_set_pte(ggtt, vma->node.base.start + x, pte);
> + ggtt->pt_ops->ggtt_set_pte(ggtt, vma->node->base.start + x, pte);
> }
> } else {
> u32 i, ggtt_ofs;
> @@ -226,11 +234,19 @@ static int __xe_pin_fb_vma_ggtt(const struct intel_framebuffer *fb,
> /* display seems to use tiles instead of bytes here, so convert it back.. */
> u32 size = intel_rotation_info_size(rot_info) * XE_PAGE_SIZE;
>
> - ret = xe_ggtt_node_insert_locked(ggtt, &vma->node, size, align, 0);
> - if (ret)
> + vma->node = xe_ggtt_node_init(ggtt);
> + if (IS_ERR(vma->node)) {
> + ret = PTR_ERR(vma->node);
> + goto out_unlock;
> + }
> +
> + ret = xe_ggtt_node_insert_locked(vma->node, size, align, 0);
> + if (ret) {
> + xe_ggtt_node_fini(vma->node);
> goto out_unlock;
> + }
>
> - ggtt_ofs = vma->node.base.start;
> + ggtt_ofs = vma->node->base.start;
>
> for (i = 0; i < ARRAY_SIZE(rot_info->plane); i++)
> write_ggtt_rotated(bo, ggtt, &ggtt_ofs,
> @@ -318,14 +334,11 @@ static struct i915_vma *__xe_pin_fb_vma(const struct intel_framebuffer *fb,
>
> static void __xe_unpin_fb_vma(struct i915_vma *vma)
> {
> - struct xe_device *xe = to_xe_device(vma->bo->ttm.base.dev);
> - struct xe_ggtt *ggtt = xe_device_get_root_tile(xe)->mem.ggtt;
> -
> if (vma->dpt)
> xe_bo_unpin_map_no_vm(vma->dpt);
> - else if (!xe_ggtt_node_allocated(&vma->bo->ggtt_node) ||
> - vma->bo->ggtt_node.base.start != vma->node.base.start)
> - xe_ggtt_node_remove(ggtt, &vma->node, false);
> + else if (!xe_ggtt_node_allocated(vma->bo->ggtt_node) ||
> + vma->bo->ggtt_node->base.start != vma->node->base.start)
> + xe_ggtt_node_remove(vma->node, false);
>
> ttm_bo_reserve(&vma->bo->ttm, false, false, NULL);
> ttm_bo_unpin(&vma->bo->ttm);
> diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
> index 1faef9903b87..cbe7bf098970 100644
> --- a/drivers/gpu/drm/xe/xe_bo.c
> +++ b/drivers/gpu/drm/xe/xe_bo.c
> @@ -1120,7 +1120,7 @@ static void xe_ttm_bo_destroy(struct ttm_buffer_object *ttm_bo)
>
> xe_assert(xe, list_empty(&ttm_bo->base.gpuva.list));
>
> - if (bo->ggtt_node.base.size)
> + if (bo->ggtt_node && bo->ggtt_node->base.size)
> xe_ggtt_remove_bo(bo->tile->mem.ggtt, bo);
>
> #ifdef CONFIG_PROC_FS
> diff --git a/drivers/gpu/drm/xe/xe_bo.h b/drivers/gpu/drm/xe/xe_bo.h
> index 9904b410be37..dbfb3209615d 100644
> --- a/drivers/gpu/drm/xe/xe_bo.h
> +++ b/drivers/gpu/drm/xe/xe_bo.h
> @@ -194,9 +194,12 @@ xe_bo_main_addr(struct xe_bo *bo, size_t page_size)
> static inline u32
> xe_bo_ggtt_addr(struct xe_bo *bo)
> {
> - XE_WARN_ON(bo->ggtt_node.base.size > bo->size);
> - XE_WARN_ON(bo->ggtt_node.base.start + bo->ggtt_node.base.size > (1ull << 32));
> - return bo->ggtt_node.base.start;
> + if (XE_WARN_ON(!bo->ggtt_node))
> + return 0;
> +
> + XE_WARN_ON(bo->ggtt_node->base.size > bo->size);
> + XE_WARN_ON(bo->ggtt_node->base.start + bo->ggtt_node->base.size > (1ull << 32));
> + return bo->ggtt_node->base.start;
> }
>
> int xe_bo_vmap(struct xe_bo *bo);
> diff --git a/drivers/gpu/drm/xe/xe_bo_types.h b/drivers/gpu/drm/xe/xe_bo_types.h
> index 4b1de9f5be00..2ed558ac2264 100644
> --- a/drivers/gpu/drm/xe/xe_bo_types.h
> +++ b/drivers/gpu/drm/xe/xe_bo_types.h
> @@ -40,7 +40,7 @@ struct xe_bo {
> /** @placement: current placement for this BO */
> struct ttm_placement placement;
> /** @ggtt_node: GGTT node if this BO is mapped in the GGTT */
> - struct xe_ggtt_node ggtt_node;
> + struct xe_ggtt_node *ggtt_node;
> /** @vmap: iosys map of this buffer */
> struct iosys_map vmap;
> /** @ttm_kmap: TTM bo kmap object for internal use only. Keep off. */
> diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
> index f6810e73da1f..4ecd620921a3 100644
> --- a/drivers/gpu/drm/xe/xe_device_types.h
> +++ b/drivers/gpu/drm/xe/xe_device_types.h
> @@ -204,7 +204,7 @@ struct xe_tile {
> struct xe_memirq memirq;
>
> /** @sriov.vf.ggtt_balloon: GGTT regions excluded from use. */
> - struct xe_ggtt_node ggtt_balloon[2];
> + struct xe_ggtt_node *ggtt_balloon[2];
> } vf;
> } sriov;
>
> diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
> index d21474715bdb..58d7cad2425b 100644
> --- a/drivers/gpu/drm/xe/xe_ggtt.c
> +++ b/drivers/gpu/drm/xe/xe_ggtt.c
> @@ -348,7 +348,6 @@ static void xe_ggtt_dump_node(struct xe_ggtt *ggtt,
>
> /**
> * xe_ggtt_node_insert_balloon - prevent allocation of specified GGTT addresses
> - * @ggtt: the &xe_ggtt where we want to make reservation
> * @node: the &xe_ggtt_node to hold reserved GGTT node
> * @start: the starting GGTT address of the reserved region
> * @end: then end GGTT address of the reserved region
> @@ -357,8 +356,9 @@ static void xe_ggtt_dump_node(struct xe_ggtt *ggtt,
> *
> * Return: 0 on success or a negative error code on failure.
> */
> -int xe_ggtt_node_insert_balloon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node, u64 start, u64 end)
> +int xe_ggtt_node_insert_balloon(struct xe_ggtt_node *node, u64 start, u64 end)
> {
> + struct xe_ggtt *ggtt = node->ggtt;
> int err;
>
> xe_tile_assert(ggtt->tile, start < end);
> @@ -385,77 +385,124 @@ int xe_ggtt_node_insert_balloon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
>
> /**
> * xe_ggtt_node_remove_balloon - release a reserved GGTT region
> - * @ggtt: the &xe_ggtt where reserved node belongs
> * @node: the &xe_ggtt_node with reserved GGTT region
> *
> * See xe_ggtt_node_insert_balloon() for details.
> */
> -void xe_ggtt_node_remove_balloon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node)
> +void xe_ggtt_node_remove_balloon(struct xe_ggtt_node *node)
> {
> - if (!drm_mm_node_allocated(&node->base))
> + if (!node || !node->ggtt)
> return;
>
> - xe_ggtt_dump_node(ggtt, &node->base, "remove-balloon");
> + if (!drm_mm_node_allocated(&node->base))
> + goto free_node;
>
> - mutex_lock(&ggtt->lock);
> + xe_ggtt_dump_node(node->ggtt, &node->base, "remove-balloon");
> +
> + mutex_lock(&node->ggtt->lock);
> drm_mm_remove_node(&node->base);
> - mutex_unlock(&ggtt->lock);
> + mutex_unlock(&node->ggtt->lock);
> +
> +free_node:
> + xe_ggtt_node_fini(node);
> }
>
> /**
> * xe_ggtt_node_insert_locked - Locked version to insert a &xe_ggtt_node into the GGTT
> - * @ggtt: the &xe_ggtt where node will be inserted
> * @node: the &xe_ggtt_node to be inserted
> * @size: size of the node
> * @align: alignment constrain of the node
> * @mm_flags: flags to control the node behavior
> *
> + * It cannot be called without first having called xe_ggtt_init() once.
> * To be used in cases where ggtt->lock is already taken.
> *
> * Return: 0 on success or a negative error code on failure.
> */
> -int xe_ggtt_node_insert_locked(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
> +int xe_ggtt_node_insert_locked(struct xe_ggtt_node *node,
> u32 size, u32 align, u32 mm_flags)
> {
> - return drm_mm_insert_node_generic(&ggtt->mm, &node->base, size, align, 0,
> + return drm_mm_insert_node_generic(&node->ggtt->mm, &node->base, size, align, 0,
> mm_flags);
> }
>
> /**
> * xe_ggtt_node_insert - Insert a &xe_ggtt_node into the GGTT
> - * @ggtt: the &xe_ggtt where node will be inserted
> * @node: the &xe_ggtt_node to be inserted
> * @size: size of the node
> * @align: alignment constrain of the node
> *
> + * It cannot be called without first having called xe_ggtt_init() once.
> + *
> * Return: 0 on success or a negative error code on failure.
> */
> -int xe_ggtt_node_insert(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
> - u32 size, u32 align)
> +int xe_ggtt_node_insert(struct xe_ggtt_node *node, u32 size, u32 align)
> {
> int ret;
>
> - mutex_lock(&ggtt->lock);
> - ret = xe_ggtt_node_insert_locked(ggtt, node, size,
> - align, DRM_MM_INSERT_HIGH);
> - mutex_unlock(&ggtt->lock);
> + if (!node || !node->ggtt)
> + return -ENOENT;
> +
> + mutex_lock(&node->ggtt->lock);
> + ret = xe_ggtt_node_insert_locked(node, size, align,
> + DRM_MM_INSERT_HIGH);
> + mutex_unlock(&node->ggtt->lock);
>
> return ret;
> }
>
> +/**
> + * xe_ggtt_node_init - Initialize %xe_ggtt_node struct
> + * @ggtt: the &xe_ggtt where the new node will later be inserted/reserved.
> + *
> + * This function will allocated the struct %xe_ggtt_node and return it's pointer.
> + * This struct will then be freed after the node removal upon xe_ggtt_node_remove()
> + * or xe_ggtt_node_remove_balloon().
> + * Having %xe_ggtt_node struct allocated doesn't mean that the node is already allocated
> + * in GGTT. Only the xe_ggtt_node_insert(), xe_ggtt_node_insert_locked(),
> + * xe_ggtt_node_insert_balloon() will ensure the node is inserted or reserved in GGTT.
> + *
> + * Return: A pointer to %xe_ggtt_node struct on success. An ERR_PTR otherwise.
> + **/
> +struct xe_ggtt_node *xe_ggtt_node_init(struct xe_ggtt *ggtt)
> +{
> + struct xe_ggtt_node *node = kzalloc(sizeof(*node), GFP_NOFS);
> +
> + if (!node)
> + return ERR_PTR(-ENOMEM);
> +
> + node->ggtt = ggtt;
> + return node;
> +}
> +
> +/**
> + * xe_ggtt_node_fini - Forcebly finalize %xe_ggtt_node struct
> + * @node: the &xe_ggtt_node to be freed
> + *
> + * If anything went wrong with either xe_ggtt_node_insert(), xe_ggtt_node_insert_locked(),
> + * or xe_ggtt_node_insert_balloon(); and this @node is not going to be reused, then,
> + * this function needs to be called to free the %xe_ggtt_node struct
> + **/
> +void xe_ggtt_node_fini(struct xe_ggtt_node *node)
> +{
> + kfree(node);
> +}
> +
> /**
> * xe_ggtt_node_remove - Remove a &xe_ggtt_node from the GGTT
> - * @ggtt: the &xe_ggtt where node will be removed
> * @node: the &xe_ggtt_node to be removed
> * @invalidate: if node needs invalidation upon removal
> */
> -void xe_ggtt_node_remove(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
> - bool invalidate)
> +void xe_ggtt_node_remove(struct xe_ggtt_node *node, bool invalidate)
> {
> + struct xe_ggtt *ggtt = node->ggtt;
> struct xe_device *xe = tile_to_xe(ggtt->tile);
> bool bound;
> int idx;
>
> + if (!node || !node->ggtt)
> + return;
> +
> bound = drm_dev_enter(&xe->drm, &idx);
> if (bound)
> xe_pm_runtime_get_noresume(xe);
> @@ -468,23 +515,29 @@ void xe_ggtt_node_remove(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
> mutex_unlock(&ggtt->lock);
>
> if (!bound)
> - return;
> + goto free_node;
>
> if (invalidate)
> xe_ggtt_invalidate(ggtt);
>
> xe_pm_runtime_put(xe);
> drm_dev_exit(idx);
> +
> +free_node:
> + xe_ggtt_node_fini(node);
> }
>
> /**
> - * xe_ggtt_node_allocated - Check if node is allocated
> + * xe_ggtt_node_allocated - Check if node is allocated in GGTT
> * @node: the &xe_ggtt_node to be inspected
> *
> * Return: True if allocated, False otherwise.
> */
> bool xe_ggtt_node_allocated(const struct xe_ggtt_node *node)
> {
> + if (!node || !node->ggtt)
> + return false;
> +
> return drm_mm_node_allocated(&node->base);
> }
>
> @@ -497,9 +550,14 @@ void xe_ggtt_map_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
> {
> u16 cache_mode = bo->flags & XE_BO_FLAG_NEEDS_UC ? XE_CACHE_NONE : XE_CACHE_WB;
> u16 pat_index = tile_to_xe(ggtt->tile)->pat.idx[cache_mode];
> - u64 start = bo->ggtt_node.base.start;
> + u64 start;
> u64 offset, pte;
>
> + if (XE_WARN_ON(!bo->ggtt_node))
> + return;
> +
> + start = bo->ggtt_node->base.start;
> +
> for (offset = 0; offset < bo->size; offset += XE_PAGE_SIZE) {
> pte = ggtt->pt_ops->pte_encode_bo(bo, offset, pat_index);
> ggtt->pt_ops->ggtt_set_pte(ggtt, start + offset, pte);
> @@ -515,9 +573,9 @@ static int __xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
> if (xe_bo_is_vram(bo) && ggtt->flags & XE_GGTT_FLAGS_64K)
> alignment = SZ_64K;
>
> - if (XE_WARN_ON(bo->ggtt_node.base.size)) {
> + if (XE_WARN_ON(bo->ggtt_node)) {
> /* Someone's already inserted this BO in the GGTT */
> - xe_tile_assert(ggtt->tile, bo->ggtt_node.base.size == bo->size);
> + xe_tile_assert(ggtt->tile, bo->ggtt_node->base.size == bo->size);
> return 0;
> }
>
> @@ -526,15 +584,26 @@ static int __xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
> return err;
>
> xe_pm_runtime_get_noresume(tile_to_xe(ggtt->tile));
> +
> + bo->ggtt_node = xe_ggtt_node_init(ggtt);
> + if (IS_ERR(bo->ggtt_node)) {
> + err = PTR_ERR(bo->ggtt_node);
> + goto out;
> + }
> +
> mutex_lock(&ggtt->lock);
> - err = drm_mm_insert_node_in_range(&ggtt->mm, &bo->ggtt_node.base, bo->size,
> + err = drm_mm_insert_node_in_range(&ggtt->mm, &bo->ggtt_node->base, bo->size,
> alignment, 0, start, end, 0);
> - if (!err)
> + if (err)
> + xe_ggtt_node_fini(bo->ggtt_node);
> + else
> xe_ggtt_map_bo(ggtt, bo);
> mutex_unlock(&ggtt->lock);
>
> if (!err && bo->flags & XE_BO_FLAG_GGTT_INVALIDATE)
> xe_ggtt_invalidate(ggtt);
> +
> +out:
> xe_pm_runtime_put(tile_to_xe(ggtt->tile));
>
> return err;
> @@ -574,13 +643,13 @@ int xe_ggtt_insert_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
> */
> void xe_ggtt_remove_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
> {
> - if (XE_WARN_ON(!bo->ggtt_node.base.size))
> + if (XE_WARN_ON(!bo->ggtt_node))
> return;
>
> /* This BO is not currently in the GGTT */
> - xe_tile_assert(ggtt->tile, bo->ggtt_node.base.size == bo->size);
> + xe_tile_assert(ggtt->tile, bo->ggtt_node->base.size == bo->size);
>
> - xe_ggtt_node_remove(ggtt, &bo->ggtt_node,
> + xe_ggtt_node_remove(bo->ggtt_node,
> bo->flags & XE_BO_FLAG_GGTT_INVALIDATE);
> }
>
> @@ -647,7 +716,6 @@ static void xe_ggtt_assign_locked(struct xe_ggtt *ggtt, const struct drm_mm_node
>
> /**
> * xe_ggtt_assign - assign a GGTT region to the VF
> - * @ggtt: the &xe_ggtt where the node belongs
> * @node: the &xe_ggtt_node to update
> * @vfid: the VF identifier
> *
> @@ -655,11 +723,11 @@ static void xe_ggtt_assign_locked(struct xe_ggtt *ggtt, const struct drm_mm_node
> * In addition to PTE's VFID bits 11:2 also PRESENT bit 0 is set as on some
> * platforms VFs can't modify that either.
> */
> -void xe_ggtt_assign(struct xe_ggtt *ggtt, const struct xe_ggtt_node *node, u16 vfid)
> +void xe_ggtt_assign(const struct xe_ggtt_node *node, u16 vfid)
> {
> - mutex_lock(&ggtt->lock);
> - xe_ggtt_assign_locked(ggtt, &node->base, vfid);
> - mutex_unlock(&ggtt->lock);
> + mutex_lock(&node->ggtt->lock);
> + xe_ggtt_assign_locked(node->ggtt, &node->base, vfid);
> + mutex_unlock(&node->ggtt->lock);
> }
> #endif
>
> diff --git a/drivers/gpu/drm/xe/xe_ggtt.h b/drivers/gpu/drm/xe/xe_ggtt.h
> index e258a4f381b4..27e7d67de004 100644
> --- a/drivers/gpu/drm/xe/xe_ggtt.h
> +++ b/drivers/gpu/drm/xe/xe_ggtt.h
> @@ -13,17 +13,16 @@ struct drm_printer;
> int xe_ggtt_init_early(struct xe_ggtt *ggtt);
> int xe_ggtt_init(struct xe_ggtt *ggtt);
>
> -int xe_ggtt_node_insert_balloon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
> +struct xe_ggtt_node *xe_ggtt_node_init(struct xe_ggtt *ggtt);
> +void xe_ggtt_node_fini(struct xe_ggtt_node *node);
> +int xe_ggtt_node_insert_balloon(struct xe_ggtt_node *node,
> u64 start, u64 size);
> -void xe_ggtt_node_remove_balloon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node);
> +void xe_ggtt_node_remove_balloon(struct xe_ggtt_node *node);
>
> -int xe_ggtt_node_insert(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
> - u32 size, u32 align);
> -int xe_ggtt_node_insert_locked(struct xe_ggtt *ggtt,
> - struct xe_ggtt_node *node,
> +int xe_ggtt_node_insert(struct xe_ggtt_node *node, u32 size, u32 align);
> +int xe_ggtt_node_insert_locked(struct xe_ggtt_node *node,
> u32 size, u32 align, u32 mm_flags);
> -void xe_ggtt_node_remove(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
> - bool invalidate);
> +void xe_ggtt_node_remove(struct xe_ggtt_node *node, bool invalidate);
> bool xe_ggtt_node_allocated(const struct xe_ggtt_node *node);
> void xe_ggtt_map_bo(struct xe_ggtt *ggtt, struct xe_bo *bo);
> int xe_ggtt_insert_bo(struct xe_ggtt *ggtt, struct xe_bo *bo);
> @@ -36,7 +35,7 @@ int xe_ggtt_dump(struct xe_ggtt *ggtt, struct drm_printer *p);
> u64 xe_ggtt_print_holes(struct xe_ggtt *ggtt, u64 alignment, struct drm_printer *p);
>
> #ifdef CONFIG_PCI_IOV
> -void xe_ggtt_assign(struct xe_ggtt *ggtt, const struct xe_ggtt_node *node, u16 vfid);
> +void xe_ggtt_assign(const struct xe_ggtt_node *node, u16 vfid);
> #endif
>
> #endif
> diff --git a/drivers/gpu/drm/xe/xe_ggtt_types.h b/drivers/gpu/drm/xe/xe_ggtt_types.h
> index af312a7d1031..0e8822ae13fc 100644
> --- a/drivers/gpu/drm/xe/xe_ggtt_types.h
> +++ b/drivers/gpu/drm/xe/xe_ggtt_types.h
> @@ -50,9 +50,15 @@ struct xe_ggtt {
> };
>
> /**
> - * struct xe_ggtt_node - A node in GGTT
> + * struct xe_ggtt_node - A node in GGTT.
> + *
> + * This struct needs to be initialized (only-once) with xe_ggtt_node_init() before any node
> + * insertion, reservation, or 'ballooning'.
> + * It will, then, be finalized by either xe_ggtt_node_remove() or xe_ggtt_node_deballoon().
> */
> struct xe_ggtt_node {
> + /** @ggtt: Back pointer to xe_ggtt where this region will be inserted at */
> + struct xe_ggtt *ggtt;
> /** @base: A drm_mm_node */
> struct drm_mm_node base;
> };
> diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
> index e133594cc6bd..c8835d9eead6 100644
> --- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
> +++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
> @@ -232,14 +232,14 @@ static u32 encode_config_ggtt(u32 *cfg, const struct xe_gt_sriov_config *config)
> {
> u32 n = 0;
>
> - if (xe_ggtt_node_allocated(&config->ggtt_region)) {
> + if (xe_ggtt_node_allocated(config->ggtt_region)) {
> cfg[n++] = PREP_GUC_KLV_TAG(VF_CFG_GGTT_START);
> - cfg[n++] = lower_32_bits(config->ggtt_region.base.start);
> - cfg[n++] = upper_32_bits(config->ggtt_region.base.start);
> + cfg[n++] = lower_32_bits(config->ggtt_region->base.start);
> + cfg[n++] = upper_32_bits(config->ggtt_region->base.start);
>
> cfg[n++] = PREP_GUC_KLV_TAG(VF_CFG_GGTT_SIZE);
> - cfg[n++] = lower_32_bits(config->ggtt_region.base.size);
> - cfg[n++] = upper_32_bits(config->ggtt_region.base.size);
> + cfg[n++] = lower_32_bits(config->ggtt_region->base.size);
> + cfg[n++] = upper_32_bits(config->ggtt_region->base.size);
> }
>
> return n;
> @@ -371,27 +371,26 @@ static int pf_distribute_config_ggtt(struct xe_tile *tile, unsigned int vfid, u6
>
> static void pf_release_ggtt(struct xe_tile *tile, struct xe_ggtt_node *node)
> {
> - struct xe_ggtt *ggtt = tile->mem.ggtt;
> -
> if (xe_ggtt_node_allocated(node)) {
> /*
> * explicit GGTT PTE assignment to the PF using xe_ggtt_assign()
> * is redundant, as PTE will be implicitly re-assigned to PF by
> * the xe_ggtt_clear() called by below xe_ggtt_remove_node().
> */
> - xe_ggtt_node_remove(ggtt, node, false);
> + xe_ggtt_node_remove(node, false);
> }
> }
>
> static void pf_release_vf_config_ggtt(struct xe_gt *gt, struct xe_gt_sriov_config *config)
> {
> - pf_release_ggtt(gt_to_tile(gt), &config->ggtt_region);
> + pf_release_ggtt(gt_to_tile(gt), config->ggtt_region);
> + config->ggtt_region = NULL;
> }
>
> static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
> {
> struct xe_gt_sriov_config *config = pf_pick_vf_config(gt, vfid);
> - struct xe_ggtt_node *node = &config->ggtt_region;
> + struct xe_ggtt_node *node = config->ggtt_region;
> struct xe_tile *tile = gt_to_tile(gt);
> struct xe_ggtt *ggtt = tile->mem.ggtt;
> u64 alignment = pf_get_ggtt_alignment(gt);
> @@ -415,25 +414,33 @@ static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
> if (!size)
> return 0;
>
> - err = xe_ggtt_node_insert(ggtt, node, size, alignment);
> + node = xe_ggtt_node_init(ggtt);
> + if (IS_ERR(node))
> + return PTR_ERR(node);
> +
> + err = xe_ggtt_node_insert(node, size, alignment);
> if (unlikely(err))
> - return err;
> + goto err;
>
> - xe_ggtt_assign(ggtt, node, vfid);
> + xe_ggtt_assign(node, vfid);
> xe_gt_sriov_dbg_verbose(gt, "VF%u assigned GGTT %llx-%llx\n",
> vfid, node->base.start, node->base.start + node->base.size - 1);
>
> err = pf_distribute_config_ggtt(gt->tile, vfid, node->base.start, node->base.size);
> if (unlikely(err))
> - return err;
> + goto err;
>
> + config->ggtt_region = node;
> return 0;
> +err:
> + xe_ggtt_node_fini(node);
> + return err;
> }
>
> static u64 pf_get_vf_config_ggtt(struct xe_gt *gt, unsigned int vfid)
> {
> struct xe_gt_sriov_config *config = pf_pick_vf_config(gt, vfid);
> - struct xe_ggtt_node *node = &config->ggtt_region;
> + struct xe_ggtt_node *node = config->ggtt_region;
>
> xe_gt_assert(gt, !xe_gt_is_media_type(gt));
> return xe_ggtt_node_allocated(node) ? node->base.size : 0;
> @@ -2006,13 +2013,15 @@ int xe_gt_sriov_pf_config_print_ggtt(struct xe_gt *gt, struct drm_printer *p)
>
> for (n = 1; n <= total_vfs; n++) {
> config = >->sriov.pf.vfs[n].config;
> - if (!xe_ggtt_node_allocated(&config->ggtt_region))
> + if (!xe_ggtt_node_allocated(config->ggtt_region))
> continue;
>
> - string_get_size(config->ggtt_region.base.size, 1, STRING_UNITS_2, buf, sizeof(buf));
> + string_get_size(config->ggtt_region->base.size, 1, STRING_UNITS_2,
> + buf, sizeof(buf));
> drm_printf(p, "VF%u:\t%#0llx-%#llx\t(%s)\n",
> - n, config->ggtt_region.base.start,
> - config->ggtt_region.base.start + config->ggtt_region.base.size - 1, buf);
> + n, config->ggtt_region->base.start,
> + config->ggtt_region->base.start + config->ggtt_region->base.size - 1,
> + buf);
> }
>
> return 0;
> diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h
> index a73d9a4b9e64..2d3b73d78f14 100644
> --- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h
> +++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h
> @@ -18,7 +18,7 @@ struct xe_bo;
> */
> struct xe_gt_sriov_config {
> /** @ggtt_region: GGTT region assigned to the VF. */
> - struct xe_ggtt_node ggtt_region;
> + struct xe_ggtt_node *ggtt_region;
> /** @lmem_obj: LMEM allocation for use by the VF. */
> struct xe_bo *lmem_obj;
> /** @num_ctxs: number of GuC contexts IDs. */
> diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
> index 39ff4e7f902e..4ebc82e607af 100644
> --- a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
> +++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
> @@ -495,6 +495,25 @@ u64 xe_gt_sriov_vf_lmem(struct xe_gt *gt)
> return gt->sriov.vf.self_config.lmem_size;
> }
>
> +static struct xe_ggtt_node *
> +vf_balloon_ggtt_node(struct xe_ggtt *ggtt, u64 start, u64 end)
> +{
> + struct xe_ggtt_node *node;
> + int err;
> +
> + node = xe_ggtt_node_init(ggtt);
> + if (IS_ERR(node))
> + return node;
> +
> + err = xe_ggtt_node_insert_balloon(node, start, end);
> + if (err) {
> + xe_ggtt_node_fini(node);
> + return ERR_PTR(err);
> + }
> +
> + return node;
> +}
> +
> static int vf_balloon_ggtt(struct xe_gt *gt)
> {
> struct xe_gt_sriov_vf_selfconfig *config = >->sriov.vf.self_config;
> @@ -502,7 +521,6 @@ static int vf_balloon_ggtt(struct xe_gt *gt)
> struct xe_ggtt *ggtt = tile->mem.ggtt;
> struct xe_device *xe = gt_to_xe(gt);
> u64 start, end;
> - int err;
>
> xe_gt_assert(gt, IS_SRIOV_VF(xe));
> xe_gt_assert(gt, !xe_gt_is_media_type(gt));
> @@ -528,37 +546,31 @@ static int vf_balloon_ggtt(struct xe_gt *gt)
> start = xe_wopcm_size(xe);
> end = config->ggtt_base;
> if (end != start) {
> - err = xe_ggtt_node_insert_balloon(ggtt, &tile->sriov.vf.ggtt_balloon[0],
> - start, end);
> - if (err)
> - goto failed;
> + tile->sriov.vf.ggtt_balloon[0] = vf_balloon_ggtt_node(ggtt, start, end);
> + if (IS_ERR(tile->sriov.vf.ggtt_balloon[0]))
> + return PTR_ERR(tile->sriov.vf.ggtt_balloon[0]);
> }
>
> start = config->ggtt_base + config->ggtt_size;
> end = GUC_GGTT_TOP;
> if (end != start) {
> - err = xe_ggtt_node_insert_balloon(ggtt, &tile->sriov.vf.ggtt_balloon[1],
> - start, end);
> - if (err)
> - goto deballoon;
> + tile->sriov.vf.ggtt_balloon[1] = vf_balloon_ggtt_node(ggtt, start, end);
> + if (IS_ERR(tile->sriov.vf.ggtt_balloon[1])) {
> + xe_ggtt_node_remove_balloon(tile->sriov.vf.ggtt_balloon[0]);
> + return PTR_ERR(tile->sriov.vf.ggtt_balloon[1]);
> + }
> }
>
> return 0;
> -
> -deballoon:
> - xe_ggtt_node_remove_balloon(ggtt, &tile->sriov.vf.ggtt_balloon[0]);
> -failed:
> - return err;
> }
>
> static void deballoon_ggtt(struct drm_device *drm, void *arg)
> {
> struct xe_tile *tile = arg;
> - struct xe_ggtt *ggtt = tile->mem.ggtt;
>
> xe_tile_assert(tile, IS_SRIOV_VF(tile_to_xe(tile)));
> - xe_ggtt_node_remove_balloon(ggtt, &tile->sriov.vf.ggtt_balloon[1]);
> - xe_ggtt_node_remove_balloon(ggtt, &tile->sriov.vf.ggtt_balloon[0]);
> + xe_ggtt_node_remove_balloon(tile->sriov.vf.ggtt_balloon[1]);
> + xe_ggtt_node_remove_balloon(tile->sriov.vf.ggtt_balloon[0]);
> }
>
> /**
> --
> 2.46.0
>
^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH 12/12] drm/xe: Fix missing runtime outer protection for ggtt_remove_node
2024-08-21 19:38 [PATCH 01/12] drm/xe: Removed unused xe_ggtt_printk Rodrigo Vivi
` (9 preceding siblings ...)
2024-08-21 19:38 ` [PATCH 11/12] drm/xe: Make xe_ggtt_node struct independent Rodrigo Vivi
@ 2024-08-21 19:38 ` Rodrigo Vivi
2024-08-21 19:45 ` ✓ CI.Patch_applied: success for series starting with [01/12] drm/xe: Removed unused xe_ggtt_printk Patchwork
` (7 subsequent siblings)
18 siblings, 0 replies; 28+ messages in thread
From: Rodrigo Vivi @ 2024-08-21 19:38 UTC (permalink / raw)
To: intel-xe
Cc: lucas.demarchi, Rodrigo Vivi, Matthew Auld, Paulo Zanoni,
Francois Dugast, Thomas Hellström, Matthew Brost
Defer the ggtt node removal to a thread if runtime_pm is not active.
The ggtt node removal can be called from multiple places, including
places where we cannot protect with outer callers and places we are
within other locks. So, try to grab the runtime reference if the
device is already active, otherwise defer the removal to a separate
thread from where we are sure we can wake the device up.
v2: - use xe wq instead of system wq (Matt and CI)
- Avoid GFP_KERNEL to be future proof since this removal can
be called from outside our drivers and we don't want to block
if atomic is needed. (Brost)
v3: amend forgot chunk declaring xe_device.
v4: Use a xe_ggtt_region to encapsulate the node and remova info,
wihtout the need for any memory allocation at runtime.
v5: Actually fill the delayed_removal.invalidate (Brost)
v6: - Ensure that ggtt_region is not freed before work finishes (Auld)
- Own wq to ensures that the queued works are flushed before
ggtt_fini (Brost)
v7: also free ggtt_region on early !bound return (Auld)
v8: Address the null deref (CI)
v9: Based on the new xe_ggtt_node for the proper care of the lifetime
of the object.
v10: Redo the lost v5 change. (Brost)
v11: Simplify the invalidate_on_remove (Lucas)
Cc: Matthew Auld <matthew.auld@intel.com>
Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
Cc: Francois Dugast <francois.dugast@intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
drivers/gpu/drm/xe/xe_ggtt.c | 106 ++++++++++++++++++-----------
drivers/gpu/drm/xe/xe_ggtt_types.h | 6 ++
2 files changed, 73 insertions(+), 39 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
index 58d7cad2425b..b4a0cd2b62ed 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.c
+++ b/drivers/gpu/drm/xe/xe_ggtt.c
@@ -161,6 +161,7 @@ static void ggtt_fini_early(struct drm_device *drm, void *arg)
{
struct xe_ggtt *ggtt = arg;
+ destroy_workqueue(ggtt->wq);
mutex_destroy(&ggtt->lock);
drm_mm_takedown(&ggtt->mm);
}
@@ -242,6 +243,8 @@ int xe_ggtt_init_early(struct xe_ggtt *ggtt)
else
ggtt->pt_ops = &xelp_pt_ops;
+ ggtt->wq = alloc_workqueue("xe-ggtt-wq", 0, 0);
+
drm_mm_init(&ggtt->mm, xe_wopcm_size(xe),
ggtt->size - xe_wopcm_size(xe));
mutex_init(&ggtt->lock);
@@ -276,6 +279,68 @@ static void xe_ggtt_initial_clear(struct xe_ggtt *ggtt)
mutex_unlock(&ggtt->lock);
}
+static void ggtt_node_remove(struct xe_ggtt_node *node)
+{
+ struct xe_ggtt *ggtt = node->ggtt;
+ struct xe_device *xe = tile_to_xe(ggtt->tile);
+ bool bound;
+ int idx;
+
+ if (!node || !node->ggtt)
+ return;
+
+ bound = drm_dev_enter(&xe->drm, &idx);
+
+ mutex_lock(&ggtt->lock);
+ if (bound)
+ xe_ggtt_clear(ggtt, node->base.start, node->base.size);
+ drm_mm_remove_node(&node->base);
+ node->base.size = 0;
+ mutex_unlock(&ggtt->lock);
+
+ if (!bound)
+ goto free_node;
+
+ if (node->invalidate_on_remove)
+ xe_ggtt_invalidate(ggtt);
+
+ drm_dev_exit(idx);
+
+free_node:
+ xe_ggtt_node_fini(node);
+}
+
+static void ggtt_node_remove_work_func(struct work_struct *work)
+{
+ struct xe_ggtt_node *node = container_of(work, typeof(*node),
+ delayed_removal_work);
+ struct xe_device *xe = tile_to_xe(node->ggtt->tile);
+
+ xe_pm_runtime_get(xe);
+ ggtt_node_remove(node);
+ xe_pm_runtime_put(xe);
+}
+
+/**
+ * xe_ggtt_node_remove - Remove a &xe_ggtt_node from the GGTT
+ * @node: the &xe_ggtt_node to be removed
+ * @invalidate: if node needs invalidation upon removal
+ */
+void xe_ggtt_node_remove(struct xe_ggtt_node *node, bool invalidate)
+{
+ struct xe_ggtt *ggtt = node->ggtt;
+ struct xe_device *xe = tile_to_xe(ggtt->tile);
+
+ node->invalidate_on_remove = invalidate;
+
+ if (xe_pm_runtime_get_if_active(xe)) {
+ ggtt_node_remove(node);
+ xe_pm_runtime_put(xe);
+ } else {
+ queue_work(ggtt->wq, &node->delayed_removal_work);
+ }
+}
+
/**
* xe_ggtt_init - Regular non-early GGTT initialization
* @ggtt: the &xe_ggtt to be initialized
@@ -471,7 +536,9 @@ struct xe_ggtt_node *xe_ggtt_node_init(struct xe_ggtt *ggtt)
if (!node)
return ERR_PTR(-ENOMEM);
+ INIT_WORK(&node->delayed_removal_work, ggtt_node_remove_work_func);
node->ggtt = ggtt;
+
return node;
}
@@ -488,45 +555,6 @@ void xe_ggtt_node_fini(struct xe_ggtt_node *node)
kfree(node);
}
-/**
- * xe_ggtt_node_remove - Remove a &xe_ggtt_node from the GGTT
- * @node: the &xe_ggtt_node to be removed
- * @invalidate: if node needs invalidation upon removal
- */
-void xe_ggtt_node_remove(struct xe_ggtt_node *node, bool invalidate)
-{
- struct xe_ggtt *ggtt = node->ggtt;
- struct xe_device *xe = tile_to_xe(ggtt->tile);
- bool bound;
- int idx;
-
- if (!node || !node->ggtt)
- return;
-
- bound = drm_dev_enter(&xe->drm, &idx);
- if (bound)
- xe_pm_runtime_get_noresume(xe);
-
- mutex_lock(&ggtt->lock);
- if (bound)
- xe_ggtt_clear(ggtt, node->base.start, node->base.size);
- drm_mm_remove_node(&node->base);
- node->base.size = 0;
- mutex_unlock(&ggtt->lock);
-
- if (!bound)
- goto free_node;
-
- if (invalidate)
- xe_ggtt_invalidate(ggtt);
-
- xe_pm_runtime_put(xe);
- drm_dev_exit(idx);
-
-free_node:
- xe_ggtt_node_fini(node);
-}
-
/**
* xe_ggtt_node_allocated - Check if node is allocated in GGTT
* @node: the &xe_ggtt_node to be inspected
diff --git a/drivers/gpu/drm/xe/xe_ggtt_types.h b/drivers/gpu/drm/xe/xe_ggtt_types.h
index 0e8822ae13fc..cb02b7994a9a 100644
--- a/drivers/gpu/drm/xe/xe_ggtt_types.h
+++ b/drivers/gpu/drm/xe/xe_ggtt_types.h
@@ -47,6 +47,8 @@ struct xe_ggtt {
struct drm_mm mm;
/** @access_count: counts GGTT writes */
unsigned int access_count;
+ /** @wq: Dedicated unordered work queue to process node removals */
+ struct workqueue_struct *wq;
};
/**
@@ -61,6 +63,10 @@ struct xe_ggtt_node {
struct xe_ggtt *ggtt;
/** @base: A drm_mm_node */
struct drm_mm_node base;
+ /** @delayed_removal_work: The work struct for the delayed removal */
+ struct work_struct delayed_removal_work;
+ /** @invalidate_on_remove: If it needs invalidation upon removal */
+ bool invalidate_on_remove;
};
/**
--
2.46.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* ✓ CI.Patch_applied: success for series starting with [01/12] drm/xe: Removed unused xe_ggtt_printk
2024-08-21 19:38 [PATCH 01/12] drm/xe: Removed unused xe_ggtt_printk Rodrigo Vivi
` (10 preceding siblings ...)
2024-08-21 19:38 ` [PATCH 12/12] drm/xe: Fix missing runtime outer protection for ggtt_remove_node Rodrigo Vivi
@ 2024-08-21 19:45 ` Patchwork
2024-08-21 19:45 ` ✓ CI.checkpatch: " Patchwork
` (6 subsequent siblings)
18 siblings, 0 replies; 28+ messages in thread
From: Patchwork @ 2024-08-21 19:45 UTC (permalink / raw)
To: Rodrigo Vivi; +Cc: intel-xe
== Series Details ==
Series: series starting with [01/12] drm/xe: Removed unused xe_ggtt_printk
URL : https://patchwork.freedesktop.org/series/137588/
State : success
== Summary ==
=== Applying kernel patches on branch 'drm-tip' with base: ===
Base commit: ddbda36f876f drm-tip: 2024y-08m-21d-17h-07m-16s UTC integration manifest
=== git am output follows ===
Applying: drm/xe: Removed unused xe_ggtt_printk
Applying: drm/xe: Introduce GGTT documentation
Applying: drm/xe: Remove unnecessary drm_mm.h includes
Applying: drm/{i915, xe}: Avoid direct inspection of dpt_vma from outside dpt
Applying: drm/xe: Encapsulate drm_mm_node inside xe_ggtt_node
Applying: drm/xe: Rename xe_ggtt_node related functions
Applying: drm/xe: Limit drm_mm_node_allocated access to xe_ggtt_node
Applying: drm/xe: Introduce xe_ggtt_largest_hole
Applying: drm/xe: Introduce xe_ggtt_print_holes
Applying: drm/xe: Refactor xe_ggtt balloon functions to make the node clear
Applying: drm/xe: Make xe_ggtt_node struct independent
Applying: drm/xe: Fix missing runtime outer protection for ggtt_remove_node
^ permalink raw reply [flat|nested] 28+ messages in thread* ✓ CI.checkpatch: success for series starting with [01/12] drm/xe: Removed unused xe_ggtt_printk
2024-08-21 19:38 [PATCH 01/12] drm/xe: Removed unused xe_ggtt_printk Rodrigo Vivi
` (11 preceding siblings ...)
2024-08-21 19:45 ` ✓ CI.Patch_applied: success for series starting with [01/12] drm/xe: Removed unused xe_ggtt_printk Patchwork
@ 2024-08-21 19:45 ` Patchwork
2024-08-21 19:46 ` ✓ CI.KUnit: " Patchwork
` (5 subsequent siblings)
18 siblings, 0 replies; 28+ messages in thread
From: Patchwork @ 2024-08-21 19:45 UTC (permalink / raw)
To: Rodrigo Vivi; +Cc: intel-xe
== Series Details ==
Series: series starting with [01/12] drm/xe: Removed unused xe_ggtt_printk
URL : https://patchwork.freedesktop.org/series/137588/
State : success
== 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
9fe5037901cabbcdf27a6fe0dfb047ca1474d363
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit 61d9dd33b09950d72759587d5889e416c70d083a
Author: Rodrigo Vivi <rodrigo.vivi@intel.com>
Date: Wed Aug 21 15:38:42 2024 -0400
drm/xe: Fix missing runtime outer protection for ggtt_remove_node
Defer the ggtt node removal to a thread if runtime_pm is not active.
The ggtt node removal can be called from multiple places, including
places where we cannot protect with outer callers and places we are
within other locks. So, try to grab the runtime reference if the
device is already active, otherwise defer the removal to a separate
thread from where we are sure we can wake the device up.
v2: - use xe wq instead of system wq (Matt and CI)
- Avoid GFP_KERNEL to be future proof since this removal can
be called from outside our drivers and we don't want to block
if atomic is needed. (Brost)
v3: amend forgot chunk declaring xe_device.
v4: Use a xe_ggtt_region to encapsulate the node and remova info,
wihtout the need for any memory allocation at runtime.
v5: Actually fill the delayed_removal.invalidate (Brost)
v6: - Ensure that ggtt_region is not freed before work finishes (Auld)
- Own wq to ensures that the queued works are flushed before
ggtt_fini (Brost)
v7: also free ggtt_region on early !bound return (Auld)
v8: Address the null deref (CI)
v9: Based on the new xe_ggtt_node for the proper care of the lifetime
of the object.
v10: Redo the lost v5 change. (Brost)
v11: Simplify the invalidate_on_remove (Lucas)
Cc: Matthew Auld <matthew.auld@intel.com>
Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
Cc: Francois Dugast <francois.dugast@intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
+ /mt/dim checkpatch ddbda36f876f53498924155abfa1cd4c58517903 drm-intel
aaea59a3625d drm/xe: Removed unused xe_ggtt_printk
faaa4aa755f8 drm/xe: Introduce GGTT documentation
b11842250fc9 drm/xe: Remove unnecessary drm_mm.h includes
5240eb84ad06 drm/{i915, xe}: Avoid direct inspection of dpt_vma from outside dpt
b3a3dc32e7ba drm/xe: Encapsulate drm_mm_node inside xe_ggtt_node
3013095a7ebc drm/xe: Rename xe_ggtt_node related functions
36c8f6d1fab7 drm/xe: Limit drm_mm_node_allocated access to xe_ggtt_node
bc4879dcbed9 drm/xe: Introduce xe_ggtt_largest_hole
89b10c45fdc2 drm/xe: Introduce xe_ggtt_print_holes
55fb30abbfe0 drm/xe: Refactor xe_ggtt balloon functions to make the node clear
f1f956608b16 drm/xe: Make xe_ggtt_node struct independent
61d9dd33b099 drm/xe: Fix missing runtime outer protection for ggtt_remove_node
^ permalink raw reply [flat|nested] 28+ messages in thread* ✓ CI.KUnit: success for series starting with [01/12] drm/xe: Removed unused xe_ggtt_printk
2024-08-21 19:38 [PATCH 01/12] drm/xe: Removed unused xe_ggtt_printk Rodrigo Vivi
` (12 preceding siblings ...)
2024-08-21 19:45 ` ✓ CI.checkpatch: " Patchwork
@ 2024-08-21 19:46 ` Patchwork
2024-08-21 19:58 ` ✓ CI.Build: " Patchwork
` (4 subsequent siblings)
18 siblings, 0 replies; 28+ messages in thread
From: Patchwork @ 2024-08-21 19:46 UTC (permalink / raw)
To: Rodrigo Vivi; +Cc: intel-xe
== Series Details ==
Series: series starting with [01/12] drm/xe: Removed unused xe_ggtt_printk
URL : https://patchwork.freedesktop.org/series/137588/
State : success
== Summary ==
+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[19:45:47] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[19:45:52] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make ARCH=um O=.kunit --jobs=48
../lib/iomap.c:156:5: warning: no previous prototype for ‘ioread64_lo_hi’ [-Wmissing-prototypes]
156 | u64 ioread64_lo_hi(const void __iomem *addr)
| ^~~~~~~~~~~~~~
../lib/iomap.c:163:5: warning: no previous prototype for ‘ioread64_hi_lo’ [-Wmissing-prototypes]
163 | u64 ioread64_hi_lo(const void __iomem *addr)
| ^~~~~~~~~~~~~~
../lib/iomap.c:170:5: warning: no previous prototype for ‘ioread64be_lo_hi’ [-Wmissing-prototypes]
170 | u64 ioread64be_lo_hi(const void __iomem *addr)
| ^~~~~~~~~~~~~~~~
../lib/iomap.c:178:5: warning: no previous prototype for ‘ioread64be_hi_lo’ [-Wmissing-prototypes]
178 | u64 ioread64be_hi_lo(const void __iomem *addr)
| ^~~~~~~~~~~~~~~~
../lib/iomap.c:264:6: warning: no previous prototype for ‘iowrite64_lo_hi’ [-Wmissing-prototypes]
264 | void iowrite64_lo_hi(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~
../lib/iomap.c:272:6: warning: no previous prototype for ‘iowrite64_hi_lo’ [-Wmissing-prototypes]
272 | void iowrite64_hi_lo(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~
../lib/iomap.c:280:6: warning: no previous prototype for ‘iowrite64be_lo_hi’ [-Wmissing-prototypes]
280 | void iowrite64be_lo_hi(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~~~
../lib/iomap.c:288:6: warning: no previous prototype for ‘iowrite64be_hi_lo’ [-Wmissing-prototypes]
288 | void iowrite64be_hi_lo(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~~~
[19:46:17] Starting KUnit Kernel (1/1)...
[19:46:17] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[19:46:17] =================== guc_dbm (7 subtests) ===================
[19:46:17] [PASSED] test_empty
[19:46:17] [PASSED] test_default
[19:46:17] ======================== test_size ========================
[19:46:17] [PASSED] 4
[19:46:17] [PASSED] 8
[19:46:17] [PASSED] 32
[19:46:17] [PASSED] 256
[19:46:17] ==================== [PASSED] test_size ====================
[19:46:17] ======================= test_reuse ========================
[19:46:17] [PASSED] 4
[19:46:17] [PASSED] 8
[19:46:17] [PASSED] 32
[19:46:17] [PASSED] 256
[19:46:17] =================== [PASSED] test_reuse ====================
[19:46:17] =================== test_range_overlap ====================
[19:46:17] [PASSED] 4
[19:46:17] [PASSED] 8
[19:46:17] [PASSED] 32
[19:46:17] [PASSED] 256
[19:46:17] =============== [PASSED] test_range_overlap ================
[19:46:17] =================== test_range_compact ====================
[19:46:17] [PASSED] 4
[19:46:17] [PASSED] 8
[19:46:17] [PASSED] 32
[19:46:17] [PASSED] 256
[19:46:17] =============== [PASSED] test_range_compact ================
[19:46:17] ==================== test_range_spare =====================
[19:46:17] [PASSED] 4
[19:46:17] [PASSED] 8
[19:46:17] [PASSED] 32
[19:46:17] [PASSED] 256
[19:46:17] ================ [PASSED] test_range_spare =================
[19:46:17] ===================== [PASSED] guc_dbm =====================
[19:46:17] =================== guc_idm (6 subtests) ===================
[19:46:17] [PASSED] bad_init
[19:46:17] [PASSED] no_init
[19:46:17] [PASSED] init_fini
[19:46:17] [PASSED] check_used
[19:46:18] [PASSED] check_quota
[19:46:18] [PASSED] check_all
[19:46:18] ===================== [PASSED] guc_idm =====================
[19:46:18] ================== no_relay (3 subtests) ===================
[19:46:18] [PASSED] xe_drops_guc2pf_if_not_ready
[19:46:18] [PASSED] xe_drops_guc2vf_if_not_ready
[19:46:18] [PASSED] xe_rejects_send_if_not_ready
[19:46:18] ==================== [PASSED] no_relay =====================
[19:46:18] ================== pf_relay (14 subtests) ==================
[19:46:18] [PASSED] pf_rejects_guc2pf_too_short
[19:46:18] [PASSED] pf_rejects_guc2pf_too_long
[19:46:18] [PASSED] pf_rejects_guc2pf_no_payload
[19:46:18] [PASSED] pf_fails_no_payload
[19:46:18] [PASSED] pf_fails_bad_origin
[19:46:18] [PASSED] pf_fails_bad_type
[19:46:18] [PASSED] pf_txn_reports_error
[19:46:18] [PASSED] pf_txn_sends_pf2guc
[19:46:18] [PASSED] pf_sends_pf2guc
[19:46:18] [SKIPPED] pf_loopback_nop
[19:46:18] [SKIPPED] pf_loopback_echo
[19:46:18] [SKIPPED] pf_loopback_fail
[19:46:18] [SKIPPED] pf_loopback_busy
[19:46:18] [SKIPPED] pf_loopback_retry
[19:46:18] ==================== [PASSED] pf_relay =====================
[19:46:18] ================== vf_relay (3 subtests) ===================
[19:46:18] [PASSED] vf_rejects_guc2vf_too_short
[19:46:18] [PASSED] vf_rejects_guc2vf_too_long
[19:46:18] [PASSED] vf_rejects_guc2vf_no_payload
[19:46:18] ==================== [PASSED] vf_relay =====================
[19:46:18] ================= pf_service (11 subtests) =================
[19:46:18] [PASSED] pf_negotiate_any
[19:46:18] [PASSED] pf_negotiate_base_match
[19:46:18] [PASSED] pf_negotiate_base_newer
[19:46:18] [PASSED] pf_negotiate_base_next
[19:46:18] [SKIPPED] pf_negotiate_base_older
[19:46:18] [PASSED] pf_negotiate_base_prev
[19:46:18] [PASSED] pf_negotiate_latest_match
[19:46:18] [PASSED] pf_negotiate_latest_newer
[19:46:18] [PASSED] pf_negotiate_latest_next
[19:46:18] [SKIPPED] pf_negotiate_latest_older
[19:46:18] [SKIPPED] pf_negotiate_latest_prev
[19:46:18] =================== [PASSED] pf_service ====================
[19:46:18] ===================== lmtt (1 subtest) =====================
[19:46:18] ======================== test_ops =========================
[19:46:18] [PASSED] 2-level
[19:46:18] [PASSED] multi-level
[19:46:18] ==================== [PASSED] test_ops =====================
[19:46:18] ====================== [PASSED] lmtt =======================
[19:46:18] =================== xe_mocs (2 subtests) ===================
[19:46:18] ================ xe_live_mocs_kernel_kunit ================
[19:46:18] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[19:46:18] ================ xe_live_mocs_reset_kunit =================
[19:46:18] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[19:46:18] ==================== [SKIPPED] xe_mocs =====================
[19:46:18] ================= xe_migrate (2 subtests) ==================
[19:46:18] ================= xe_migrate_sanity_kunit =================
[19:46:18] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[19:46:18] ================== xe_validate_ccs_kunit ==================
[19:46:18] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[19:46:18] =================== [SKIPPED] xe_migrate ===================
[19:46:18] ================== xe_dma_buf (1 subtest) ==================
[19:46:18] ==================== xe_dma_buf_kunit =====================
[19:46:18] ================ [SKIPPED] xe_dma_buf_kunit ================
[19:46:18] =================== [SKIPPED] xe_dma_buf ===================
[19:46:18] ==================== xe_bo (2 subtests) ====================
[19:46:18] ================== xe_ccs_migrate_kunit ===================
[19:46:18] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[19:46:18] ==================== xe_bo_evict_kunit ====================
[19:46:18] =============== [SKIPPED] xe_bo_evict_kunit ================
[19:46:18] ===================== [SKIPPED] xe_bo ======================
[19:46:18] ==================== args (11 subtests) ====================
[19:46:18] [PASSED] count_args_test
[19:46:18] [PASSED] call_args_example
[19:46:18] [PASSED] call_args_test
[19:46:18] [PASSED] drop_first_arg_example
[19:46:18] [PASSED] drop_first_arg_test
[19:46:18] [PASSED] first_arg_example
[19:46:18] [PASSED] first_arg_test
[19:46:18] [PASSED] last_arg_example
[19:46:18] [PASSED] last_arg_test
[19:46:18] [PASSED] pick_arg_example
[19:46:18] [PASSED] sep_comma_example
[19:46:18] ====================== [PASSED] args =======================
[19:46:18] =================== xe_pci (2 subtests) ====================
stty: 'standard input': Inappropriate ioctl for device
[19:46:18] [PASSED] xe_gmdid_graphics_ip
[19:46:18] [PASSED] xe_gmdid_media_ip
[19:46:18] ===================== [PASSED] xe_pci ======================
[19:46:18] =================== xe_rtp (2 subtests) ====================
[19:46:18] =============== xe_rtp_process_to_sr_tests ================
[19:46:18] [PASSED] coalesce-same-reg
[19:46:18] [PASSED] no-match-no-add
[19:46:18] [PASSED] match-or
[19:46:18] [PASSED] match-or-xfail
[19:46:18] [PASSED] no-match-no-add-multiple-rules
[19:46:18] [PASSED] two-regs-two-entries
[19:46:18] [PASSED] clr-one-set-other
[19:46:18] [PASSED] set-field
[19:46:18] [PASSED] conflict-duplicate
[19:46:18] [PASSED] conflict-not-disjoint
[19:46:18] [PASSED] conflict-reg-type
[19:46:18] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[19:46:18] ================== xe_rtp_process_tests ===================
[19:46:18] [PASSED] active1
[19:46:18] [PASSED] active2
[19:46:18] [PASSED] active-inactive
[19:46:18] [PASSED] inactive-active
[19:46:18] [PASSED] inactive-1st_or_active-inactive
[19:46:18] [PASSED] inactive-2nd_or_active-inactive
[19:46:18] [PASSED] inactive-last_or_active-inactive
[19:46:18] [PASSED] inactive-no_or_active-inactive
[19:46:18] ============== [PASSED] xe_rtp_process_tests ===============
[19:46:18] ===================== [PASSED] xe_rtp ======================
[19:46:18] ==================== xe_wa (1 subtest) =====================
[19:46:18] ======================== xe_wa_gt =========================
[19:46:18] [PASSED] TIGERLAKE (B0)
[19:46:18] [PASSED] DG1 (A0)
[19:46:18] [PASSED] DG1 (B0)
[19:46:18] [PASSED] ALDERLAKE_S (A0)
[19:46:18] [PASSED] ALDERLAKE_S (B0)
[19:46:18] [PASSED] ALDERLAKE_S (C0)
[19:46:18] [PASSED] ALDERLAKE_S (D0)
[19:46:18] [PASSED] ALDERLAKE_P (A0)
[19:46:18] [PASSED] ALDERLAKE_P (B0)
[19:46:18] [PASSED] ALDERLAKE_P (C0)
[19:46:18] [PASSED] ALDERLAKE_S_RPLS (D0)
[19:46:18] [PASSED] ALDERLAKE_P_RPLU (E0)
[19:46:18] [PASSED] DG2_G10 (C0)
[19:46:18] [PASSED] DG2_G11 (B1)
[19:46:18] [PASSED] DG2_G12 (A1)
[19:46:18] [PASSED] METEORLAKE (g:A0, m:A0)
[19:46:18] [PASSED] METEORLAKE (g:A0, m:A0)
[19:46:18] [PASSED] METEORLAKE (g:A0, m:A0)
[19:46:18] [PASSED] LUNARLAKE (g:A0, m:A0)
[19:46:18] [PASSED] LUNARLAKE (g:B0, m:A0)
[19:46:18] [PASSED] BATTLEMAGE (g:A0, m:A1)
[19:46:18] ==================== [PASSED] xe_wa_gt =====================
[19:46:18] ====================== [PASSED] xe_wa ======================
[19:46:18] ============================================================
[19:46:18] Testing complete. Ran 121 tests: passed: 106, skipped: 15
[19:46:18] Elapsed time: 30.179s total, 4.191s configuring, 25.718s building, 0.240s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[19:46:18] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[19:46:19] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make ARCH=um O=.kunit --jobs=48
../lib/iomap.c:156:5: warning: no previous prototype for ‘ioread64_lo_hi’ [-Wmissing-prototypes]
156 | u64 ioread64_lo_hi(const void __iomem *addr)
| ^~~~~~~~~~~~~~
../lib/iomap.c:163:5: warning: no previous prototype for ‘ioread64_hi_lo’ [-Wmissing-prototypes]
163 | u64 ioread64_hi_lo(const void __iomem *addr)
| ^~~~~~~~~~~~~~
../lib/iomap.c:170:5: warning: no previous prototype for ‘ioread64be_lo_hi’ [-Wmissing-prototypes]
170 | u64 ioread64be_lo_hi(const void __iomem *addr)
| ^~~~~~~~~~~~~~~~
../lib/iomap.c:178:5: warning: no previous prototype for ‘ioread64be_hi_lo’ [-Wmissing-prototypes]
178 | u64 ioread64be_hi_lo(const void __iomem *addr)
| ^~~~~~~~~~~~~~~~
../lib/iomap.c:264:6: warning: no previous prototype for ‘iowrite64_lo_hi’ [-Wmissing-prototypes]
264 | void iowrite64_lo_hi(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~
../lib/iomap.c:272:6: warning: no previous prototype for ‘iowrite64_hi_lo’ [-Wmissing-prototypes]
272 | void iowrite64_hi_lo(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~
../lib/iomap.c:280:6: warning: no previous prototype for ‘iowrite64be_lo_hi’ [-Wmissing-prototypes]
280 | void iowrite64be_lo_hi(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~~~
../lib/iomap.c:288:6: warning: no previous prototype for ‘iowrite64be_hi_lo’ [-Wmissing-prototypes]
288 | void iowrite64be_hi_lo(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~~~
[19:46:41] Starting KUnit Kernel (1/1)...
[19:46:41] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[19:46:41] ============ drm_test_pick_cmdline (2 subtests) ============
[19:46:41] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[19:46:41] =============== drm_test_pick_cmdline_named ===============
[19:46:41] [PASSED] NTSC
[19:46:41] [PASSED] NTSC-J
[19:46:41] [PASSED] PAL
[19:46:41] [PASSED] PAL-M
[19:46:41] =========== [PASSED] drm_test_pick_cmdline_named ===========
[19:46:41] ============== [PASSED] drm_test_pick_cmdline ==============
[19:46:41] ================== drm_buddy (7 subtests) ==================
[19:46:41] [PASSED] drm_test_buddy_alloc_limit
[19:46:41] [PASSED] drm_test_buddy_alloc_optimistic
[19:46:41] [PASSED] drm_test_buddy_alloc_pessimistic
[19:46:41] [PASSED] drm_test_buddy_alloc_pathological
[19:46:41] [PASSED] drm_test_buddy_alloc_contiguous
[19:46:41] [PASSED] drm_test_buddy_alloc_clear
[19:46:41] [PASSED] drm_test_buddy_alloc_range_bias
[19:46:41] ==================== [PASSED] drm_buddy ====================
[19:46:41] ============= drm_cmdline_parser (40 subtests) =============
[19:46:41] [PASSED] drm_test_cmdline_force_d_only
[19:46:41] [PASSED] drm_test_cmdline_force_D_only_dvi
[19:46:41] [PASSED] drm_test_cmdline_force_D_only_hdmi
[19:46:41] [PASSED] drm_test_cmdline_force_D_only_not_digital
[19:46:41] [PASSED] drm_test_cmdline_force_e_only
[19:46:41] [PASSED] drm_test_cmdline_res
[19:46:41] [PASSED] drm_test_cmdline_res_vesa
[19:46:41] [PASSED] drm_test_cmdline_res_vesa_rblank
[19:46:41] [PASSED] drm_test_cmdline_res_rblank
[19:46:41] [PASSED] drm_test_cmdline_res_bpp
[19:46:41] [PASSED] drm_test_cmdline_res_refresh
[19:46:41] [PASSED] drm_test_cmdline_res_bpp_refresh
[19:46:41] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[19:46:41] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[19:46:41] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[19:46:41] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[19:46:41] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[19:46:41] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[19:46:41] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[19:46:41] [PASSED] drm_test_cmdline_res_margins_force_on
[19:46:41] [PASSED] drm_test_cmdline_res_vesa_margins
[19:46:41] [PASSED] drm_test_cmdline_name
[19:46:41] [PASSED] drm_test_cmdline_name_bpp
[19:46:41] [PASSED] drm_test_cmdline_name_option
[19:46:41] [PASSED] drm_test_cmdline_name_bpp_option
[19:46:41] [PASSED] drm_test_cmdline_rotate_0
[19:46:41] [PASSED] drm_test_cmdline_rotate_90
[19:46:41] [PASSED] drm_test_cmdline_rotate_180
[19:46:41] [PASSED] drm_test_cmdline_rotate_270
[19:46:41] [PASSED] drm_test_cmdline_hmirror
[19:46:41] [PASSED] drm_test_cmdline_vmirror
[19:46:41] [PASSED] drm_test_cmdline_margin_options
[19:46:41] [PASSED] drm_test_cmdline_multiple_options
[19:46:41] [PASSED] drm_test_cmdline_bpp_extra_and_option
[19:46:41] [PASSED] drm_test_cmdline_extra_and_option
[19:46:41] [PASSED] drm_test_cmdline_freestanding_options
[19:46:41] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[19:46:41] [PASSED] drm_test_cmdline_panel_orientation
[19:46:41] ================ drm_test_cmdline_invalid =================
[19:46:41] [PASSED] margin_only
[19:46:41] [PASSED] interlace_only
[19:46:41] [PASSED] res_missing_x
[19:46:41] [PASSED] res_missing_y
[19:46:41] [PASSED] res_bad_y
[19:46:41] [PASSED] res_missing_y_bpp
[19:46:41] [PASSED] res_bad_bpp
[19:46:41] [PASSED] res_bad_refresh
[19:46:41] [PASSED] res_bpp_refresh_force_on_off
[19:46:41] [PASSED] res_invalid_mode
[19:46:41] [PASSED] res_bpp_wrong_place_mode
[19:46:41] [PASSED] name_bpp_refresh
[19:46:41] [PASSED] name_refresh
[19:46:41] [PASSED] name_refresh_wrong_mode
[19:46:41] [PASSED] name_refresh_invalid_mode
[19:46:41] [PASSED] rotate_multiple
[19:46:41] [PASSED] rotate_invalid_val
[19:46:41] [PASSED] rotate_truncated
[19:46:41] [PASSED] invalid_option
[19:46:41] [PASSED] invalid_tv_option
[19:46:41] [PASSED] truncated_tv_option
[19:46:41] ============ [PASSED] drm_test_cmdline_invalid =============
[19:46:41] =============== drm_test_cmdline_tv_options ===============
[19:46:41] [PASSED] NTSC
[19:46:41] [PASSED] NTSC_443
[19:46:41] [PASSED] NTSC_J
[19:46:41] [PASSED] PAL
[19:46:41] [PASSED] PAL_M
[19:46:41] [PASSED] PAL_N
[19:46:41] [PASSED] SECAM
[19:46:41] [PASSED] MONO_525
[19:46:41] [PASSED] MONO_625
[19:46:41] =========== [PASSED] drm_test_cmdline_tv_options ===========
[19:46:41] =============== [PASSED] drm_cmdline_parser ================
[19:46:41] ========== drmm_connector_hdmi_init (19 subtests) ==========
[19:46:41] [PASSED] drm_test_connector_hdmi_init_valid
[19:46:41] [PASSED] drm_test_connector_hdmi_init_bpc_8
[19:46:41] [PASSED] drm_test_connector_hdmi_init_bpc_10
[19:46:41] [PASSED] drm_test_connector_hdmi_init_bpc_12
[19:46:41] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[19:46:41] [PASSED] drm_test_connector_hdmi_init_bpc_null
[19:46:41] [PASSED] drm_test_connector_hdmi_init_formats_empty
[19:46:41] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[19:46:41] [PASSED] drm_test_connector_hdmi_init_null_ddc
[19:46:41] [PASSED] drm_test_connector_hdmi_init_null_product
[19:46:41] [PASSED] drm_test_connector_hdmi_init_null_vendor
[19:46:41] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[19:46:41] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[19:46:41] [PASSED] drm_test_connector_hdmi_init_product_valid
[19:46:41] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[19:46:41] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[19:46:41] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[19:46:41] ========= drm_test_connector_hdmi_init_type_valid =========
[19:46:41] [PASSED] HDMI-A
[19:46:41] [PASSED] HDMI-B
[19:46:41] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[19:46:41] ======== drm_test_connector_hdmi_init_type_invalid ========
[19:46:41] [PASSED] Unknown
[19:46:41] [PASSED] VGA
[19:46:41] [PASSED] DVI-I
[19:46:41] [PASSED] DVI-D
[19:46:41] [PASSED] DVI-A
[19:46:41] [PASSED] Composite
[19:46:41] [PASSED] SVIDEO
[19:46:41] [PASSED] LVDS
[19:46:41] [PASSED] Component
[19:46:41] [PASSED] DIN
[19:46:41] [PASSED] DP
[19:46:41] [PASSED] TV
[19:46:41] [PASSED] eDP
[19:46:41] [PASSED] Virtual
[19:46:41] [PASSED] DSI
[19:46:41] [PASSED] DPI
[19:46:41] [PASSED] Writeback
[19:46:41] [PASSED] SPI
[19:46:41] [PASSED] USB
[19:46:41] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[19:46:41] ============ [PASSED] drmm_connector_hdmi_init =============
[19:46:41] ============= drmm_connector_init (3 subtests) =============
[19:46:41] [PASSED] drm_test_drmm_connector_init
[19:46:41] [PASSED] drm_test_drmm_connector_init_null_ddc
[19:46:41] ========= drm_test_drmm_connector_init_type_valid =========
[19:46:41] [PASSED] Unknown
[19:46:41] [PASSED] VGA
[19:46:41] [PASSED] DVI-I
[19:46:41] [PASSED] DVI-D
[19:46:41] [PASSED] DVI-A
[19:46:41] [PASSED] Composite
[19:46:41] [PASSED] SVIDEO
[19:46:41] [PASSED] LVDS
[19:46:41] [PASSED] Component
[19:46:41] [PASSED] DIN
[19:46:41] [PASSED] DP
[19:46:41] [PASSED] HDMI-A
[19:46:41] [PASSED] HDMI-B
[19:46:41] [PASSED] TV
[19:46:41] [PASSED] eDP
[19:46:41] [PASSED] Virtual
[19:46:41] [PASSED] DSI
[19:46:41] [PASSED] DPI
[19:46:41] [PASSED] Writeback
[19:46:41] [PASSED] SPI
[19:46:41] [PASSED] USB
[19:46:41] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[19:46:41] =============== [PASSED] drmm_connector_init ===============
[19:46:41] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[19:46:41] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[19:46:41] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[19:46:41] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[19:46:41] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[19:46:41] ========== drm_test_get_tv_mode_from_name_valid ===========
[19:46:41] [PASSED] NTSC
[19:46:41] [PASSED] NTSC-443
[19:46:41] [PASSED] NTSC-J
[19:46:41] [PASSED] PAL
[19:46:41] [PASSED] PAL-M
[19:46:41] [PASSED] PAL-N
[19:46:41] [PASSED] SECAM
[19:46:41] [PASSED] Mono
[19:46:41] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[19:46:41] [PASSED] drm_test_get_tv_mode_from_name_truncated
[19:46:41] ============ [PASSED] drm_get_tv_mode_from_name ============
[19:46:41] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[19:46:41] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[19:46:41] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[19:46:41] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[19:46:41] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[19:46:41] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[19:46:41] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[19:46:41] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[19:46:41] [PASSED] VIC 96
[19:46:41] [PASSED] VIC 97
[19:46:41] [PASSED] VIC 101
[19:46:41] [PASSED] VIC 102
[19:46:41] [PASSED] VIC 106
[19:46:41] [PASSED] VIC 107
[19:46:41] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[19:46:41] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[19:46:41] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[19:46:41] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[19:46:41] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[19:46:41] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[19:46:41] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[19:46:41] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[19:46:41] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[19:46:41] [PASSED] Automatic
[19:46:41] [PASSED] Full
[19:46:41] [PASSED] Limited 16:235
[19:46:41] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[19:46:41] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[19:46:41] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[19:46:41] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[19:46:41] === drm_test_drm_hdmi_connector_get_output_format_name ====
[19:46:41] [PASSED] RGB
[19:46:41] [PASSED] YUV 4:2:0
[19:46:41] [PASSED] YUV 4:2:2
[19:46:41] [PASSED] YUV 4:4:4
[19:46:41] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[19:46:41] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[19:46:41] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[19:46:41] ============= drm_damage_helper (21 subtests) ==============
[19:46:41] [PASSED] drm_test_damage_iter_no_damage
[19:46:41] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[19:46:41] [PASSED] drm_test_damage_iter_no_damage_src_moved
[19:46:41] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[19:46:41] [PASSED] drm_test_damage_iter_no_damage_not_visible
[19:46:41] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[19:46:41] [PASSED] drm_test_damage_iter_no_damage_no_fb
[19:46:41] [PASSED] drm_test_damage_iter_simple_damage
[19:46:41] [PASSED] drm_test_damage_iter_single_damage
[19:46:41] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[19:46:41] [PASSED] drm_test_damage_iter_single_damage_outside_src
[19:46:41] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[19:46:41] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[19:46:41] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[19:46:41] [PASSED] drm_test_damage_iter_single_damage_src_moved
[19:46:41] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[19:46:41] [PASSED] drm_test_damage_iter_damage
[19:46:41] [PASSED] drm_test_damage_iter_damage_one_intersect
[19:46:41] [PASSED] drm_test_damage_iter_damage_one_outside
[19:46:41] [PASSED] drm_test_damage_iter_damage_src_moved
[19:46:41] [PASSED] drm_test_damage_iter_damage_not_visible
[19:46:41] ================ [PASSED] drm_damage_helper ================
[19:46:41] ============== drm_dp_mst_helper (3 subtests) ==============
[19:46:41] ============== drm_test_dp_mst_calc_pbn_mode ==============
[19:46:41] [PASSED] Clock 154000 BPP 30 DSC disabled
[19:46:41] [PASSED] Clock 234000 BPP 30 DSC disabled
[19:46:41] [PASSED] Clock 297000 BPP 24 DSC disabled
[19:46:41] [PASSED] Clock 332880 BPP 24 DSC enabled
[19:46:41] [PASSED] Clock 324540 BPP 24 DSC enabled
[19:46:41] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[19:46:41] ============== drm_test_dp_mst_calc_pbn_div ===============
[19:46:41] [PASSED] Link rate 2000000 lane count 4
[19:46:41] [PASSED] Link rate 2000000 lane count 2
[19:46:41] [PASSED] Link rate 2000000 lane count 1
[19:46:41] [PASSED] Link rate 1350000 lane count 4
[19:46:41] [PASSED] Link rate 1350000 lane count 2
[19:46:41] [PASSED] Link rate 1350000 lane count 1
[19:46:41] [PASSED] Link rate 1000000 lane count 4
[19:46:41] [PASSED] Link rate 1000000 lane count 2
[19:46:41] [PASSED] Link rate 1000000 lane count 1
[19:46:41] [PASSED] Link rate 810000 lane count 4
[19:46:41] [PASSED] Link rate 810000 lane count 2
[19:46:41] [PASSED] Link rate 810000 lane count 1
[19:46:41] [PASSED] Link rate 540000 lane count 4
[19:46:41] [PASSED] Link rate 540000 lane count 2
[19:46:41] [PASSED] Link rate 540000 lane count 1
[19:46:41] [PASSED] Link rate 270000 lane count 4
[19:46:41] [PASSED] Link rate 270000 lane count 2
[19:46:41] [PASSED] Link rate 270000 lane count 1
[19:46:41] [PASSED] Link rate 162000 lane count 4
[19:46:41] [PASSED] Link rate 162000 lane count 2
[19:46:41] [PASSED] Link rate 162000 lane count 1
[19:46:41] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[19:46:41] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[19:46:41] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[19:46:41] [PASSED] DP_POWER_UP_PHY with port number
[19:46:41] [PASSED] DP_POWER_DOWN_PHY with port number
[19:46:41] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[19:46:41] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[19:46:41] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[19:46:41] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[19:46:41] [PASSED] DP_QUERY_PAYLOAD with port number
[19:46:41] [PASSED] DP_QUERY_PAYLOAD with VCPI
[19:46:41] [PASSED] DP_REMOTE_DPCD_READ with port number
[19:46:41] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[19:46:41] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[19:46:41] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[19:46:41] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[19:46:41] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[19:46:41] [PASSED] DP_REMOTE_I2C_READ with port number
[19:46:41] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[19:46:41] [PASSED] DP_REMOTE_I2C_READ with transactions array
[19:46:41] [PASSED] DP_REMOTE_I2C_WRITE with port number
[19:46:41] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[19:46:41] [PASSED] DP_REMOTE_I2C_WRITE with data array
[19:46:41] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[19:46:41] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[19:46:41] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[19:46:41] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[19:46:41] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[19:46:41] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[19:46:41] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[19:46:41] ================ [PASSED] drm_dp_mst_helper ================
[19:46:41] ================== drm_exec (7 subtests) ===================
[19:46:41] [PASSED] sanitycheck
[19:46:41] [PASSED] test_lock
[19:46:41] [PASSED] test_lock_unlock
[19:46:41] [PASSED] test_duplicates
[19:46:41] [PASSED] test_prepare
[19:46:41] [PASSED] test_prepare_array
[19:46:41] [PASSED] test_multiple_loops
[19:46:41] ==================== [PASSED] drm_exec =====================
[19:46:41] =========== drm_format_helper_test (17 subtests) ===========
[19:46:41] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[19:46:41] [PASSED] single_pixel_source_buffer
[19:46:41] [PASSED] single_pixel_clip_rectangle
[19:46:41] [PASSED] well_known_colors
[19:46:41] [PASSED] destination_pitch
[19:46:41] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[19:46:41] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[19:46:41] [PASSED] single_pixel_source_buffer
[19:46:41] [PASSED] single_pixel_clip_rectangle
[19:46:41] [PASSED] well_known_colors
[19:46:41] [PASSED] destination_pitch
[19:46:41] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[19:46:41] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[19:46:41] [PASSED] single_pixel_source_buffer
[19:46:41] [PASSED] single_pixel_clip_rectangle
[19:46:41] [PASSED] well_known_colors
[19:46:41] [PASSED] destination_pitch
[19:46:41] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[19:46:41] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[19:46:41] [PASSED] single_pixel_source_buffer
[19:46:41] [PASSED] single_pixel_clip_rectangle
[19:46:41] [PASSED] well_known_colors
[19:46:41] [PASSED] destination_pitch
[19:46:41] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[19:46:41] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[19:46:41] [PASSED] single_pixel_source_buffer
[19:46:41] [PASSED] single_pixel_clip_rectangle
[19:46:41] [PASSED] well_known_colors
[19:46:41] [PASSED] destination_pitch
[19:46:41] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[19:46:41] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[19:46:41] [PASSED] single_pixel_source_buffer
[19:46:41] [PASSED] single_pixel_clip_rectangle
[19:46:41] [PASSED] well_known_colors
[19:46:41] [PASSED] destination_pitch
[19:46:41] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[19:46:41] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[19:46:41] [PASSED] single_pixel_source_buffer
[19:46:41] [PASSED] single_pixel_clip_rectangle
[19:46:41] [PASSED] well_known_colors
[19:46:41] [PASSED] destination_pitch
[19:46:41] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[19:46:41] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[19:46:41] [PASSED] single_pixel_source_buffer
[19:46:41] [PASSED] single_pixel_clip_rectangle
[19:46:41] [PASSED] well_known_colors
[19:46:41] [PASSED] destination_pitch
[19:46:41] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[19:46:41] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[19:46:41] [PASSED] single_pixel_source_buffer
[19:46:41] [PASSED] single_pixel_clip_rectangle
[19:46:41] [PASSED] well_known_colors
[19:46:41] [PASSED] destination_pitch
[19:46:41] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[19:46:41] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[19:46:41] [PASSED] single_pixel_source_buffer
[19:46:41] [PASSED] single_pixel_clip_rectangle
[19:46:41] [PASSED] well_known_colors
[19:46:41] [PASSED] destination_pitch
[19:46:41] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[19:46:41] ============== drm_test_fb_xrgb8888_to_mono ===============
[19:46:41] [PASSED] single_pixel_source_buffer
[19:46:41] [PASSED] single_pixel_clip_rectangle
[19:46:41] [PASSED] well_known_colors
[19:46:41] [PASSED] destination_pitch
[19:46:41] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[19:46:41] ==================== drm_test_fb_swab =====================
[19:46:41] [PASSED] single_pixel_source_buffer
[19:46:41] [PASSED] single_pixel_clip_rectangle
[19:46:41] [PASSED] well_known_colors
[19:46:41] [PASSED] destination_pitch
[19:46:41] ================ [PASSED] drm_test_fb_swab =================
[19:46:41] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[19:46:41] [PASSED] single_pixel_source_buffer
[19:46:41] [PASSED] single_pixel_clip_rectangle
[19:46:41] [PASSED] well_known_colors
[19:46:41] [PASSED] destination_pitch
[19:46:41] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[19:46:41] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[19:46:41] [PASSED] single_pixel_source_buffer
[19:46:41] [PASSED] single_pixel_clip_rectangle
[19:46:41] [PASSED] well_known_colors
[19:46:41] [PASSED] destination_pitch
[19:46:41] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[19:46:41] ================= drm_test_fb_clip_offset =================
[19:46:41] [PASSED] pass through
[19:46:41] [PASSED] horizontal offset
[19:46:41] [PASSED] vertical offset
[19:46:41] [PASSED] horizontal and vertical offset
[19:46:41] [PASSED] horizontal offset (custom pitch)
[19:46:41] [PASSED] vertical offset (custom pitch)
[19:46:41] [PASSED] horizontal and vertical offset (custom pitch)
[19:46:41] ============= [PASSED] drm_test_fb_clip_offset =============
[19:46:41] ============== drm_test_fb_build_fourcc_list ==============
[19:46:41] [PASSED] no native formats
[19:46:41] [PASSED] XRGB8888 as native format
[19:46:41] [PASSED] remove duplicates
[19:46:41] [PASSED] convert alpha formats
[19:46:41] [PASSED] random formats
[19:46:41] ========== [PASSED] drm_test_fb_build_fourcc_list ==========
[19:46:41] =================== drm_test_fb_memcpy ====================
[19:46:41] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[19:46:41] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[19:46:41] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[19:46:41] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[19:46:41] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[19:46:41] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[19:46:41] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[19:46:41] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[19:46:41] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[19:46:41] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[19:46:41] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[19:46:41] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[19:46:41] =============== [PASSED] drm_test_fb_memcpy ================
[19:46:41] ============= [PASSED] drm_format_helper_test ==============
[19:46:41] ================= drm_format (18 subtests) =================
[19:46:41] [PASSED] drm_test_format_block_width_invalid
[19:46:41] [PASSED] drm_test_format_block_width_one_plane
[19:46:41] [PASSED] drm_test_format_block_width_two_plane
[19:46:41] [PASSED] drm_test_format_block_width_three_plane
[19:46:41] [PASSED] drm_test_format_block_width_tiled
[19:46:41] [PASSED] drm_test_format_block_height_invalid
[19:46:41] [PASSED] drm_test_format_block_height_one_plane
[19:46:41] [PASSED] drm_test_format_block_height_two_plane
[19:46:41] [PASSED] drm_test_format_block_height_three_plane
[19:46:41] [PASSED] drm_test_format_block_height_tiled
[19:46:41] [PASSED] drm_test_format_min_pitch_invalid
[19:46:41] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[19:46:41] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[19:46:41] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[19:46:41] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[19:46:41] [PASSED] drm_test_format_min_pitch_two_plane
[19:46:41] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[19:46:41] [PASSED] drm_test_format_min_pitch_tiled
[19:46:41] =================== [PASSED] drm_format ====================
[19:46:41] =============== drm_framebuffer (1 subtest) ================
[19:46:41] =============== drm_test_framebuffer_create ===============
[19:46:41] [PASSED] ABGR8888 normal sizes
[19:46:41] [PASSED] ABGR8888 max sizes
[19:46:41] [PASSED] ABGR8888 pitch greater than min required
[19:46:41] [PASSED] ABGR8888 pitch less than min required
[19:46:41] [PASSED] ABGR8888 Invalid width
[19:46:41] [PASSED] ABGR8888 Invalid buffer handle
[19:46:41] [PASSED] No pixel format
[19:46:41] [PASSED] ABGR8888 Width 0
[19:46:41] [PASSED] ABGR8888 Height 0
[19:46:41] [PASSED] ABGR8888 Out of bound height * pitch combination
[19:46:41] [PASSED] ABGR8888 Large buffer offset
[19:46:41] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[19:46:41] [PASSED] ABGR8888 Valid buffer modifier
[19:46:41] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[19:46:41] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[19:46:41] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[19:46:41] [PASSED] NV12 Normal sizes
[19:46:41] [PASSED] NV12 Max sizes
[19:46:41] [PASSED] NV12 Invalid pitch
[19:46:41] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[19:46:41] [PASSED] NV12 different modifier per-plane
[19:46:41] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[19:46:41] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[19:46:41] [PASSED] NV12 Modifier for inexistent plane
[19:46:41] [PASSED] NV12 Handle for inexistent plane
[19:46:41] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[19:46:41] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[19:46:41] [PASSED] YVU420 Normal sizes
[19:46:41] [PASSED] YVU420 Max sizes
[19:46:41] [PASSED] YVU420 Invalid pitch
[19:46:41] [PASSED] YVU420 Different pitches
[19:46:41] [PASSED] YVU420 Different buffer offsets/pitches
[19:46:41] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[19:46:41] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[19:46:41] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[19:46:41] [PASSED] YVU420 Valid modifier
[19:46:41] [PASSED] YVU420 Different modifiers per plane
[19:46:41] [PASSED] YVU420 Modifier for inexistent plane
[19:46:41] [PASSED] X0L2 Normal sizes
[19:46:41] [PASSED] X0L2 Max sizes
[19:46:41] [PASSED] X0L2 Invalid pitch
[19:46:41] [PASSED] X0L2 Pitch greater than minimum required
[19:46:41] [PASSED] X0L2 Handle for inexistent plane
[19:46:41] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[19:46:41] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[19:46:41] [PASSED] X0L2 Valid modifier
[19:46:41] [PASSED] X0L2 Modifier for inexistent plane
[19:46:41] =========== [PASSED] drm_test_framebuffer_create ===========
[19:46:41] ================= [PASSED] drm_framebuffer =================
[19:46:41] ================ drm_gem_shmem (8 subtests) ================
[19:46:41] [PASSED] drm_gem_shmem_test_obj_create
[19:46:41] [PASSED] drm_gem_shmem_test_obj_create_private
[19:46:41] [PASSED] drm_gem_shmem_test_pin_pages
[19:46:41] [PASSED] drm_gem_shmem_test_vmap
[19:46:41] [PASSED] drm_gem_shmem_test_get_pages_sgt
[19:46:41] [PASSED] drm_gem_shmem_test_get_sg_table
[19:46:41] [PASSED] drm_gem_shmem_test_madvise
[19:46:41] [PASSED] drm_gem_shmem_test_purge
[19:46:41] ================== [PASSED] drm_gem_shmem ==================
[19:46:41] === drm_atomic_helper_connector_hdmi_check (22 subtests) ===
[19:46:41] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[19:46:41] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[19:46:41] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[19:46:41] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[19:46:41] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[19:46:41] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[19:46:41] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[19:46:41] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[19:46:41] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[19:46:41] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback
[19:46:41] [PASSED] drm_test_check_max_tmds_rate_format_fallback
[19:46:41] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[19:46:41] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[19:46:41] [PASSED] drm_test_check_output_bpc_dvi
[19:46:41] [PASSED] drm_test_check_output_bpc_format_vic_1
[19:46:41] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[19:46:41] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[19:46:41] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[19:46:41] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[19:46:41] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[19:46:41] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[19:46:41] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[19:46:41] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[19:46:41] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[19:46:41] [PASSED] drm_test_check_broadcast_rgb_value
[19:46:41] [PASSED] drm_test_check_bpc_8_value
[19:46:41] [PASSED] drm_test_check_bpc_10_value
[19:46:41] [PASSED] drm_test_check_bpc_12_value
[19:46:41] [PASSED] drm_test_check_format_value
[19:46:41] [PASSED] drm_test_check_tmds_char_value
[19:46:41] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[19:46:41] ================= drm_managed (2 subtests) =================
[19:46:41] [PASSED] drm_test_managed_release_action
[19:46:41] [PASSED] drm_test_managed_run_action
[19:46:41] =================== [PASSED] drm_managed ===================
[19:46:41] =================== drm_mm (6 subtests) ====================
[19:46:41] [PASSED] drm_test_mm_init
[19:46:41] [PASSED] drm_test_mm_debug
[19:46:41] [PASSED] drm_test_mm_align32
[19:46:41] [PASSED] drm_test_mm_align64
[19:46:41] [PASSED] drm_test_mm_lowest
[19:46:41] [PASSED] drm_test_mm_highest
[19:46:41] ===================== [PASSED] drm_mm ======================
[19:46:41] ============= drm_modes_analog_tv (5 subtests) =============
[19:46:41] [PASSED] drm_test_modes_analog_tv_mono_576i
[19:46:41] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[19:46:41] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[19:46:41] [PASSED] drm_test_modes_analog_tv_pal_576i
[19:46:41] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[19:46:41] =============== [PASSED] drm_modes_analog_tv ===============
[19:46:41] ============== drm_plane_helper (2 subtests) ===============
[19:46:41] =============== drm_test_check_plane_state ================
[19:46:41] [PASSED] clipping_simple
[19:46:41] [PASSED] clipping_rotate_reflect
[19:46:41] [PASSED] positioning_simple
[19:46:41] [PASSED] upscaling
[19:46:41] [PASSED] downscaling
[19:46:41] [PASSED] rounding1
[19:46:41] [PASSED] rounding2
[19:46:41] [PASSED] rounding3
[19:46:41] [PASSED] rounding4
[19:46:41] =========== [PASSED] drm_test_check_plane_state ============
[19:46:41] =========== drm_test_check_invalid_plane_state ============
[19:46:41] [PASSED] positioning_invalid
[19:46:41] [PASSED] upscaling_invalid
stty: 'standard input': Inappropriate ioctl for device
[19:46:41] [PASSED] downscaling_invalid
[19:46:41] ======= [PASSED] drm_test_check_invalid_plane_state ========
[19:46:41] ================ [PASSED] drm_plane_helper =================
[19:46:41] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[19:46:41] ====== drm_test_connector_helper_tv_get_modes_check =======
[19:46:41] [PASSED] None
[19:46:41] [PASSED] PAL
[19:46:41] [PASSED] NTSC
[19:46:41] [PASSED] Both, NTSC Default
[19:46:41] [PASSED] Both, PAL Default
[19:46:41] [PASSED] Both, NTSC Default, with PAL on command-line
[19:46:41] [PASSED] Both, PAL Default, with NTSC on command-line
[19:46:41] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[19:46:41] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[19:46:41] ================== drm_rect (9 subtests) ===================
[19:46:41] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[19:46:41] [PASSED] drm_test_rect_clip_scaled_not_clipped
[19:46:41] [PASSED] drm_test_rect_clip_scaled_clipped
[19:46:41] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[19:46:41] ================= drm_test_rect_intersect =================
[19:46:41] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[19:46:41] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[19:46:41] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[19:46:41] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[19:46:41] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[19:46:41] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[19:46:41] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[19:46:41] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[19:46:41] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[19:46:41] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[19:46:41] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[19:46:41] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[19:46:41] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[19:46:41] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[19:46:41] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[19:46:41] ============= [PASSED] drm_test_rect_intersect =============
[19:46:41] ================ drm_test_rect_calc_hscale ================
[19:46:41] [PASSED] normal use
[19:46:41] [PASSED] out of max range
[19:46:41] [PASSED] out of min range
[19:46:41] [PASSED] zero dst
[19:46:41] [PASSED] negative src
[19:46:41] [PASSED] negative dst
[19:46:41] ============ [PASSED] drm_test_rect_calc_hscale ============
[19:46:41] ================ drm_test_rect_calc_vscale ================
[19:46:41] [PASSED] normal use
[19:46:41] [PASSED] out of max range
[19:46:41] [PASSED] out of min range
[19:46:41] [PASSED] zero dst
[19:46:41] [PASSED] negative src
[19:46:41] [PASSED] negative dst
[19:46:41] ============ [PASSED] drm_test_rect_calc_vscale ============
[19:46:41] ================== drm_test_rect_rotate ===================
[19:46:41] [PASSED] reflect-x
[19:46:41] [PASSED] reflect-y
[19:46:41] [PASSED] rotate-0
[19:46:41] [PASSED] rotate-90
[19:46:41] [PASSED] rotate-180
[19:46:41] [PASSED] rotate-270
[19:46:41] ============== [PASSED] drm_test_rect_rotate ===============
[19:46:41] ================ drm_test_rect_rotate_inv =================
[19:46:41] [PASSED] reflect-x
[19:46:41] [PASSED] reflect-y
[19:46:41] [PASSED] rotate-0
[19:46:41] [PASSED] rotate-90
[19:46:41] [PASSED] rotate-180
[19:46:41] [PASSED] rotate-270
[19:46:41] ============ [PASSED] drm_test_rect_rotate_inv =============
[19:46:41] ==================== [PASSED] drm_rect =====================
[19:46:41] ============================================================
[19:46:41] Testing complete. Ran 515 tests: passed: 515
[19:46:41] Elapsed time: 23.437s total, 1.725s configuring, 21.542s building, 0.152s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[19:46:41] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[19:46:43] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make ARCH=um O=.kunit --jobs=48
[19:46:52] Starting KUnit Kernel (1/1)...
[19:46:52] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[19:46:52] ================= ttm_device (5 subtests) ==================
[19:46:52] [PASSED] ttm_device_init_basic
[19:46:52] [PASSED] ttm_device_init_multiple
[19:46:52] [PASSED] ttm_device_fini_basic
[19:46:52] [PASSED] ttm_device_init_no_vma_man
[19:46:52] ================== ttm_device_init_pools ==================
[19:46:52] [PASSED] No DMA allocations, no DMA32 required
[19:46:52] [PASSED] DMA allocations, DMA32 required
[19:46:52] [PASSED] No DMA allocations, DMA32 required
[19:46:52] [PASSED] DMA allocations, no DMA32 required
[19:46:52] ============== [PASSED] ttm_device_init_pools ==============
[19:46:52] =================== [PASSED] ttm_device ====================
[19:46:52] ================== ttm_pool (8 subtests) ===================
[19:46:52] ================== ttm_pool_alloc_basic ===================
[19:46:52] [PASSED] One page
[19:46:52] [PASSED] More than one page
[19:46:52] [PASSED] Above the allocation limit
[19:46:52] [PASSED] One page, with coherent DMA mappings enabled
[19:46:52] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[19:46:52] ============== [PASSED] ttm_pool_alloc_basic ===============
[19:46:52] ============== ttm_pool_alloc_basic_dma_addr ==============
[19:46:52] [PASSED] One page
[19:46:52] [PASSED] More than one page
[19:46:52] [PASSED] Above the allocation limit
[19:46:52] [PASSED] One page, with coherent DMA mappings enabled
[19:46:52] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[19:46:52] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[19:46:52] [PASSED] ttm_pool_alloc_order_caching_match
[19:46:52] [PASSED] ttm_pool_alloc_caching_mismatch
[19:46:52] [PASSED] ttm_pool_alloc_order_mismatch
[19:46:52] [PASSED] ttm_pool_free_dma_alloc
[19:46:52] [PASSED] ttm_pool_free_no_dma_alloc
[19:46:52] [PASSED] ttm_pool_fini_basic
[19:46:52] ==================== [PASSED] ttm_pool =====================
[19:46:52] ================ ttm_resource (8 subtests) =================
[19:46:52] ================= ttm_resource_init_basic =================
[19:46:52] [PASSED] Init resource in TTM_PL_SYSTEM
[19:46:52] [PASSED] Init resource in TTM_PL_VRAM
[19:46:52] [PASSED] Init resource in a private placement
[19:46:52] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[19:46:52] ============= [PASSED] ttm_resource_init_basic =============
[19:46:52] [PASSED] ttm_resource_init_pinned
[19:46:52] [PASSED] ttm_resource_fini_basic
[19:46:52] [PASSED] ttm_resource_manager_init_basic
[19:46:52] [PASSED] ttm_resource_manager_usage_basic
[19:46:52] [PASSED] ttm_resource_manager_set_used_basic
[19:46:52] [PASSED] ttm_sys_man_alloc_basic
[19:46:52] [PASSED] ttm_sys_man_free_basic
[19:46:52] ================== [PASSED] ttm_resource ===================
[19:46:52] =================== ttm_tt (15 subtests) ===================
[19:46:52] ==================== ttm_tt_init_basic ====================
[19:46:52] [PASSED] Page-aligned size
[19:46:52] [PASSED] Extra pages requested
[19:46:52] ================ [PASSED] ttm_tt_init_basic ================
[19:46:52] [PASSED] ttm_tt_init_misaligned
[19:46:52] [PASSED] ttm_tt_fini_basic
[19:46:52] [PASSED] ttm_tt_fini_sg
[19:46:52] [PASSED] ttm_tt_fini_shmem
[19:46:52] [PASSED] ttm_tt_create_basic
[19:46:52] [PASSED] ttm_tt_create_invalid_bo_type
[19:46:52] [PASSED] ttm_tt_create_ttm_exists
[19:46:52] [PASSED] ttm_tt_create_failed
[19:46:52] [PASSED] ttm_tt_destroy_basic
[19:46:52] [PASSED] ttm_tt_populate_null_ttm
[19:46:52] [PASSED] ttm_tt_populate_populated_ttm
[19:46:52] [PASSED] ttm_tt_unpopulate_basic
[19:46:52] [PASSED] ttm_tt_unpopulate_empty_ttm
[19:46:52] [PASSED] ttm_tt_swapin_basic
[19:46:52] ===================== [PASSED] ttm_tt ======================
[19:46:52] =================== ttm_bo (14 subtests) ===================
[19:46:52] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[19:46:52] [PASSED] Cannot be interrupted and sleeps
[19:46:52] [PASSED] Cannot be interrupted, locks straight away
[19:46:52] [PASSED] Can be interrupted, sleeps
[19:46:52] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[19:46:52] [PASSED] ttm_bo_reserve_locked_no_sleep
[19:46:52] [PASSED] ttm_bo_reserve_no_wait_ticket
[19:46:52] [PASSED] ttm_bo_reserve_double_resv
[19:46:52] [PASSED] ttm_bo_reserve_interrupted
[19:46:52] [PASSED] ttm_bo_reserve_deadlock
[19:46:52] [PASSED] ttm_bo_unreserve_basic
[19:46:52] [PASSED] ttm_bo_unreserve_pinned
[19:46:52] [PASSED] ttm_bo_unreserve_bulk
[19:46:52] [PASSED] ttm_bo_put_basic
[19:46:52] [PASSED] ttm_bo_put_shared_resv
[19:46:52] [PASSED] ttm_bo_pin_basic
[19:46:52] [PASSED] ttm_bo_pin_unpin_resource
[19:46:52] [PASSED] ttm_bo_multiple_pin_one_unpin
[19:46:52] ===================== [PASSED] ttm_bo ======================
[19:46:52] ============== ttm_bo_validate (22 subtests) ===============
[19:46:52] ============== ttm_bo_init_reserved_sys_man ===============
[19:46:52] [PASSED] Buffer object for userspace
[19:46:52] [PASSED] Kernel buffer object
[19:46:52] [PASSED] Shared buffer object
[19:46:52] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[19:46:52] ============== ttm_bo_init_reserved_mock_man ==============
[19:46:52] [PASSED] Buffer object for userspace
[19:46:52] [PASSED] Kernel buffer object
[19:46:52] [PASSED] Shared buffer object
[19:46:52] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[19:46:52] [PASSED] ttm_bo_init_reserved_resv
[19:46:52] ================== ttm_bo_validate_basic ==================
[19:46:52] [PASSED] Buffer object for userspace
[19:46:52] [PASSED] Kernel buffer object
[19:46:52] [PASSED] Shared buffer object
[19:46:52] ============== [PASSED] ttm_bo_validate_basic ==============
[19:46:52] [PASSED] ttm_bo_validate_invalid_placement
[19:46:52] ============= ttm_bo_validate_same_placement ==============
[19:46:52] [PASSED] System manager
[19:46:52] [PASSED] VRAM manager
[19:46:52] ========= [PASSED] ttm_bo_validate_same_placement ==========
[19:46:52] [PASSED] ttm_bo_validate_failed_alloc
[19:46:52] [PASSED] ttm_bo_validate_pinned
[19:46:52] [PASSED] ttm_bo_validate_busy_placement
[19:46:52] ================ ttm_bo_validate_multihop =================
[19:46:52] [PASSED] Buffer object for userspace
[19:46:52] [PASSED] Kernel buffer object
[19:46:52] [PASSED] Shared buffer object
[19:46:52] ============ [PASSED] ttm_bo_validate_multihop =============
[19:46:52] ========== ttm_bo_validate_no_placement_signaled ==========
[19:46:52] [PASSED] Buffer object in system domain, no page vector
[19:46:52] [PASSED] Buffer object in system domain with an existing page vector
[19:46:52] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[19:46:52] ======== ttm_bo_validate_no_placement_not_signaled ========
[19:46:52] [PASSED] Buffer object for userspace
[19:46:52] [PASSED] Kernel buffer object
[19:46:52] [PASSED] Shared buffer object
[19:46:52] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[19:46:52] [PASSED] ttm_bo_validate_move_fence_signaled
[19:46:52] ========= ttm_bo_validate_move_fence_not_signaled =========
[19:46:52] [PASSED] Waits for GPU
[19:46:52] [PASSED] Tries to lock straight away
[19:46:52] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[19:46:52] [PASSED] ttm_bo_validate_swapout
[19:46:52] [PASSED] ttm_bo_validate_happy_evict
[19:46:52] [PASSED] ttm_bo_validate_all_pinned_evict
[19:46:52] [PASSED] ttm_bo_validate_allowed_only_evict
[19:46:52] [PASSED] ttm_bo_validate_deleted_evict
[19:46:52] [PASSED] ttm_bo_validate_busy_domain_evict
[19:46:52] [PASSED] ttm_bo_validate_evict_gutting
[19:46:52] [PASSED] ttm_bo_validate_recrusive_evict
stty: 'standard input': Inappropriate ioctl for device
[19:46:52] ================= [PASSED] ttm_bo_validate =================
[19:46:52] ============================================================
[19:46:52] Testing complete. Ran 102 tests: passed: 102
[19:46:52] Elapsed time: 11.242s total, 1.735s configuring, 8.886s building, 0.516s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 28+ messages in thread* ✓ CI.Build: success for series starting with [01/12] drm/xe: Removed unused xe_ggtt_printk
2024-08-21 19:38 [PATCH 01/12] drm/xe: Removed unused xe_ggtt_printk Rodrigo Vivi
` (13 preceding siblings ...)
2024-08-21 19:46 ` ✓ CI.KUnit: " Patchwork
@ 2024-08-21 19:58 ` Patchwork
2024-08-21 20:01 ` ✓ CI.Hooks: " Patchwork
` (3 subsequent siblings)
18 siblings, 0 replies; 28+ messages in thread
From: Patchwork @ 2024-08-21 19:58 UTC (permalink / raw)
To: Rodrigo Vivi; +Cc: intel-xe
== Series Details ==
Series: series starting with [01/12] drm/xe: Removed unused xe_ggtt_printk
URL : https://patchwork.freedesktop.org/series/137588/
State : success
== Summary ==
lib/modules/6.11.0-rc4-xe/kernel/sound/core/seq/
lib/modules/6.11.0-rc4-xe/kernel/sound/core/seq/snd-seq.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/core/snd-seq-device.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/core/snd-hwdep.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/core/snd.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/core/snd-pcm.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/core/snd-compress.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/core/snd-timer.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/soundcore.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/intel/
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/intel/atom/
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/intel/atom/snd-soc-sst-atom-hifi2-platform.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/intel/atom/sst/
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/intel/atom/sst/snd-intel-sst-acpi.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/intel/atom/sst/snd-intel-sst-core.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/intel/common/
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/intel/common/snd-soc-acpi-intel-match.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/amd/
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/amd/snd-acp-config.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/sof/
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/sof/intel/
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/sof/intel/snd-sof-pci-intel-tgl.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/sof/intel/snd-sof-intel-hda-mlink.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/sof/intel/snd-sof-pci-intel-cnl.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/sof/intel/snd-sof-pci-intel-lnl.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/sof/intel/snd-sof-intel-hda-common.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/sof/intel/snd-sof-intel-hda-generic.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/sof/intel/snd-sof-intel-hda.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/sof/intel/snd-sof-pci-intel-mtl.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/sof/amd/
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/sof/amd/snd-sof-amd-renoir.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/sof/amd/snd-sof-amd-acp.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/sof/snd-sof-utils.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/sof/snd-sof-pci.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/sof/snd-sof.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/sof/snd-sof-probes.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/sof/xtensa/
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/sof/xtensa/snd-sof-xtensa-dsp.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/snd-soc-core.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/snd-soc-acpi.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/codecs/
lib/modules/6.11.0-rc4-xe/kernel/sound/soc/codecs/snd-soc-hdac-hda.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/hda/
lib/modules/6.11.0-rc4-xe/kernel/sound/hda/snd-intel-sdw-acpi.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/hda/ext/
lib/modules/6.11.0-rc4-xe/kernel/sound/hda/ext/snd-hda-ext-core.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/hda/snd-intel-dspcfg.ko
lib/modules/6.11.0-rc4-xe/kernel/sound/hda/snd-hda-core.ko
lib/modules/6.11.0-rc4-xe/kernel/arch/
lib/modules/6.11.0-rc4-xe/kernel/arch/x86/
lib/modules/6.11.0-rc4-xe/kernel/arch/x86/kernel/
lib/modules/6.11.0-rc4-xe/kernel/arch/x86/kernel/msr.ko
lib/modules/6.11.0-rc4-xe/kernel/arch/x86/kernel/cpuid.ko
lib/modules/6.11.0-rc4-xe/kernel/arch/x86/crypto/
lib/modules/6.11.0-rc4-xe/kernel/arch/x86/crypto/sha512-ssse3.ko
lib/modules/6.11.0-rc4-xe/kernel/arch/x86/crypto/crct10dif-pclmul.ko
lib/modules/6.11.0-rc4-xe/kernel/arch/x86/crypto/ghash-clmulni-intel.ko
lib/modules/6.11.0-rc4-xe/kernel/arch/x86/crypto/sha1-ssse3.ko
lib/modules/6.11.0-rc4-xe/kernel/arch/x86/crypto/crc32-pclmul.ko
lib/modules/6.11.0-rc4-xe/kernel/arch/x86/crypto/sha256-ssse3.ko
lib/modules/6.11.0-rc4-xe/kernel/arch/x86/crypto/aesni-intel.ko
lib/modules/6.11.0-rc4-xe/kernel/arch/x86/crypto/polyval-clmulni.ko
lib/modules/6.11.0-rc4-xe/kernel/arch/x86/events/
lib/modules/6.11.0-rc4-xe/kernel/arch/x86/events/intel/
lib/modules/6.11.0-rc4-xe/kernel/arch/x86/events/intel/intel-cstate.ko
lib/modules/6.11.0-rc4-xe/kernel/arch/x86/events/rapl.ko
lib/modules/6.11.0-rc4-xe/kernel/arch/x86/kvm/
lib/modules/6.11.0-rc4-xe/kernel/arch/x86/kvm/kvm.ko
lib/modules/6.11.0-rc4-xe/kernel/arch/x86/kvm/kvm-intel.ko
lib/modules/6.11.0-rc4-xe/kernel/crypto/
lib/modules/6.11.0-rc4-xe/kernel/crypto/crypto_simd.ko
lib/modules/6.11.0-rc4-xe/kernel/crypto/cmac.ko
lib/modules/6.11.0-rc4-xe/kernel/crypto/ccm.ko
lib/modules/6.11.0-rc4-xe/kernel/crypto/cryptd.ko
lib/modules/6.11.0-rc4-xe/kernel/crypto/polyval-generic.ko
lib/modules/6.11.0-rc4-xe/kernel/crypto/async_tx/
lib/modules/6.11.0-rc4-xe/kernel/crypto/async_tx/async_xor.ko
lib/modules/6.11.0-rc4-xe/kernel/crypto/async_tx/async_tx.ko
lib/modules/6.11.0-rc4-xe/kernel/crypto/async_tx/async_memcpy.ko
lib/modules/6.11.0-rc4-xe/kernel/crypto/async_tx/async_pq.ko
lib/modules/6.11.0-rc4-xe/kernel/crypto/async_tx/async_raid6_recov.ko
lib/modules/6.11.0-rc4-xe/build
lib/modules/6.11.0-rc4-xe/modules.alias.bin
lib/modules/6.11.0-rc4-xe/modules.builtin
lib/modules/6.11.0-rc4-xe/modules.softdep
lib/modules/6.11.0-rc4-xe/modules.alias
lib/modules/6.11.0-rc4-xe/modules.order
lib/modules/6.11.0-rc4-xe/modules.symbols
lib/modules/6.11.0-rc4-xe/modules.dep.bin
+ mv kernel-nodebug.tar.gz ..
+ cd ..
+ rm -rf archive
++ date +%s
^[[0Ksection_end:1724270311:package_x86_64_nodebug
^[[0K
+ echo -e '\e[0Ksection_end:1724270311:package_x86_64_nodebug\r\e[0K'
+ sync
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 28+ messages in thread* ✓ CI.Hooks: success for series starting with [01/12] drm/xe: Removed unused xe_ggtt_printk
2024-08-21 19:38 [PATCH 01/12] drm/xe: Removed unused xe_ggtt_printk Rodrigo Vivi
` (14 preceding siblings ...)
2024-08-21 19:58 ` ✓ CI.Build: " Patchwork
@ 2024-08-21 20:01 ` Patchwork
2024-08-21 20:02 ` ✗ CI.checksparse: warning " Patchwork
` (2 subsequent siblings)
18 siblings, 0 replies; 28+ messages in thread
From: Patchwork @ 2024-08-21 20:01 UTC (permalink / raw)
To: Rodrigo Vivi; +Cc: intel-xe
== Series Details ==
Series: series starting with [01/12] drm/xe: Removed unused xe_ggtt_printk
URL : https://patchwork.freedesktop.org/series/137588/
State : success
== Summary ==
run-parts: executing /workspace/ci/hooks/00-showenv
+ export
+ grep -Ei '(^|\W)CI_'
declare -x CI_KERNEL_BUILD_DIR="/workspace/kernel/build64-default"
declare -x CI_KERNEL_SRC_DIR="/workspace/kernel"
declare -x CI_TOOLS_SRC_DIR="/workspace/ci"
declare -x CI_WORKSPACE_DIR="/workspace"
run-parts: executing /workspace/ci/hooks/10-build-W1
+ SRC_DIR=/workspace/kernel
+ RESTORE_DISPLAY_CONFIG=0
+ '[' -n /workspace/kernel/build64-default ']'
+ BUILD_DIR=/workspace/kernel/build64-default
+ cd /workspace/kernel
++ nproc
+ make -j48 O=/workspace/kernel/build64-default modules_prepare
make[1]: Entering directory '/workspace/kernel/build64-default'
GEN Makefile
UPD include/generated/compile.h
UPD include/config/kernel.release
mkdir -p /workspace/kernel/build64-default/tools/objtool && make O=/workspace/kernel/build64-default subdir=tools/objtool --no-print-directory -C objtool
UPD include/generated/utsrelease.h
CALL ../scripts/checksyscalls.sh
HOSTCC /workspace/kernel/build64-default/tools/objtool/fixdep.o
HOSTLD /workspace/kernel/build64-default/tools/objtool/fixdep-in.o
LINK /workspace/kernel/build64-default/tools/objtool/fixdep
INSTALL libsubcmd_headers
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/exec-cmd.o
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/help.o
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/pager.o
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/parse-options.o
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/run-command.o
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/sigchain.o
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/subcmd-config.o
LD /workspace/kernel/build64-default/tools/objtool/libsubcmd/libsubcmd-in.o
AR /workspace/kernel/build64-default/tools/objtool/libsubcmd/libsubcmd.a
CC /workspace/kernel/build64-default/tools/objtool/weak.o
CC /workspace/kernel/build64-default/tools/objtool/check.o
CC /workspace/kernel/build64-default/tools/objtool/special.o
CC /workspace/kernel/build64-default/tools/objtool/builtin-check.o
CC /workspace/kernel/build64-default/tools/objtool/elf.o
CC /workspace/kernel/build64-default/tools/objtool/objtool.o
CC /workspace/kernel/build64-default/tools/objtool/orc_gen.o
CC /workspace/kernel/build64-default/tools/objtool/orc_dump.o
CC /workspace/kernel/build64-default/tools/objtool/libstring.o
CC /workspace/kernel/build64-default/tools/objtool/libctype.o
CC /workspace/kernel/build64-default/tools/objtool/str_error_r.o
CC /workspace/kernel/build64-default/tools/objtool/librbtree.o
CC /workspace/kernel/build64-default/tools/objtool/arch/x86/special.o
CC /workspace/kernel/build64-default/tools/objtool/arch/x86/decode.o
CC /workspace/kernel/build64-default/tools/objtool/arch/x86/orc.o
LD /workspace/kernel/build64-default/tools/objtool/arch/x86/objtool-in.o
LD /workspace/kernel/build64-default/tools/objtool/objtool-in.o
LINK /workspace/kernel/build64-default/tools/objtool/objtool
make[1]: Leaving directory '/workspace/kernel/build64-default'
++ nproc
+ make -j48 O=/workspace/kernel/build64-default W=1 drivers/gpu/drm/xe
make[1]: Entering directory '/workspace/kernel/build64-default'
make[2]: Nothing to be done for 'drivers/gpu/drm/xe'.
make[1]: Leaving directory '/workspace/kernel/build64-default'
run-parts: executing /workspace/ci/hooks/11-build-32b
+++ realpath /workspace/ci/hooks/11-build-32b
++ dirname /workspace/ci/hooks/11-build-32b
+ THIS_SCRIPT_DIR=/workspace/ci/hooks
+ SRC_DIR=/workspace/kernel
+ TOOLS_SRC_DIR=/workspace/ci
+ '[' -n /workspace/kernel/build64-default ']'
+ BUILD_DIR=/workspace/kernel/build64-default
+ BUILD_DIR=/workspace/kernel/build64-default/build32
+ cd /workspace/kernel
+ mkdir -p /workspace/kernel/build64-default/build32
++ nproc
+ make -j48 ARCH=i386 O=/workspace/kernel/build64-default/build32 defconfig
make[1]: Entering directory '/workspace/kernel/build64-default/build32'
GEN Makefile
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/conf.o
HOSTCC scripts/kconfig/confdata.o
HOSTCC scripts/kconfig/expr.o
LEX scripts/kconfig/lexer.lex.c
YACC scripts/kconfig/parser.tab.[ch]
HOSTCC scripts/kconfig/menu.o
HOSTCC scripts/kconfig/preprocess.o
HOSTCC scripts/kconfig/symbol.o
HOSTCC scripts/kconfig/util.o
HOSTCC scripts/kconfig/lexer.lex.o
HOSTCC scripts/kconfig/parser.tab.o
HOSTLD scripts/kconfig/conf
*** Default configuration is based on 'i386_defconfig'
#
# configuration written to .config
#
make[1]: Leaving directory '/workspace/kernel/build64-default/build32'
+ cd /workspace/kernel/build64-default/build32
+ /workspace/kernel/scripts/kconfig/merge_config.sh .config /workspace/ci/kernel/10-xe.fragment
Using .config as base
Merging /workspace/ci/kernel/10-xe.fragment
Value of CONFIG_DRM_XE is redefined by fragment /workspace/ci/kernel/10-xe.fragment:
Previous value: # CONFIG_DRM_XE is not set
New value: CONFIG_DRM_XE=m
Value of CONFIG_SND_DEBUG is redefined by fragment /workspace/ci/kernel/10-xe.fragment:
Previous value: # CONFIG_SND_DEBUG is not set
New value: CONFIG_SND_DEBUG=y
Value of CONFIG_SND_HDA_INTEL is redefined by fragment /workspace/ci/kernel/10-xe.fragment:
Previous value: CONFIG_SND_HDA_INTEL=y
New value: CONFIG_SND_HDA_INTEL=m
Value of CONFIG_SND_HDA_CODEC_HDMI is redefined by fragment /workspace/ci/kernel/10-xe.fragment:
Previous value: # CONFIG_SND_HDA_CODEC_HDMI is not set
New value: CONFIG_SND_HDA_CODEC_HDMI=m
GEN Makefile
WARNING: unmet direct dependencies detected for FB_IOMEM_HELPERS
Depends on [n]: HAS_IOMEM [=y] && FB_CORE [=n]
Selected by [m]:
- DRM_XE_DISPLAY [=y] && HAS_IOMEM [=y] && DRM [=y] && DRM_XE [=m] && DRM_XE [=m]=m [=m]
#
# configuration written to .config
#
Value requested for CONFIG_HAVE_UID16 not in final .config
Requested value: CONFIG_HAVE_UID16=y
Actual value:
Value requested for CONFIG_UID16 not in final .config
Requested value: CONFIG_UID16=y
Actual value:
Value requested for CONFIG_X86_32 not in final .config
Requested value: CONFIG_X86_32=y
Actual value:
Value requested for CONFIG_OUTPUT_FORMAT not in final .config
Requested value: CONFIG_OUTPUT_FORMAT="elf32-i386"
Actual value: CONFIG_OUTPUT_FORMAT="elf64-x86-64"
Value requested for CONFIG_ARCH_MMAP_RND_BITS_MIN not in final .config
Requested value: CONFIG_ARCH_MMAP_RND_BITS_MIN=8
Actual value: CONFIG_ARCH_MMAP_RND_BITS_MIN=28
Value requested for CONFIG_ARCH_MMAP_RND_BITS_MAX not in final .config
Requested value: CONFIG_ARCH_MMAP_RND_BITS_MAX=16
Actual value: CONFIG_ARCH_MMAP_RND_BITS_MAX=32
Value requested for CONFIG_PGTABLE_LEVELS not in final .config
Requested value: CONFIG_PGTABLE_LEVELS=2
Actual value: CONFIG_PGTABLE_LEVELS=5
Value requested for CONFIG_X86_BIGSMP not in final .config
Requested value: # CONFIG_X86_BIGSMP is not set
Actual value:
Value requested for CONFIG_X86_INTEL_QUARK not in final .config
Requested value: # CONFIG_X86_INTEL_QUARK is not set
Actual value:
Value requested for CONFIG_X86_RDC321X not in final .config
Requested value: # CONFIG_X86_RDC321X is not set
Actual value:
Value requested for CONFIG_X86_32_NON_STANDARD not in final .config
Requested value: # CONFIG_X86_32_NON_STANDARD is not set
Actual value:
Value requested for CONFIG_X86_32_IRIS not in final .config
Requested value: # CONFIG_X86_32_IRIS is not set
Actual value:
Value requested for CONFIG_M486SX not in final .config
Requested value: # CONFIG_M486SX is not set
Actual value:
Value requested for CONFIG_M486 not in final .config
Requested value: # CONFIG_M486 is not set
Actual value:
Value requested for CONFIG_M586 not in final .config
Requested value: # CONFIG_M586 is not set
Actual value:
Value requested for CONFIG_M586TSC not in final .config
Requested value: # CONFIG_M586TSC is not set
Actual value:
Value requested for CONFIG_M586MMX not in final .config
Requested value: # CONFIG_M586MMX is not set
Actual value:
Value requested for CONFIG_M686 not in final .config
Requested value: CONFIG_M686=y
Actual value:
Value requested for CONFIG_MPENTIUMII not in final .config
Requested value: # CONFIG_MPENTIUMII is not set
Actual value:
Value requested for CONFIG_MPENTIUMIII not in final .config
Requested value: # CONFIG_MPENTIUMIII is not set
Actual value:
Value requested for CONFIG_MPENTIUMM not in final .config
Requested value: # CONFIG_MPENTIUMM is not set
Actual value:
Value requested for CONFIG_MPENTIUM4 not in final .config
Requested value: # CONFIG_MPENTIUM4 is not set
Actual value:
Value requested for CONFIG_MK6 not in final .config
Requested value: # CONFIG_MK6 is not set
Actual value:
Value requested for CONFIG_MK7 not in final .config
Requested value: # CONFIG_MK7 is not set
Actual value:
Value requested for CONFIG_MCRUSOE not in final .config
Requested value: # CONFIG_MCRUSOE is not set
Actual value:
Value requested for CONFIG_MEFFICEON not in final .config
Requested value: # CONFIG_MEFFICEON is not set
Actual value:
Value requested for CONFIG_MWINCHIPC6 not in final .config
Requested value: # CONFIG_MWINCHIPC6 is not set
Actual value:
Value requested for CONFIG_MWINCHIP3D not in final .config
Requested value: # CONFIG_MWINCHIP3D is not set
Actual value:
Value requested for CONFIG_MELAN not in final .config
Requested value: # CONFIG_MELAN is not set
Actual value:
Value requested for CONFIG_MGEODEGX1 not in final .config
Requested value: # CONFIG_MGEODEGX1 is not set
Actual value:
Value requested for CONFIG_MGEODE_LX not in final .config
Requested value: # CONFIG_MGEODE_LX is not set
Actual value:
Value requested for CONFIG_MCYRIXIII not in final .config
Requested value: # CONFIG_MCYRIXIII is not set
Actual value:
Value requested for CONFIG_MVIAC3_2 not in final .config
Requested value: # CONFIG_MVIAC3_2 is not set
Actual value:
Value requested for CONFIG_MVIAC7 not in final .config
Requested value: # CONFIG_MVIAC7 is not set
Actual value:
Value requested for CONFIG_X86_GENERIC not in final .config
Requested value: # CONFIG_X86_GENERIC is not set
Actual value:
Value requested for CONFIG_X86_INTERNODE_CACHE_SHIFT not in final .config
Requested value: CONFIG_X86_INTERNODE_CACHE_SHIFT=5
Actual value: CONFIG_X86_INTERNODE_CACHE_SHIFT=6
Value requested for CONFIG_X86_L1_CACHE_SHIFT not in final .config
Requested value: CONFIG_X86_L1_CACHE_SHIFT=5
Actual value: CONFIG_X86_L1_CACHE_SHIFT=6
Value requested for CONFIG_X86_USE_PPRO_CHECKSUM not in final .config
Requested value: CONFIG_X86_USE_PPRO_CHECKSUM=y
Actual value:
Value requested for CONFIG_X86_MINIMUM_CPU_FAMILY not in final .config
Requested value: CONFIG_X86_MINIMUM_CPU_FAMILY=6
Actual value: CONFIG_X86_MINIMUM_CPU_FAMILY=64
Value requested for CONFIG_CPU_SUP_TRANSMETA_32 not in final .config
Requested value: CONFIG_CPU_SUP_TRANSMETA_32=y
Actual value:
Value requested for CONFIG_CPU_SUP_VORTEX_32 not in final .config
Requested value: CONFIG_CPU_SUP_VORTEX_32=y
Actual value:
Value requested for CONFIG_HPET_TIMER not in final .config
Requested value: # CONFIG_HPET_TIMER is not set
Actual value: CONFIG_HPET_TIMER=y
Value requested for CONFIG_NR_CPUS_RANGE_END not in final .config
Requested value: CONFIG_NR_CPUS_RANGE_END=8
Actual value: CONFIG_NR_CPUS_RANGE_END=512
Value requested for CONFIG_NR_CPUS_DEFAULT not in final .config
Requested value: CONFIG_NR_CPUS_DEFAULT=8
Actual value: CONFIG_NR_CPUS_DEFAULT=64
Value requested for CONFIG_X86_ANCIENT_MCE not in final .config
Requested value: # CONFIG_X86_ANCIENT_MCE is not set
Actual value:
Value requested for CONFIG_X86_LEGACY_VM86 not in final .config
Requested value: # CONFIG_X86_LEGACY_VM86 is not set
Actual value:
Value requested for CONFIG_X86_ESPFIX32 not in final .config
Requested value: CONFIG_X86_ESPFIX32=y
Actual value:
Value requested for CONFIG_TOSHIBA not in final .config
Requested value: # CONFIG_TOSHIBA is not set
Actual value:
Value requested for CONFIG_X86_REBOOTFIXUPS not in final .config
Requested value: # CONFIG_X86_REBOOTFIXUPS is not set
Actual value:
Value requested for CONFIG_MICROCODE_INITRD32 not in final .config
Requested value: CONFIG_MICROCODE_INITRD32=y
Actual value:
Value requested for CONFIG_NOHIGHMEM not in final .config
Requested value: # CONFIG_NOHIGHMEM is not set
Actual value:
Value requested for CONFIG_HIGHMEM4G not in final .config
Requested value: CONFIG_HIGHMEM4G=y
Actual value:
Value requested for CONFIG_HIGHMEM64G not in final .config
Requested value: # CONFIG_HIGHMEM64G is not set
Actual value:
Value requested for CONFIG_VMSPLIT_3G not in final .config
Requested value: CONFIG_VMSPLIT_3G=y
Actual value:
Value requested for CONFIG_VMSPLIT_3G_OPT not in final .config
Requested value: # CONFIG_VMSPLIT_3G_OPT is not set
Actual value:
Value requested for CONFIG_VMSPLIT_2G not in final .config
Requested value: # CONFIG_VMSPLIT_2G is not set
Actual value:
Value requested for CONFIG_VMSPLIT_2G_OPT not in final .config
Requested value: # CONFIG_VMSPLIT_2G_OPT is not set
Actual value:
Value requested for CONFIG_VMSPLIT_1G not in final .config
Requested value: # CONFIG_VMSPLIT_1G is not set
Actual value:
Value requested for CONFIG_PAGE_OFFSET not in final .config
Requested value: CONFIG_PAGE_OFFSET=0xC0000000
Actual value:
Value requested for CONFIG_HIGHMEM not in final .config
Requested value: CONFIG_HIGHMEM=y
Actual value:
Value requested for CONFIG_X86_PAE not in final .config
Requested value: # CONFIG_X86_PAE is not set
Actual value:
Value requested for CONFIG_ARCH_FLATMEM_ENABLE not in final .config
Requested value: CONFIG_ARCH_FLATMEM_ENABLE=y
Actual value:
Value requested for CONFIG_ARCH_SELECT_MEMORY_MODEL not in final .config
Requested value: CONFIG_ARCH_SELECT_MEMORY_MODEL=y
Actual value:
Value requested for CONFIG_ILLEGAL_POINTER_VALUE not in final .config
Requested value: CONFIG_ILLEGAL_POINTER_VALUE=0
Actual value: CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000
Value requested for CONFIG_HIGHPTE not in final .config
Requested value: # CONFIG_HIGHPTE is not set
Actual value:
Value requested for CONFIG_COMPAT_VDSO not in final .config
Requested value: # CONFIG_COMPAT_VDSO is not set
Actual value:
Value requested for CONFIG_FUNCTION_PADDING_CFI not in final .config
Requested value: CONFIG_FUNCTION_PADDING_CFI=0
Actual value: CONFIG_FUNCTION_PADDING_CFI=11
Value requested for CONFIG_FUNCTION_PADDING_BYTES not in final .config
Requested value: CONFIG_FUNCTION_PADDING_BYTES=4
Actual value: CONFIG_FUNCTION_PADDING_BYTES=16
Value requested for CONFIG_APM not in final .config
Requested value: # CONFIG_APM is not set
Actual value:
Value requested for CONFIG_X86_POWERNOW_K6 not in final .config
Requested value: # CONFIG_X86_POWERNOW_K6 is not set
Actual value:
Value requested for CONFIG_X86_POWERNOW_K7 not in final .config
Requested value: # CONFIG_X86_POWERNOW_K7 is not set
Actual value:
Value requested for CONFIG_X86_GX_SUSPMOD not in final .config
Requested value: # CONFIG_X86_GX_SUSPMOD is not set
Actual value:
Value requested for CONFIG_X86_SPEEDSTEP_ICH not in final .config
Requested value: # CONFIG_X86_SPEEDSTEP_ICH is not set
Actual value:
Value requested for CONFIG_X86_SPEEDSTEP_SMI not in final .config
Requested value: # CONFIG_X86_SPEEDSTEP_SMI is not set
Actual value:
Value requested for CONFIG_X86_CPUFREQ_NFORCE2 not in final .config
Requested value: # CONFIG_X86_CPUFREQ_NFORCE2 is not set
Actual value:
Value requested for CONFIG_X86_LONGRUN not in final .config
Requested value: # CONFIG_X86_LONGRUN is not set
Actual value:
Value requested for CONFIG_X86_LONGHAUL not in final .config
Requested value: # CONFIG_X86_LONGHAUL is not set
Actual value:
Value requested for CONFIG_X86_E_POWERSAVER not in final .config
Requested value: # CONFIG_X86_E_POWERSAVER is not set
Actual value:
Value requested for CONFIG_PCI_GOBIOS not in final .config
Requested value: # CONFIG_PCI_GOBIOS is not set
Actual value:
Value requested for CONFIG_PCI_GOMMCONFIG not in final .config
Requested value: # CONFIG_PCI_GOMMCONFIG is not set
Actual value:
Value requested for CONFIG_PCI_GODIRECT not in final .config
Requested value: # CONFIG_PCI_GODIRECT is not set
Actual value:
Value requested for CONFIG_PCI_GOANY not in final .config
Requested value: CONFIG_PCI_GOANY=y
Actual value:
Value requested for CONFIG_PCI_BIOS not in final .config
Requested value: CONFIG_PCI_BIOS=y
Actual value:
Value requested for CONFIG_ISA not in final .config
Requested value: # CONFIG_ISA is not set
Actual value:
Value requested for CONFIG_SCx200 not in final .config
Requested value: # CONFIG_SCx200 is not set
Actual value:
Value requested for CONFIG_OLPC not in final .config
Requested value: # CONFIG_OLPC is not set
Actual value:
Value requested for CONFIG_ALIX not in final .config
Requested value: # CONFIG_ALIX is not set
Actual value:
Value requested for CONFIG_NET5501 not in final .config
Requested value: # CONFIG_NET5501 is not set
Actual value:
Value requested for CONFIG_GEOS not in final .config
Requested value: # CONFIG_GEOS is not set
Actual value:
Value requested for CONFIG_COMPAT_32 not in final .config
Requested value: CONFIG_COMPAT_32=y
Actual value:
Value requested for CONFIG_HAVE_ATOMIC_IOMAP not in final .config
Requested value: CONFIG_HAVE_ATOMIC_IOMAP=y
Actual value:
Value requested for CONFIG_ARCH_32BIT_OFF_T not in final .config
Requested value: CONFIG_ARCH_32BIT_OFF_T=y
Actual value:
Value requested for CONFIG_ARCH_WANT_IPC_PARSE_VERSION not in final .config
Requested value: CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
Actual value:
Value requested for CONFIG_MODULES_USE_ELF_REL not in final .config
Requested value: CONFIG_MODULES_USE_ELF_REL=y
Actual value:
Value requested for CONFIG_ARCH_MMAP_RND_BITS not in final .config
Requested value: CONFIG_ARCH_MMAP_RND_BITS=8
Actual value: CONFIG_ARCH_MMAP_RND_BITS=28
Value requested for CONFIG_CLONE_BACKWARDS not in final .config
Requested value: CONFIG_CLONE_BACKWARDS=y
Actual value:
Value requested for CONFIG_OLD_SIGSUSPEND3 not in final .config
Requested value: CONFIG_OLD_SIGSUSPEND3=y
Actual value:
Value requested for CONFIG_OLD_SIGACTION not in final .config
Requested value: CONFIG_OLD_SIGACTION=y
Actual value:
Value requested for CONFIG_ARCH_SPLIT_ARG64 not in final .config
Requested value: CONFIG_ARCH_SPLIT_ARG64=y
Actual value:
Value requested for CONFIG_FUNCTION_ALIGNMENT not in final .config
Requested value: CONFIG_FUNCTION_ALIGNMENT=4
Actual value: CONFIG_FUNCTION_ALIGNMENT=16
Value requested for CONFIG_SELECT_MEMORY_MODEL not in final .config
Requested value: CONFIG_SELECT_MEMORY_MODEL=y
Actual value:
Value requested for CONFIG_FLATMEM_MANUAL not in final .config
Requested value: CONFIG_FLATMEM_MANUAL=y
Actual value:
Value requested for CONFIG_SPARSEMEM_MANUAL not in final .config
Requested value: # CONFIG_SPARSEMEM_MANUAL is not set
Actual value:
Value requested for CONFIG_FLATMEM not in final .config
Requested value: CONFIG_FLATMEM=y
Actual value:
Value requested for CONFIG_SPARSEMEM_STATIC not in final .config
Requested value: CONFIG_SPARSEMEM_STATIC=y
Actual value:
Value requested for CONFIG_BOUNCE not in final .config
Requested value: CONFIG_BOUNCE=y
Actual value:
Value requested for CONFIG_KMAP_LOCAL not in final .config
Requested value: CONFIG_KMAP_LOCAL=y
Actual value:
Value requested for CONFIG_HOTPLUG_PCI_COMPAQ not in final .config
Requested value: # CONFIG_HOTPLUG_PCI_COMPAQ is not set
Actual value:
Value requested for CONFIG_HOTPLUG_PCI_IBM not in final .config
Requested value: # CONFIG_HOTPLUG_PCI_IBM is not set
Actual value:
Value requested for CONFIG_EFI_CAPSULE_QUIRK_QUARK_CSH not in final .config
Requested value: CONFIG_EFI_CAPSULE_QUIRK_QUARK_CSH=y
Actual value:
Value requested for CONFIG_PCH_PHUB not in final .config
Requested value: # CONFIG_PCH_PHUB is not set
Actual value:
Value requested for CONFIG_SCSI_NSP32 not in final .config
Requested value: # CONFIG_SCSI_NSP32 is not set
Actual value:
Value requested for CONFIG_PATA_CS5520 not in final .config
Requested value: # CONFIG_PATA_CS5520 is not set
Actual value:
Value requested for CONFIG_PATA_CS5530 not in final .config
Requested value: # CONFIG_PATA_CS5530 is not set
Actual value:
Value requested for CONFIG_PATA_CS5535 not in final .config
Requested value: # CONFIG_PATA_CS5535 is not set
Actual value:
Value requested for CONFIG_PATA_CS5536 not in final .config
Requested value: # CONFIG_PATA_CS5536 is not set
Actual value:
Value requested for CONFIG_PATA_SC1200 not in final .config
Requested value: # CONFIG_PATA_SC1200 is not set
Actual value:
Value requested for CONFIG_PCH_GBE not in final .config
Requested value: # CONFIG_PCH_GBE is not set
Actual value:
Value requested for CONFIG_INPUT_WISTRON_BTNS not in final .config
Requested value: # CONFIG_INPUT_WISTRON_BTNS is not set
Actual value:
Value requested for CONFIG_SERIAL_TIMBERDALE not in final .config
Requested value: # CONFIG_SERIAL_TIMBERDALE is not set
Actual value:
Value requested for CONFIG_SERIAL_PCH_UART not in final .config
Requested value: # CONFIG_SERIAL_PCH_UART is not set
Actual value:
Value requested for CONFIG_HW_RANDOM_GEODE not in final .config
Requested value: CONFIG_HW_RANDOM_GEODE=y
Actual value:
Value requested for CONFIG_SONYPI not in final .config
Requested value: # CONFIG_SONYPI is not set
Actual value:
Value requested for CONFIG_PC8736x_GPIO not in final .config
Requested value: # CONFIG_PC8736x_GPIO is not set
Actual value:
Value requested for CONFIG_NSC_GPIO not in final .config
Requested value: # CONFIG_NSC_GPIO is not set
Actual value:
Value requested for CONFIG_I2C_EG20T not in final .config
Requested value: # CONFIG_I2C_EG20T is not set
Actual value:
Value requested for CONFIG_SCx200_ACB not in final .config
Requested value: # CONFIG_SCx200_ACB is not set
Actual value:
Value requested for CONFIG_PTP_1588_CLOCK_PCH not in final .config
Requested value: # CONFIG_PTP_1588_CLOCK_PCH is not set
Actual value:
Value requested for CONFIG_SBC8360_WDT not in final .config
Requested value: # CONFIG_SBC8360_WDT is not set
Actual value:
Value requested for CONFIG_SBC7240_WDT not in final .config
Requested value: # CONFIG_SBC7240_WDT is not set
Actual value:
Value requested for CONFIG_MFD_CS5535 not in final .config
Requested value: # CONFIG_MFD_CS5535 is not set
Actual value:
Value requested for CONFIG_AGP_ALI not in final .config
Requested value: # CONFIG_AGP_ALI is not set
Actual value:
Value requested for CONFIG_AGP_ATI not in final .config
Requested value: # CONFIG_AGP_ATI is not set
Actual value:
Value requested for CONFIG_AGP_AMD not in final .config
Requested value: # CONFIG_AGP_AMD is not set
Actual value:
Value requested for CONFIG_AGP_NVIDIA not in final .config
Requested value: # CONFIG_AGP_NVIDIA is not set
Actual value:
Value requested for CONFIG_AGP_SWORKS not in final .config
Requested value: # CONFIG_AGP_SWORKS is not set
Actual value:
Value requested for CONFIG_AGP_EFFICEON not in final .config
Requested value: # CONFIG_AGP_EFFICEON is not set
Actual value:
Value requested for CONFIG_SND_PCM not in final .config
Requested value: CONFIG_SND_PCM=y
Actual value: CONFIG_SND_PCM=m
Value requested for CONFIG_SND_HWDEP not in final .config
Requested value: CONFIG_SND_HWDEP=y
Actual value: CONFIG_SND_HWDEP=m
Value requested for CONFIG_SND_DYNAMIC_MINORS not in final .config
Requested value: # CONFIG_SND_DYNAMIC_MINORS is not set
Actual value: CONFIG_SND_DYNAMIC_MINORS=y
Value requested for CONFIG_SND_CS5530 not in final .config
Requested value: # CONFIG_SND_CS5530 is not set
Actual value:
Value requested for CONFIG_SND_CS5535AUDIO not in final .config
Requested value: # CONFIG_SND_CS5535AUDIO is not set
Actual value:
Value requested for CONFIG_SND_SIS7019 not in final .config
Requested value: # CONFIG_SND_SIS7019 is not set
Actual value:
Value requested for CONFIG_SND_HDA not in final .config
Requested value: CONFIG_SND_HDA=y
Actual value: CONFIG_SND_HDA=m
Value requested for CONFIG_SND_HDA_CORE not in final .config
Requested value: CONFIG_SND_HDA_CORE=y
Actual value: CONFIG_SND_HDA_CORE=m
Value requested for CONFIG_SND_INTEL_DSP_CONFIG not in final .config
Requested value: CONFIG_SND_INTEL_DSP_CONFIG=y
Actual value: CONFIG_SND_INTEL_DSP_CONFIG=m
Value requested for CONFIG_SND_INTEL_SOUNDWIRE_ACPI not in final .config
Requested value: CONFIG_SND_INTEL_SOUNDWIRE_ACPI=y
Actual value: CONFIG_SND_INTEL_SOUNDWIRE_ACPI=m
Value requested for CONFIG_LEDS_OT200 not in final .config
Requested value: # CONFIG_LEDS_OT200 is not set
Actual value:
Value requested for CONFIG_PCH_DMA not in final .config
Requested value: # CONFIG_PCH_DMA is not set
Actual value:
Value requested for CONFIG_CLKSRC_I8253 not in final .config
Requested value: CONFIG_CLKSRC_I8253=y
Actual value:
Value requested for CONFIG_MAILBOX not in final .config
Requested value: # CONFIG_MAILBOX is not set
Actual value: CONFIG_MAILBOX=y
Value requested for CONFIG_CRYPTO_SERPENT_SSE2_586 not in final .config
Requested value: # CONFIG_CRYPTO_SERPENT_SSE2_586 is not set
Actual value:
Value requested for CONFIG_CRYPTO_TWOFISH_586 not in final .config
Requested value: # CONFIG_CRYPTO_TWOFISH_586 is not set
Actual value:
Value requested for CONFIG_CRYPTO_DEV_GEODE not in final .config
Requested value: # CONFIG_CRYPTO_DEV_GEODE is not set
Actual value:
Value requested for CONFIG_CRYPTO_DEV_HIFN_795X not in final .config
Requested value: # CONFIG_CRYPTO_DEV_HIFN_795X is not set
Actual value:
Value requested for CONFIG_CRYPTO_LIB_POLY1305_RSIZE not in final .config
Requested value: CONFIG_CRYPTO_LIB_POLY1305_RSIZE=1
Actual value: CONFIG_CRYPTO_LIB_POLY1305_RSIZE=11
Value requested for CONFIG_AUDIT_GENERIC not in final .config
Requested value: CONFIG_AUDIT_GENERIC=y
Actual value:
Value requested for CONFIG_GENERIC_VDSO_32 not in final .config
Requested value: CONFIG_GENERIC_VDSO_32=y
Actual value:
Value requested for CONFIG_DEBUG_KMAP_LOCAL not in final .config
Requested value: # CONFIG_DEBUG_KMAP_LOCAL is not set
Actual value:
Value requested for CONFIG_DEBUG_HIGHMEM not in final .config
Requested value: # CONFIG_DEBUG_HIGHMEM is not set
Actual value:
Value requested for CONFIG_HAVE_DEBUG_STACKOVERFLOW not in final .config
Requested value: CONFIG_HAVE_DEBUG_STACKOVERFLOW=y
Actual value:
Value requested for CONFIG_DEBUG_STACKOVERFLOW not in final .config
Requested value: # CONFIG_DEBUG_STACKOVERFLOW is not set
Actual value:
Value requested for CONFIG_HAVE_FUNCTION_GRAPH_TRACER not in final .config
Requested value: CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
Actual value:
Value requested for CONFIG_HAVE_FUNCTION_GRAPH_RETVAL not in final .config
Requested value: CONFIG_HAVE_FUNCTION_GRAPH_RETVAL=y
Actual value:
Value requested for CONFIG_DRM_KUNIT_TEST not in final .config
Requested value: CONFIG_DRM_KUNIT_TEST=m
Actual value:
Value requested for CONFIG_DRM_XE_WERROR not in final .config
Requested value: CONFIG_DRM_XE_WERROR=y
Actual value:
Value requested for CONFIG_DRM_XE_DEBUG not in final .config
Requested value: CONFIG_DRM_XE_DEBUG=y
Actual value:
Value requested for CONFIG_DRM_XE_DEBUG_MEM not in final .config
Requested value: CONFIG_DRM_XE_DEBUG_MEM=y
Actual value:
Value requested for CONFIG_DRM_XE_KUNIT_TEST not in final .config
Requested value: CONFIG_DRM_XE_KUNIT_TEST=m
Actual value:
++ nproc
+ make -j48 ARCH=i386 olddefconfig
GEN Makefile
WARNING: unmet direct dependencies detected for FB_IOMEM_HELPERS
Depends on [n]: HAS_IOMEM [=y] && FB_CORE [=n]
Selected by [m]:
- DRM_XE_DISPLAY [=y] && HAS_IOMEM [=y] && DRM [=y] && DRM_XE [=m] && DRM_XE [=m]=m [=m]
#
# configuration written to .config
#
++ nproc
+ make -j48 ARCH=i386
SYNC include/config/auto.conf.cmd
GEN Makefile
WARNING: unmet direct dependencies detected for FB_IOMEM_HELPERS
Depends on [n]: HAS_IOMEM [=y] && FB_CORE [=n]
Selected by [m]:
- DRM_XE_DISPLAY [=y] && HAS_IOMEM [=y] && DRM [=y] && DRM_XE [=m] && DRM_XE [=m]=m [=m]
WARNING: unmet direct dependencies detected for FB_IOMEM_HELPERS
Depends on [n]: HAS_IOMEM [=y] && FB_CORE [=n]
Selected by [m]:
- DRM_XE_DISPLAY [=y] && HAS_IOMEM [=y] && DRM [=y] && DRM_XE [=m] && DRM_XE [=m]=m [=m]
WARNING: unmet direct dependencies detected for FB_IOMEM_HELPERS
Depends on [n]: HAS_IOMEM [=y] && FB_CORE [=n]
Selected by [m]:
- DRM_XE_DISPLAY [=y] && HAS_IOMEM [=y] && DRM [=y] && DRM_XE [=m] && DRM_XE [=m]=m [=m]
GEN Makefile
UPD include/generated/uapi/linux/version.h
WRAP arch/x86/include/generated/uapi/asm/bpf_perf_event.h
WRAP arch/x86/include/generated/uapi/asm/errno.h
WRAP arch/x86/include/generated/uapi/asm/fcntl.h
WRAP arch/x86/include/generated/uapi/asm/ioctl.h
WRAP arch/x86/include/generated/uapi/asm/ioctls.h
WRAP arch/x86/include/generated/uapi/asm/ipcbuf.h
WRAP arch/x86/include/generated/uapi/asm/param.h
WRAP arch/x86/include/generated/uapi/asm/poll.h
WRAP arch/x86/include/generated/uapi/asm/resource.h
WRAP arch/x86/include/generated/uapi/asm/sockios.h
WRAP arch/x86/include/generated/uapi/asm/socket.h
SYSHDR arch/x86/include/generated/uapi/asm/unistd_32.h
SYSHDR arch/x86/include/generated/uapi/asm/unistd_64.h
WRAP arch/x86/include/generated/uapi/asm/termbits.h
SYSHDR arch/x86/include/generated/uapi/asm/unistd_x32.h
WRAP arch/x86/include/generated/uapi/asm/termios.h
SYSTBL arch/x86/include/generated/asm/syscalls_32.h
WRAP arch/x86/include/generated/uapi/asm/types.h
HOSTCC arch/x86/tools/relocs_32.o
WRAP arch/x86/include/generated/asm/mcs_spinlock.h
WRAP arch/x86/include/generated/asm/early_ioremap.h
WRAP arch/x86/include/generated/asm/irq_regs.h
WRAP arch/x86/include/generated/asm/kmap_size.h
HOSTCC arch/x86/tools/relocs_64.o
UPD include/generated/compile.h
WRAP arch/x86/include/generated/asm/local64.h
WRAP arch/x86/include/generated/asm/mmiowb.h
WRAP arch/x86/include/generated/asm/module.lds.h
WRAP arch/x86/include/generated/asm/rwonce.h
HOSTCC arch/x86/tools/relocs_common.o
WRAP arch/x86/include/generated/asm/unaligned.h
HOSTCC scripts/kallsyms
HOSTCC scripts/sorttable
HOSTCC scripts/asn1_compiler
HOSTCC scripts/selinux/mdp/mdp
HOSTCC scripts/selinux/genheaders/genheaders
HOSTLD arch/x86/tools/relocs
UPD include/config/kernel.release
UPD include/generated/utsrelease.h
CC scripts/mod/empty.o
HOSTCC scripts/mod/mk_elfconfig
CC scripts/mod/devicetable-offsets.s
UPD scripts/mod/devicetable-offsets.h
MKELF scripts/mod/elfconfig.h
HOSTCC scripts/mod/modpost.o
HOSTCC scripts/mod/file2alias.o
HOSTCC scripts/mod/sumversion.o
HOSTCC scripts/mod/symsearch.o
HOSTLD scripts/mod/modpost
CC kernel/bounds.s
CHKSHA1 /workspace/kernel/include/linux/atomic/atomic-arch-fallback.h
CHKSHA1 /workspace/kernel/include/linux/atomic/atomic-instrumented.h
CHKSHA1 /workspace/kernel/include/linux/atomic/atomic-long.h
UPD include/generated/timeconst.h
UPD include/generated/bounds.h
CC arch/x86/kernel/asm-offsets.s
UPD include/generated/asm-offsets.h
CALL /workspace/kernel/scripts/checksyscalls.sh
LDS scripts/module.lds
CC ipc/util.o
CC init/main.o
CC ipc/msgutil.o
CC ipc/msg.o
CC ipc/sem.o
CC ipc/shm.o
HOSTCC usr/gen_init_cpio
CC security/commoncap.o
CC init/do_mounts.o
CC security/lsm_syscalls.o
CC ipc/syscall.o
CC security/min_addr.o
UPD init/utsversion-tmp.h
CC ipc/ipc_sysctl.o
CC security/security.o
CC certs/system_keyring.o
CC io_uring/io_uring.o
CC mm/filemap.o
CC security/lsm_audit.o
CC ipc/mqueue.o
CC io_uring/opdef.o
CC security/device_cgroup.o
CC init/do_mounts_initrd.o
AS arch/x86/lib/atomic64_cx8_32.o
AS arch/x86/lib/checksum_32.o
CC ipc/namespace.o
CC block/bdev.o
CC mm/mempool.o
CC arch/x86/power/cpu.o
CC arch/x86/pci/i386.o
CC security/integrity/iint.o
CC arch/x86/video/video-common.o
AR virt/lib/built-in.a
CC arch/x86/realmode/init.o
GEN security/selinux/flask.h security/selinux/av_permissions.h
CC block/partitions/core.o
CC security/keys/gc.o
AR drivers/cache/built-in.a
CC lib/math/div64.o
CC fs/notify/dnotify/dnotify.o
CC arch/x86/events/amd/core.o
CC net/core/sock.o
AR virt/built-in.a
CC fs/notify/inotify/inotify_fsnotify.o
CC arch/x86/mm/pat/set_memory.o
CC arch/x86/kernel/fpu/init.o
CC sound/core/seq/seq.o
CC fs/notify/inotify/inotify_user.o
CC arch/x86/lib/cmdline.o
AR drivers/irqchip/built-in.a
CC security/selinux/avc.o
CC arch/x86/entry/vdso/vma.o
CC init/initramfs.o
AR drivers/bus/mhi/built-in.a
CC kernel/sched/core.o
AR drivers/bus/built-in.a
CC crypto/asymmetric_keys/asymmetric_type.o
AR drivers/pwm/built-in.a
CC lib/math/gcd.o
CC drivers/pci/msi/pcidev_msi.o
AS arch/x86/lib/cmpxchg8b_emu.o
CC arch/x86/lib/cpu.o
CC lib/math/lcm.o
CC lib/math/int_log.o
GEN usr/initramfs_data.cpio
COPY usr/initramfs_inc_data
AS usr/initramfs_data.o
HOSTCC certs/extract-cert
CC arch/x86/kernel/fpu/bugs.o
AR usr/built-in.a
CC lib/math/int_pow.o
CC security/selinux/hooks.o
CC lib/math/int_sqrt.o
CC arch/x86/kernel/fpu/core.o
CC ipc/mq_sysctl.o
CC lib/math/reciprocal_div.o
CC lib/crypto/mpi/generic_mpih-lshift.o
CC lib/zlib_inflate/inffast.o
CC sound/core/seq/seq_lock.o
AR arch/x86/video/built-in.a
AS arch/x86/realmode/rm/header.o
CC lib/zlib_deflate/deflate.o
CC arch/x86/lib/delay.o
AS arch/x86/realmode/rm/trampoline_32.o
CC lib/math/rational.o
CERT certs/x509_certificate_list
CERT certs/signing_key.x509
AS certs/system_certificates.o
AS arch/x86/realmode/rm/stack.o
CC lib/zlib_deflate/deftree.o
CC security/integrity/integrity_audit.o
CC fs/nfs_common/nfsacl.o
AR certs/built-in.a
AS arch/x86/realmode/rm/reboot.o
AS arch/x86/lib/getuser.o
CC arch/x86/pci/init.o
CC fs/nfs_common/grace.o
AS arch/x86/realmode/rm/wakeup_asm.o
CC lib/zlib_deflate/deflate_syms.o
CC lib/zlib_inflate/inflate.o
CC fs/iomap/trace.o
CC fs/iomap/iter.o
AR arch/x86/crypto/built-in.a
CC arch/x86/realmode/rm/wakemain.o
CC arch/x86/realmode/rm/video-mode.o
AR fs/notify/dnotify/built-in.a
CC drivers/pci/msi/api.o
AS arch/x86/realmode/rm/copy.o
CC arch/x86/entry/vdso/extable.o
CC crypto/asymmetric_keys/restrict.o
CC arch/x86/power/hibernate_32.o
CC arch/x86/kernel/fpu/regset.o
AR fs/notify/fanotify/built-in.a
AS arch/x86/power/hibernate_asm_32.o
CC block/partitions/msdos.o
CC security/keys/key.o
CC fs/quota/dquot.o
CC block/partitions/efi.o
AS arch/x86/realmode/rm/bioscall.o
CC arch/x86/realmode/rm/regs.o
CC fs/proc/task_mmu.o
GEN arch/x86/lib/inat-tables.c
AR fs/notify/inotify/built-in.a
CC arch/x86/realmode/rm/video-vga.o
CC fs/notify/fsnotify.o
CC sound/core/seq/seq_clientmgr.o
CC arch/x86/lib/insn-eval.o
AR lib/math/built-in.a
CC fs/proc/inode.o
CC sound/core/seq/seq_memory.o
CC lib/crypto/mpi/generic_mpih-mul1.o
CC arch/x86/realmode/rm/video-vesa.o
CC fs/kernfs/mount.o
CC fs/kernfs/inode.o
CC drivers/video/console/dummycon.o
AR drivers/idle/built-in.a
AR drivers/char/ipmi/built-in.a
CC init/calibrate.o
CC arch/x86/kernel/fpu/signal.o
CC block/fops.o
CC lib/crypto/mpi/generic_mpih-mul2.o
CC arch/x86/realmode/rm/video-bios.o
CC arch/x86/events/amd/lbr.o
CC fs/notify/notification.o
CC lib/crypto/mpi/generic_mpih-mul3.o
AR sound/i2c/other/built-in.a
CC crypto/asymmetric_keys/signature.o
PASYMS arch/x86/realmode/rm/pasyms.h
AR sound/i2c/built-in.a
LDS arch/x86/realmode/rm/realmode.lds
LD arch/x86/realmode/rm/realmode.elf
RELOCS arch/x86/realmode/rm/realmode.relocs
OBJCOPY arch/x86/realmode/rm/realmode.bin
AS arch/x86/realmode/rmpiggy.o
CC drivers/acpi/acpica/dsargs.o
CC arch/x86/mm/pat/memtype.o
AR arch/x86/realmode/built-in.a
CC lib/zlib_inflate/infutil.o
CC arch/x86/pci/pcbios.o
CC drivers/acpi/acpica/dscontrol.o
AR security/integrity/built-in.a
CC block/bio.o
CC sound/core/sound.o
CC sound/core/init.o
AR fs/nfs_common/built-in.a
CC init/init_task.o
CC arch/x86/pci/mmconfig_32.o
CC fs/kernfs/dir.o
AR lib/zlib_deflate/built-in.a
CC fs/proc/root.o
CC drivers/pci/msi/msi.o
CC arch/x86/power/hibernate.o
CC drivers/video/backlight/backlight.o
AR ipc/built-in.a
CC sound/core/seq/seq_queue.o
CC arch/x86/kernel/fpu/xstate.o
AR drivers/acpi/pmic/built-in.a
AR drivers/video/fbdev/core/built-in.a
CC drivers/acpi/dptf/int340x_thermal.o
AR drivers/video/fbdev/omap/built-in.a
LDS arch/x86/entry/vdso/vdso32/vdso32.lds
AS arch/x86/entry/vdso/vdso32/note.o
CC drivers/acpi/x86/apple.o
AR drivers/video/fbdev/omap2/omapfb/dss/built-in.a
AS arch/x86/entry/vdso/vdso32/system_call.o
CC lib/zlib_inflate/inftrees.o
CC drivers/video/console/vgacon.o
AR drivers/video/fbdev/omap2/omapfb/displays/built-in.a
CC drivers/acpi/x86/cmos_rtc.o
AR drivers/video/fbdev/omap2/omapfb/built-in.a
AS arch/x86/entry/vdso/vdso32/sigreturn.o
CC drivers/acpi/acpica/dsdebug.o
CC arch/x86/entry/vdso/vdso32/vclock_gettime.o
AR drivers/video/fbdev/omap2/built-in.a
AR drivers/video/fbdev/built-in.a
CC init/version.o
AR block/partitions/built-in.a
CC drivers/acpi/acpica/dsfield.o
CC drivers/acpi/acpica/dsinit.o
CC crypto/asymmetric_keys/public_key.o
CC drivers/acpi/acpica/dsmethod.o
CC block/elevator.o
CC drivers/acpi/x86/lpss.o
CC lib/crypto/mpi/generic_mpih-rshift.o
CC arch/x86/lib/insn.o
CC drivers/acpi/x86/s2idle.o
CC arch/x86/mm/init.o
CC security/keys/keyring.o
CC lib/zlib_inflate/inflate_syms.o
CC fs/notify/group.o
CC fs/iomap/buffered-io.o
CC arch/x86/mm/init_32.o
CC drivers/acpi/tables.o
CC drivers/acpi/osi.o
CC arch/x86/events/amd/ibs.o
CC arch/x86/kernel/cpu/mce/core.o
CC arch/x86/kernel/acpi/boot.o
CC arch/x86/pci/direct.o
AR drivers/acpi/dptf/built-in.a
AR init/built-in.a
CC arch/x86/kernel/acpi/sleep.o
CC arch/x86/kernel/cpu/mce/severity.o
CC arch/x86/kernel/cpu/mce/genpool.o
CC arch/x86/lib/kaslr.o
AS arch/x86/kernel/acpi/wakeup_32.o
CC drivers/acpi/acpica/dsmthdat.o
CC arch/x86/kernel/acpi/cstate.o
AR arch/x86/power/built-in.a
CC drivers/acpi/x86/utils.o
CC arch/x86/mm/fault.o
CC arch/x86/mm/pat/memtype_interval.o
CC arch/x86/events/amd/uncore.o
CC drivers/pci/msi/irqdomain.o
CC io_uring/kbuf.o
AR lib/zlib_inflate/built-in.a
CC security/selinux/selinuxfs.o
CC sound/core/seq/seq_fifo.o
CC arch/x86/kernel/cpu/mce/intel.o
CC arch/x86/kernel/apic/apic.o
CC net/ethernet/eth.o
CC lib/crypto/mpi/generic_mpih-sub1.o
CC arch/x86/lib/memcpy_32.o
CC arch/x86/entry/vdso/vdso32/vgetcpu.o
AR drivers/video/backlight/built-in.a
CC lib/crypto/mpi/generic_mpih-add1.o
ASN.1 crypto/asymmetric_keys/x509.asn1.[ch]
AS arch/x86/lib/memmove_32.o
ASN.1 crypto/asymmetric_keys/x509_akid.asn1.[ch]
CC fs/sysfs/file.o
CC crypto/asymmetric_keys/x509_loader.o
HOSTCC arch/x86/entry/vdso/vdso2c
CC arch/x86/lib/misc.o
CC drivers/acpi/x86/blacklist.o
CC sound/core/memory.o
CC arch/x86/lib/pc-conf-reg.o
CC drivers/acpi/osl.o
CC fs/notify/mark.o
CC fs/proc/base.o
CC fs/kernfs/file.o
CC drivers/acpi/acpica/dsobject.o
CC crypto/asymmetric_keys/x509_public_key.o
AS arch/x86/lib/putuser.o
AS arch/x86/lib/retpoline.o
CC arch/x86/lib/string_32.o
CC arch/x86/kernel/apic/apic_common.o
AR drivers/video/console/built-in.a
ASN.1 crypto/asymmetric_keys/pkcs7.asn1.[ch]
CC fs/devpts/inode.o
CC arch/x86/lib/strstr_32.o
CC arch/x86/kernel/cpu/mce/amd.o
CC drivers/video/aperture.o
CC sound/core/seq/seq_prioq.o
CC fs/quota/quota_v2.o
AR arch/x86/kernel/fpu/built-in.a
CC arch/x86/kernel/cpu/mce/threshold.o
CC crypto/api.o
CC arch/x86/lib/usercopy.o
CC arch/x86/pci/mmconfig-shared.o
CC fs/netfs/buffered_read.o
AR arch/x86/mm/pat/built-in.a
CC arch/x86/entry/vdso/vdso32-setup.o
CC drivers/acpi/acpica/dsopcode.o
CC fs/ext4/balloc.o
CC drivers/acpi/acpica/dspkginit.o
CC sound/core/seq/seq_timer.o
CC drivers/pnp/pnpacpi/core.o
CC lib/lzo/lzo1x_compress.o
CC lib/lz4/lz4_decompress.o
AR drivers/pci/msi/built-in.a
CC lib/zstd/zstd_decompress_module.o
AR drivers/acpi/x86/built-in.a
CC lib/crypto/mpi/ec.o
CC drivers/pnp/pnpacpi/rsparser.o
CC drivers/pci/pcie/portdrv.o
CC mm/oom_kill.o
CC security/keys/keyctl.o
CC net/core/request_sock.o
CC drivers/pci/pcie/rcec.o
CC arch/x86/lib/usercopy_32.o
CC drivers/video/cmdline.o
CC block/blk-core.o
CC lib/zstd/decompress/huf_decompress.o
VDSO arch/x86/entry/vdso/vdso32.so.dbg
AR arch/x86/kernel/acpi/built-in.a
OBJCOPY arch/x86/entry/vdso/vdso32.so
CC fs/proc/generic.o
VDSO2C arch/x86/entry/vdso/vdso-image-32.c
CC arch/x86/entry/vdso/vdso-image-32.o
CC fs/sysfs/dir.o
CC crypto/asymmetric_keys/pkcs7_trust.o
CC crypto/cipher.o
CC drivers/acpi/utils.o
AR arch/x86/events/amd/built-in.a
CC drivers/acpi/acpica/dsutils.o
CC security/keys/permission.o
CC arch/x86/events/intel/core.o
CC arch/x86/mm/ioremap.o
CC lib/zstd/decompress/zstd_ddict.o
CC lib/crypto/mpi/mpicoder.o
CC arch/x86/lib/msr-smp.o
CC fs/quota/quota_tree.o
CC lib/lzo/lzo1x_decompress_safe.o
AR arch/x86/entry/vdso/built-in.a
AR fs/devpts/built-in.a
AR arch/x86/entry/vsyscall/built-in.a
AS arch/x86/entry/entry.o
CC security/keys/process_keys.o
AR drivers/pci/pwrctl/built-in.a
CC io_uring/rsrc.o
CC fs/notify/fdinfo.o
AS arch/x86/entry/entry_32.o
CC drivers/pci/hotplug/pci_hotplug_core.o
CC lib/zstd/decompress/zstd_decompress.o
CC fs/kernfs/symlink.o
CC arch/x86/entry/syscall_32.o
CC crypto/asymmetric_keys/pkcs7_verify.o
AR net/ethernet/built-in.a
CC drivers/pci/hotplug/acpi_pcihp.o
CC kernel/sched/fair.o
AR drivers/amba/built-in.a
CC kernel/sched/build_policy.o
CC arch/x86/lib/cache-smp.o
CC sound/core/seq/seq_system.o
CC fs/sysfs/symlink.o
CC arch/x86/pci/fixup.o
AR drivers/pci/controller/dwc/built-in.a
CC arch/x86/pci/acpi.o
AR drivers/pci/controller/mobiveil/built-in.a
CC io_uring/notif.o
AR drivers/pci/controller/plda/built-in.a
AR drivers/pci/controller/built-in.a
CC drivers/pci/pcie/aspm.o
CC io_uring/tctx.o
CC drivers/acpi/acpica/dswexec.o
AR drivers/pci/switch/built-in.a
CC drivers/video/nomodeset.o
CC drivers/pci/pcie/pme.o
CC fs/iomap/direct-io.o
CC arch/x86/lib/msr.o
AR drivers/pnp/pnpacpi/built-in.a
CC arch/x86/kernel/cpu/mtrr/mtrr.o
AR lib/lzo/built-in.a
CC drivers/pnp/core.o
CC arch/x86/kernel/cpu/mtrr/if.o
CC drivers/pnp/card.o
CC block/blk-sysfs.o
CC fs/netfs/buffered_write.o
CC security/selinux/netlink.o
CC fs/proc/array.o
CC drivers/acpi/reboot.o
CC net/core/skbuff.o
CC crypto/asymmetric_keys/x509.asn1.o
CC arch/x86/kernel/apic/apic_noop.o
AR lib/lz4/built-in.a
CC drivers/acpi/nvs.o
CC crypto/asymmetric_keys/x509_akid.asn1.o
CC arch/x86/kernel/cpu/microcode/core.o
CC crypto/asymmetric_keys/x509_cert_parser.o
CC arch/x86/mm/extable.o
AR fs/notify/built-in.a
CC arch/x86/kernel/cpu/microcode/intel.o
CC drivers/video/hdmi.o
CC arch/x86/kernel/cpu/mtrr/generic.o
AR fs/kernfs/built-in.a
CC drivers/acpi/acpica/dswload.o
CC lib/crypto/mpi/mpi-add.o
CC sound/core/seq/seq_ports.o
CC fs/quota/quota.o
CC fs/sysfs/mount.o
AR arch/x86/kernel/cpu/mce/built-in.a
CC security/keys/request_key.o
CC arch/x86/kernel/cpu/cacheinfo.o
CC lib/crypto/mpi/mpi-bit.o
AR drivers/pci/hotplug/built-in.a
CC drivers/pci/access.o
CC fs/proc/fd.o
CC sound/core/control.o
CC arch/x86/kernel/cpu/microcode/amd.o
CC fs/jbd2/transaction.o
CC arch/x86/kernel/apic/ipi.o
CC lib/xz/xz_dec_syms.o
CC lib/zstd/decompress/zstd_decompress_block.o
CC lib/zstd/zstd_common_module.o
CC lib/dim/dim.o
CC mm/fadvise.o
CC security/keys/request_key_auth.o
CC drivers/acpi/acpica/dswload2.o
CC lib/dim/net_dim.o
CC drivers/pnp/driver.o
CC arch/x86/kernel/apic/vector.o
AS arch/x86/lib/msr-reg.o
CC arch/x86/pci/legacy.o
CC crypto/asymmetric_keys/pkcs7.asn1.o
CC arch/x86/lib/msr-reg-export.o
CC fs/ext4/bitmap.o
CC arch/x86/entry/common.o
CC crypto/asymmetric_keys/pkcs7_parser.o
CC fs/ramfs/inode.o
CC fs/hugetlbfs/inode.o
CC net/core/datagram.o
CC security/selinux/nlmsgtab.o
CC lib/xz/xz_dec_stream.o
CC io_uring/filetable.o
CC crypto/compress.o
CC io_uring/rw.o
CC block/blk-flush.o
AS arch/x86/lib/hweight.o
CC arch/x86/lib/iomem.o
CC lib/zstd/common/debug.o
CC lib/zstd/common/entropy_common.o
AR drivers/pci/pcie/built-in.a
AR drivers/video/built-in.a
CC fs/iomap/fiemap.o
CC fs/iomap/seek.o
CC kernel/sched/build_utility.o
AR drivers/clk/actions/built-in.a
CC arch/x86/mm/mmap.o
CC drivers/dma/dw/core.o
CC sound/core/seq/seq_info.o
AR drivers/clk/analogbits/built-in.a
CC fs/sysfs/group.o
CC lib/crypto/mpi/mpi-cmp.o
AR drivers/clk/bcm/built-in.a
CC io_uring/net.o
CC drivers/dma/dw/dw.o
CC drivers/acpi/acpica/dswscope.o
AR drivers/clk/imgtec/built-in.a
CC fs/netfs/direct_read.o
AR drivers/clk/imx/built-in.a
AR drivers/clk/ingenic/built-in.a
CC drivers/dma/dw/idma32.o
CC fs/netfs/direct_write.o
AR drivers/clk/mediatek/built-in.a
CC fs/jbd2/commit.o
AR drivers/clk/microchip/built-in.a
AR drivers/clk/mstar/built-in.a
CC fs/proc/proc_tty.o
CC arch/x86/kernel/cpu/mtrr/cleanup.o
AR drivers/clk/mvebu/built-in.a
CC drivers/pnp/resource.o
AR drivers/clk/ralink/built-in.a
AR drivers/clk/renesas/built-in.a
CC security/keys/user_defined.o
AR drivers/clk/socfpga/built-in.a
CC drivers/pci/bus.o
AR drivers/clk/sophgo/built-in.a
AR crypto/asymmetric_keys/built-in.a
CC fs/proc/cmdline.o
CC arch/x86/kernel/cpu/mtrr/amd.o
AR drivers/clk/sprd/built-in.a
AR drivers/clk/starfive/built-in.a
AR drivers/clk/sunxi-ng/built-in.a
AR arch/x86/kernel/cpu/microcode/built-in.a
CC fs/netfs/io.o
CC arch/x86/pci/irq.o
AR drivers/clk/ti/built-in.a
AR drivers/clk/versatile/built-in.a
CC arch/x86/lib/atomic64_32.o
CC fs/quota/kqid.o
AR drivers/clk/xilinx/built-in.a
AR drivers/clk/built-in.a
CC mm/maccess.o
CC lib/xz/xz_dec_lzma2.o
CC drivers/acpi/acpica/dswstate.o
CC fs/fat/cache.o
CC arch/x86/lib/inat.o
CC crypto/algapi.o
CC fs/ext4/block_validity.o
AS arch/x86/entry/thunk.o
CC fs/ramfs/file-mmu.o
CC sound/core/seq/seq_dummy.o
AR arch/x86/entry/built-in.a
AR arch/x86/lib/built-in.a
CC lib/dim/rdma_dim.o
AR arch/x86/lib/lib.a
AR arch/x86/platform/atom/built-in.a
CC fs/fat/dir.o
CC arch/x86/mm/pgtable.o
CC lib/crypto/mpi/mpi-sub-ui.o
AR arch/x86/platform/ce4100/built-in.a
CC arch/x86/platform/efi/memmap.o
CC fs/fat/fatent.o
CC arch/x86/platform/efi/quirks.o
AR fs/sysfs/built-in.a
CC fs/iomap/swapfile.o
CC arch/x86/platform/efi/efi.o
CC block/blk-settings.o
CC security/selinux/netif.o
AR arch/x86/platform/geode/built-in.a
CC fs/fat/file.o
AR arch/x86/platform/iris/built-in.a
CC sound/core/misc.o
CC lib/crypto/mpi/mpi-div.o
CC fs/ext4/dir.o
CC fs/proc/consoles.o
CC security/keys/proc.o
CC fs/quota/netlink.o
CC fs/ext4/ext4_jbd2.o
CC drivers/acpi/acpica/evevent.o
CC arch/x86/kernel/cpu/mtrr/cyrix.o
CC drivers/pci/probe.o
CC drivers/acpi/acpica/evgpe.o
CC lib/fonts/fonts.o
AR lib/dim/built-in.a
CC lib/fonts/font_8x16.o
AR fs/hugetlbfs/built-in.a
CC security/keys/sysctl.o
CC drivers/dma/dw/acpi.o
CC lib/xz/xz_dec_bcj.o
CC arch/x86/mm/physaddr.o
CC mm/page-writeback.o
AR sound/core/seq/built-in.a
CC mm/folio-compat.o
AR fs/ramfs/built-in.a
CC lib/zstd/common/error_private.o
AR net/802/built-in.a
CC drivers/acpi/acpica/evgpeblk.o
CC drivers/pnp/manager.o
CC security/keys/keyctl_pkey.o
CC arch/x86/events/zhaoxin/core.o
CC fs/fat/inode.o
CC drivers/acpi/acpica/evgpeinit.o
CC fs/ext4/extents.o
CC arch/x86/events/intel/bts.o
CC arch/x86/kernel/apic/init.o
CC fs/proc/cpuinfo.o
CC arch/x86/events/intel/ds.o
CC arch/x86/kernel/apic/hw_nmi.o
CC drivers/acpi/acpica/evgpeutil.o
CC lib/zstd/common/fse_decompress.o
AR lib/fonts/built-in.a
CC lib/crypto/mpi/mpi-inv.o
CC drivers/pnp/support.o
CC arch/x86/pci/common.o
AR fs/iomap/built-in.a
CC arch/x86/mm/tlb.o
CC drivers/pci/host-bridge.o
CC fs/jbd2/recovery.o
CC sound/core/device.o
AR drivers/soc/apple/built-in.a
AR drivers/soc/aspeed/built-in.a
CC arch/x86/kernel/cpu/mtrr/centaur.o
AR drivers/soc/bcm/built-in.a
AR drivers/soc/fsl/built-in.a
CC fs/proc/devices.o
AR drivers/soc/fujitsu/built-in.a
AR drivers/soc/hisilicon/built-in.a
AR lib/xz/built-in.a
CC fs/netfs/iterator.o
CC sound/core/info.o
AR drivers/soc/imx/built-in.a
CC sound/core/isadma.o
AR drivers/soc/ixp4xx/built-in.a
CC block/blk-ioc.o
AR drivers/soc/loongson/built-in.a
CC lib/zstd/common/zstd_common.o
CC crypto/scatterwalk.o
AR drivers/soc/mediatek/built-in.a
AR fs/quota/built-in.a
CC crypto/proc.o
CC fs/proc/interrupts.o
CC lib/argv_split.o
CC arch/x86/platform/efi/efi_32.o
CC net/sched/sch_generic.o
AR drivers/soc/microchip/built-in.a
AR drivers/soc/nuvoton/built-in.a
CC drivers/virtio/virtio.o
AR drivers/soc/pxa/built-in.a
CC arch/x86/kernel/cpu/scattered.o
AR drivers/dma/dw/built-in.a
AR drivers/soc/amlogic/built-in.a
CC drivers/virtio/virtio_ring.o
CC fs/fat/misc.o
AR drivers/soc/qcom/built-in.a
CC drivers/dma/hsu/hsu.o
CC arch/x86/kernel/apic/io_apic.o
AR drivers/soc/renesas/built-in.a
CC drivers/acpi/acpica/evglock.o
AR drivers/soc/rockchip/built-in.a
CC arch/x86/kernel/cpu/topology_common.o
AR drivers/soc/sunxi/built-in.a
CC io_uring/poll.o
AR drivers/soc/ti/built-in.a
AR drivers/soc/xilinx/built-in.a
CC fs/proc/loadavg.o
AR drivers/soc/built-in.a
AR security/keys/built-in.a
CC io_uring/eventfd.o
CC drivers/pnp/interface.o
CC drivers/pnp/quirks.o
AR lib/zstd/built-in.a
CC arch/x86/kernel/cpu/mtrr/legacy.o
CC arch/x86/kernel/apic/msi.o
CC arch/x86/events/core.o
CC security/selinux/netnode.o
CC arch/x86/events/probe.o
CC drivers/pci/remove.o
CC arch/x86/mm/cpu_entry_area.o
CC lib/crypto/mpi/mpi-mod.o
CC arch/x86/mm/maccess.o
CC arch/x86/events/utils.o
CC drivers/pci/pci.o
CC drivers/pnp/system.o
AR arch/x86/events/zhaoxin/built-in.a
CC arch/x86/events/rapl.o
CC drivers/pci/pci-driver.o
CC security/selinux/netport.o
CC drivers/acpi/acpica/evhandler.o
CC drivers/acpi/acpica/evmisc.o
CC crypto/aead.o
CC arch/x86/pci/early.o
AR arch/x86/net/built-in.a
CC fs/fat/nfs.o
AR arch/x86/kernel/cpu/mtrr/built-in.a
CC fs/fat/namei_vfat.o
CC arch/x86/kernel/cpu/topology_ext.o
CC drivers/pci/search.o
AS arch/x86/platform/efi/efi_stub_32.o
CC block/blk-map.o
CC arch/x86/platform/efi/runtime-map.o
CC arch/x86/events/msr.o
CC fs/jbd2/checkpoint.o
CC fs/jbd2/revoke.o
CC sound/core/vmaster.o
CC fs/proc/meminfo.o
CC lib/crypto/mpi/mpi-mul.o
CC crypto/geniv.o
CC drivers/tty/vt/vt_ioctl.o
CC fs/netfs/locking.o
CC security/selinux/status.o
CC security/selinux/ss/ebitmap.o
CC drivers/virtio/virtio_anchor.o
AR drivers/dma/hsu/built-in.a
CC fs/fat/namei_msdos.o
CC drivers/tty/vt/vc_screen.o
AR drivers/dma/idxd/built-in.a
AR drivers/dma/mediatek/built-in.a
AR drivers/pnp/built-in.a
CC block/blk-merge.o
AR drivers/dma/qcom/built-in.a
AR drivers/dma/stm32/built-in.a
CC lib/crypto/mpi/mpih-cmp.o
CC block/blk-timeout.o
AR drivers/dma/xilinx/built-in.a
AR drivers/dma/ti/built-in.a
CC drivers/acpi/acpica/evregion.o
CC lib/crypto/mpi/mpih-div.o
CC drivers/dma/dmaengine.o
CC arch/x86/mm/pgprot.o
CC sound/core/ctljack.o
CC fs/netfs/main.o
CC arch/x86/kernel/cpu/topology_amd.o
CC arch/x86/kernel/cpu/common.o
CC arch/x86/pci/bus_numa.o
AR arch/x86/virt/svm/built-in.a
CC mm/readahead.o
AR arch/x86/virt/vmx/built-in.a
AR arch/x86/virt/built-in.a
CC drivers/tty/hvc/hvc_console.o
CC mm/swap.o
CC drivers/pci/rom.o
CC arch/x86/events/intel/knc.o
CC block/blk-lib.o
CC drivers/acpi/acpica/evrgnini.o
CC fs/isofs/namei.o
CC fs/isofs/inode.o
CC security/selinux/ss/hashtab.o
AR arch/x86/platform/efi/built-in.a
CC fs/nfs/client.o
CC fs/proc/stat.o
CC arch/x86/platform/intel/iosf_mbi.o
CC sound/core/jack.o
CC drivers/virtio/virtio_pci_modern_dev.o
CC drivers/pci/setup-res.o
CC arch/x86/pci/amd_bus.o
CC crypto/lskcipher.o
CC fs/nfs/dir.o
CC crypto/skcipher.o
CC drivers/tty/serial/8250/8250_core.o
CC net/core/stream.o
CC arch/x86/mm/pgtable_32.o
CC drivers/tty/serial/8250/8250_platform.o
CC net/core/scm.o
CC io_uring/uring_cmd.o
CC crypto/seqiv.o
CC fs/jbd2/journal.o
CC drivers/tty/serial/8250/8250_pnp.o
CC security/selinux/ss/symtab.o
CC arch/x86/kernel/apic/probe_32.o
CC arch/x86/mm/iomap_32.o
CC drivers/tty/vt/selection.o
CC io_uring/openclose.o
AR fs/fat/built-in.a
CC lib/crypto/mpi/mpih-mul.o
CC net/core/gen_stats.o
CC drivers/acpi/acpica/evsci.o
CC fs/netfs/misc.o
CC block/blk-mq.o
CC security/selinux/ss/sidtab.o
AR kernel/sched/built-in.a
CC net/sched/sch_mq.o
CC block/blk-mq-tag.o
CC kernel/locking/mutex.o
CC block/blk-stat.o
CC fs/netfs/objects.o
CC fs/proc/uptime.o
CC fs/exportfs/expfs.o
CC security/selinux/ss/avtab.o
CC fs/nfs/file.o
CC arch/x86/events/intel/lbr.o
CC sound/core/timer.o
AR arch/x86/kernel/apic/built-in.a
CC sound/core/hrtimer.o
CC drivers/acpi/acpica/evxface.o
CC drivers/dma/virt-dma.o
AR drivers/tty/hvc/built-in.a
CC drivers/dma/acpi-dma.o
AR arch/x86/platform/intel/built-in.a
CC block/blk-mq-sysfs.o
CC fs/nfs/getroot.o
AR arch/x86/platform/intel-mid/built-in.a
AR arch/x86/platform/intel-quark/built-in.a
CC drivers/virtio/virtio_pci_legacy_dev.o
AR arch/x86/platform/olpc/built-in.a
AR arch/x86/pci/built-in.a
CC block/blk-mq-cpumap.o
AR arch/x86/platform/scx200/built-in.a
CC crypto/echainiv.o
CC lib/crypto/memneq.o
AR arch/x86/platform/ts5500/built-in.a
CC arch/x86/mm/hugetlbpage.o
CC security/selinux/ss/policydb.o
AR arch/x86/platform/uv/built-in.a
AR arch/x86/platform/built-in.a
CC drivers/pci/irq.o
CC drivers/tty/serial/8250/8250_rsa.o
AR drivers/tty/ipwireless/built-in.a
CC drivers/tty/tty_io.o
CC lib/crypto/utils.o
CC drivers/tty/vt/keyboard.o
CC mm/truncate.o
CC arch/x86/kernel/cpu/rdrand.o
CC lib/crypto/mpi/mpi-pow.o
CC fs/isofs/dir.o
CC fs/netfs/write_collect.o
CC fs/isofs/util.o
CC fs/proc/util.o
CC arch/x86/kernel/cpu/match.o
CC net/core/gen_estimator.o
CC mm/vmscan.o
CC drivers/acpi/wakeup.o
CC crypto/ahash.o
CC fs/netfs/write_issue.o
CC drivers/acpi/acpica/evxfevnt.o
AR fs/exportfs/built-in.a
CC crypto/shash.o
CC fs/isofs/rock.o
CC sound/core/seq_device.o
CC drivers/acpi/sleep.o
CC io_uring/sqpoll.o
CC drivers/acpi/acpica/evxfgpe.o
CC drivers/virtio/virtio_pci_modern.o
CC block/blk-mq-sched.o
CC drivers/tty/serial/serial_core.o
CC drivers/tty/serial/serial_base_bus.o
CC drivers/acpi/device_sysfs.o
CC [M] sound/core/hwdep.o
CC net/sched/sch_frag.o
AR drivers/dma/built-in.a
CC drivers/virtio/virtio_pci_common.o
CC arch/x86/mm/dump_pagetables.o
CC drivers/char/hw_random/core.o
AR drivers/iommu/amd/built-in.a
CC drivers/char/hw_random/intel-rng.o
AR drivers/iommu/intel/built-in.a
CC drivers/pci/vpd.o
AR drivers/gpu/host1x/built-in.a
CC arch/x86/kernel/cpu/bugs.o
AR drivers/iommu/arm/arm-smmu/built-in.a
CC drivers/tty/serial/8250/8250_port.o
AR drivers/iommu/arm/arm-smmu-v3/built-in.a
AR drivers/iommu/arm/built-in.a
AR drivers/gpu/vga/built-in.a
AR drivers/iommu/iommufd/built-in.a
CC drivers/iommu/iommu.o
CC drivers/connector/cn_queue.o
CC drivers/char/agp/backend.o
CC fs/proc/version.o
CC kernel/locking/semaphore.o
CC drivers/tty/n_tty.o
CC drivers/acpi/acpica/evxfregn.o
CC drivers/tty/tty_ioctl.o
AR drivers/gpu/drm/tests/built-in.a
CC drivers/char/agp/generic.o
CC drivers/tty/tty_ldisc.o
CC lib/crypto/mpi/mpiutil.o
AR drivers/gpu/drm/arm/built-in.a
CC drivers/gpu/drm/display/drm_display_helper_mod.o
CC drivers/acpi/acpica/exconcat.o
CC drivers/gpu/drm/display/drm_dp_dual_mode_helper.o
CC arch/x86/events/intel/p4.o
CC drivers/iommu/iommu-traces.o
CC drivers/virtio/virtio_pci_legacy.o
CC drivers/tty/serial/serial_ctrl.o
CC net/core/net_namespace.o
CC drivers/tty/serial/serial_port.o
CC fs/isofs/export.o
CC [M] sound/core/pcm.o
CC crypto/akcipher.o
CC crypto/sig.o
CC drivers/gpu/drm/ttm/ttm_tt.o
CC drivers/acpi/acpica/exconfig.o
CC drivers/char/agp/isoch.o
CC arch/x86/kernel/cpu/aperfmperf.o
CC fs/ext4/extents_status.o
CC fs/proc/softirqs.o
CC arch/x86/mm/highmem_32.o
CC fs/ext4/file.o
CC drivers/char/hw_random/amd-rng.o
CC drivers/char/agp/amd64-agp.o
CC drivers/pci/setup-bus.o
CC net/netlink/af_netlink.o
CC drivers/pci/vc.o
AR net/bpf/built-in.a
CC kernel/locking/rwsem.o
CC drivers/tty/vt/vt.o
CC drivers/virtio/virtio_pci_admin_legacy_io.o
AR fs/netfs/built-in.a
CC drivers/char/agp/intel-agp.o
AR lib/crypto/mpi/built-in.a
CC lib/crypto/chacha.o
CC drivers/pci/mmap.o
CC crypto/kpp.o
CC fs/ext4/fsmap.o
CC net/sched/sch_api.o
CC drivers/acpi/acpica/exconvrt.o
CC lib/crypto/aes.o
ASN.1 crypto/rsapubkey.asn1.[ch]
CC drivers/tty/serial/earlycon.o
CC drivers/connector/connector.o
CC drivers/gpu/drm/i915/i915_config.o
ASN.1 crypto/rsaprivkey.asn1.[ch]
CC drivers/gpu/drm/i915/i915_driver.o
CC io_uring/xattr.o
CC fs/isofs/joliet.o
CC drivers/gpu/drm/display/drm_dp_helper.o
AR fs/jbd2/built-in.a
CC kernel/locking/percpu-rwsem.o
CC net/core/secure_seq.o
CC drivers/gpu/drm/i915/i915_drm_client.o
CC fs/lockd/clntlock.o
CC fs/proc/namespaces.o
AR arch/x86/mm/built-in.a
CC fs/lockd/clntproc.o
CC drivers/char/agp/intel-gtt.o
CC net/core/flow_dissector.o
CC drivers/tty/tty_buffer.o
CC fs/nfs/inode.o
CC drivers/tty/tty_port.o
CC arch/x86/kernel/cpu/cpuid-deps.o
CC arch/x86/events/intel/p6.o
CC drivers/gpu/drm/ttm/ttm_bo.o
CC arch/x86/kernel/cpu/umwait.o
CC drivers/acpi/acpica/excreate.o
CC drivers/virtio/virtio_input.o
CC [M] sound/core/pcm_native.o
CC fs/nfs/super.o
CC drivers/char/hw_random/geode-rng.o
MKCAP arch/x86/kernel/cpu/capflags.c
CC arch/x86/kernel/cpu/powerflags.o
CC drivers/gpu/drm/ttm/ttm_bo_util.o
CC drivers/gpu/drm/i915/i915_getparam.o
CC drivers/tty/serial/8250/8250_dma.o
CC security/selinux/ss/services.o
CC drivers/gpu/drm/i915/i915_ioctl.o
CC lib/crypto/arc4.o
CC lib/crypto/gf128mul.o
CC drivers/char/mem.o
CC fs/ext4/fsync.o
CC [M] sound/core/pcm_lib.o
CC crypto/rsa.o
CC drivers/iommu/iommu-sysfs.o
CC drivers/acpi/acpica/exdebug.o
CC fs/isofs/compress.o
AR sound/drivers/opl3/built-in.a
CC kernel/locking/spinlock.o
AR sound/drivers/opl4/built-in.a
AR sound/drivers/mpu401/built-in.a
CC net/core/sysctl_net_core.o
AR sound/drivers/vx/built-in.a
CC drivers/iommu/dma-iommu.o
AR sound/drivers/pcsp/built-in.a
AR sound/drivers/built-in.a
CC drivers/acpi/acpica/exdump.o
CC fs/nls/nls_base.o
CC drivers/connector/cn_proc.o
CC fs/proc/self.o
CC block/ioctl.o
CC fs/nls/nls_cp437.o
CC io_uring/nop.o
CC arch/x86/events/intel/pt.o
CC drivers/char/hw_random/via-rng.o
CC kernel/locking/osq_lock.o
CC drivers/tty/tty_mutex.o
CC arch/x86/kernel/cpu/topology.o
CC arch/x86/events/intel/uncore.o
CC drivers/pci/devres.o
CC drivers/virtio/virtio_dma_buf.o
CC drivers/acpi/acpica/exfield.o
CC lib/crypto/blake2s.o
AR drivers/char/agp/built-in.a
CC arch/x86/events/intel/uncore_nhmex.o
CC mm/shrinker.o
CC drivers/gpu/drm/ttm/ttm_bo_vm.o
CC drivers/tty/serial/8250/8250_dwlib.o
CC net/core/dev.o
CC mm/shmem.o
CC arch/x86/events/intel/uncore_snb.o
CC kernel/locking/qspinlock.o
CC lib/crypto/blake2s-generic.o
CC crypto/rsa_helper.o
CC drivers/tty/tty_ldsem.o
CC fs/nls/nls_ascii.o
CC kernel/power/qos.o
CC kernel/printk/printk.o
CC crypto/rsa-pkcs1pad.o
CC kernel/irq/irqdesc.o
CC fs/nls/nls_iso8859-1.o
AR drivers/char/hw_random/built-in.a
CC fs/proc/thread_self.o
CC drivers/char/random.o
AR fs/isofs/built-in.a
CC kernel/printk/printk_safe.o
CC fs/lockd/clntxdr.o
CC net/ethtool/ioctl.o
CC drivers/acpi/acpica/exfldio.o
CC drivers/gpu/drm/i915/i915_irq.o
CC net/ethtool/common.o
AR drivers/virtio/built-in.a
CC net/ethtool/netlink.o
CC kernel/locking/rtmutex_api.o
CC fs/lockd/host.o
CC lib/crypto/sha1.o
CC net/netfilter/core.o
CC fs/nls/nls_utf8.o
CC net/netfilter/nf_log.o
CC drivers/gpu/drm/display/drm_dp_mst_topology.o
CC net/sched/sch_blackhole.o
CC block/genhd.o
CC block/ioprio.o
CC io_uring/fs.o
COPY drivers/tty/vt/defkeymap.c
CC drivers/tty/vt/consolemap.o
CC drivers/pci/proc.o
CC net/netlink/genetlink.o
CC drivers/tty/serial/8250/8250_pcilib.o
CC drivers/pci/pci-sysfs.o
AR drivers/connector/built-in.a
CC kernel/power/main.o
CC drivers/gpu/drm/ttm/ttm_module.o
CC net/netfilter/nf_queue.o
CC fs/proc/proc_sysctl.o
CC net/core/dev_addr_lists.o
CC kernel/irq/handle.o
CC kernel/irq/manage.o
CC drivers/acpi/acpica/exmisc.o
CC kernel/printk/nbcon.o
CC drivers/acpi/acpica/exmutex.o
CC lib/crypto/sha256.o
CC crypto/acompress.o
CC drivers/iommu/iova.o
AR fs/nls/built-in.a
CC net/sched/cls_api.o
CC fs/ext4/hash.o
CC fs/ext4/ialloc.o
CC arch/x86/events/intel/uncore_snbep.o
CC fs/ext4/indirect.o
CC net/ipv4/netfilter/nf_defrag_ipv4.o
CC kernel/power/console.o
CC net/ipv4/route.o
CC net/ipv4/netfilter/nf_reject_ipv4.o
CC drivers/acpi/acpica/exnames.o
CC drivers/gpu/drm/ttm/ttm_execbuf_util.o
CC drivers/gpu/drm/ttm/ttm_range_manager.o
CC drivers/tty/serial/8250/8250_early.o
CC kernel/locking/qrwlock.o
CC fs/lockd/svc.o
CC block/badblocks.o
CC net/sched/act_api.o
CC net/sched/sch_fifo.o
CC arch/x86/kernel/cpu/proc.o
AR lib/crypto/built-in.a
CC lib/bug.o
CC drivers/char/misc.o
HOSTCC drivers/tty/vt/conmakehash
CC [M] sound/core/pcm_misc.o
CC io_uring/splice.o
CC drivers/gpu/drm/i915/i915_mitigations.o
CC security/selinux/ss/conditional.o
CC net/netfilter/nf_sockopt.o
CC io_uring/sync.o
CC drivers/acpi/acpica/exoparg1.o
CC [M] sound/core/pcm_memory.o
CC drivers/tty/vt/defkeymap.o
CC crypto/scompress.o
CC net/netfilter/utils.o
CC drivers/acpi/acpica/exoparg2.o
CC kernel/power/process.o
AR sound/isa/ad1816a/built-in.a
AR drivers/iommu/built-in.a
AR sound/isa/ad1848/built-in.a
CC net/ethtool/bitset.o
AR sound/isa/cs423x/built-in.a
CC fs/nfs/io.o
AR kernel/locking/built-in.a
AR sound/isa/es1688/built-in.a
CC kernel/power/suspend.o
AR sound/isa/galaxy/built-in.a
CC drivers/pci/slot.o
AR sound/isa/gus/built-in.a
AR sound/isa/msnd/built-in.a
AR sound/isa/opti9xx/built-in.a
CC kernel/rcu/update.o
AR sound/isa/sb/built-in.a
CONMK drivers/tty/vt/consolemap_deftbl.c
CC drivers/tty/vt/consolemap_deftbl.o
AR sound/isa/wavefront/built-in.a
CC net/core/dst.o
AR sound/isa/wss/built-in.a
AR kernel/livepatch/built-in.a
AR drivers/tty/vt/built-in.a
AR sound/isa/built-in.a
CC drivers/gpu/drm/ttm/ttm_resource.o
CC net/netfilter/nfnetlink.o
CC kernel/rcu/sync.o
CC drivers/pci/pci-acpi.o
CC kernel/rcu/srcutree.o
CC mm/util.o
CC drivers/tty/serial/8250/8250_exar.o
CC kernel/printk/printk_ringbuffer.o
CC kernel/power/hibernate.o
CC lib/buildid.o
CC mm/mmzone.o
CC drivers/char/virtio_console.o
CC drivers/char/hpet.o
CC kernel/power/snapshot.o
CC kernel/irq/spurious.o
CC drivers/pci/iomap.o
CC drivers/pci/quirks.o
CC drivers/acpi/acpica/exoparg3.o
CC net/netlink/policy.o
CC fs/proc/proc_net.o
CC block/blk-rq-qos.o
CC fs/nfs/direct.o
CC net/netfilter/nfnetlink_log.o
CC fs/lockd/svclock.o
CC [M] sound/core/memalloc.o
CC io_uring/msg_ring.o
CC drivers/gpu/drm/i915/i915_module.o
CC net/ipv4/netfilter/ip_tables.o
CC kernel/rcu/tree.o
CC net/netfilter/nf_conntrack_core.o
CC kernel/printk/sysctl.o
CC drivers/acpi/acpica/exoparg6.o
CC crypto/algboss.o
CC crypto/testmgr.o
CC lib/clz_tab.o
CC kernel/irq/resend.o
CC lib/cmdline.o
CC drivers/gpu/drm/ttm/ttm_pool.o
AR kernel/printk/built-in.a
CC drivers/gpu/drm/ttm/ttm_device.o
CC lib/cpumask.o
CC drivers/tty/serial/8250/8250_lpss.o
AR sound/pci/ac97/built-in.a
CC lib/ctype.o
CC lib/dec_and_lock.o
AR sound/pci/ali5451/built-in.a
AR sound/pci/au88x0/built-in.a
AR sound/pci/asihpi/built-in.a
CC net/netfilter/nf_conntrack_standalone.o
CC lib/decompress.o
CC security/selinux/ss/mls.o
AR sound/pci/aw2/built-in.a
AR sound/pci/ctxfi/built-in.a
AR sound/pci/ca0106/built-in.a
CC mm/vmstat.o
CC net/netfilter/nf_conntrack_expect.o
CC lib/decompress_bunzip2.o
AR sound/pci/cs46xx/built-in.a
CC block/disk-events.o
AR sound/pci/cs5535audio/built-in.a
CC net/ethtool/strset.o
CC kernel/dma/mapping.o
AR sound/pci/lola/built-in.a
AR sound/pci/lx6464es/built-in.a
CC lib/decompress_inflate.o
CC drivers/acpi/acpica/exprep.o
AR sound/pci/echoaudio/built-in.a
CC lib/decompress_unlz4.o
CC fs/proc/kcore.o
AR sound/pci/emu10k1/built-in.a
CC [M] sound/core/pcm_timer.o
AR sound/pci/hda/built-in.a
CC [M] sound/pci/hda/hda_bind.o
CC net/ethtool/linkinfo.o
CC drivers/char/nvram.o
CC kernel/power/swap.o
CC arch/x86/events/intel/uncore_discovery.o
CC arch/x86/events/intel/cstate.o
AR net/netlink/built-in.a
CC fs/ext4/inline.o
CC drivers/gpu/drm/display/drm_dsc_helper.o
CC fs/ext4/inode.o
CC kernel/irq/chip.o
CC fs/ext4/ioctl.o
CC fs/proc/vmcore.o
AR sound/ppc/built-in.a
CC lib/decompress_unlzma.o
AR sound/pci/ice1712/built-in.a
CC drivers/gpu/drm/display/drm_hdcp_helper.o
CC drivers/tty/serial/8250/8250_mid.o
CC drivers/acpi/acpica/exregion.o
CC io_uring/advise.o
CC drivers/tty/serial/8250/8250_pci.o
CC net/sched/cls_cgroup.o
LD [M] sound/core/snd-hwdep.o
CC crypto/cmac.o
CC net/ethtool/linkmodes.o
CC net/ethtool/rss.o
CC drivers/acpi/acpica/exresnte.o
CC drivers/tty/tty_baudrate.o
CC drivers/gpu/drm/i915/i915_params.o
CC net/ethtool/linkstate.o
AR sound/core/built-in.a
LD [M] sound/core/snd-pcm.o
CC kernel/power/user.o
CC drivers/gpu/drm/ttm/ttm_sys_manager.o
CC fs/lockd/svcshare.o
CC drivers/gpu/drm/ttm/ttm_agp_backend.o
CC block/blk-ia-ranges.o
CC [M] sound/pci/hda/hda_codec.o
CC [M] sound/pci/hda/hda_jack.o
CC kernel/entry/common.o
CC drivers/gpu/drm/i915/i915_pci.o
AR drivers/char/built-in.a
AR sound/arm/built-in.a
CC net/netfilter/nf_conntrack_helper.o
CC drivers/acpi/acpica/exresolv.o
CC block/early-lookup.o
CC security/selinux/ss/context.o
CC kernel/dma/direct.o
CC crypto/hmac.o
CC drivers/gpu/drm/i915/i915_scatterlist.o
CC kernel/power/poweroff.o
CC drivers/gpu/drm/display/drm_hdmi_helper.o
CC net/ipv4/netfilter/iptable_filter.o
CC net/ipv4/netfilter/iptable_mangle.o
CC security/selinux/netlabel.o
CC kernel/dma/ops_helpers.o
CC lib/decompress_unlzo.o
CC kernel/irq/dummychip.o
CC drivers/pci/pci-label.o
CC lib/decompress_unxz.o
AR arch/x86/events/intel/built-in.a
AR arch/x86/events/built-in.a
CC crypto/crypto_null.o
CC crypto/md5.o
CC fs/nfs/pagelist.o
CC net/ethtool/debug.o
CC net/xfrm/xfrm_policy.o
CC io_uring/epoll.o
CC fs/proc/kmsg.o
AR drivers/gpu/drm/renesas/rcar-du/built-in.a
CC mm/backing-dev.o
AR drivers/gpu/drm/renesas/rz-du/built-in.a
AR drivers/gpu/drm/renesas/built-in.a
CC drivers/acpi/acpica/exresop.o
CC io_uring/statx.o
CC crypto/sha256_generic.o
AR drivers/gpu/drm/ttm/built-in.a
CC net/ipv4/inetpeer.o
CC net/xfrm/xfrm_state.o
AR kernel/power/built-in.a
CC kernel/dma/dummy.o
CC kernel/module/main.o
CC kernel/dma/remap.o
CC net/ethtool/wol.o
CC kernel/irq/devres.o
CC kernel/irq/autoprobe.o
CC fs/nfs/read.o
CC net/ethtool/features.o
CC net/sched/ematch.o
CC fs/lockd/svcproc.o
CC block/bounce.o
CC drivers/acpi/acpica/exserial.o
CC lib/decompress_unzstd.o
CC kernel/irq/irqdomain.o
CC drivers/gpu/drm/display/drm_scdc_helper.o
CC drivers/tty/serial/8250/8250_pericom.o
CC kernel/irq/proc.o
CC fs/nfs/symlink.o
CC drivers/gpu/drm/i915/i915_suspend.o
CC net/netfilter/nf_conntrack_proto.o
CC drivers/acpi/acpica/exstore.o
CC kernel/irq/migration.o
AR fs/unicode/built-in.a
CC fs/proc/page.o
CC drivers/pci/vgaarb.o
CC fs/autofs/init.o
CC arch/x86/kernel/cpu/feat_ctl.o
CC kernel/entry/syscall_user_dispatch.o
CC block/bsg.o
CC net/ipv4/protocol.o
CC net/ipv4/ip_input.o
CC crypto/sha512_generic.o
AR sound/sh/built-in.a
CC drivers/acpi/acpica/exstoren.o
CC fs/lockd/svcsubs.o
CC kernel/irq/cpuhotplug.o
CC net/ipv4/netfilter/ipt_REJECT.o
AR sound/synth/emux/built-in.a
AR sound/synth/built-in.a
AR kernel/dma/built-in.a
CC net/ipv4/ip_fragment.o
CC net/ipv4/ip_forward.o
CC fs/ext4/mballoc.o
CC crypto/sha3_generic.o
CC [M] net/ipv4/netfilter/iptable_nat.o
CC kernel/rcu/rcu_segcblist.o
CC lib/dump_stack.o
CC io_uring/timeout.o
CC mm/mm_init.o
CC fs/ext4/migrate.o
CC arch/x86/kernel/cpu/intel.o
AR security/selinux/built-in.a
AR security/built-in.a
AR drivers/tty/serial/8250/built-in.a
CC mm/percpu.o
CC drivers/tty/tty_jobctrl.o
AR drivers/tty/serial/built-in.a
CC mm/slab_common.o
CC drivers/acpi/acpica/exstorob.o
CC net/core/netevent.o
CC net/ethtool/privflags.o
CC fs/autofs/inode.o
AR drivers/gpu/drm/display/built-in.a
AR kernel/entry/built-in.a
AR drivers/gpu/drm/omapdrm/built-in.a
CC fs/ext4/mmp.o
CC fs/autofs/root.o
CC net/ethtool/rings.o
CC kernel/time/time.o
CC mm/compaction.o
CC kernel/time/timer.o
AR fs/proc/built-in.a
CC kernel/irq/pm.o
AR net/sched/built-in.a
AR drivers/gpu/drm/tilcdc/built-in.a
CC drivers/acpi/acpica/exsystem.o
CC net/netfilter/nf_conntrack_proto_generic.o
CC drivers/acpi/acpica/extrace.o
CC kernel/irq/msi.o
CC [M] sound/pci/hda/hda_auto_parser.o
CC [M] sound/pci/hda/hda_sysfs.o
CC drivers/acpi/acpica/exutils.o
CC mm/show_mem.o
CC block/blk-cgroup.o
CC crypto/ecb.o
CC lib/earlycpio.o
CC kernel/futex/core.o
CC kernel/cgroup/cgroup.o
CC drivers/gpu/drm/i915/i915_switcheroo.o
AR drivers/pci/built-in.a
CC kernel/cgroup/rstat.o
CC lib/extable.o
CC drivers/acpi/acpica/hwacpi.o
CC net/xfrm/xfrm_hash.o
CC drivers/tty/n_null.o
CC fs/lockd/mon.o
CC lib/flex_proportions.o
CC net/netfilter/nf_conntrack_proto_tcp.o
AR net/ipv4/netfilter/built-in.a
CC io_uring/fdinfo.o
CC fs/ext4/move_extent.o
CC [M] sound/pci/hda/hda_controller.o
CC kernel/futex/syscalls.o
CC net/netfilter/nf_conntrack_proto_udp.o
CC fs/autofs/symlink.o
CC crypto/cbc.o
CC fs/ext4/namei.o
CC net/core/neighbour.o
CC net/netfilter/nf_conntrack_proto_icmp.o
CC net/ipv4/ip_options.o
CC kernel/futex/pi.o
CC crypto/ctr.o
CC drivers/tty/pty.o
CC drivers/tty/tty_audit.o
CC drivers/acpi/acpica/hwesleep.o
AR kernel/rcu/built-in.a
CC fs/autofs/waitq.o
CC arch/x86/kernel/cpu/tsx.o
CC kernel/cgroup/namespace.o
CC fs/9p/vfs_super.o
CC fs/ext4/page-io.o
CC net/ethtool/channels.o
CC net/ethtool/coalesce.o
CC lib/idr.o
CC kernel/module/strict_rwx.o
CC fs/nfs/unlink.o
CC net/core/rtnetlink.o
AR sound/pci/korg1212/built-in.a
CC fs/ext4/readpage.o
AR sound/pci/mixart/built-in.a
AR sound/pci/nm256/built-in.a
CC fs/9p/vfs_inode.o
CC block/blk-ioprio.o
AR sound/usb/misc/built-in.a
CC block/blk-iolatency.o
AR sound/usb/usx2y/built-in.a
CC [M] sound/pci/hda/hda_proc.o
CC drivers/tty/sysrq.o
CC kernel/irq/affinity.o
CC drivers/acpi/acpica/hwgpe.o
AR sound/usb/caiaq/built-in.a
AR sound/usb/6fire/built-in.a
AR sound/usb/hiface/built-in.a
CC crypto/gcm.o
CC drivers/gpu/drm/i915/i915_sysfs.o
AR sound/usb/bcd2000/built-in.a
AR sound/usb/built-in.a
CC arch/x86/kernel/cpu/intel_epb.o
CC mm/shmem_quota.o
CC net/netfilter/nf_conntrack_extend.o
CC mm/interval_tree.o
CC block/blk-iocost.o
CC drivers/acpi/acpica/hwregs.o
CC lib/irq_regs.o
CC block/mq-deadline.o
CC io_uring/cancel.o
CC kernel/futex/requeue.o
CC kernel/module/kmod.o
CC fs/autofs/expire.o
CC drivers/acpi/device_pm.o
CC crypto/ccm.o
CC drivers/acpi/acpica/hwsleep.o
CC drivers/acpi/proc.o
CC fs/autofs/dev-ioctl.o
CC fs/9p/vfs_inode_dotl.o
CC kernel/irq/matrix.o
CC lib/is_single_threaded.o
CC fs/lockd/trace.o
CC drivers/base/power/sysfs.o
CC arch/x86/kernel/cpu/amd.o
CC fs/ext4/resize.o
CC net/xfrm/xfrm_input.o
CC drivers/base/firmware_loader/builtin/main.o
CC fs/ext4/super.o
CC crypto/aes_generic.o
CC io_uring/waitid.o
CC arch/x86/kernel/kprobes/core.o
CC io_uring/register.o
CC kernel/time/hrtimer.o
CC net/unix/af_unix.o
CC lib/klist.o
CC net/unix/garbage.o
CC drivers/acpi/acpica/hwvalid.o
CC lib/kobject.o
CC net/ethtool/pause.o
CC net/ipv4/ip_output.o
CC net/xfrm/xfrm_output.o
AR drivers/base/firmware_loader/builtin/built-in.a
CC drivers/base/firmware_loader/main.o
CC kernel/futex/waitwake.o
CC fs/9p/vfs_addr.o
CC crypto/crc32c_generic.o
AR drivers/tty/built-in.a
CC drivers/gpu/drm/i915/i915_utils.o
CC [M] sound/pci/hda/hda_hwdep.o
CC crypto/authenc.o
CC lib/kobject_uevent.o
LDS arch/x86/kernel/vmlinux.lds
CC mm/list_lru.o
CC drivers/base/power/generic_ops.o
CC drivers/base/power/common.o
CC fs/9p/vfs_file.o
CC mm/workingset.o
CC kernel/module/tree_lookup.o
CC net/netfilter/nf_conntrack_acct.o
AR sound/pci/oxygen/built-in.a
CC drivers/acpi/acpica/hwxface.o
CC net/netfilter/nf_conntrack_seqadj.o
AR fs/autofs/built-in.a
CC io_uring/truncate.o
CC mm/debug.o
CC drivers/base/power/qos.o
CC block/kyber-iosched.o
CC kernel/cgroup/cgroup-v1.o
CC lib/logic_pio.o
CC drivers/acpi/acpica/hwxfsleep.o
CC kernel/cgroup/freezer.o
CC arch/x86/kernel/cpu/hygon.o
AR fs/hostfs/built-in.a
CC crypto/authencesn.o
CC drivers/base/regmap/regmap.o
AR drivers/base/test/built-in.a
AS arch/x86/kernel/head_32.o
CC fs/lockd/xdr.o
CC net/netfilter/nf_conntrack_proto_icmpv6.o
CC drivers/base/power/runtime.o
AR kernel/irq/built-in.a
CC kernel/trace/trace_clock.o
CC fs/lockd/clnt4xdr.o
CC arch/x86/kernel/kprobes/opt.o
AR sound/pci/pcxhr/built-in.a
AR kernel/futex/built-in.a
CC fs/ext4/symlink.o
CC drivers/gpu/drm/virtio/virtgpu_drv.o
CC [M] sound/pci/hda/patch_hdmi.o
CC kernel/module/kallsyms.o
CC fs/nfs/write.o
CC fs/ext4/sysfs.o
CC net/ethtool/eee.o
CC drivers/acpi/acpica/hwpci.o
CC drivers/gpu/drm/virtio/virtgpu_kms.o
AR drivers/base/firmware_loader/built-in.a
CC io_uring/memmap.o
AR sound/pci/riptide/built-in.a
CC drivers/gpu/drm/i915/intel_clock_gating.o
CC net/unix/sysctl_net_unix.o
CC fs/9p/vfs_dir.o
CC net/core/utils.o
CC arch/x86/kernel/cpu/centaur.o
CC crypto/lzo.o
CC lib/maple_tree.o
CC kernel/trace/ring_buffer.o
CC kernel/time/timekeeping.o
CC mm/gup.o
CC net/ipv6/netfilter/ip6_tables.o
CC net/ipv6/af_inet6.o
CC net/packet/af_packet.o
CC net/ipv6/netfilter/ip6table_filter.o
CC net/ipv6/anycast.o
CC drivers/acpi/acpica/nsaccess.o
CC kernel/time/ntp.o
CC net/ipv6/ip6_output.o
CC net/xfrm/xfrm_sysctl.o
CC arch/x86/kernel/cpu/transmeta.o
CC arch/x86/kernel/cpu/zhaoxin.o
CC net/xfrm/xfrm_replay.o
CC net/ipv6/ip6_input.o
CC fs/9p/vfs_dentry.o
AR arch/x86/kernel/kprobes/built-in.a
CC net/netfilter/nf_conntrack_netlink.o
CC crypto/lzo-rle.o
CC net/netfilter/nf_conntrack_ftp.o
CC kernel/module/procfs.o
CC drivers/base/component.o
CC drivers/acpi/acpica/nsalloc.o
AR sound/firewire/built-in.a
CC fs/ext4/xattr.o
CC fs/9p/v9fs.o
CC drivers/gpu/drm/virtio/virtgpu_gem.o
CC fs/ext4/xattr_hurd.o
CC fs/9p/fid.o
CC io_uring/io-wq.o
CC drivers/base/power/wakeirq.o
CC net/core/link_watch.o
CC lib/memcat_p.o
CC block/blk-mq-pci.o
CC kernel/cgroup/legacy_freezer.o
CC net/ethtool/tsinfo.o
CC fs/lockd/xdr4.o
CC arch/x86/kernel/cpu/vortex.o
CC net/xfrm/xfrm_device.o
CC net/ipv6/addrconf.o
CC fs/ext4/xattr_trusted.o
CC net/ipv4/ip_sockglue.o
AR net/unix/built-in.a
CC fs/9p/xattr.o
CC drivers/acpi/acpica/nsarguments.o
AR net/dsa/built-in.a
CC net/sunrpc/auth_gss/auth_gss.o
CC kernel/time/clocksource.o
CC crypto/rng.o
CC net/sunrpc/auth_gss/gss_generic_token.o
CC arch/x86/kernel/cpu/perfctr-watchdog.o
CC net/ethtool/cabletest.o
CC drivers/gpu/drm/i915/intel_device_info.o
CC kernel/module/sysfs.o
CC net/sunrpc/clnt.o
CC drivers/base/power/main.o
CC arch/x86/kernel/cpu/vmware.o
CC io_uring/futex.o
CC drivers/acpi/acpica/nsconvert.o
AR sound/pci/rme9652/built-in.a
AR sound/pci/trident/built-in.a
AR sound/pci/ymfpci/built-in.a
AR sound/sparc/built-in.a
AR sound/spi/built-in.a
CC fs/ext4/xattr_user.o
AR sound/pci/vx222/built-in.a
CC fs/ext4/fast_commit.o
CC fs/ext4/orphan.o
CC kernel/time/jiffies.o
CC fs/ext4/acl.o
CC drivers/base/power/wakeup.o
CC drivers/gpu/drm/virtio/virtgpu_vram.o
CC block/blk-mq-virtio.o
CC kernel/cgroup/pids.o
CC drivers/base/power/wakeup_stats.o
CC [M] sound/pci/hda/hda_eld.o
CC net/xfrm/xfrm_nat_keepalive.o
AR fs/9p/built-in.a
CC block/blk-mq-debugfs.o
CC fs/ext4/xattr_security.o
CC drivers/base/power/trace.o
CC drivers/acpi/acpica/nsdump.o
CC net/ipv6/netfilter/ip6table_mangle.o
CC net/core/filter.o
CC arch/x86/kernel/cpu/hypervisor.o
CC fs/lockd/svc4proc.o
CC kernel/time/timer_list.o
CC [M] sound/pci/hda/hda_intel.o
AR kernel/module/built-in.a
CC fs/debugfs/inode.o
CC fs/debugfs/file.o
CC net/xfrm/xfrm_algo.o
CC net/netfilter/nf_conntrack_irc.o
CC kernel/time/timeconv.o
CC crypto/drbg.o
CC fs/lockd/procfs.o
CC arch/x86/kernel/cpu/mshyperv.o
CC mm/mmap_lock.o
CC drivers/gpu/drm/i915/intel_memory_region.o
CC drivers/base/regmap/regcache.o
CC drivers/acpi/acpica/nseval.o
CC kernel/cgroup/rdma.o
CC drivers/gpu/drm/i915/intel_pcode.o
CC block/blk-pm.o
CC crypto/jitterentropy.o
CC net/ipv6/addrlabel.o
CC drivers/gpu/drm/virtio/virtgpu_display.o
CC kernel/trace/trace.o
CC net/ethtool/tunnels.o
CC drivers/acpi/acpica/nsinit.o
CC io_uring/napi.o
CC kernel/time/timecounter.o
CC kernel/trace/trace_output.o
CC arch/x86/kernel/cpu/debugfs.o
CC kernel/trace/trace_seq.o
CC kernel/trace/trace_stat.o
CC net/ipv6/netfilter/nf_defrag_ipv6_hooks.o
CC kernel/bpf/core.o
LD [M] sound/pci/hda/snd-hda-codec.o
CC drivers/acpi/acpica/nsload.o
CC kernel/events/core.o
CC fs/nfs/namespace.o
CC kernel/events/ring_buffer.o
CC kernel/trace/trace_printk.o
CC kernel/time/alarmtimer.o
AR sound/parisc/built-in.a
AR sound/pcmcia/vx/built-in.a
AR sound/pcmcia/pdaudiocf/built-in.a
CC drivers/gpu/drm/virtio/virtgpu_vq.o
AR sound/pcmcia/built-in.a
AR sound/mips/built-in.a
CC kernel/time/posix-timers.o
CC drivers/gpu/drm/virtio/virtgpu_fence.o
CC net/ipv6/route.o
AR sound/soc/built-in.a
CC drivers/gpu/drm/i915/intel_region_ttm.o
CC kernel/trace/pid_list.o
CC block/holder.o
CC net/ipv4/inet_hashtables.o
CC kernel/cgroup/cpuset.o
CC net/ethtool/fec.o
CC crypto/jitterentropy-kcapi.o
CC drivers/acpi/acpica/nsnames.o
AR drivers/base/power/built-in.a
CC mm/highmem.o
CC kernel/trace/trace_sched_switch.o
CC net/netfilter/nf_conntrack_sip.o
CC net/xfrm/xfrm_user.o
AR fs/debugfs/built-in.a
CC arch/x86/kernel/cpu/capflags.o
CC net/ipv4/inet_timewait_sock.o
CC kernel/trace/trace_nop.o
AR sound/atmel/built-in.a
AR fs/lockd/built-in.a
AR arch/x86/kernel/cpu/built-in.a
CC kernel/trace/blktrace.o
CC kernel/trace/trace_events.o
CC arch/x86/kernel/head32.o
CC drivers/base/regmap/regcache-rbtree.o
CC net/ipv6/netfilter/nf_conntrack_reasm.o
AR net/packet/built-in.a
CC drivers/base/regmap/regcache-flat.o
CC net/netfilter/nf_nat_core.o
AR net/wireless/tests/built-in.a
CC net/wireless/core.o
CC net/sunrpc/auth_gss/gss_mech_switch.o
CC kernel/time/posix-cpu-timers.o
CC drivers/acpi/acpica/nsobject.o
CC drivers/acpi/acpica/nsparse.o
LD [M] sound/pci/hda/snd-hda-codec-hdmi.o
LD [M] sound/pci/hda/snd-hda-intel.o
AR sound/pci/built-in.a
CC crypto/ghash-generic.o
CC net/sunrpc/auth_gss/svcauth_gss.o
CC drivers/base/regmap/regcache-maple.o
CC arch/x86/kernel/ebda.o
AR block/built-in.a
AR sound/hda/built-in.a
CC arch/x86/kernel/platform-quirks.o
CC [M] sound/hda/hda_bus_type.o
CC fs/tracefs/inode.o
CC kernel/trace/trace_export.o
CC net/core/sock_diag.o
CC kernel/trace/trace_event_perf.o
CC drivers/gpu/drm/i915/intel_runtime_pm.o
CC [M] fs/efivarfs/inode.o
CC fs/nfs/mount_clnt.o
CC [M] fs/efivarfs/file.o
CC fs/nfs/nfstrace.o
CC net/core/dev_ioctl.o
CC drivers/acpi/acpica/nspredef.o
CC fs/tracefs/event_inode.o
CC mm/memory.o
CC net/core/tso.o
CC crypto/hash_info.o
AR io_uring/built-in.a
CC fs/nfs/export.o
CC crypto/rsapubkey.asn1.o
CC net/ethtool/eeprom.o
CC net/ipv6/netfilter/nf_reject_ipv6.o
CC crypto/rsaprivkey.asn1.o
CC drivers/gpu/drm/virtio/virtgpu_object.o
CC drivers/gpu/drm/i915/intel_sbi.o
AR crypto/built-in.a
CC arch/x86/kernel/process_32.o
CC [M] sound/hda/hdac_bus.o
CC net/ipv4/inet_connection_sock.o
CC drivers/base/core.o
CC drivers/base/regmap/regmap-debugfs.o
CC [M] sound/hda/hdac_device.o
CC drivers/acpi/acpica/nsprepkg.o
CC net/wireless/sysfs.o
CC drivers/acpi/bus.o
CC kernel/events/callchain.o
CC [M] fs/efivarfs/super.o
CC kernel/trace/trace_events_filter.o
CC kernel/time/posix-clock.o
CC net/ipv6/netfilter/ip6t_ipv6header.o
CC net/core/sock_reuseport.o
CC net/ipv6/ip6_fib.o
CC net/ipv6/netfilter/ip6t_REJECT.o
CC drivers/acpi/acpica/nsrepair.o
CC net/sunrpc/auth_gss/gss_rpc_upcall.o
CC drivers/gpu/drm/virtio/virtgpu_debugfs.o
AR fs/tracefs/built-in.a
CC drivers/acpi/acpica/nsrepair2.o
CC drivers/acpi/acpica/nssearch.o
CC net/netfilter/nf_nat_proto.o
CC net/core/fib_notifier.o
CC drivers/gpu/drm/virtio/virtgpu_plane.o
AR net/mac80211/tests/built-in.a
CC kernel/events/hw_breakpoint.o
CC net/netfilter/nf_nat_helper.o
CC drivers/acpi/acpica/nsutils.o
CC net/mac80211/main.o
CC fs/open.o
CC net/ethtool/stats.o
CC drivers/gpu/drm/i915/intel_step.o
CC arch/x86/kernel/signal.o
AR drivers/base/regmap/built-in.a
CC net/sunrpc/xprt.o
CC drivers/base/bus.o
CC kernel/cgroup/misc.o
CC kernel/events/uprobes.o
CC arch/x86/kernel/signal_32.o
CC net/mac80211/status.o
CC [M] sound/hda/hdac_sysfs.o
CC [M] fs/efivarfs/vars.o
CC kernel/time/itimer.o
CC lib/nmi_backtrace.o
CC drivers/acpi/acpica/nswalk.o
CC drivers/acpi/acpica/nsxfeval.o
AR kernel/bpf/built-in.a
CC kernel/fork.o
CC drivers/acpi/acpica/nsxfname.o
CC drivers/acpi/glue.o
CC net/core/xdp.o
AR net/xfrm/built-in.a
CC drivers/acpi/acpica/nsxfobj.o
CC net/core/flow_offload.o
CC net/netlabel/netlabel_user.o
CC drivers/gpu/drm/virtio/virtgpu_ioctl.o
CC kernel/cgroup/debug.o
CC drivers/gpu/drm/virtio/virtgpu_prime.o
CC net/core/gro.o
CC drivers/gpu/drm/virtio/virtgpu_trace_points.o
CC net/sunrpc/auth_gss/gss_rpc_xdr.o
CC drivers/base/dd.o
CC drivers/acpi/acpica/psargs.o
CC net/mac80211/driver-ops.o
CC net/mac80211/sta_info.o
CC [M] sound/hda/hdac_regmap.o
CC kernel/time/clockevents.o
CC drivers/gpu/drm/virtio/virtgpu_submit.o
AR net/ipv6/netfilter/built-in.a
CC mm/mincore.o
CC kernel/exec_domain.o
CC kernel/trace/trace_events_trigger.o
CC net/wireless/radiotap.o
CC lib/objpool.o
LD [M] fs/efivarfs/efivarfs.o
CC arch/x86/kernel/traps.o
CC lib/plist.o
CC drivers/gpu/drm/i915/intel_uncore.o
CC net/netfilter/nf_nat_masquerade.o
CC drivers/block/loop.o
CC net/ipv4/tcp.o
CC drivers/block/virtio_blk.o
CC net/ethtool/phc_vclocks.o
CC [M] sound/hda/hdac_controller.o
CC lib/radix-tree.o
CC drivers/acpi/acpica/psloop.o
CC kernel/time/tick-common.o
CC kernel/time/tick-broadcast.o
CC net/netlabel/netlabel_kapi.o
CC kernel/time/tick-broadcast-hrtimer.o
AR kernel/cgroup/built-in.a
CC fs/read_write.o
CC lib/ratelimit.o
CC kernel/panic.o
CC net/netfilter/nf_nat_ftp.o
CC arch/x86/kernel/idt.o
CC net/ethtool/mm.o
CC net/ipv6/ipv6_sockglue.o
CC net/sunrpc/auth_gss/trace.o
CC kernel/cpu.o
CC drivers/acpi/scan.o
CC drivers/acpi/mipi-disco-img.o
AR drivers/misc/eeprom/built-in.a
CC drivers/acpi/resource.o
AR drivers/misc/cb710/built-in.a
CC drivers/base/syscore.o
AR drivers/misc/ti-st/built-in.a
CC drivers/acpi/acpica/psobject.o
AR drivers/misc/lis3lv02d/built-in.a
AR drivers/gpu/drm/virtio/built-in.a
AR drivers/mfd/built-in.a
CC lib/rbtree.o
AR drivers/misc/cardreader/built-in.a
AR drivers/misc/keba/built-in.a
AR fs/ext4/built-in.a
CC lib/seq_buf.o
CC fs/file_table.o
AR drivers/misc/built-in.a
CC drivers/base/driver.o
CC kernel/time/tick-oneshot.o
AR drivers/nfc/built-in.a
CC net/wireless/util.o
CC kernel/time/tick-sched.o
AR drivers/dax/hmem/built-in.a
AR drivers/dax/built-in.a
CC net/core/netdev-genl.o
CC net/netlabel/netlabel_domainhash.o
CC drivers/base/class.o
CC arch/x86/kernel/irq.o
CC kernel/time/timer_migration.o
CC kernel/trace/trace_eprobe.o
CC [M] sound/hda/hdac_stream.o
CC kernel/time/vsyscall.o
CC lib/siphash.o
CC net/wireless/reg.o
CC drivers/acpi/acpica/psopcode.o
CC net/sunrpc/auth_gss/gss_krb5_mech.o
CC net/sunrpc/socklib.o
CC mm/mlock.o
CC drivers/dma-buf/dma-buf.o
CC mm/mmap.o
CC net/sunrpc/xprtsock.o
CC drivers/dma-buf/dma-fence.o
CC net/core/netdev-genl-gen.o
CC drivers/acpi/acpi_processor.o
CC mm/mmu_gather.o
CC net/netfilter/nf_nat_irc.o
CC kernel/time/timekeeping_debug.o
CC net/netfilter/nf_nat_sip.o
AR drivers/block/built-in.a
CC kernel/time/namespace.o
CC net/ethtool/module.o
CC drivers/acpi/acpica/psopinfo.o
CC net/ethtool/cmis_fw_update.o
CC drivers/acpi/processor_core.o
AR drivers/gpu/drm/imx/built-in.a
CC net/ipv6/ndisc.o
AR drivers/gpu/drm/i2c/built-in.a
CC drivers/gpu/drm/i915/intel_wakeref.o
CC drivers/base/platform.o
CC lib/string.o
CC drivers/acpi/acpica/psparse.o
CC kernel/exit.o
CC net/mac80211/wep.o
CC net/mac80211/aead_api.o
CC drivers/acpi/acpica/psscope.o
CC lib/timerqueue.o
CC fs/nfs/sysfs.o
CC fs/super.o
CC [M] sound/hda/array.o
CC fs/nfs/fs_context.o
CC fs/char_dev.o
CC net/mac80211/wpa.o
CC drivers/acpi/processor_pdc.o
CC drivers/acpi/acpica/pstree.o
CC net/netlabel/netlabel_addrlist.o
CC lib/vsprintf.o
AR sound/x86/built-in.a
CC net/netlabel/netlabel_mgmt.o
CC net/ipv6/udp.o
AR kernel/events/built-in.a
CC kernel/softirq.o
CC fs/nfs/nfsroot.o
CC [M] sound/hda/hdmi_chmap.o
CC kernel/trace/trace_kprobe.o
CC lib/win_minmax.o
CC net/sunrpc/auth_gss/gss_krb5_seal.o
CC lib/xarray.o
CC net/sunrpc/sched.o
CC lib/lockref.o
CC fs/nfs/sysctl.o
CC [M] sound/hda/trace.o
CC net/core/gso.o
AR drivers/gpu/drm/panel/built-in.a
CC net/ipv4/tcp_input.o
CC drivers/dma-buf/dma-fence-array.o
CC kernel/resource.o
CC drivers/acpi/acpica/psutils.o
CC net/sunrpc/auth.o
CC drivers/acpi/ec.o
CC net/ethtool/cmis_cdb.o
CC lib/bcd.o
CC drivers/acpi/dock.o
CC net/netfilter/x_tables.o
AR kernel/time/built-in.a
CC drivers/acpi/pci_root.o
CC net/sunrpc/auth_null.o
CC drivers/dma-buf/dma-fence-chain.o
CC fs/nfs/nfs3super.o
CC net/core/net-sysfs.o
CC drivers/gpu/drm/i915/vlv_sideband.o
CC net/ethtool/pse-pd.o
CC lib/sort.o
CC arch/x86/kernel/irq_32.o
CC drivers/base/cpu.o
CC net/netfilter/xt_tcpudp.o
CC net/sunrpc/auth_tls.o
CC drivers/dma-buf/dma-fence-unwrap.o
CC drivers/acpi/acpica/pswalk.o
CC drivers/dma-buf/dma-resv.o
CC net/sunrpc/auth_gss/gss_krb5_unseal.o
CC net/mac80211/scan.o
CC net/ipv6/udplite.o
CC net/mac80211/offchannel.o
CC fs/nfs/nfs3client.o
CC drivers/acpi/acpica/psxface.o
CC net/netlabel/netlabel_unlabeled.o
CC drivers/acpi/pci_link.o
CC net/sunrpc/auth_gss/gss_krb5_wrap.o
CC [M] sound/hda/hdac_component.o
CC [M] sound/hda/hdac_i915.o
CC drivers/acpi/acpica/rsaddr.o
CC drivers/acpi/pci_irq.o
CC lib/parser.o
CC arch/x86/kernel/dumpstack_32.o
CC net/netlabel/netlabel_cipso_v4.o
CC net/ipv6/raw.o
CC net/sunrpc/auth_gss/gss_krb5_crypto.o
CC net/core/hotdata.o
CC mm/mprotect.o
CC kernel/sysctl.o
CC drivers/acpi/acpica/rscalc.o
CC drivers/base/firmware.o
CC drivers/base/init.o
CC net/ipv6/icmp.o
CC net/sunrpc/auth_unix.o
CC net/ipv4/tcp_output.o
CC net/ipv6/mcast.o
CC net/sunrpc/auth_gss/gss_krb5_keys.o
CC drivers/acpi/acpica/rscreate.o
CC drivers/gpu/drm/i915/vlv_suspend.o
CC net/ethtool/plca.o
CC net/sunrpc/svc.o
CC lib/debug_locks.o
CC drivers/dma-buf/sync_file.o
CC net/core/net-procfs.o
CC drivers/acpi/acpi_apd.o
CC drivers/base/map.o
CC net/mac80211/ht.o
CC arch/x86/kernel/time.o
CC net/mac80211/agg-tx.o
CC net/rfkill/core.o
CC [M] sound/hda/intel-dsp-config.o
CC [M] sound/hda/intel-nhlt.o
CC fs/nfs/nfs3proc.o
CC fs/nfs/nfs3xdr.o
AR drivers/cxl/core/built-in.a
CC kernel/trace/error_report-traces.o
AR drivers/cxl/built-in.a
CC fs/nfs/nfs3acl.o
CC drivers/acpi/acpica/rsdumpinfo.o
CC fs/nfs/nfs4proc.o
CC kernel/capability.o
CC fs/nfs/nfs4xdr.o
CC net/9p/mod.o
CC kernel/trace/power-traces.o
CC net/netfilter/xt_CONNSECMARK.o
CC drivers/base/devres.o
CC net/9p/client.o
CC drivers/macintosh/mac_hid.o
CC lib/random32.o
CC arch/x86/kernel/ioport.o
AR drivers/dma-buf/built-in.a
CC net/core/netpoll.o
AR drivers/scsi/pcmcia/built-in.a
CC drivers/scsi/scsi.o
CC drivers/acpi/acpica/rsinfo.o
CC net/sunrpc/svcsock.o
CC drivers/acpi/acpica/rsio.o
CC drivers/acpi/acpica/rsirq.o
AR drivers/nvme/common/built-in.a
AR drivers/nvme/host/built-in.a
CC mm/mremap.o
AR net/sunrpc/auth_gss/built-in.a
CC fs/nfs/nfs4state.o
AR drivers/nvme/target/built-in.a
AR drivers/nvme/built-in.a
CC drivers/acpi/acpica/rslist.o
CC drivers/scsi/hosts.o
CC net/ipv6/reassembly.o
CC drivers/base/attribute_container.o
CC net/netlabel/netlabel_calipso.o
AR net/ethtool/built-in.a
CC lib/bust_spinlocks.o
CC drivers/acpi/acpi_platform.o
CC [M] sound/hda/intel-sdw-acpi.o
CC drivers/acpi/acpica/rsmemory.o
CC net/wireless/scan.o
CC net/wireless/nl80211.o
CC net/core/fib_rules.o
CC drivers/scsi/scsi_ioctl.o
CC drivers/acpi/acpica/rsmisc.o
CC drivers/acpi/acpica/rsserial.o
CC net/rfkill/input.o
AR drivers/macintosh/built-in.a
CC drivers/ata/libata-core.o
CC net/wireless/mlme.o
CC drivers/ata/libata-scsi.o
CC drivers/gpu/drm/i915/soc/intel_dram.o
CC lib/kasprintf.o
CC drivers/ata/libata-eh.o
CC lib/bitmap.o
CC drivers/gpu/drm/i915/soc/intel_gmch.o
CC net/ipv6/tcp_ipv6.o
CC arch/x86/kernel/dumpstack.o
CC kernel/ptrace.o
CC drivers/base/transport_class.o
LD [M] sound/hda/snd-hda-core.o
CC net/ipv6/ping.o
LD [M] sound/hda/snd-intel-dspcfg.o
LD [M] sound/hda/snd-intel-sdw-acpi.o
CC net/sunrpc/svcauth.o
CC arch/x86/kernel/nmi.o
CC mm/msync.o
AR sound/xen/built-in.a
AR sound/virtio/built-in.a
CC sound/sound_core.o
CC net/netfilter/xt_NFLOG.o
CC lib/scatterlist.o
CC kernel/user.o
CC drivers/acpi/acpica/rsutils.o
CC net/wireless/ibss.o
AR net/rfkill/built-in.a
CC drivers/scsi/scsicam.o
CC net/dns_resolver/dns_key.o
CC drivers/base/topology.o
CC net/dns_resolver/dns_query.o
CC drivers/scsi/scsi_error.o
CC sound/last.o
CC net/ipv6/exthdrs.o
AR net/netlabel/built-in.a
CC net/handshake/alert.o
CC drivers/scsi/scsi_lib.o
CC net/devres.o
CC drivers/acpi/acpica/rsxface.o
CC lib/list_sort.o
CC net/mac80211/agg-rx.o
CC net/netfilter/xt_SECMARK.o
CC net/ipv6/datagram.o
CC net/core/net-traces.o
CC kernel/trace/rpm-traces.o
CC drivers/gpu/drm/i915/soc/intel_pch.o
CC net/9p/error.o
CC mm/page_vma_mapped.o
AR sound/built-in.a
CC mm/pagewalk.o
CC drivers/acpi/acpica/tbdata.o
CC net/mac80211/vht.o
CC lib/uuid.o
CC drivers/scsi/constants.o
CC drivers/gpu/drm/i915/i915_memcpy.o
CC net/ipv6/ip6_flowlabel.o
CC drivers/base/container.o
CC arch/x86/kernel/ldt.o
CC net/netfilter/xt_TCPMSS.o
AR net/dns_resolver/built-in.a
CC drivers/base/property.o
CC kernel/trace/trace_dynevent.o
CC kernel/trace/trace_probe.o
CC drivers/base/cacheinfo.o
CC drivers/scsi/scsi_lib_dma.o
CC drivers/scsi/scsi_scan.o
CC net/sunrpc/svcauth_unix.o
CC lib/iov_iter.o
CC net/mac80211/he.o
CC net/9p/protocol.o
CC net/sunrpc/addr.o
CC lib/clz_ctz.o
CC net/core/selftests.o
CC lib/bsearch.o
CC drivers/base/swnode.o
CC drivers/acpi/acpica/tbfadt.o
CC net/ipv6/inet6_connection_sock.o
CC net/ipv4/tcp_timer.o
CC net/netfilter/xt_conntrack.o
GEN drivers/scsi/scsi_devinfo_tbl.c
CC mm/pgtable-generic.o
CC drivers/ata/libata-transport.o
CC mm/rmap.o
CC fs/nfs/nfs4renewd.o
CC net/ipv4/tcp_ipv4.o
CC fs/nfs/nfs4super.o
CC net/handshake/genl.o
CC net/sunrpc/rpcb_clnt.o
CC drivers/scsi/scsi_devinfo.o
CC drivers/acpi/acpica/tbfind.o
CC drivers/gpu/drm/i915/i915_mm.o
CC arch/x86/kernel/setup.o
CC net/netfilter/xt_policy.o
CC net/handshake/netlink.o
CC lib/find_bit.o
CC net/9p/trans_common.o
CC net/ipv6/udp_offload.o
CC drivers/base/auxiliary.o
CC lib/llist.o
CC mm/vmalloc.o
CC fs/nfs/nfs4file.o
CC net/ipv4/tcp_minisocks.o
CC kernel/trace/trace_uprobe.o
CC kernel/trace/rethook.o
CC drivers/acpi/acpica/tbinstal.o
CC drivers/scsi/scsi_sysctl.o
CC drivers/acpi/acpica/tbprint.o
CC drivers/scsi/scsi_proc.o
CC drivers/acpi/acpica/tbutils.o
CC net/handshake/request.o
CC drivers/acpi/acpica/tbxface.o
CC lib/lwq.o
CC arch/x86/kernel/x86_init.o
CC drivers/scsi/scsi_debugfs.o
CC net/ipv6/seg6.o
CC net/netfilter/xt_state.o
CC net/9p/trans_fd.o
CC [M] net/netfilter/nf_log_syslog.o
CC net/core/ptp_classifier.o
AR drivers/gpu/drm/bridge/analogix/built-in.a
CC [M] net/netfilter/xt_mark.o
CC drivers/ata/libata-trace.o
AR drivers/gpu/drm/bridge/cadence/built-in.a
CC drivers/base/devtmpfs.o
AR drivers/gpu/drm/bridge/imx/built-in.a
CC lib/memweight.o
AR drivers/gpu/drm/bridge/synopsys/built-in.a
CC lib/kfifo.o
AR drivers/gpu/drm/bridge/built-in.a
CC lib/percpu-refcount.o
CC net/ipv6/fib6_notifier.o
CC fs/nfs/delegation.o
CC drivers/acpi/acpica/tbxfload.o
CC [M] net/netfilter/xt_nat.o
CC [M] net/netfilter/xt_LOG.o
CC net/9p/trans_virtio.o
CC fs/nfs/nfs4idmap.o
CC drivers/gpu/drm/i915/i915_sw_fence.o
CC net/mac80211/s1g.o
CC [M] net/netfilter/xt_MASQUERADE.o
CC lib/rhashtable.o
CC net/socket.o
CC net/handshake/tlshd.o
CC net/mac80211/ibss.o
CC lib/base64.o
AR drivers/gpu/drm/hisilicon/built-in.a
CC drivers/net/phy/mdio-boardinfo.o
AR drivers/net/phy/qcom/built-in.a
CC drivers/net/phy/stubs.o
CC drivers/net/phy/mdio_devres.o
CC arch/x86/kernel/i8259.o
CC mm/process_vm_access.o
CC mm/page_alloc.o
CC drivers/acpi/acpica/tbxfroot.o
CC drivers/scsi/scsi_trace.o
CC drivers/net/phy/phy.o
CC drivers/firewire/init_ohci1394_dma.o
CC net/sunrpc/timer.o
CC arch/x86/kernel/irqinit.o
CC drivers/gpu/drm/i915/i915_sw_fence_work.o
CC net/wireless/sme.o
CC [M] net/netfilter/xt_addrtype.o
CC net/ipv6/rpl.o
CC net/wireless/chan.o
CC drivers/base/module.o
CC drivers/base/auxiliary_sysfs.o
CC net/sunrpc/xdr.o
CC drivers/acpi/acpica/utaddress.o
CC mm/init-mm.o
CC net/mac80211/iface.o
CC net/wireless/ethtool.o
CC net/sysctl_net.o
CC drivers/cdrom/cdrom.o
CC net/sunrpc/sunrpc_syms.o
CC drivers/ata/libata-sata.o
CC mm/memblock.o
CC net/handshake/trace.o
CC net/mac80211/link.o
CC drivers/gpu/drm/i915/i915_syncmap.o
CC net/mac80211/rate.o
CC arch/x86/kernel/jump_label.o
AR kernel/trace/built-in.a
CC net/mac80211/michael.o
CC kernel/signal.o
CC net/sunrpc/cache.o
AR net/9p/built-in.a
CC drivers/acpi/acpica/utalloc.o
CC lib/once.o
CC drivers/scsi/scsi_logging.o
CC lib/refcount.o
CC lib/rcuref.o
AR net/netfilter/built-in.a
AR drivers/firewire/built-in.a
CC drivers/net/phy/phy-c45.o
CC drivers/gpu/drm/i915/i915_user_extensions.o
CC net/sunrpc/rpc_pipe.o
CC kernel/sys.o
CC drivers/base/devcoredump.o
CC fs/nfs/callback.o
CC mm/slub.o
CC drivers/base/platform-msi.o
CC lib/usercopy.o
CC net/mac80211/tkip.o
CC net/ipv4/tcp_cong.o
CC lib/errseq.o
CC drivers/scsi/scsi_pm.o
AR drivers/gpu/drm/mxsfb/built-in.a
AR drivers/gpu/drm/tiny/built-in.a
CC drivers/net/phy/phy-core.o
AR drivers/gpu/drm/xlnx/built-in.a
CC lib/bucket_locks.o
CC drivers/acpi/acpica/utascii.o
CC lib/generic-radix-tree.o
CC drivers/gpu/drm/i915/i915_debugfs.o
CC net/sunrpc/sysfs.o
CC mm/madvise.o
CC lib/bitmap-str.o
CC arch/x86/kernel/irq_work.o
CC net/ipv6/ioam6.o
CC fs/nfs/callback_xdr.o
AR drivers/auxdisplay/built-in.a
CC fs/stat.o
CC drivers/pcmcia/cs.o
CC drivers/usb/common/common.o
CC drivers/base/physical_location.o
CC drivers/usb/common/debug.o
CC net/mac80211/aes_cmac.o
CC drivers/usb/core/usb.o
CC drivers/acpi/acpica/utbuffer.o
CC drivers/usb/core/hub.o
CC drivers/acpi/acpica/utcksum.o
CC net/mac80211/aes_gmac.o
CC drivers/ata/libata-sff.o
CC net/core/netprio_cgroup.o
CC fs/nfs/callback_proc.o
CC mm/page_io.o
CC drivers/scsi/scsi_bsg.o
CC mm/swap_state.o
CC drivers/acpi/acpi_pnp.o
AR drivers/net/pse-pd/built-in.a
AR net/handshake/built-in.a
CC lib/string_helpers.o
CC drivers/net/phy/phy_device.o
CC lib/hexdump.o
CC drivers/acpi/acpica/utcopy.o
CC drivers/net/mdio/acpi_mdio.o
CC drivers/base/trace.o
CC drivers/net/mdio/fwnode_mdio.o
AR drivers/cdrom/built-in.a
CC net/core/netclassid_cgroup.o
CC lib/kstrtox.o
CC net/sunrpc/svc_xprt.o
CC drivers/usb/core/hcd.o
CC fs/exec.o
CC net/ipv6/sysctl_net_ipv6.o
AR drivers/usb/common/built-in.a
CC net/ipv4/tcp_metrics.o
CC arch/x86/kernel/probe_roms.o
CC drivers/pcmcia/socket_sysfs.o
CC drivers/acpi/power.o
CC kernel/umh.o
CC net/sunrpc/xprtmultipath.o
CC drivers/scsi/scsi_common.o
CC net/ipv4/tcp_fastopen.o
CC drivers/acpi/acpica/utexcep.o
CC drivers/pcmcia/cardbus.o
CC arch/x86/kernel/sys_ia32.o
CC lib/iomap.o
CC net/wireless/mesh.o
CC fs/pipe.o
CC drivers/gpu/drm/i915/i915_debugfs_params.o
CC net/core/dst_cache.o
CC drivers/gpu/drm/i915/i915_pmu.o
CC net/mac80211/fils_aead.o
AR drivers/base/built-in.a
CC net/sunrpc/stats.o
CC drivers/input/serio/serio.o
CC lib/iomap_copy.o
CC net/sunrpc/sysctl.o
CC kernel/workqueue.o
CC lib/devres.o
CC drivers/acpi/acpica/utdebug.o
AR drivers/net/mdio/built-in.a
CC mm/swapfile.o
CC drivers/scsi/scsi_transport_spi.o
CC drivers/usb/core/urb.o
CC net/core/gro_cells.o
CC drivers/net/phy/linkmode.o
CC net/wireless/ap.o
CC net/wireless/trace.o
CC kernel/pid.o
CC lib/check_signature.o
CC drivers/acpi/acpica/utdecode.o
CC fs/namei.o
AR drivers/gpu/drm/gud/built-in.a
CC drivers/pcmcia/ds.o
CC drivers/acpi/acpica/utdelete.o
CC net/ipv6/xfrm6_policy.o
CC net/wireless/ocb.o
CC lib/interval_tree.o
CC fs/fcntl.o
CC mm/swap_slots.o
CC arch/x86/kernel/ksysfs.o
CC drivers/input/serio/i8042.o
CC fs/nfs/nfs4namespace.o
CC net/mac80211/cfg.o
CC net/wireless/pmsr.o
CC drivers/acpi/acpica/uterror.o
GEN net/wireless/shipped-certs.c
CC fs/nfs/nfs4getroot.o
CC net/mac80211/ethtool.o
CC mm/dmapool.o
CC kernel/task_work.o
CC lib/assoc_array.o
CC drivers/ata/libata-pmp.o
CC kernel/extable.o
CC drivers/acpi/event.o
CC drivers/usb/core/message.o
CC net/core/failover.o
CC fs/nfs/nfs4client.o
CC fs/ioctl.o
CC drivers/scsi/virtio_scsi.o
CC drivers/scsi/sd.o
CC net/ipv4/tcp_rate.o
CC net/mac80211/rx.o
CC kernel/params.o
CC drivers/net/phy/mdio_bus.o
CC mm/hugetlb.o
CC drivers/acpi/acpica/uteval.o
CC mm/mmu_notifier.o
CC drivers/usb/core/driver.o
CC fs/readdir.o
CC arch/x86/kernel/bootflag.o
CC fs/select.o
CC drivers/gpu/drm/i915/gt/gen2_engine_cs.o
CC fs/nfs/nfs4session.o
CC drivers/gpu/drm/i915/gt/gen6_engine_cs.o
CC drivers/usb/core/config.o
CC kernel/kthread.o
CC drivers/acpi/evged.o
CC lib/bitrev.o
CC drivers/acpi/acpica/utglobal.o
CC kernel/sys_ni.o
CC drivers/pcmcia/pcmcia_resource.o
CC drivers/acpi/acpica/uthex.o
CC drivers/usb/core/file.o
CC net/ipv6/xfrm6_state.o
CC drivers/acpi/sysfs.o
CC net/ipv4/tcp_recovery.o
CC drivers/input/serio/serport.o
AR drivers/usb/phy/built-in.a
CC drivers/input/serio/libps2.o
CC fs/nfs/dns_resolve.o
CC arch/x86/kernel/e820.o
AR net/core/built-in.a
CC drivers/ata/libata-acpi.o
CC arch/x86/kernel/pci-dma.o
CC lib/crc-ccitt.o
CC drivers/ata/libata-pata-timings.o
CC drivers/ata/ahci.o
CC mm/migrate.o
CC drivers/acpi/acpica/utids.o
CC lib/crc16.o
HOSTCC lib/gen_crc32table
CC lib/xxhash.o
CC drivers/scsi/sr.o
CC drivers/scsi/sr_ioctl.o
CC drivers/scsi/sr_vendor.o
CC lib/genalloc.o
CC lib/percpu_counter.o
CC drivers/scsi/sg.o
CC lib/audit.o
CC drivers/scsi/scsi_sysfs.o
CC fs/dcache.o
CC drivers/usb/core/buffer.o
CC drivers/usb/core/sysfs.o
CC drivers/gpu/drm/i915/gt/gen6_ppgtt.o
CC drivers/usb/core/endpoint.o
CC drivers/net/phy/mdio_device.o
AR net/sunrpc/built-in.a
CC drivers/net/phy/swphy.o
CC fs/inode.o
CC mm/page_counter.o
CC kernel/nsproxy.o
CC net/ipv4/tcp_ulp.o
CC drivers/acpi/acpica/utinit.o
CC drivers/acpi/acpica/utlock.o
AR drivers/input/serio/built-in.a
CC drivers/input/keyboard/atkbd.o
CC arch/x86/kernel/quirks.o
CC drivers/pcmcia/cistpl.o
CC drivers/pcmcia/pcmcia_cis.o
CC net/ipv6/xfrm6_input.o
CC net/ipv4/tcp_offload.o
CC drivers/input/mouse/psmouse-base.o
CC drivers/input/mouse/synaptics.o
CC lib/syscall.o
CC fs/nfs/nfs4trace.o
CC lib/errname.o
CC drivers/input/mouse/focaltech.o
CC fs/nfs/nfs4sysctl.o
CC drivers/input/mouse/alps.o
CC drivers/acpi/property.o
CC drivers/input/mouse/byd.o
CC mm/hugetlb_cgroup.o
CC drivers/acpi/acpica/utmath.o
CC lib/nlattr.o
CC lib/cpu_rmap.o
CC net/ipv4/tcp_plb.o
CC drivers/net/phy/fixed_phy.o
CC drivers/ata/libahci.o
CC drivers/ata/ata_piix.o
CC drivers/net/phy/realtek.o
CC net/wireless/shipped-certs.o
CC fs/attr.o
CC drivers/pcmcia/rsrc_mgr.o
CC drivers/pcmcia/rsrc_nonstatic.o
CC net/ipv6/xfrm6_output.o
CC net/mac80211/spectmgmt.o
AR drivers/gpu/drm/solomon/built-in.a
CC drivers/gpu/drm/i915/gt/gen7_renderclear.o
CC drivers/gpu/drm/i915/gt/gen8_engine_cs.o
CC drivers/usb/core/devio.o
CC drivers/rtc/lib.o
CC drivers/acpi/acpica/utmisc.o
CC arch/x86/kernel/kdebugfs.o
CC drivers/usb/core/notify.o
CC net/ipv4/datagram.o
CC drivers/input/mouse/logips2pp.o
CC net/ipv4/raw.o
CC kernel/notifier.o
CC drivers/input/mouse/lifebook.o
CC mm/early_ioremap.o
CC drivers/input/mouse/trackpoint.o
AR drivers/input/keyboard/built-in.a
CC drivers/input/mouse/cypress_ps2.o
CC mm/secretmem.o
CC drivers/acpi/acpica/utmutex.o
AR drivers/scsi/built-in.a
CC drivers/acpi/acpica/utnonansi.o
CC drivers/acpi/acpica/utobject.o
CC net/ipv4/udp.o
CC drivers/usb/core/generic.o
CC net/mac80211/tx.o
CC kernel/ksysfs.o
CC kernel/cred.o
AR drivers/input/joystick/built-in.a
AR drivers/input/tablet/built-in.a
CC kernel/reboot.o
CC fs/bad_inode.o
CC drivers/rtc/class.o
CC drivers/acpi/debugfs.o
AR drivers/input/touchscreen/built-in.a
CC arch/x86/kernel/alternative.o
AR drivers/input/misc/built-in.a
CC drivers/acpi/acpi_lpat.o
CC drivers/input/input.o
CC drivers/acpi/acpi_pcc.o
CC drivers/input/input-compat.o
CC drivers/pcmcia/yenta_socket.o
CC drivers/input/input-mt.o
CC fs/file.o
CC kernel/async.o
CC mm/hmm.o
CC lib/dynamic_queue_limits.o
CC net/mac80211/key.o
CC drivers/acpi/acpica/utosi.o
CC kernel/range.o
CC drivers/input/input-poller.o
AR drivers/net/phy/built-in.a
AR drivers/net/pcs/built-in.a
CC drivers/input/mouse/psmouse-smbus.o
CC drivers/usb/core/quirks.o
AR drivers/net/ethernet/3com/built-in.a
CC arch/x86/kernel/i8253.o
CC drivers/net/ethernet/8390/ne2k-pci.o
CC arch/x86/kernel/hw_breakpoint.o
CC drivers/net/ethernet/8390/8390.o
CC [M] drivers/gpu/drm/scheduler/sched_main.o
CC drivers/gpu/drm/drm_aperture.o
CC drivers/rtc/interface.o
HOSTCC drivers/gpu/drm/xe/xe_gen_wa_oob
CC drivers/rtc/nvmem.o
CC mm/memfd.o
CC net/mac80211/util.o
CC drivers/ata/pata_amd.o
CC net/ipv6/xfrm6_protocol.o
CC net/ipv4/udplite.o
CC fs/filesystems.o
CC drivers/acpi/ac.o
CC drivers/usb/core/devices.o
CC drivers/acpi/button.o
GEN xe_wa_oob.c xe_wa_oob.h
CC net/mac80211/parse.o
CC drivers/acpi/acpica/utownerid.o
CC [M] drivers/gpu/drm/xe/xe_bb.o
CC drivers/gpu/drm/i915/gt/gen8_ppgtt.o
CC mm/ptdump.o
CC drivers/input/ff-core.o
CC drivers/ata/pata_oldpiix.o
CC arch/x86/kernel/tsc.o
CC drivers/gpu/drm/drm_atomic.o
CC drivers/gpu/drm/drm_atomic_uapi.o
CC drivers/input/touchscreen.o
CC lib/glob.o
CC drivers/usb/core/phy.o
CC kernel/smpboot.o
CC drivers/usb/core/port.o
CC kernel/ucount.o
CC drivers/acpi/acpica/utpredef.o
CC drivers/acpi/fan_core.o
AR drivers/input/mouse/built-in.a
CC mm/execmem.o
CC net/mac80211/wme.o
CC drivers/usb/core/hcd-pci.o
CC drivers/rtc/dev.o
CC fs/namespace.o
CC net/mac80211/chan.o
CC [M] drivers/gpu/drm/scheduler/sched_fence.o
CC lib/strncpy_from_user.o
CC arch/x86/kernel/tsc_msr.o
CC drivers/input/ff-memless.o
CC drivers/i2c/algos/i2c-algo-bit.o
CC drivers/acpi/fan_attr.o
CC drivers/acpi/acpica/utresdecode.o
AR drivers/pcmcia/built-in.a
CC [M] drivers/gpu/drm/xe/xe_bo.o
CC drivers/usb/core/usb-acpi.o
CC drivers/i2c/busses/i2c-i801.o
CC drivers/gpu/drm/drm_auth.o
CC drivers/gpu/drm/drm_blend.o
CC arch/x86/kernel/io_delay.o
CC drivers/input/sparse-keymap.o
CC net/mac80211/trace.o
CC drivers/ata/pata_sch.o
CC [M] drivers/gpu/drm/scheduler/sched_entity.o
AR drivers/net/ethernet/8390/built-in.a
AR drivers/net/wireless/admtek/built-in.a
CC kernel/regset.o
AR drivers/net/wireless/ath/built-in.a
AR drivers/net/ethernet/adaptec/built-in.a
AR drivers/net/ethernet/agere/built-in.a
CC drivers/rtc/proc.o
AR drivers/net/wireless/atmel/built-in.a
AR drivers/net/ethernet/alacritech/built-in.a
AR drivers/net/wireless/broadcom/built-in.a
CC lib/strnlen_user.o
AR drivers/net/ethernet/alteon/built-in.a
AR drivers/net/wireless/intel/built-in.a
CC kernel/ksyms_common.o
AR drivers/net/ethernet/amazon/built-in.a
AR drivers/net/wireless/intersil/built-in.a
AR drivers/net/ethernet/amd/built-in.a
AR drivers/net/wireless/marvell/built-in.a
AR drivers/net/ethernet/aquantia/built-in.a
AR drivers/net/wireless/mediatek/built-in.a
AR drivers/net/ethernet/arc/built-in.a
AR drivers/net/wireless/microchip/built-in.a
AR drivers/net/ethernet/asix/built-in.a
AR mm/built-in.a
AR drivers/net/wireless/purelifi/built-in.a
CC drivers/input/vivaldi-fmap.o
CC drivers/rtc/sysfs.o
AR drivers/net/ethernet/atheros/built-in.a
CC net/ipv6/netfilter.o
CC net/ipv6/proc.o
AR drivers/net/wireless/quantenna/built-in.a
CC drivers/rtc/rtc-mc146818-lib.o
AR drivers/net/ethernet/cadence/built-in.a
AR drivers/net/wireless/ralink/built-in.a
CC arch/x86/kernel/rtc.o
CC drivers/net/ethernet/broadcom/bnx2.o
AR drivers/net/wireless/realtek/built-in.a
CC drivers/net/ethernet/broadcom/tg3.o
AR drivers/net/wireless/rsi/built-in.a
CC drivers/acpi/acpica/utresrc.o
AR drivers/net/wireless/silabs/built-in.a
CC lib/net_utils.o
CC lib/sg_pool.o
AR drivers/net/wireless/st/built-in.a
CC drivers/acpi/acpica/utstate.o
AR drivers/net/wireless/ti/built-in.a
CC drivers/i2c/i2c-boardinfo.o
AR drivers/i2c/muxes/built-in.a
CC drivers/i2c/i2c-core-base.o
CC lib/stackdepot.o
AR drivers/net/wireless/zydas/built-in.a
CC drivers/rtc/rtc-cmos.o
AR drivers/net/wireless/virtual/built-in.a
AR drivers/net/wireless/built-in.a
CC drivers/ata/pata_mpiix.o
CC drivers/ata/ata_generic.o
CC drivers/usb/mon/mon_main.o
CC kernel/groups.o
CC drivers/usb/mon/mon_stat.o
CC drivers/input/input-leds.o
CC drivers/gpu/drm/drm_bridge.o
CC drivers/acpi/acpica/utstring.o
CC drivers/input/evdev.o
AR drivers/usb/core/built-in.a
CC net/mac80211/mlme.o
CC drivers/usb/host/pci-quirks.o
CC arch/x86/kernel/resource.o
CC drivers/usb/class/usblp.o
AS arch/x86/kernel/irqflags.o
CC lib/asn1_decoder.o
CC drivers/usb/storage/scsiglue.o
CC arch/x86/kernel/static_call.o
AR drivers/usb/misc/built-in.a
GEN lib/oid_registry_data.c
CC drivers/usb/early/ehci-dbgp.o
AR drivers/i2c/algos/built-in.a
LD [M] drivers/gpu/drm/scheduler/gpu-sched.o
CC [M] drivers/gpu/drm/xe/xe_bo_evict.o
CC [M] drivers/gpu/drm/xe/xe_devcoredump.o
AR fs/nfs/built-in.a
CC [M] drivers/gpu/drm/xe/xe_device.o
CC lib/ucs2_string.o
CC drivers/usb/storage/protocol.o
CC drivers/gpu/drm/i915/gt/intel_breadcrumbs.o
CC drivers/usb/host/ehci-hcd.o
CC fs/seq_file.o
CC drivers/acpi/fan_hwmon.o
CC arch/x86/kernel/process.o
CC drivers/gpu/drm/i915/gt/intel_context.o
CC lib/sbitmap.o
CC drivers/acpi/acpica/utstrsuppt.o
CC net/mac80211/tdls.o
AR drivers/i3c/built-in.a
AR drivers/media/i2c/built-in.a
AR drivers/media/tuners/built-in.a
AR drivers/pps/clients/built-in.a
CC drivers/usb/mon/mon_text.o
AR drivers/media/rc/keymaps/built-in.a
AR drivers/pps/generators/built-in.a
AR drivers/media/rc/built-in.a
CC drivers/pps/pps.o
AR drivers/i2c/busses/built-in.a
CC net/mac80211/ocb.o
AR drivers/media/common/b2c2/built-in.a
CC net/mac80211/airtime.o
AR drivers/media/common/saa7146/built-in.a
CC net/mac80211/eht.o
AR drivers/media/common/siano/built-in.a
CC arch/x86/kernel/ptrace.o
CC net/mac80211/led.o
CC fs/xattr.o
AR drivers/media/common/v4l2-tpg/built-in.a
AR drivers/media/common/videobuf2/built-in.a
CC net/ipv4/udp_offload.o
AR drivers/media/common/built-in.a
CC lib/group_cpus.o
CC kernel/kcmp.o
AR drivers/ata/built-in.a
AR drivers/media/platform/allegro-dvt/built-in.a
AR drivers/media/pci/ttpci/built-in.a
AR drivers/media/platform/amlogic/meson-ge2d/built-in.a
AR drivers/media/pci/b2c2/built-in.a
AR drivers/media/platform/amlogic/built-in.a
AR drivers/media/pci/pluto2/built-in.a
AR drivers/media/platform/amphion/built-in.a
AR drivers/media/pci/dm1105/built-in.a
AR drivers/media/platform/aspeed/built-in.a
AR drivers/rtc/built-in.a
AR drivers/media/pci/pt1/built-in.a
CC kernel/freezer.o
AR drivers/media/pci/pt3/built-in.a
AR drivers/media/platform/atmel/built-in.a
CC drivers/acpi/acpica/utstrtoul64.o
AR drivers/media/platform/broadcom/built-in.a
AR drivers/media/pci/mantis/built-in.a
AR drivers/media/platform/cadence/built-in.a
AR drivers/media/pci/ngene/built-in.a
AR drivers/media/usb/b2c2/built-in.a
AR drivers/media/pci/ddbridge/built-in.a
CC drivers/acpi/acpi_video.o
CC fs/libfs.o
AR drivers/media/usb/dvb-usb/built-in.a
AR drivers/media/pci/saa7146/built-in.a
AR drivers/media/platform/chips-media/coda/built-in.a
AR drivers/media/usb/dvb-usb-v2/built-in.a
AR drivers/media/platform/chips-media/wave5/built-in.a
AR drivers/media/pci/smipcie/built-in.a
AR drivers/media/platform/chips-media/built-in.a
AR drivers/media/usb/s2255/built-in.a
AR drivers/media/pci/netup_unidvb/built-in.a
CC fs/fs-writeback.o
AR drivers/media/usb/siano/built-in.a
AR drivers/media/platform/imagination/built-in.a
AR drivers/media/pci/intel/ipu3/built-in.a
AR drivers/media/usb/ttusb-budget/built-in.a
AR drivers/media/platform/intel/built-in.a
CC fs/pnode.o
AR drivers/media/pci/intel/ivsc/built-in.a
AR drivers/media/usb/ttusb-dec/built-in.a
AR drivers/media/platform/marvell/built-in.a
AR drivers/media/pci/intel/built-in.a
AR drivers/media/usb/built-in.a
AR drivers/media/pci/built-in.a
AR drivers/media/platform/mediatek/jpeg/built-in.a
CC net/ipv6/syncookies.o
AR drivers/usb/class/built-in.a
CC drivers/usb/storage/transport.o
CC drivers/usb/storage/usb.o
CC drivers/ptp/ptp_clock.o
AR drivers/media/platform/mediatek/mdp/built-in.a
CC drivers/usb/host/ehci-pci.o
CC drivers/power/supply/power_supply_core.o
AR drivers/media/platform/mediatek/vcodec/common/built-in.a
CC fs/splice.o
AR drivers/input/built-in.a
CC drivers/hwmon/hwmon.o
AR drivers/media/platform/mediatek/vcodec/encoder/built-in.a
AR drivers/usb/early/built-in.a
CC arch/x86/kernel/tls.o
CC kernel/profile.o
AR drivers/media/platform/mediatek/vcodec/decoder/built-in.a
AR drivers/media/platform/mediatek/vcodec/built-in.a
AR drivers/media/platform/mediatek/vpu/built-in.a
AR drivers/media/platform/mediatek/mdp3/built-in.a
AR drivers/media/platform/mediatek/built-in.a
CC drivers/pps/kapi.o
AR drivers/media/platform/microchip/built-in.a
AR drivers/media/platform/nuvoton/built-in.a
CC drivers/pps/sysfs.o
CC drivers/acpi/acpica/utxface.o
AR drivers/media/platform/nvidia/tegra-vde/built-in.a
AR drivers/media/platform/nvidia/built-in.a
CC lib/fw_table.o
AR drivers/media/platform/nxp/dw100/built-in.a
CC [M] drivers/gpu/drm/xe/xe_device_sysfs.o
AR drivers/media/platform/nxp/imx-jpeg/built-in.a
AR drivers/media/platform/nxp/imx8-isi/built-in.a
AR drivers/media/platform/nxp/built-in.a
CC drivers/acpi/video_detect.o
CC drivers/usb/mon/mon_bin.o
AR drivers/media/platform/qcom/camss/built-in.a
CC net/ipv4/arp.o
AR drivers/media/platform/qcom/venus/built-in.a
AR drivers/media/platform/qcom/built-in.a
CC kernel/stacktrace.o
AR drivers/media/platform/raspberrypi/pisp_be/built-in.a
AR drivers/media/platform/raspberrypi/built-in.a
CC drivers/i2c/i2c-core-smbus.o
AR drivers/media/platform/renesas/rcar-vin/built-in.a
AR drivers/media/platform/renesas/rzg2l-cru/built-in.a
CC net/ipv4/icmp.o
CC net/mac80211/pm.o
AR drivers/media/platform/renesas/vsp1/built-in.a
AR drivers/media/platform/renesas/built-in.a
CC arch/x86/kernel/step.o
AR drivers/media/platform/rockchip/rga/built-in.a
AR drivers/media/platform/rockchip/rkisp1/built-in.a
AR drivers/media/platform/rockchip/built-in.a
CC drivers/acpi/acpica/utxfinit.o
AR drivers/media/platform/samsung/exynos-gsc/built-in.a
CC drivers/gpu/drm/i915/gt/intel_context_sseu.o
CC net/mac80211/rc80211_minstrel_ht.o
CC drivers/i2c/i2c-core-acpi.o
AR drivers/media/platform/samsung/exynos4-is/built-in.a
CC drivers/power/supply/power_supply_sysfs.o
AR drivers/media/platform/samsung/s3c-camif/built-in.a
AR drivers/media/platform/samsung/s5p-jpeg/built-in.a
AR drivers/media/platform/samsung/s5p-g2d/built-in.a
CC drivers/usb/host/ohci-hcd.o
CC net/ipv6/calipso.o
AR drivers/media/platform/samsung/s5p-mfc/built-in.a
AR drivers/pps/built-in.a
AR drivers/media/platform/samsung/built-in.a
CC fs/sync.o
CC fs/utimes.o
AR drivers/thermal/broadcom/built-in.a
AR drivers/media/platform/st/sti/bdisp/built-in.a
AR drivers/thermal/renesas/built-in.a
AR drivers/media/platform/st/sti/c8sectpfe/built-in.a
AR drivers/thermal/samsung/built-in.a
AR drivers/media/platform/st/sti/delta/built-in.a
CC drivers/thermal/intel/intel_tcc.o
AR drivers/thermal/st/built-in.a
AR drivers/media/platform/st/sti/hva/built-in.a
AR lib/lib.a
CC arch/x86/kernel/i8237.o
CC arch/x86/kernel/stacktrace.o
GEN lib/crc32table.h
CC lib/oid_registry.o
AR drivers/media/platform/st/stm32/built-in.a
CC arch/x86/kernel/reboot.o
AR drivers/media/platform/st/built-in.a
CC arch/x86/kernel/msr.o
CC fs/d_path.o
AR drivers/media/platform/sunxi/sun4i-csi/built-in.a
AR drivers/media/platform/sunxi/sun6i-csi/built-in.a
CC arch/x86/kernel/cpuid.o
CC drivers/usb/storage/initializers.o
AR drivers/media/platform/sunxi/sun6i-mipi-csi2/built-in.a
AR drivers/media/platform/sunxi/sun8i-a83t-mipi-csi2/built-in.a
CC [M] drivers/gpu/drm/xe/xe_dma_buf.o
AR drivers/media/platform/sunxi/sun8i-di/built-in.a
AR drivers/media/platform/sunxi/sun8i-rotate/built-in.a
CC drivers/ptp/ptp_chardev.o
AR drivers/media/platform/sunxi/built-in.a
CC drivers/acpi/acpica/utxferror.o
CC kernel/dma.o
CC [M] drivers/gpu/drm/xe/xe_drm_client.o
AR drivers/media/platform/ti/am437x/built-in.a
AR drivers/media/platform/ti/cal/built-in.a
AR drivers/media/platform/ti/vpe/built-in.a
CC drivers/thermal/intel/therm_throt.o
AR drivers/media/platform/ti/davinci/built-in.a
AR drivers/media/platform/ti/j721e-csi2rx/built-in.a
CC drivers/acpi/processor_driver.o
AR drivers/media/platform/ti/omap/built-in.a
CC drivers/usb/storage/sierra_ms.o
CC drivers/acpi/acpica/utxfmutex.o
AR drivers/media/platform/ti/omap3isp/built-in.a
AR drivers/media/platform/ti/built-in.a
CC drivers/power/supply/power_supply_leds.o
CC drivers/acpi/processor_thermal.o
AR drivers/net/usb/built-in.a
CC lib/crc32.o
AR drivers/media/platform/verisilicon/built-in.a
CC drivers/power/supply/power_supply_hwmon.o
CC drivers/acpi/processor_idle.o
AR drivers/media/platform/via/built-in.a
AR drivers/media/platform/xilinx/built-in.a
AR drivers/media/platform/built-in.a
AR drivers/hwmon/built-in.a
CC drivers/acpi/processor_throttling.o
AR drivers/watchdog/built-in.a
CC drivers/acpi/processor_perflib.o
AR drivers/media/mmc/siano/built-in.a
AR drivers/media/mmc/built-in.a
AR drivers/media/firewire/built-in.a
CC fs/stack.o
CC drivers/md/md.o
AR drivers/media/spi/built-in.a
AR drivers/usb/mon/built-in.a
AR drivers/media/test-drivers/built-in.a
CC fs/fs_struct.o
AR drivers/media/built-in.a
CC drivers/md/md-bitmap.o
AR drivers/thermal/qcom/built-in.a
AR drivers/thermal/tegra/built-in.a
CC arch/x86/kernel/early-quirks.o
CC net/mac80211/wbrf.o
CC drivers/gpu/drm/i915/gt/intel_engine_cs.o
CC kernel/smp.o
CC drivers/cpufreq/cpufreq.o
AR drivers/acpi/acpica/built-in.a
CC drivers/gpu/drm/i915/gt/intel_engine_heartbeat.o
CC drivers/usb/storage/option_ms.o
CC drivers/cpufreq/freq_table.o
CC drivers/acpi/container.o
CC fs/statfs.o
CC arch/x86/kernel/smp.o
CC drivers/md/md-autodetect.o
CC kernel/uid16.o
AR drivers/power/supply/built-in.a
AR drivers/power/built-in.a
CC drivers/gpu/drm/i915/gt/intel_engine_pm.o
AR lib/built-in.a
CC [M] drivers/gpu/drm/xe/xe_exec.o
CC drivers/cpuidle/governors/menu.o
CC [M] drivers/gpu/drm/xe/xe_execlist.o
CC drivers/cpuidle/cpuidle.o
CC drivers/cpuidle/driver.o
CC drivers/i2c/i2c-smbus.o
CC drivers/cpuidle/governor.o
CC drivers/acpi/thermal_lib.o
CC drivers/cpuidle/governors/haltpoll.o
CC drivers/ptp/ptp_sysfs.o
CC drivers/cpuidle/sysfs.o
CC drivers/usb/host/ohci-pci.o
CC fs/fs_pin.o
CC drivers/net/mii.o
CC drivers/acpi/thermal.o
CC drivers/net/loopback.o
CC drivers/cpufreq/cpufreq_performance.o
CC drivers/usb/storage/usual-tables.o
CC net/ipv4/devinet.o
CC net/ipv4/af_inet.o
CC [M] drivers/thermal/intel/x86_pkg_temp_thermal.o
CC net/ipv6/ah6.o
CC drivers/cpuidle/poll_state.o
CC net/ipv6/esp6.o
CC net/ipv6/sit.o
CC fs/nsfs.o
CC drivers/ptp/ptp_vclock.o
CC net/ipv6/addrconf_core.o
CC fs/fs_types.o
CC fs/fs_context.o
CC drivers/usb/host/uhci-hcd.o
CC drivers/cpuidle/cpuidle-haltpoll.o
CC net/ipv4/igmp.o
CC drivers/gpu/drm/i915/gt/intel_engine_user.o
CC drivers/gpu/drm/i915/gt/intel_execlists_submission.o
CC drivers/md/dm.o
CC net/ipv6/exthdrs_core.o
CC drivers/acpi/nhlt.o
CC drivers/net/netconsole.o
CC drivers/ptp/ptp_kvm_x86.o
AR drivers/thermal/mediatek/built-in.a
CC drivers/ptp/ptp_kvm_common.o
AR drivers/i2c/built-in.a
CC [M] drivers/gpu/drm/xe/xe_exec_queue.o
CC drivers/cpufreq/cpufreq_userspace.o
AR drivers/mmc/built-in.a
CC drivers/md/dm-table.o
AR drivers/ufs/built-in.a
CC drivers/cpufreq/cpufreq_ondemand.o
AR drivers/usb/storage/built-in.a
CC drivers/cpufreq/cpufreq_governor.o
CC arch/x86/kernel/smpboot.o
CC kernel/kallsyms.o
AR drivers/leds/trigger/built-in.a
AR drivers/leds/blink/built-in.a
AR drivers/cpuidle/governors/built-in.a
AR drivers/leds/simple/built-in.a
CC drivers/leds/led-core.o
CC drivers/thermal/thermal_core.o
CC drivers/leds/led-class.o
AR drivers/thermal/intel/built-in.a
CC drivers/acpi/acpi_memhotplug.o
CC drivers/net/virtio_net.o
CC drivers/cpufreq/cpufreq_governor_attr_set.o
CC kernel/acct.o
CC fs/fs_parser.o
CC drivers/leds/led-triggers.o
AR drivers/cpuidle/built-in.a
AR drivers/net/ethernet/brocade/built-in.a
AR drivers/firmware/arm_ffa/built-in.a
AR drivers/net/ethernet/cavium/common/built-in.a
AR drivers/firmware/arm_scmi/built-in.a
AR drivers/net/ethernet/cavium/thunder/built-in.a
AR drivers/firmware/broadcom/built-in.a
AR drivers/net/ethernet/cavium/liquidio/built-in.a
AR drivers/firmware/cirrus/built-in.a
AR drivers/net/ethernet/cavium/octeon/built-in.a
AR drivers/net/ethernet/cavium/built-in.a
AR drivers/firmware/meson/built-in.a
CC drivers/usb/host/xhci.o
CC drivers/gpu/drm/i915/gt/intel_ggtt.o
AR drivers/net/ethernet/chelsio/built-in.a
AR drivers/firmware/microchip/built-in.a
CC drivers/acpi/ioapic.o
CC arch/x86/kernel/tsc_sync.o
AR drivers/firmware/imx/built-in.a
AR drivers/firmware/psci/built-in.a
CC drivers/thermal/thermal_sysfs.o
AR drivers/firmware/qcom/built-in.a
AR drivers/firmware/smccc/built-in.a
CC drivers/net/net_failover.o
AR drivers/firmware/tegra/built-in.a
CC drivers/firmware/efi/efi-bgrt.o
CC drivers/firmware/efi/libstub/efi-stub-helper.o
CC drivers/usb/host/xhci-mem.o
AR drivers/net/ethernet/cisco/built-in.a
CC fs/fsopen.o
AR drivers/ptp/built-in.a
AR drivers/net/ethernet/cortina/built-in.a
AR drivers/net/ethernet/dec/tulip/built-in.a
AR drivers/firmware/xilinx/built-in.a
CC drivers/usb/host/xhci-ext-caps.o
CC drivers/cpufreq/acpi-cpufreq.o
AR drivers/net/ethernet/dec/built-in.a
CC drivers/usb/host/xhci-ring.o
CC drivers/thermal/thermal_trip.o
CC drivers/usb/host/xhci-hub.o
CC drivers/usb/host/xhci-dbg.o
CC drivers/gpu/drm/i915/gt/intel_ggtt_fencing.o
CC drivers/thermal/thermal_helpers.o
CC drivers/cpufreq/amd-pstate.o
CC net/ipv4/fib_frontend.o
CC drivers/gpu/drm/drm_cache.o
CC drivers/firmware/efi/efi.o
CC net/ipv6/ip6_checksum.o
CC drivers/usb/host/xhci-trace.o
AR net/wireless/built-in.a
CC [M] drivers/gpu/drm/xe/xe_force_wake.o
AR drivers/leds/built-in.a
CC drivers/firmware/dmi_scan.o
CC net/ipv6/ip6_icmp.o
AR drivers/crypto/stm32/built-in.a
AR drivers/crypto/xilinx/built-in.a
AR drivers/crypto/hisilicon/built-in.a
CC drivers/clocksource/acpi_pm.o
AR drivers/crypto/intel/keembay/built-in.a
AR drivers/crypto/starfive/built-in.a
CC drivers/gpu/drm/i915/gt/intel_gt.o
AR drivers/crypto/intel/ixp4xx/built-in.a
CC fs/init.o
AR drivers/crypto/intel/built-in.a
CC net/ipv6/output_core.o
AR drivers/crypto/built-in.a
CC arch/x86/kernel/setup_percpu.o
CC arch/x86/kernel/mpparse.o
CC net/ipv6/protocol.o
CC drivers/hid/usbhid/hid-core.o
CC kernel/vmcore_info.o
CC drivers/acpi/battery.o
CC kernel/elfcorehdr.o
CC drivers/hid/usbhid/hiddev.o
CC drivers/firmware/efi/vars.o
CC drivers/usb/host/xhci-debugfs.o
CC drivers/firmware/efi/libstub/gop.o
CC drivers/gpu/drm/i915/gt/intel_gt_buffer_pool.o
CC drivers/firmware/dmi-id.o
CC net/ipv6/ip6_offload.o
CC [M] drivers/gpu/drm/xe/xe_ggtt.o
CC fs/kernel_read_file.o
CC drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.o
CC net/ipv4/fib_semantics.o
CC drivers/gpu/drm/drm_client.o
CC drivers/cpufreq/amd-pstate-trace.o
CC drivers/thermal/thermal_hwmon.o
CC drivers/thermal/gov_step_wise.o
CC [M] drivers/gpu/drm/xe/xe_gpu_scheduler.o
CC drivers/clocksource/i8253.o
CC drivers/md/dm-target.o
CC drivers/firmware/memmap.o
CC drivers/usb/host/xhci-pci.o
CC kernel/crash_reserve.o
AR drivers/platform/x86/amd/built-in.a
CC net/ipv6/tcpv6_offload.o
CC net/ipv4/fib_trie.o
CC drivers/platform/x86/wmi.o
AR drivers/platform/x86/intel/built-in.a
CC drivers/platform/x86/wmi-bmof.o
AR drivers/platform/surface/built-in.a
CC drivers/firmware/efi/libstub/secureboot.o
CC fs/mnt_idmapping.o
CC drivers/cpufreq/intel_pstate.o
CC drivers/firmware/efi/reboot.o
CC drivers/platform/x86/eeepc-laptop.o
CC drivers/gpu/drm/i915/gt/intel_gt_clock_utils.o
CC drivers/firmware/efi/memattr.o
CC [M] drivers/gpu/drm/xe/xe_gsc.o
CC drivers/thermal/gov_user_space.o
CC net/ipv6/exthdrs_offload.o
CC drivers/gpu/drm/i915/gt/intel_gt_debugfs.o
CC arch/x86/kernel/trace_clock.o
AR drivers/clocksource/built-in.a
CC drivers/firmware/efi/libstub/tpm.o
CC drivers/mailbox/mailbox.o
CC drivers/acpi/bgrt.o
CC net/ipv6/inet6_hashtables.o
CC drivers/platform/x86/p2sb.o
CC net/ipv4/fib_notifier.o
CC drivers/gpu/drm/i915/gt/intel_gt_engines_debugfs.o
CC drivers/mailbox/pcc.o
CC net/ipv6/mcast_snoop.o
CC arch/x86/kernel/trace.o
CC arch/x86/kernel/rethook.o
CC drivers/gpu/drm/i915/gt/intel_gt_irq.o
CC [M] drivers/gpu/drm/xe/xe_gsc_proxy.o
CC [M] drivers/gpu/drm/xe/xe_gsc_submit.o
CC drivers/md/dm-linear.o
CC [M] drivers/gpu/drm/xe/xe_gt.o
CC fs/remap_range.o
AR drivers/thermal/built-in.a
AR drivers/perf/built-in.a
CC drivers/hid/usbhid/hid-pidff.o
AR drivers/hwtracing/intel_th/built-in.a
CC [M] drivers/gpu/drm/xe/xe_gt_ccs_mode.o
CC fs/pidfs.o
AR drivers/android/built-in.a
CC drivers/firmware/efi/libstub/file.o
CC drivers/firmware/efi/tpm.o
CC kernel/kexec_core.o
CC drivers/acpi/spcr.o
AR drivers/net/ethernet/dlink/built-in.a
AR drivers/net/ethernet/emulex/built-in.a
AR drivers/net/ethernet/engleder/built-in.a
AR drivers/net/ethernet/ezchip/built-in.a
AR drivers/net/ethernet/fujitsu/built-in.a
CC net/ipv4/inet_fragment.o
AR drivers/net/ethernet/fungible/built-in.a
AR drivers/net/ethernet/google/built-in.a
CC net/ipv4/ping.o
CC drivers/firmware/efi/memmap.o
AR drivers/net/ethernet/huawei/built-in.a
CC drivers/net/ethernet/intel/e1000/e1000_main.o
CC fs/buffer.o
CC drivers/net/ethernet/intel/e1000e/82571.o
CC drivers/net/ethernet/intel/e1000e/ich8lan.o
CC fs/mpage.o
CC drivers/net/ethernet/intel/e100.o
CC drivers/firmware/efi/libstub/mem.o
CC drivers/gpu/drm/i915/gt/intel_gt_mcr.o
AR drivers/mailbox/built-in.a
CC arch/x86/kernel/vmcore_info_32.o
AR drivers/nvmem/layouts/built-in.a
CC drivers/firmware/efi/libstub/random.o
CC drivers/nvmem/core.o
CC drivers/gpu/drm/i915/gt/intel_gt_pm.o
CC drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.o
CC drivers/gpu/drm/i915/gt/intel_gt_pm_irq.o
AR drivers/platform/x86/built-in.a
AR drivers/platform/built-in.a
CC drivers/firmware/efi/libstub/randomalloc.o
CC drivers/net/ethernet/intel/e1000e/80003es2lan.o
CC drivers/net/ethernet/intel/e1000/e1000_hw.o
CC net/ipv4/ip_tunnel_core.o
CC drivers/md/dm-stripe.o
CC drivers/gpu/drm/i915/gt/intel_gt_requests.o
CC drivers/firmware/efi/libstub/pci.o
CC drivers/md/dm-ioctl.o
CC [M] drivers/gpu/drm/xe/xe_gt_clock.o
CC drivers/firmware/efi/libstub/skip_spaces.o
CC drivers/md/dm-io.o
CC [M] drivers/gpu/drm/xe/xe_gt_freq.o
AR drivers/acpi/built-in.a
CC drivers/md/dm-kcopyd.o
CC drivers/md/dm-sysfs.o
CC drivers/net/ethernet/intel/e1000e/mac.o
CC fs/proc_namespace.o
CC fs/direct-io.o
AR drivers/net/ethernet/i825xx/built-in.a
AR drivers/net/ethernet/microsoft/built-in.a
AR drivers/net/ethernet/litex/built-in.a
AR drivers/net/ethernet/marvell/octeon_ep/built-in.a
AR drivers/net/ethernet/marvell/octeon_ep_vf/built-in.a
AR drivers/net/ethernet/marvell/octeontx2/built-in.a
CC drivers/gpu/drm/i915/gt/intel_gt_sysfs.o
AR drivers/net/ethernet/marvell/prestera/built-in.a
CC drivers/net/ethernet/marvell/sky2.o
CC fs/eventpoll.o
CC net/ipv4/gre_offload.o
AR drivers/usb/host/built-in.a
AR drivers/usb/built-in.a
AR net/mac80211/built-in.a
CC arch/x86/kernel/machine_kexec_32.o
CC drivers/firmware/efi/libstub/lib-cmdline.o
CC drivers/firmware/efi/capsule.o
CC drivers/net/ethernet/intel/e1000/e1000_ethtool.o
CC [M] drivers/gpu/drm/xe/xe_gt_idle.o
AR drivers/hid/usbhid/built-in.a
CC drivers/hid/hid-core.o
AR net/ipv6/built-in.a
CC kernel/crash_core.o
CC drivers/hid/hid-input.o
CC kernel/kexec.o
CC kernel/utsname.o
CC drivers/firmware/efi/esrt.o
CC drivers/firmware/efi/libstub/lib-ctype.o
CC drivers/firmware/efi/libstub/alignedmem.o
CC drivers/net/ethernet/intel/e1000e/manage.o
CC drivers/firmware/efi/libstub/relocate.o
CC drivers/md/dm-stats.o
CC net/ipv4/metrics.o
CC [M] drivers/gpu/drm/xe/xe_gt_mcr.o
AR drivers/cpufreq/built-in.a
AR drivers/net/ethernet/mellanox/built-in.a
CC drivers/net/ethernet/intel/e1000/e1000_param.o
AR drivers/net/ethernet/meta/built-in.a
AR drivers/net/ethernet/micrel/built-in.a
CC drivers/md/dm-rq.o
AR drivers/net/ethernet/microchip/built-in.a
CC kernel/pid_namespace.o
AR drivers/nvmem/built-in.a
CC drivers/gpu/drm/drm_client_modeset.o
CC drivers/gpu/drm/drm_color_mgmt.o
CC drivers/firmware/efi/runtime-wrappers.o
CC drivers/net/ethernet/intel/e1000e/nvm.o
CC drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.o
CC [M] drivers/gpu/drm/xe/xe_gt_pagefault.o
CC kernel/stop_machine.o
CC fs/anon_inodes.o
CC drivers/md/dm-io-rewind.o
CC drivers/firmware/efi/libstub/printk.o
CC net/ipv4/netlink.o
CC drivers/net/ethernet/intel/e1000e/phy.o
CC [M] drivers/gpu/drm/xe/xe_gt_sysfs.o
CC drivers/gpu/drm/i915/gt/intel_gtt.o
CC drivers/firmware/efi/capsule-loader.o
CC drivers/md/dm-builtin.o
CC [M] drivers/gpu/drm/xe/xe_gt_throttle.o
AS arch/x86/kernel/relocate_kernel_32.o
CC fs/signalfd.o
CC arch/x86/kernel/crash_dump_32.o
CC drivers/net/ethernet/intel/e1000e/param.o
CC kernel/audit.o
CC drivers/firmware/efi/libstub/vsprintf.o
CC drivers/firmware/efi/libstub/x86-stub.o
CC net/ipv4/nexthop.o
CC kernel/auditfilter.o
CC net/ipv4/udp_tunnel_stub.o
AR drivers/net/ethernet/broadcom/built-in.a
AR drivers/net/ethernet/mscc/built-in.a
AR drivers/net/ethernet/myricom/built-in.a
CC net/ipv4/ip_tunnel.o
AR drivers/net/ethernet/natsemi/built-in.a
CC [M] drivers/gpu/drm/xe/xe_gt_tlb_invalidation.o
CC drivers/hid/hid-quirks.o
CC drivers/hid/hid-debug.o
CC net/ipv4/sysctl_net_ipv4.o
CC drivers/md/dm-raid1.o
CC drivers/md/dm-log.o
CC [M] drivers/gpu/drm/xe/xe_gt_topology.o
CC kernel/auditsc.o
CC drivers/firmware/efi/libstub/smbios.o
CC drivers/firmware/efi/earlycon.o
CC drivers/net/ethernet/intel/e1000e/ethtool.o
CC drivers/gpu/drm/i915/gt/intel_llc.o
CC kernel/audit_watch.o
CC arch/x86/kernel/crash.o
STUBCPY drivers/firmware/efi/libstub/alignedmem.stub.o
STUBCPY drivers/firmware/efi/libstub/efi-stub-helper.stub.o
STUBCPY drivers/firmware/efi/libstub/file.stub.o
STUBCPY drivers/firmware/efi/libstub/gop.stub.o
CC fs/timerfd.o
STUBCPY drivers/firmware/efi/libstub/lib-cmdline.stub.o
STUBCPY drivers/firmware/efi/libstub/lib-ctype.stub.o
CC net/ipv4/proc.o
CC fs/eventfd.o
CC drivers/gpu/drm/i915/gt/intel_lrc.o
AR drivers/net/ethernet/neterion/built-in.a
CC kernel/audit_fsnotify.o
CC arch/x86/kernel/module.o
CC drivers/md/dm-region-hash.o
CC drivers/net/ethernet/intel/e1000e/netdev.o
STUBCPY drivers/firmware/efi/libstub/mem.stub.o
STUBCPY drivers/firmware/efi/libstub/pci.stub.o
STUBCPY drivers/firmware/efi/libstub/printk.stub.o
STUBCPY drivers/firmware/efi/libstub/random.stub.o
STUBCPY drivers/firmware/efi/libstub/randomalloc.stub.o
CC kernel/audit_tree.o
AR drivers/net/ethernet/netronome/built-in.a
CC [M] drivers/gpu/drm/xe/xe_guc.o
CC net/ipv4/fib_rules.o
AR drivers/net/ethernet/ni/built-in.a
CC drivers/gpu/drm/drm_connector.o
CC fs/aio.o
CC drivers/md/dm-zero.o
CC drivers/gpu/drm/drm_crtc.o
CC drivers/net/ethernet/intel/e1000e/ptp.o
CC drivers/gpu/drm/i915/gt/intel_migrate.o
CC drivers/gpu/drm/i915/gt/intel_mocs.o
CC drivers/net/ethernet/nvidia/forcedeth.o
AR drivers/net/ethernet/oki-semi/built-in.a
CC drivers/hid/hidraw.o
AR drivers/net/ethernet/packetengines/built-in.a
CC net/ipv4/ipmr.o
STUBCPY drivers/firmware/efi/libstub/relocate.stub.o
STUBCPY drivers/firmware/efi/libstub/secureboot.stub.o
STUBCPY drivers/firmware/efi/libstub/skip_spaces.stub.o
STUBCPY drivers/firmware/efi/libstub/tpm.stub.o
STUBCPY drivers/firmware/efi/libstub/vsprintf.stub.o
CC [M] drivers/gpu/drm/xe/xe_guc_ads.o
CC drivers/gpu/drm/i915/gt/intel_ppgtt.o
CC arch/x86/kernel/doublefault_32.o
STUBCPY drivers/firmware/efi/libstub/x86-stub.stub.o
STUBCPY drivers/firmware/efi/libstub/smbios.stub.o
AR drivers/firmware/efi/libstub/lib.a
CC arch/x86/kernel/early_printk.o
CC net/ipv4/ipmr_base.o
AR drivers/firmware/efi/built-in.a
AR drivers/net/ethernet/qlogic/built-in.a
AR drivers/net/ethernet/intel/e1000/built-in.a
AR drivers/firmware/built-in.a
AR drivers/net/ethernet/qualcomm/emac/built-in.a
CC drivers/net/ethernet/realtek/8139too.o
AR drivers/net/ethernet/qualcomm/built-in.a
CC [M] drivers/gpu/drm/xe/xe_guc_ct.o
CC [M] drivers/gpu/drm/xe/xe_guc_db_mgr.o
CC drivers/net/ethernet/realtek/r8169_main.o
AR drivers/net/ethernet/renesas/built-in.a
CC drivers/net/ethernet/realtek/r8169_firmware.o
CC drivers/hid/hid-generic.o
CC drivers/gpu/drm/i915/gt/intel_rc6.o
CC drivers/gpu/drm/i915/gt/intel_region_lmem.o
CC drivers/net/ethernet/realtek/r8169_phy_config.o
CC [M] drivers/gpu/drm/xe/xe_guc_hwconfig.o
CC drivers/hid/hid-a4tech.o
CC fs/locks.o
CC fs/binfmt_misc.o
CC fs/binfmt_script.o
CC drivers/gpu/drm/i915/gt/intel_renderstate.o
CC drivers/gpu/drm/i915/gt/intel_reset.o
CC drivers/gpu/drm/i915/gt/intel_ring.o
CC [M] drivers/gpu/drm/xe/xe_guc_id_mgr.o
CC drivers/hid/hid-apple.o
CC arch/x86/kernel/hpet.o
CC kernel/kprobes.o
AR drivers/md/built-in.a
CC kernel/seccomp.o
CC net/ipv4/syncookies.o
CC net/ipv4/tunnel4.o
CC kernel/relay.o
CC drivers/gpu/drm/drm_displayid.o
CC drivers/hid/hid-belkin.o
CC drivers/gpu/drm/i915/gt/intel_ring_submission.o
CC [M] drivers/gpu/drm/xe/xe_guc_klv_helpers.o
CC [M] drivers/gpu/drm/xe/xe_guc_log.o
CC net/ipv4/ipconfig.o
AR drivers/net/ethernet/marvell/built-in.a
CC kernel/utsname_sysctl.o
AR drivers/net/ethernet/rdc/built-in.a
CC net/ipv4/netfilter.o
CC kernel/delayacct.o
CC arch/x86/kernel/amd_nb.o
CC [M] drivers/gpu/drm/xe/xe_guc_pc.o
CC arch/x86/kernel/kvm.o
AR drivers/net/ethernet/rocker/built-in.a
CC kernel/taskstats.o
AR drivers/net/ethernet/samsung/built-in.a
AR drivers/net/ethernet/seeq/built-in.a
AR drivers/net/ethernet/silan/built-in.a
CC net/ipv4/tcp_cubic.o
AR drivers/net/ethernet/sis/built-in.a
CC drivers/hid/hid-cherry.o
AR drivers/net/ethernet/sfc/built-in.a
CC drivers/gpu/drm/i915/gt/intel_rps.o
CC drivers/gpu/drm/drm_drv.o
CC kernel/tsacct.o
AR drivers/net/ethernet/smsc/built-in.a
CC drivers/gpu/drm/i915/gt/intel_sa_media.o
AR drivers/net/ethernet/socionext/built-in.a
CC fs/binfmt_elf.o
CC net/ipv4/tcp_sigpool.o
AR drivers/net/ethernet/stmicro/built-in.a
CC fs/mbcache.o
CC [M] drivers/gpu/drm/xe/xe_guc_submit.o
CC fs/posix_acl.o
CC [M] drivers/gpu/drm/xe/xe_heci_gsc.o
CC drivers/gpu/drm/drm_dumb_buffers.o
AR drivers/net/ethernet/sun/built-in.a
CC drivers/gpu/drm/drm_edid.o
CC [M] drivers/gpu/drm/xe/xe_hw_engine.o
CC net/ipv4/cipso_ipv4.o
CC [M] drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.o
CC drivers/hid/hid-chicony.o
AR drivers/net/ethernet/tehuti/built-in.a
CC drivers/gpu/drm/i915/gt/intel_sseu.o
AR drivers/net/ethernet/ti/built-in.a
CC net/ipv4/xfrm4_policy.o
CC fs/coredump.o
AR drivers/net/ethernet/vertexcom/built-in.a
CC fs/drop_caches.o
CC drivers/gpu/drm/i915/gt/intel_sseu_debugfs.o
CC fs/sysctls.o
CC drivers/hid/hid-cypress.o
CC drivers/hid/hid-ezkey.o
CC drivers/gpu/drm/drm_eld.o
CC [M] drivers/gpu/drm/xe/xe_hw_engine_group.o
CC drivers/gpu/drm/drm_encoder.o
CC kernel/tracepoint.o
CC net/ipv4/xfrm4_state.o
CC net/ipv4/xfrm4_input.o
AR drivers/net/ethernet/via/built-in.a
CC [M] drivers/gpu/drm/xe/xe_hw_fence.o
AR drivers/net/ethernet/wangxun/built-in.a
AR drivers/net/ethernet/wiznet/built-in.a
CC drivers/hid/hid-gyration.o
AR drivers/net/ethernet/xilinx/built-in.a
CC drivers/hid/hid-ite.o
CC drivers/gpu/drm/i915/gt/intel_timeline.o
CC kernel/irq_work.o
CC net/ipv4/xfrm4_output.o
CC net/ipv4/xfrm4_protocol.o
CC fs/fhandle.o
CC [M] drivers/gpu/drm/xe/xe_huc.o
CC kernel/static_call.o
CC kernel/padata.o
CC [M] drivers/gpu/drm/xe/xe_irq.o
CC drivers/gpu/drm/drm_file.o
CC drivers/gpu/drm/drm_fourcc.o
CC kernel/jump_label.o
CC drivers/hid/hid-kensington.o
CC kernel/context_tracking.o
CC drivers/hid/hid-lg.o
CC drivers/hid/hid-lgff.o
CC [M] drivers/gpu/drm/xe/xe_lrc.o
CC drivers/hid/hid-lg4ff.o
CC arch/x86/kernel/kvmclock.o
CC arch/x86/kernel/paravirt.o
CC kernel/iomem.o
CC drivers/gpu/drm/drm_framebuffer.o
AR drivers/net/ethernet/xircom/built-in.a
CC kernel/rseq.o
AR drivers/net/ethernet/synopsys/built-in.a
AR drivers/net/ethernet/pensando/built-in.a
CC drivers/gpu/drm/drm_gem.o
CC drivers/gpu/drm/i915/gt/intel_tlb.o
CC drivers/gpu/drm/i915/gt/intel_wopcm.o
CC drivers/gpu/drm/i915/gt/intel_workarounds.o
CC drivers/gpu/drm/i915/gt/shmem_utils.o
CC [M] drivers/gpu/drm/xe/xe_migrate.o
CC drivers/gpu/drm/i915/gt/sysfs_engines.o
CC drivers/hid/hid-lg-g15.o
CC drivers/gpu/drm/i915/gt/intel_ggtt_gmch.o
CC drivers/hid/hid-microsoft.o
CC drivers/gpu/drm/i915/gt/gen6_renderstate.o
CC drivers/hid/hid-monterey.o
CC drivers/gpu/drm/drm_ioctl.o
CC drivers/gpu/drm/drm_lease.o
CC [M] drivers/gpu/drm/xe/xe_mmio.o
CC [M] drivers/gpu/drm/xe/xe_mocs.o
AR drivers/net/ethernet/nvidia/built-in.a
CC [M] drivers/gpu/drm/xe/xe_module.o
CC [M] drivers/gpu/drm/xe/xe_oa.o
CC drivers/gpu/drm/i915/gt/gen7_renderstate.o
CC [M] drivers/gpu/drm/xe/xe_observation.o
CC [M] drivers/gpu/drm/xe/xe_pat.o
CC [M] drivers/gpu/drm/xe/xe_pci.o
CC drivers/hid/hid-ntrig.o
CC [M] drivers/gpu/drm/xe/xe_pcode.o
CC drivers/gpu/drm/drm_managed.o
CC [M] drivers/gpu/drm/xe/xe_pm.o
CC [M] drivers/gpu/drm/xe/xe_preempt_fence.o
CC drivers/hid/hid-pl.o
CC drivers/gpu/drm/i915/gt/gen8_renderstate.o
CC drivers/gpu/drm/i915/gt/gen9_renderstate.o
CC arch/x86/kernel/pvclock.o
AR drivers/net/ethernet/realtek/built-in.a
CC drivers/gpu/drm/i915/gem/i915_gem_busy.o
CC drivers/gpu/drm/i915/gem/i915_gem_clflush.o
CC arch/x86/kernel/pcspeaker.o
CC arch/x86/kernel/check.o
CC drivers/gpu/drm/i915/gem/i915_gem_context.o
CC [M] drivers/gpu/drm/xe/xe_pt.o
AR fs/built-in.a
CC drivers/gpu/drm/i915/gem/i915_gem_create.o
CC drivers/gpu/drm/i915/gem/i915_gem_dmabuf.o
CC drivers/gpu/drm/i915/gem/i915_gem_domain.o
AR net/ipv4/built-in.a
CC drivers/hid/hid-petalynx.o
AR net/built-in.a
CC [M] drivers/gpu/drm/xe/xe_pt_walk.o
CC [M] drivers/gpu/drm/xe/xe_query.o
CC drivers/hid/hid-redragon.o
CC [M] drivers/gpu/drm/xe/xe_range_fence.o
CC drivers/gpu/drm/drm_mm.o
CC drivers/hid/hid-samsung.o
AR kernel/built-in.a
AR drivers/net/ethernet/intel/e1000e/built-in.a
CC drivers/hid/hid-sony.o
CC arch/x86/kernel/uprobes.o
AR drivers/net/ethernet/intel/built-in.a
CC drivers/hid/hid-sunplus.o
CC arch/x86/kernel/perf_regs.o
AR drivers/net/ethernet/built-in.a
CC drivers/gpu/drm/i915/gem/i915_gem_execbuffer.o
CC arch/x86/kernel/tracepoint.o
CC arch/x86/kernel/itmt.o
CC arch/x86/kernel/umip.o
CC drivers/gpu/drm/drm_mode_config.o
CC drivers/gpu/drm/i915/gem/i915_gem_internal.o
CC drivers/gpu/drm/i915/gem/i915_gem_lmem.o
CC drivers/hid/hid-topseed.o
CC drivers/gpu/drm/drm_mode_object.o
CC drivers/gpu/drm/i915/gem/i915_gem_mman.o
CC arch/x86/kernel/unwind_frame.o
AR drivers/net/built-in.a
CC drivers/gpu/drm/i915/gem/i915_gem_object.o
CC drivers/gpu/drm/drm_modes.o
CC drivers/gpu/drm/drm_modeset_lock.o
CC [M] drivers/gpu/drm/xe/xe_reg_sr.o
CC [M] drivers/gpu/drm/xe/xe_reg_whitelist.o
CC drivers/gpu/drm/drm_plane.o
CC [M] drivers/gpu/drm/xe/xe_rtp.o
CC [M] drivers/gpu/drm/xe/xe_ring_ops.o
CC [M] drivers/gpu/drm/xe/xe_sa.o
CC [M] drivers/gpu/drm/xe/xe_sched_job.o
CC [M] drivers/gpu/drm/xe/xe_step.o
CC [M] drivers/gpu/drm/xe/xe_sync.o
CC drivers/gpu/drm/drm_prime.o
CC [M] drivers/gpu/drm/xe/xe_tile.o
CC [M] drivers/gpu/drm/xe/xe_tile_sysfs.o
CC drivers/gpu/drm/i915/gem/i915_gem_pages.o
CC drivers/gpu/drm/i915/gem/i915_gem_phys.o
CC drivers/gpu/drm/i915/gem/i915_gem_pm.o
CC drivers/gpu/drm/i915/gem/i915_gem_region.o
CC drivers/gpu/drm/drm_print.o
CC [M] drivers/gpu/drm/xe/xe_trace.o
CC [M] drivers/gpu/drm/xe/xe_trace_bo.o
CC [M] drivers/gpu/drm/xe/xe_trace_guc.o
CC [M] drivers/gpu/drm/xe/xe_ttm_sys_mgr.o
CC [M] drivers/gpu/drm/xe/xe_ttm_stolen_mgr.o
CC [M] drivers/gpu/drm/xe/xe_ttm_vram_mgr.o
CC drivers/gpu/drm/i915/gem/i915_gem_shmem.o
CC drivers/gpu/drm/drm_property.o
CC drivers/gpu/drm/i915/gem/i915_gem_shrinker.o
AR arch/x86/kernel/built-in.a
CC [M] drivers/gpu/drm/xe/xe_tuning.o
AR arch/x86/built-in.a
CC drivers/gpu/drm/drm_syncobj.o
CC drivers/gpu/drm/i915/gem/i915_gem_stolen.o
CC drivers/gpu/drm/drm_sysfs.o
CC drivers/gpu/drm/i915/gem/i915_gem_throttle.o
CC drivers/gpu/drm/drm_trace_points.o
CC drivers/gpu/drm/drm_vblank.o
CC drivers/gpu/drm/i915/gem/i915_gem_tiling.o
CC drivers/gpu/drm/i915/gem/i915_gem_ttm.o
CC [M] drivers/gpu/drm/xe/xe_uc.o
CC drivers/gpu/drm/drm_vblank_work.o
CC [M] drivers/gpu/drm/xe/xe_uc_fw.o
CC [M] drivers/gpu/drm/xe/xe_vm.o
CC [M] drivers/gpu/drm/xe/xe_vram.o
AR drivers/hid/built-in.a
CC [M] drivers/gpu/drm/xe/xe_vram_freq.o
CC [M] drivers/gpu/drm/xe/xe_wait_user_fence.o
CC [M] drivers/gpu/drm/xe/xe_wa.o
CC [M] drivers/gpu/drm/xe/xe_wopcm.o
CC [M] drivers/gpu/drm/xe/xe_hmm.o
CC [M] drivers/gpu/drm/xe/xe_hwmon.o
CC drivers/gpu/drm/drm_vma_manager.o
CC drivers/gpu/drm/i915/gem/i915_gem_ttm_move.o
CC drivers/gpu/drm/drm_writeback.o
CC [M] drivers/gpu/drm/xe/xe_gt_sriov_vf.o
CC drivers/gpu/drm/drm_panel.o
CC [M] drivers/gpu/drm/xe/xe_guc_relay.o
CC drivers/gpu/drm/drm_pci.o
CC [M] drivers/gpu/drm/xe/xe_memirq.o
CC drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.o
CC [M] drivers/gpu/drm/xe/xe_sriov.o
CC drivers/gpu/drm/i915/gem/i915_gem_userptr.o
CC drivers/gpu/drm/i915/gem/i915_gem_wait.o
CC drivers/gpu/drm/drm_debugfs.o
CC [M] drivers/gpu/drm/xe/display/ext/i915_irq.o
CC [M] drivers/gpu/drm/xe/display/ext/i915_utils.o
CC drivers/gpu/drm/i915/gem/i915_gemfs.o
CC [M] drivers/gpu/drm/xe/display/intel_fb_bo.o
CC [M] drivers/gpu/drm/xe/display/intel_fbdev_fb.o
CC drivers/gpu/drm/drm_debugfs_crc.o
CC drivers/gpu/drm/i915/i915_active.o
CC drivers/gpu/drm/drm_panel_orientation_quirks.o
CC [M] drivers/gpu/drm/xe/display/xe_display.o
CC drivers/gpu/drm/drm_buddy.o
CC drivers/gpu/drm/i915/i915_cmd_parser.o
CC drivers/gpu/drm/drm_gem_shmem_helper.o
CC drivers/gpu/drm/drm_atomic_helper.o
CC drivers/gpu/drm/drm_atomic_state_helper.o
CC [M] drivers/gpu/drm/xe/display/xe_display_misc.o
CC [M] drivers/gpu/drm/xe/display/xe_display_rps.o
CC [M] drivers/gpu/drm/xe/display/xe_display_wa.o
CC [M] drivers/gpu/drm/xe/display/xe_dsb_buffer.o
CC [M] drivers/gpu/drm/xe/display/xe_fb_pin.o
CC [M] drivers/gpu/drm/xe/display/xe_hdcp_gsc.o
CC [M] drivers/gpu/drm/xe/display/xe_plane_initial.o
CC drivers/gpu/drm/drm_bridge_connector.o
CC [M] drivers/gpu/drm/xe/display/xe_tdf.o
CC drivers/gpu/drm/i915/i915_deps.o
CC drivers/gpu/drm/drm_crtc_helper.o
CC drivers/gpu/drm/i915/i915_gem.o
CC [M] drivers/gpu/drm/xe/i915-soc/intel_dram.o
CC drivers/gpu/drm/drm_damage_helper.o
CC drivers/gpu/drm/drm_encoder_slave.o
CC drivers/gpu/drm/i915/i915_gem_evict.o
CC [M] drivers/gpu/drm/xe/i915-soc/intel_pch.o
CC drivers/gpu/drm/i915/i915_gem_gtt.o
CC drivers/gpu/drm/drm_flip_work.o
CC drivers/gpu/drm/i915/i915_gem_ww.o
CC drivers/gpu/drm/i915/i915_query.o
CC [M] drivers/gpu/drm/xe/i915-display/icl_dsi.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_alpm.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_atomic.o
CC drivers/gpu/drm/i915/i915_request.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_atomic_plane.o
CC drivers/gpu/drm/drm_format_helper.o
CC drivers/gpu/drm/i915/i915_scheduler.o
CC drivers/gpu/drm/i915/i915_trace_points.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_audio.o
CC drivers/gpu/drm/drm_gem_atomic_helper.o
CC drivers/gpu/drm/i915/i915_ttm_buddy_manager.o
CC drivers/gpu/drm/i915/i915_vma.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_backlight.o
CC drivers/gpu/drm/i915/i915_vma_resource.o
CC drivers/gpu/drm/i915/gt/uc/intel_gsc_fw.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_bios.o
CC drivers/gpu/drm/drm_gem_framebuffer_helper.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_bw.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_cdclk.o
CC drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.o
CC drivers/gpu/drm/i915/gt/uc/intel_gsc_uc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_color.o
CC drivers/gpu/drm/drm_kms_helper_common.o
CC drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_debugfs.o
CC drivers/gpu/drm/drm_modeset_helper.o
CC drivers/gpu/drm/drm_plane_helper.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_combo_phy.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_connector.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_crtc.o
CC drivers/gpu/drm/drm_probe_helper.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_crtc_state_dump.o
CC drivers/gpu/drm/drm_rect.o
CC drivers/gpu/drm/drm_self_refresh_helper.o
CC drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_heci_cmd_submit.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_cursor.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_cx0_phy.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_ddi.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_ddi_buf_trans.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc.o
CC drivers/gpu/drm/drm_simple_kms_helper.o
CC drivers/gpu/drm/bridge/panel.o
CC drivers/gpu/drm/drm_mipi_dsi.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_ads.o
CC [M] drivers/gpu/drm/drm_exec.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_capture.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_ct.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_device.o
CC [M] drivers/gpu/drm/drm_gpuvm.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_debugfs.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_driver.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_fw.o
CC [M] drivers/gpu/drm/drm_suballoc.o
CC [M] drivers/gpu/drm/drm_gem_ttm_helper.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_hwconfig.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_log.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_rc.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_submission.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_irq.o
CC drivers/gpu/drm/i915/gt/uc/intel_huc.o
CC drivers/gpu/drm/i915/gt/uc/intel_huc_debugfs.o
CC drivers/gpu/drm/i915/gt/uc/intel_huc_fw.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_params.o
CC drivers/gpu/drm/i915/gt/uc/intel_uc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_power.o
CC drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.o
CC drivers/gpu/drm/i915/gt/uc/intel_uc_fw.o
CC drivers/gpu/drm/i915/gt/intel_gsc.o
CC drivers/gpu/drm/i915/i915_hwmon.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_power_map.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_power_well.o
CC drivers/gpu/drm/i915/display/hsw_ips.o
CC drivers/gpu/drm/i915/display/i9xx_plane.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_trace.o
LD [M] drivers/gpu/drm/drm_suballoc_helper.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_wa.o
LD [M] drivers/gpu/drm/drm_ttm_helper.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dkl_phy.o
CC drivers/gpu/drm/i915/display/i9xx_wm.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dmc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp.o
CC drivers/gpu/drm/i915/display/intel_alpm.o
CC drivers/gpu/drm/i915/display/intel_atomic.o
CC drivers/gpu/drm/i915/display/intel_atomic_plane.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_aux.o
CC drivers/gpu/drm/i915/display/intel_audio.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_aux_backlight.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_hdcp.o
CC drivers/gpu/drm/i915/display/intel_bios.o
CC drivers/gpu/drm/i915/display/intel_bw.o
CC drivers/gpu/drm/i915/display/intel_cdclk.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_link_training.o
CC drivers/gpu/drm/i915/display/intel_color.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_mst.o
CC drivers/gpu/drm/i915/display/intel_combo_phy.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dpll.o
CC drivers/gpu/drm/i915/display/intel_connector.o
CC drivers/gpu/drm/i915/display/intel_crtc.o
CC drivers/gpu/drm/i915/display/intel_crtc_state_dump.o
CC drivers/gpu/drm/i915/display/intel_cursor.o
CC drivers/gpu/drm/i915/display/intel_display.o
CC drivers/gpu/drm/i915/display/intel_display_driver.o
CC drivers/gpu/drm/i915/display/intel_display_irq.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dpll_mgr.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dpt_common.o
CC drivers/gpu/drm/i915/display/intel_display_params.o
CC drivers/gpu/drm/i915/display/intel_display_power.o
CC drivers/gpu/drm/i915/display/intel_display_power_map.o
CC drivers/gpu/drm/i915/display/intel_display_power_well.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_drrs.o
CC drivers/gpu/drm/i915/display/intel_display_reset.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dsb.o
CC drivers/gpu/drm/i915/display/intel_display_rps.o
CC drivers/gpu/drm/i915/display/intel_display_wa.o
CC drivers/gpu/drm/i915/display/intel_dmc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dsi.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dsi_dcs_backlight.o
CC drivers/gpu/drm/i915/display/intel_dmc_wl.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dsi_vbt.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_encoder.o
CC drivers/gpu/drm/i915/display/intel_dpio_phy.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fb.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fbc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fdi.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fifo_underrun.o
CC drivers/gpu/drm/i915/display/intel_dpll.o
CC drivers/gpu/drm/i915/display/intel_dpll_mgr.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_frontbuffer.o
CC drivers/gpu/drm/i915/display/intel_dpt.o
CC drivers/gpu/drm/i915/display/intel_dpt_common.o
CC drivers/gpu/drm/i915/display/intel_drrs.o
CC drivers/gpu/drm/i915/display/intel_dsb.o
CC drivers/gpu/drm/i915/display/intel_dsb_buffer.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_global_state.o
CC drivers/gpu/drm/i915/display/intel_fb.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_gmbus.o
CC drivers/gpu/drm/i915/display/intel_fb_bo.o
CC drivers/gpu/drm/i915/display/intel_fb_pin.o
CC drivers/gpu/drm/i915/display/intel_fbc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hdcp.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hdcp_gsc_message.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hdmi.o
CC drivers/gpu/drm/i915/display/intel_fdi.o
CC drivers/gpu/drm/i915/display/intel_fifo_underrun.o
CC drivers/gpu/drm/i915/display/intel_frontbuffer.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hotplug.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hotplug_irq.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hti.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_link_bw.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_lspcon.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_modeset_lock.o
CC drivers/gpu/drm/i915/display/intel_global_state.o
CC drivers/gpu/drm/i915/display/intel_hdcp.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_modeset_setup.o
CC drivers/gpu/drm/i915/display/intel_hdcp_gsc.o
CC drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_modeset_verify.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_panel.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_pmdemand.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_pps.o
CC drivers/gpu/drm/i915/display/intel_hotplug.o
CC drivers/gpu/drm/i915/display/intel_hotplug_irq.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_psr.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_qp_tables.o
CC drivers/gpu/drm/i915/display/intel_hti.o
CC drivers/gpu/drm/i915/display/intel_link_bw.o
CC drivers/gpu/drm/i915/display/intel_load_detect.o
CC drivers/gpu/drm/i915/display/intel_lpe_audio.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_quirks.o
CC drivers/gpu/drm/i915/display/intel_modeset_lock.o
CC drivers/gpu/drm/i915/display/intel_modeset_setup.o
CC drivers/gpu/drm/i915/display/intel_modeset_verify.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_snps_phy.o
CC drivers/gpu/drm/i915/display/intel_overlay.o
CC drivers/gpu/drm/i915/display/intel_pch_display.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_tc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_vblank.o
CC drivers/gpu/drm/i915/display/intel_pch_refclk.o
CC drivers/gpu/drm/i915/display/intel_plane_initial.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_vdsc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_vga.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_vrr.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dmc_wl.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_wm.o
CC [M] drivers/gpu/drm/xe/i915-display/skl_scaler.o
CC [M] drivers/gpu/drm/xe/i915-display/skl_universal_plane.o
CC drivers/gpu/drm/i915/display/intel_pmdemand.o
CC drivers/gpu/drm/i915/display/intel_psr.o
CC drivers/gpu/drm/i915/display/intel_quirks.o
CC [M] drivers/gpu/drm/xe/i915-display/skl_watermark.o
CC drivers/gpu/drm/i915/display/intel_sprite.o
CC drivers/gpu/drm/i915/display/intel_sprite_uapi.o
CC drivers/gpu/drm/i915/display/intel_tc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_acpi.o
CC drivers/gpu/drm/i915/display/intel_vblank.o
CC drivers/gpu/drm/i915/display/intel_vga.o
CC drivers/gpu/drm/i915/display/intel_wm.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_opregion.o
CC [M] drivers/gpu/drm/xe/xe_debugfs.o
CC [M] drivers/gpu/drm/xe/xe_gt_debugfs.o
CC [M] drivers/gpu/drm/xe/xe_gt_sriov_vf_debugfs.o
CC drivers/gpu/drm/i915/display/skl_scaler.o
CC drivers/gpu/drm/i915/display/skl_universal_plane.o
CC [M] drivers/gpu/drm/xe/xe_gt_stats.o
CC drivers/gpu/drm/i915/display/skl_watermark.o
CC drivers/gpu/drm/i915/display/intel_acpi.o
CC [M] drivers/gpu/drm/xe/xe_guc_debugfs.o
CC [M] drivers/gpu/drm/xe/xe_huc_debugfs.o
CC [M] drivers/gpu/drm/xe/xe_uc_debugfs.o
CC drivers/gpu/drm/i915/display/intel_opregion.o
CC drivers/gpu/drm/i915/display/intel_display_debugfs.o
CC drivers/gpu/drm/i915/display/intel_display_debugfs_params.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_debugfs.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_debugfs_params.o
CC drivers/gpu/drm/i915/display/intel_pipe_crc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_pipe_crc.o
CC drivers/gpu/drm/i915/display/dvo_ch7017.o
CC drivers/gpu/drm/i915/display/dvo_ch7xxx.o
CC drivers/gpu/drm/i915/display/dvo_ivch.o
CC drivers/gpu/drm/i915/display/dvo_ns2501.o
CC drivers/gpu/drm/i915/display/dvo_sil164.o
CC drivers/gpu/drm/i915/display/dvo_tfp410.o
CC drivers/gpu/drm/i915/display/g4x_dp.o
CC drivers/gpu/drm/i915/display/g4x_hdmi.o
CC drivers/gpu/drm/i915/display/icl_dsi.o
CC drivers/gpu/drm/i915/display/intel_backlight.o
CC drivers/gpu/drm/i915/display/intel_crt.o
CC drivers/gpu/drm/i915/display/intel_cx0_phy.o
CC drivers/gpu/drm/i915/display/intel_ddi.o
CC drivers/gpu/drm/i915/display/intel_ddi_buf_trans.o
CC drivers/gpu/drm/i915/display/intel_display_device.o
CC drivers/gpu/drm/i915/display/intel_display_trace.o
CC drivers/gpu/drm/i915/display/intel_dkl_phy.o
CC drivers/gpu/drm/i915/display/intel_dp.o
CC drivers/gpu/drm/i915/display/intel_dp_aux.o
CC drivers/gpu/drm/i915/display/intel_dp_aux_backlight.o
CC drivers/gpu/drm/i915/display/intel_dp_hdcp.o
CC drivers/gpu/drm/i915/display/intel_dp_link_training.o
CC drivers/gpu/drm/i915/display/intel_dp_mst.o
CC drivers/gpu/drm/i915/display/intel_dsi.o
CC drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.o
CC drivers/gpu/drm/i915/display/intel_dsi_vbt.o
CC drivers/gpu/drm/i915/display/intel_dvo.o
CC drivers/gpu/drm/i915/display/intel_encoder.o
CC drivers/gpu/drm/i915/display/intel_gmbus.o
CC drivers/gpu/drm/i915/display/intel_hdmi.o
CC drivers/gpu/drm/i915/display/intel_lspcon.o
CC drivers/gpu/drm/i915/display/intel_lvds.o
CC drivers/gpu/drm/i915/display/intel_panel.o
CC drivers/gpu/drm/i915/display/intel_pps.o
CC drivers/gpu/drm/i915/display/intel_qp_tables.o
CC drivers/gpu/drm/i915/display/intel_sdvo.o
CC drivers/gpu/drm/i915/display/intel_snps_phy.o
CC drivers/gpu/drm/i915/display/intel_tv.o
CC drivers/gpu/drm/i915/display/intel_vdsc.o
CC drivers/gpu/drm/i915/display/intel_vrr.o
CC drivers/gpu/drm/i915/display/vlv_dsi.o
CC drivers/gpu/drm/i915/display/vlv_dsi_pll.o
CC drivers/gpu/drm/i915/i915_perf.o
CC drivers/gpu/drm/i915/pxp/intel_pxp.o
CC drivers/gpu/drm/i915/pxp/intel_pxp_huc.o
CC drivers/gpu/drm/i915/pxp/intel_pxp_tee.o
CC drivers/gpu/drm/i915/i915_gpu_error.o
CC drivers/gpu/drm/i915/i915_vgpu.o
LD [M] drivers/gpu/drm/xe/xe.o
AR drivers/gpu/drm/i915/built-in.a
AR drivers/gpu/drm/built-in.a
AR drivers/gpu/built-in.a
AR drivers/built-in.a
AR built-in.a
AR vmlinux.a
LD vmlinux.o
OBJCOPY modules.builtin.modinfo
GEN modules.builtin
MODPOST Module.symvers
CC .vmlinux.export.o
CC [M] fs/efivarfs/efivarfs.mod.o
CC [M] drivers/gpu/drm/drm_exec.mod.o
CC [M] drivers/gpu/drm/drm_gpuvm.mod.o
CC [M] drivers/gpu/drm/drm_suballoc_helper.mod.o
CC [M] drivers/gpu/drm/drm_ttm_helper.mod.o
CC [M] drivers/gpu/drm/scheduler/gpu-sched.mod.o
CC [M] drivers/gpu/drm/xe/xe.mod.o
CC [M] drivers/thermal/intel/x86_pkg_temp_thermal.mod.o
CC [M] sound/core/snd-hwdep.mod.o
CC [M] sound/core/snd-pcm.mod.o
CC [M] sound/pci/hda/snd-hda-codec.mod.o
CC [M] sound/pci/hda/snd-hda-codec-hdmi.mod.o
CC [M] sound/pci/hda/snd-hda-intel.mod.o
CC [M] sound/hda/snd-hda-core.mod.o
CC [M] sound/hda/snd-intel-dspcfg.mod.o
CC [M] sound/hda/snd-intel-sdw-acpi.mod.o
CC [M] net/netfilter/nf_log_syslog.mod.o
CC [M] net/netfilter/xt_mark.mod.o
CC [M] net/netfilter/xt_nat.mod.o
CC [M] net/netfilter/xt_LOG.mod.o
CC [M] net/netfilter/xt_MASQUERADE.mod.o
CC [M] net/netfilter/xt_addrtype.mod.o
CC [M] net/ipv4/netfilter/iptable_nat.mod.o
LD [M] sound/hda/snd-intel-dspcfg.ko
LD [M] drivers/gpu/drm/drm_exec.ko
LD [M] drivers/gpu/drm/scheduler/gpu-sched.ko
LD [M] drivers/gpu/drm/drm_gpuvm.ko
LD [M] net/netfilter/xt_nat.ko
LD [M] net/ipv4/netfilter/iptable_nat.ko
LD [M] sound/pci/hda/snd-hda-intel.ko
LD [M] fs/efivarfs/efivarfs.ko
LD [M] net/netfilter/xt_addrtype.ko
LD [M] sound/hda/snd-intel-sdw-acpi.ko
LD [M] net/netfilter/xt_LOG.ko
LD [M] sound/hda/snd-hda-core.ko
LD [M] net/netfilter/nf_log_syslog.ko
LD [M] drivers/gpu/drm/drm_suballoc_helper.ko
LD [M] sound/pci/hda/snd-hda-codec-hdmi.ko
LD [M] drivers/gpu/drm/drm_ttm_helper.ko
LD [M] sound/core/snd-hwdep.ko
LD [M] drivers/thermal/intel/x86_pkg_temp_thermal.ko
LD [M] sound/pci/hda/snd-hda-codec.ko
LD [M] net/netfilter/xt_mark.ko
LD [M] sound/core/snd-pcm.ko
LD [M] net/netfilter/xt_MASQUERADE.ko
LD [M] drivers/gpu/drm/xe/xe.ko
UPD include/generated/utsversion.h
CC init/version-timestamp.o
KSYMS .tmp_vmlinux0.kallsyms.S
AS .tmp_vmlinux0.kallsyms.o
LD .tmp_vmlinux1
NM .tmp_vmlinux1.syms
KSYMS .tmp_vmlinux1.kallsyms.S
AS .tmp_vmlinux1.kallsyms.o
LD .tmp_vmlinux2
NM .tmp_vmlinux2.syms
KSYMS .tmp_vmlinux2.kallsyms.S
AS .tmp_vmlinux2.kallsyms.o
LD vmlinux
NM System.map
SORTTAB vmlinux
RELOCS arch/x86/boot/compressed/vmlinux.relocs
RSTRIP vmlinux
CC arch/x86/boot/a20.o
AS arch/x86/boot/bioscall.o
CC arch/x86/boot/cmdline.o
AS arch/x86/boot/copy.o
HOSTCC arch/x86/boot/mkcpustr
CC arch/x86/boot/cpuflags.o
CC arch/x86/boot/cpucheck.o
CC arch/x86/boot/early_serial_console.o
CC arch/x86/boot/edd.o
CC arch/x86/boot/main.o
CC arch/x86/boot/memory.o
CC arch/x86/boot/pm.o
AS arch/x86/boot/pmjump.o
CC arch/x86/boot/printf.o
CC arch/x86/boot/regs.o
CC arch/x86/boot/string.o
CC arch/x86/boot/tty.o
CC arch/x86/boot/video.o
CC arch/x86/boot/video-mode.o
CC arch/x86/boot/version.o
CC arch/x86/boot/video-vga.o
CC arch/x86/boot/video-vesa.o
CC arch/x86/boot/video-bios.o
HOSTCC arch/x86/boot/tools/build
CPUSTR arch/x86/boot/cpustr.h
CC arch/x86/boot/cpu.o
LDS arch/x86/boot/compressed/vmlinux.lds
AS arch/x86/boot/compressed/kernel_info.o
AS arch/x86/boot/compressed/head_32.o
VOFFSET arch/x86/boot/compressed/../voffset.h
CC arch/x86/boot/compressed/string.o
CC arch/x86/boot/compressed/cmdline.o
CC arch/x86/boot/compressed/error.o
OBJCOPY arch/x86/boot/compressed/vmlinux.bin
HOSTCC arch/x86/boot/compressed/mkpiggy
CC arch/x86/boot/compressed/cpuflags.o
CC arch/x86/boot/compressed/early_serial_console.o
CC arch/x86/boot/compressed/kaslr.o
CC arch/x86/boot/compressed/acpi.o
CC arch/x86/boot/compressed/efi.o
GZIP arch/x86/boot/compressed/vmlinux.bin.gz
CC arch/x86/boot/compressed/misc.o
MKPIGGY arch/x86/boot/compressed/piggy.S
AS arch/x86/boot/compressed/piggy.o
LD arch/x86/boot/compressed/vmlinux
ZOFFSET arch/x86/boot/zoffset.h
OBJCOPY arch/x86/boot/vmlinux.bin
AS arch/x86/boot/header.o
LD arch/x86/boot/setup.elf
OBJCOPY arch/x86/boot/setup.bin
BUILD arch/x86/boot/bzImage
Kernel: arch/x86/boot/bzImage is ready (#1)
run-parts: executing /workspace/ci/hooks/20-kernel-doc
+ SRC_DIR=/workspace/kernel
+ cd /workspace/kernel
+ find drivers/gpu/drm/xe/ -name '*.[ch]' -not -path 'drivers/gpu/drm/xe/display/*'
+ xargs ./scripts/kernel-doc -Werror -none include/uapi/drm/xe_drm.h
All hooks done
^ permalink raw reply [flat|nested] 28+ messages in thread* ✗ CI.checksparse: warning for series starting with [01/12] drm/xe: Removed unused xe_ggtt_printk
2024-08-21 19:38 [PATCH 01/12] drm/xe: Removed unused xe_ggtt_printk Rodrigo Vivi
` (15 preceding siblings ...)
2024-08-21 20:01 ` ✓ CI.Hooks: " Patchwork
@ 2024-08-21 20:02 ` Patchwork
2024-08-21 20:22 ` ✓ CI.BAT: success " Patchwork
2024-08-22 4:32 ` ✗ CI.FULL: failure " Patchwork
18 siblings, 0 replies; 28+ messages in thread
From: Patchwork @ 2024-08-21 20:02 UTC (permalink / raw)
To: Rodrigo Vivi; +Cc: intel-xe
== Series Details ==
Series: series starting with [01/12] drm/xe: Removed unused xe_ggtt_printk
URL : https://patchwork.freedesktop.org/series/137588/
State : warning
== Summary ==
+ trap cleanup EXIT
+ KERNEL=/kernel
+ MT=/root/linux/maintainer-tools
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools /root/linux/maintainer-tools
Cloning into '/root/linux/maintainer-tools'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ make -C /root/linux/maintainer-tools
make: Entering directory '/root/linux/maintainer-tools'
cc -O2 -g -Wextra -o remap-log remap-log.c
make: Leaving directory '/root/linux/maintainer-tools'
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ /root/linux/maintainer-tools/dim sparse --fast ddbda36f876f53498924155abfa1cd4c58517903
Sparse version: 0.6.1 (Ubuntu: 0.6.1-2build1)
Fast mode used, each commit won't be checked separately.
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 28+ messages in thread* ✓ CI.BAT: success for series starting with [01/12] drm/xe: Removed unused xe_ggtt_printk
2024-08-21 19:38 [PATCH 01/12] drm/xe: Removed unused xe_ggtt_printk Rodrigo Vivi
` (16 preceding siblings ...)
2024-08-21 20:02 ` ✗ CI.checksparse: warning " Patchwork
@ 2024-08-21 20:22 ` Patchwork
2024-08-22 4:32 ` ✗ CI.FULL: failure " Patchwork
18 siblings, 0 replies; 28+ messages in thread
From: Patchwork @ 2024-08-21 20:22 UTC (permalink / raw)
To: Rodrigo Vivi; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 4385 bytes --]
== Series Details ==
Series: series starting with [01/12] drm/xe: Removed unused xe_ggtt_printk
URL : https://patchwork.freedesktop.org/series/137588/
State : success
== Summary ==
CI Bug Log - changes from xe-1807-ddbda36f876f53498924155abfa1cd4c58517903_BAT -> xe-pw-137588v1_BAT
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (8 -> 9)
------------------------------
Additional (1): bat-lnl-1
Known issues
------------
Here are the changes found in xe-pw-137588v1_BAT that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@kms_addfb_basic@addfb25-y-tiled-small-legacy:
- bat-lnl-1: NOTRUN -> [SKIP][1] ([Intel XE#1466])
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/bat-lnl-1/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html
* igt@kms_dsc@dsc-basic:
- bat-lnl-1: NOTRUN -> [SKIP][2] ([Intel XE#599])
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/bat-lnl-1/igt@kms_dsc@dsc-basic.html
* igt@kms_force_connector_basic@force-connector-state:
- bat-lnl-1: NOTRUN -> [SKIP][3] ([Intel XE#352]) +2 other tests skip
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/bat-lnl-1/igt@kms_force_connector_basic@force-connector-state.html
* igt@kms_hdmi_inject@inject-audio:
- bat-lnl-1: NOTRUN -> [SKIP][4] ([Intel XE#1470])
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/bat-lnl-1/igt@kms_hdmi_inject@inject-audio.html
* igt@sriov_basic@enable-vfs-autoprobe-off:
- bat-lnl-1: NOTRUN -> [SKIP][5] ([Intel XE#1091]) +1 other test skip
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/bat-lnl-1/igt@sriov_basic@enable-vfs-autoprobe-off.html
* igt@xe_evict@evict-beng-mixed-threads-small-multi-vm:
- bat-lnl-1: NOTRUN -> [SKIP][6] ([Intel XE#688]) +17 other tests skip
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/bat-lnl-1/igt@xe_evict@evict-beng-mixed-threads-small-multi-vm.html
* igt@xe_live_ktest@xe_bo:
- bat-lnl-1: NOTRUN -> [SKIP][7] ([Intel XE#2229]) +3 other tests skip
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/bat-lnl-1/igt@xe_live_ktest@xe_bo.html
* igt@xe_mmap@vram:
- bat-lnl-1: NOTRUN -> [SKIP][8] ([Intel XE#1416])
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/bat-lnl-1/igt@xe_mmap@vram.html
* igt@xe_pat@pat-index-xehpc:
- bat-lnl-1: NOTRUN -> [SKIP][9] ([Intel XE#1420])
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/bat-lnl-1/igt@xe_pat@pat-index-xehpc.html
* igt@xe_pat@pat-index-xelp:
- bat-lnl-1: NOTRUN -> [SKIP][10] ([Intel XE#977])
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/bat-lnl-1/igt@xe_pat@pat-index-xelp.html
* igt@xe_pat@pat-index-xelpg:
- bat-lnl-1: NOTRUN -> [SKIP][11] ([Intel XE#979])
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/bat-lnl-1/igt@xe_pat@pat-index-xelpg.html
[Intel XE#1091]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1091
[Intel XE#1416]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1416
[Intel XE#1420]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1420
[Intel XE#1466]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1466
[Intel XE#1470]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1470
[Intel XE#2229]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2229
[Intel XE#352]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/352
[Intel XE#599]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/599
[Intel XE#688]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/688
[Intel XE#977]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/977
[Intel XE#979]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/979
Build changes
-------------
* Linux: xe-1807-ddbda36f876f53498924155abfa1cd4c58517903 -> xe-pw-137588v1
IGT_7982: 76ebe4ecfa1757f21e3f1d3be5993088a92cd274 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-1807-ddbda36f876f53498924155abfa1cd4c58517903: ddbda36f876f53498924155abfa1cd4c58517903
xe-pw-137588v1: 137588v1
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/index.html
[-- Attachment #2: Type: text/html, Size: 5199 bytes --]
^ permalink raw reply [flat|nested] 28+ messages in thread* ✗ CI.FULL: failure for series starting with [01/12] drm/xe: Removed unused xe_ggtt_printk
2024-08-21 19:38 [PATCH 01/12] drm/xe: Removed unused xe_ggtt_printk Rodrigo Vivi
` (17 preceding siblings ...)
2024-08-21 20:22 ` ✓ CI.BAT: success " Patchwork
@ 2024-08-22 4:32 ` Patchwork
18 siblings, 0 replies; 28+ messages in thread
From: Patchwork @ 2024-08-22 4:32 UTC (permalink / raw)
To: Rodrigo Vivi; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 78696 bytes --]
== Series Details ==
Series: series starting with [01/12] drm/xe: Removed unused xe_ggtt_printk
URL : https://patchwork.freedesktop.org/series/137588/
State : failure
== Summary ==
CI Bug Log - changes from xe-1807-ddbda36f876f53498924155abfa1cd4c58517903_full -> xe-pw-137588v1_full
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with xe-pw-137588v1_full absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in xe-pw-137588v1_full, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
Participating hosts (4 -> 4)
------------------------------
No changes in participating hosts
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in xe-pw-137588v1_full:
### IGT changes ###
#### Possible regressions ####
* igt@kms_cursor_legacy@forked-bo:
- shard-dg2-set2: NOTRUN -> [INCOMPLETE][1] +1 other test incomplete
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@kms_cursor_legacy@forked-bo.html
* igt@kms_dirtyfb@psr-dirtyfb-ioctl:
- shard-lnl: [PASS][2] -> [ABORT][3]
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-lnl-5/igt@kms_dirtyfb@psr-dirtyfb-ioctl.html
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-4/igt@kms_dirtyfb@psr-dirtyfb-ioctl.html
* igt@kms_draw_crc@draw-method-blt:
- shard-lnl: [PASS][4] -> [FAIL][5] +1 other test fail
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-lnl-7/igt@kms_draw_crc@draw-method-blt.html
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-3/igt@kms_draw_crc@draw-method-blt.html
* igt@kms_frontbuffer_tracking@drrs-1p-primscrn-indfb-msflip-blt:
- shard-lnl: NOTRUN -> [FAIL][6] +3 other tests fail
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-3/igt@kms_frontbuffer_tracking@drrs-1p-primscrn-indfb-msflip-blt.html
* igt@kms_getfb@getfb2-handle-not-fb:
- shard-lnl: [PASS][7] -> [CRASH][8]
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-lnl-7/igt@kms_getfb@getfb2-handle-not-fb.html
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-3/igt@kms_getfb@getfb2-handle-not-fb.html
* igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-edp-1:
- shard-lnl: NOTRUN -> [ABORT][9] +1 other test abort
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-4/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-edp-1.html
* igt@kms_pipe_crc_basic@suspend-read-crc@pipe-b-edp-1:
- shard-lnl: NOTRUN -> [DMESG-WARN][10]
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-4/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-b-edp-1.html
* igt@xe_exec_fault_mode@many-execqueues-bindexecqueue-userptr-rebind-prefetch:
- shard-lnl: [PASS][11] -> [INCOMPLETE][12]
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-lnl-6/igt@xe_exec_fault_mode@many-execqueues-bindexecqueue-userptr-rebind-prefetch.html
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-1/igt@xe_exec_fault_mode@many-execqueues-bindexecqueue-userptr-rebind-prefetch.html
#### Warnings ####
* igt@kms_big_fb@4-tiled-8bpp-rotate-270:
- shard-lnl: [SKIP][13] ([Intel XE#1407]) -> [FAIL][14]
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-lnl-5/igt@kms_big_fb@4-tiled-8bpp-rotate-270.html
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-4/igt@kms_big_fb@4-tiled-8bpp-rotate-270.html
* igt@kms_big_fb@yf-tiled-16bpp-rotate-90:
- shard-lnl: [SKIP][15] ([Intel XE#1124]) -> [FAIL][16]
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-lnl-5/igt@kms_big_fb@yf-tiled-16bpp-rotate-90.html
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-4/igt@kms_big_fb@yf-tiled-16bpp-rotate-90.html
* igt@kms_cursor_legacy@long-nonblocking-modeset-vs-cursor-atomic:
- shard-lnl: [ABORT][17] ([Intel XE#2583]) -> [FAIL][18]
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-lnl-7/igt@kms_cursor_legacy@long-nonblocking-modeset-vs-cursor-atomic.html
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-3/igt@kms_cursor_legacy@long-nonblocking-modeset-vs-cursor-atomic.html
* igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-mmap-wc:
- shard-lnl: [ABORT][19] ([Intel XE#2583]) -> [INCOMPLETE][20]
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-lnl-6/igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-mmap-wc.html
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-4/igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@psr-2p-scndscrn-cur-indfb-draw-mmap-wc:
- shard-lnl: [SKIP][21] ([Intel XE#656]) -> [FAIL][22]
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-lnl-7/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-cur-indfb-draw-mmap-wc.html
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-3/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-cur-indfb-draw-mmap-wc.html
* igt@kms_psr_stress_test@flip-primary-invalidate-overlay:
- shard-lnl: [ABORT][23] ([Intel XE#2583]) -> [ABORT][24] +1 other test abort
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-lnl-4/igt@kms_psr_stress_test@flip-primary-invalidate-overlay.html
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-8/igt@kms_psr_stress_test@flip-primary-invalidate-overlay.html
#### Suppressed ####
The following results come from untrusted machines, tests, or statuses.
They do not affect the overall result.
* igt@kms_flip@2x-busy-flip:
- {shard-bmg}: [DMESG-WARN][25] ([Intel XE#877]) -> [ABORT][26]
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-bmg-7/igt@kms_flip@2x-busy-flip.html
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-bmg-4/igt@kms_flip@2x-busy-flip.html
* igt@kms_flip@2x-busy-flip@cd-dp2-hdmi-a3:
- {shard-bmg}: [PASS][27] -> [ABORT][28] +2 other tests abort
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-bmg-7/igt@kms_flip@2x-busy-flip@cd-dp2-hdmi-a3.html
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-bmg-4/igt@kms_flip@2x-busy-flip@cd-dp2-hdmi-a3.html
* igt@kms_flip@basic-flip-vs-wf_vblank:
- {shard-bmg}: NOTRUN -> [INCOMPLETE][29] +1 other test incomplete
[29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-bmg-7/igt@kms_flip@basic-flip-vs-wf_vblank.html
* igt@xe_evict@evict-beng-mixed-threads-large:
- {shard-bmg}: [TIMEOUT][30] ([Intel XE#1473]) -> [DMESG-FAIL][31]
[30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-bmg-1/igt@xe_evict@evict-beng-mixed-threads-large.html
[31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-bmg-5/igt@xe_evict@evict-beng-mixed-threads-large.html
Known issues
------------
Here are the changes found in xe-pw-137588v1_full that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@kms_async_flips@async-flip-with-page-flip-events@pipe-d-hdmi-a-1-x:
- shard-adlp: [PASS][32] -> [DMESG-WARN][33] ([Intel XE#1033]) +1 other test dmesg-warn
[32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-adlp-4/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-d-hdmi-a-1-x.html
[33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-4/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-d-hdmi-a-1-x.html
* igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels@pipe-a-edp-1:
- shard-lnl: [PASS][34] -> [FAIL][35] ([Intel XE#1426]) +1 other test fail
[34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-lnl-6/igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels@pipe-a-edp-1.html
[35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-4/igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels@pipe-a-edp-1.html
* igt@kms_big_fb@4-tiled-64bpp-rotate-270:
- shard-lnl: NOTRUN -> [SKIP][36] ([Intel XE#1407])
[36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-5/igt@kms_big_fb@4-tiled-64bpp-rotate-270.html
* igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
- shard-adlp: NOTRUN -> [SKIP][37] ([Intel XE#1124] / [Intel XE#1201]) +4 other tests skip
[37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-2/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html
* igt@kms_big_fb@x-tiled-8bpp-rotate-90:
- shard-adlp: NOTRUN -> [SKIP][38] ([Intel XE#1201] / [Intel XE#316]) +1 other test skip
[38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-2/igt@kms_big_fb@x-tiled-8bpp-rotate-90.html
* igt@kms_big_fb@y-tiled-addfb:
- shard-lnl: NOTRUN -> [SKIP][39] ([Intel XE#1467])
[39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-3/igt@kms_big_fb@y-tiled-addfb.html
* igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-hflip:
- shard-dg2-set2: NOTRUN -> [SKIP][40] ([Intel XE#1124] / [Intel XE#1201])
[40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-433/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-hflip.html
* igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip:
- shard-lnl: NOTRUN -> [SKIP][41] ([Intel XE#1124]) +4 other tests skip
[41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-7/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip.html
* igt@kms_bw@connected-linear-tiling-2-displays-1920x1080p:
- shard-adlp: NOTRUN -> [SKIP][42] ([Intel XE#1201] / [Intel XE#2191])
[42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-2/igt@kms_bw@connected-linear-tiling-2-displays-1920x1080p.html
* igt@kms_bw@linear-tiling-2-displays-2560x1440p:
- shard-lnl: NOTRUN -> [SKIP][43] ([Intel XE#367])
[43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-7/igt@kms_bw@linear-tiling-2-displays-2560x1440p.html
* igt@kms_bw@linear-tiling-2-displays-3840x2160p:
- shard-adlp: NOTRUN -> [SKIP][44] ([Intel XE#1201] / [Intel XE#367])
[44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-2/igt@kms_bw@linear-tiling-2-displays-3840x2160p.html
* igt@kms_ccs@bad-rotation-90-y-tiled-gen12-rc-ccs:
- shard-lnl: NOTRUN -> [SKIP][45] ([Intel XE#1399]) +5 other tests skip
[45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-3/igt@kms_ccs@bad-rotation-90-y-tiled-gen12-rc-ccs.html
* igt@kms_ccs@crc-primary-basic-y-tiled-ccs:
- shard-adlp: NOTRUN -> [SKIP][46] ([Intel XE#1201] / [Intel XE#455] / [Intel XE#787]) +9 other tests skip
[46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-8/igt@kms_ccs@crc-primary-basic-y-tiled-ccs.html
* igt@kms_ccs@missing-ccs-buffer-yf-tiled-ccs@pipe-b-hdmi-a-1:
- shard-adlp: NOTRUN -> [SKIP][47] ([Intel XE#1201] / [Intel XE#787]) +14 other tests skip
[47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-2/igt@kms_ccs@missing-ccs-buffer-yf-tiled-ccs@pipe-b-hdmi-a-1.html
* igt@kms_cdclk@mode-transition@pipe-a-hdmi-a-1:
- shard-adlp: NOTRUN -> [SKIP][48] ([Intel XE#1201] / [Intel XE#314]) +2 other tests skip
[48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-2/igt@kms_cdclk@mode-transition@pipe-a-hdmi-a-1.html
* igt@kms_cdclk@mode-transition@pipe-d-hdmi-a-1:
- shard-adlp: NOTRUN -> [SKIP][49] ([Intel XE#1201] / [Intel XE#314] / [Intel XE#455]) +1 other test skip
[49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-2/igt@kms_cdclk@mode-transition@pipe-d-hdmi-a-1.html
* igt@kms_chamelium_color@ctm-blue-to-red:
- shard-dg2-set2: NOTRUN -> [SKIP][50] ([Intel XE#306])
[50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@kms_chamelium_color@ctm-blue-to-red.html
* igt@kms_chamelium_hpd@hdmi-hpd-for-each-pipe:
- shard-lnl: NOTRUN -> [SKIP][51] ([Intel XE#373]) +3 other tests skip
[51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-7/igt@kms_chamelium_hpd@hdmi-hpd-for-each-pipe.html
* igt@kms_chamelium_hpd@vga-hpd-fast:
- shard-adlp: NOTRUN -> [SKIP][52] ([Intel XE#1201] / [Intel XE#373]) +2 other tests skip
[52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-2/igt@kms_chamelium_hpd@vga-hpd-fast.html
* igt@kms_content_protection@dp-mst-lic-type-1:
- shard-lnl: NOTRUN -> [SKIP][53] ([Intel XE#307])
[53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-1/igt@kms_content_protection@dp-mst-lic-type-1.html
* igt@kms_content_protection@lic-type-0:
- shard-dg2-set2: NOTRUN -> [FAIL][54] ([Intel XE#1178] / [Intel XE#1204])
[54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@kms_content_protection@lic-type-0.html
* igt@kms_content_protection@lic-type-0@pipe-a-dp-4:
- shard-dg2-set2: NOTRUN -> [FAIL][55] ([Intel XE#1204])
[55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@kms_content_protection@lic-type-0@pipe-a-dp-4.html
* igt@kms_content_protection@mei-interface:
- shard-lnl: NOTRUN -> [SKIP][56] ([Intel XE#1468])
[56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-3/igt@kms_content_protection@mei-interface.html
* igt@kms_cursor_crc@cursor-offscreen-32x32:
- shard-lnl: NOTRUN -> [SKIP][57] ([Intel XE#1424])
[57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-7/igt@kms_cursor_crc@cursor-offscreen-32x32.html
* igt@kms_cursor_legacy@cursora-vs-flipb-varying-size:
- shard-adlp: NOTRUN -> [SKIP][58] ([Intel XE#1201] / [Intel XE#309])
[58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-2/igt@kms_cursor_legacy@cursora-vs-flipb-varying-size.html
- shard-lnl: NOTRUN -> [SKIP][59] ([Intel XE#309]) +1 other test skip
[59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-6/igt@kms_cursor_legacy@cursora-vs-flipb-varying-size.html
* igt@kms_dirtyfb@drrs-dirtyfb-ioctl:
- shard-lnl: NOTRUN -> [SKIP][60] ([Intel XE#1508] / [Intel XE#599])
[60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-3/igt@kms_dirtyfb@drrs-dirtyfb-ioctl.html
* igt@kms_feature_discovery@display-2x:
- shard-lnl: NOTRUN -> [SKIP][61] ([Intel XE#702])
[61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-7/igt@kms_feature_discovery@display-2x.html
* igt@kms_flip@2x-blocking-absolute-wf_vblank:
- shard-lnl: NOTRUN -> [SKIP][62] ([Intel XE#1421])
[62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-7/igt@kms_flip@2x-blocking-absolute-wf_vblank.html
* igt@kms_flip@2x-flip-vs-modeset-vs-hang:
- shard-adlp: NOTRUN -> [SKIP][63] ([Intel XE#1201] / [Intel XE#310]) +2 other tests skip
[63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-8/igt@kms_flip@2x-flip-vs-modeset-vs-hang.html
* igt@kms_flip@flip-vs-absolute-wf_vblank@b-edp1:
- shard-lnl: [PASS][64] -> [FAIL][65] ([Intel XE#886])
[64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-lnl-2/igt@kms_flip@flip-vs-absolute-wf_vblank@b-edp1.html
[65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-8/igt@kms_flip@flip-vs-absolute-wf_vblank@b-edp1.html
* igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-downscaling:
- shard-adlp: NOTRUN -> [SKIP][66] ([Intel XE#1201] / [Intel XE#455]) +12 other tests skip
[66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-8/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-downscaling.html
* igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-upscaling@pipe-a-default-mode:
- shard-lnl: NOTRUN -> [SKIP][67] ([Intel XE#1401]) +1 other test skip
[67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-3/igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-upscaling@pipe-a-default-mode.html
* igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-downscaling:
- shard-lnl: NOTRUN -> [SKIP][68] ([Intel XE#1401] / [Intel XE#1745]) +1 other test skip
[68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-3/igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-downscaling.html
* igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-draw-blt:
- shard-adlp: NOTRUN -> [SKIP][69] ([Intel XE#1201] / [Intel XE#651]) +8 other tests skip
[69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-2/igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@drrs-1p-rte:
- shard-dg2-set2: NOTRUN -> [SKIP][70] ([Intel XE#1201] / [Intel XE#651]) +1 other test skip
[70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-433/igt@kms_frontbuffer_tracking@drrs-1p-rte.html
* igt@kms_frontbuffer_tracking@drrs-indfb-scaledprimary:
- shard-lnl: NOTRUN -> [SKIP][71] ([Intel XE#651]) +4 other tests skip
[71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-6/igt@kms_frontbuffer_tracking@drrs-indfb-scaledprimary.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-render:
- shard-adlp: NOTRUN -> [SKIP][72] ([Intel XE#1201] / [Intel XE#656]) +17 other tests skip
[72]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-2/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@fbc-tiling-y:
- shard-lnl: NOTRUN -> [SKIP][73] ([Intel XE#1469]) +1 other test skip
[73]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-3/igt@kms_frontbuffer_tracking@fbc-tiling-y.html
* igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-mmap-wc:
- shard-adlp: NOTRUN -> [SKIP][74] ([Intel XE#1201] / [Intel XE#653]) +4 other tests skip
[74]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-8/igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-indfb-draw-blt:
- shard-lnl: NOTRUN -> [SKIP][75] ([Intel XE#656]) +10 other tests skip
[75]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-6/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@psr-2p-scndscrn-spr-indfb-move:
- shard-dg2-set2: NOTRUN -> [SKIP][76] ([Intel XE#1201] / [Intel XE#653])
[76]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-433/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-spr-indfb-move.html
* igt@kms_plane@plane-position-hole:
- shard-lnl: [PASS][77] -> [DMESG-FAIL][78] ([Intel XE#324]) +1 other test dmesg-fail
[77]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-lnl-2/igt@kms_plane@plane-position-hole.html
[78]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-8/igt@kms_plane@plane-position-hole.html
* igt@kms_plane_cursor@primary:
- shard-lnl: NOTRUN -> [ABORT][79] ([Intel XE#2583]) +7 other tests abort
[79]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-5/igt@kms_plane_cursor@primary.html
* igt@kms_plane_lowres@tiling-y:
- shard-lnl: NOTRUN -> [SKIP][80] ([Intel XE#599]) +2 other tests skip
[80]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-3/igt@kms_plane_lowres@tiling-y.html
* igt@kms_plane_scaling@planes-downscale-factor-0-25@pipe-b-hdmi-a-6:
- shard-dg2-set2: NOTRUN -> [SKIP][81] ([Intel XE#1201] / [Intel XE#2318]) +2 other tests skip
[81]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-433/igt@kms_plane_scaling@planes-downscale-factor-0-25@pipe-b-hdmi-a-6.html
* igt@kms_plane_scaling@planes-downscale-factor-0-25@pipe-d-hdmi-a-6:
- shard-dg2-set2: NOTRUN -> [SKIP][82] ([Intel XE#1201] / [Intel XE#2318] / [Intel XE#455]) +1 other test skip
[82]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-433/igt@kms_plane_scaling@planes-downscale-factor-0-25@pipe-d-hdmi-a-6.html
* igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25:
- shard-adlp: NOTRUN -> [SKIP][83] ([Intel XE#1201] / [Intel XE#2318] / [Intel XE#455]) +1 other test skip
[83]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-2/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25.html
* igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25@pipe-c-hdmi-a-1:
- shard-adlp: NOTRUN -> [SKIP][84] ([Intel XE#1201] / [Intel XE#2318]) +2 other tests skip
[84]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-2/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25@pipe-c-hdmi-a-1.html
* igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-5@pipe-b-edp-1:
- shard-lnl: NOTRUN -> [SKIP][85] ([Intel XE#2318]) +3 other tests skip
[85]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-3/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-5@pipe-b-edp-1.html
* igt@kms_pm_backlight@basic-brightness:
- shard-adlp: NOTRUN -> [SKIP][86] ([Intel XE#1201] / [Intel XE#870]) +1 other test skip
[86]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-2/igt@kms_pm_backlight@basic-brightness.html
* igt@kms_psr2_sf@cursor-plane-move-continuous-exceed-sf:
- shard-dg2-set2: NOTRUN -> [SKIP][87] ([Intel XE#1201] / [Intel XE#1489])
[87]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-433/igt@kms_psr2_sf@cursor-plane-move-continuous-exceed-sf.html
* igt@kms_psr2_su@page_flip-nv12:
- shard-adlp: NOTRUN -> [SKIP][88] ([Intel XE#1122] / [Intel XE#1201])
[88]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-8/igt@kms_psr2_su@page_flip-nv12.html
* igt@kms_psr@fbc-psr2-cursor-render:
- shard-dg2-set2: NOTRUN -> [SKIP][89] ([Intel XE#1201] / [Intel XE#929])
[89]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-433/igt@kms_psr@fbc-psr2-cursor-render.html
* igt@kms_psr@psr-cursor-plane-onoff:
- shard-adlp: NOTRUN -> [SKIP][90] ([Intel XE#1201] / [Intel XE#929]) +2 other tests skip
[90]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-2/igt@kms_psr@psr-cursor-plane-onoff.html
* igt@kms_rotation_crc@multiplane-rotation-cropping-bottom:
- shard-adlp: NOTRUN -> [FAIL][91] ([Intel XE#1874])
[91]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-8/igt@kms_rotation_crc@multiplane-rotation-cropping-bottom.html
* igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180:
- shard-adlp: NOTRUN -> [SKIP][92] ([Intel XE#1127] / [Intel XE#1201])
[92]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-8/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180.html
* igt@xe_compute_preempt@compute-preempt:
- shard-dg2-set2: NOTRUN -> [SKIP][93] ([Intel XE#1280] / [Intel XE#455]) +1 other test skip
[93]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@xe_compute_preempt@compute-preempt.html
* igt@xe_copy_basic@mem-copy-linear-0x369:
- shard-adlp: NOTRUN -> [SKIP][94] ([Intel XE#1123] / [Intel XE#1201])
[94]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-2/igt@xe_copy_basic@mem-copy-linear-0x369.html
* igt@xe_copy_basic@mem-set-linear-0xfd:
- shard-adlp: NOTRUN -> [SKIP][95] ([Intel XE#1126] / [Intel XE#1201])
[95]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-8/igt@xe_copy_basic@mem-set-linear-0xfd.html
* igt@xe_evict@evict-beng-cm-threads-large:
- shard-dg2-set2: [PASS][96] -> [INCOMPLETE][97] ([Intel XE#1195] / [Intel XE#1473])
[96]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-463/igt@xe_evict@evict-beng-cm-threads-large.html
[97]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-466/igt@xe_evict@evict-beng-cm-threads-large.html
* igt@xe_evict@evict-large-cm:
- shard-lnl: NOTRUN -> [SKIP][98] ([Intel XE#688]) +2 other tests skip
[98]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-3/igt@xe_evict@evict-large-cm.html
* igt@xe_evict@evict-large-multi-vm:
- shard-adlp: NOTRUN -> [SKIP][99] ([Intel XE#1201] / [Intel XE#261]) +2 other tests skip
[99]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-2/igt@xe_evict@evict-large-multi-vm.html
* igt@xe_evict@evict-mixed-threads-large:
- shard-dg2-set2: [PASS][100] -> [FAIL][101] ([Intel XE#1000]) +1 other test fail
[100]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-463/igt@xe_evict@evict-mixed-threads-large.html
[101]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-466/igt@xe_evict@evict-mixed-threads-large.html
* igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr-invalidate-race:
- shard-adlp: NOTRUN -> [SKIP][102] ([Intel XE#1201] / [Intel XE#1392]) +2 other tests skip
[102]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-2/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr-invalidate-race.html
* igt@xe_exec_basic@multigpu-once-basic-defer-bind:
- shard-lnl: NOTRUN -> [SKIP][103] ([Intel XE#1392]) +2 other tests skip
[103]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-7/igt@xe_exec_basic@multigpu-once-basic-defer-bind.html
* igt@xe_exec_fault_mode@many-bindexecqueue-rebind:
- shard-lnl: [PASS][104] -> [ABORT][105] ([Intel XE#2583]) +2 other tests abort
[104]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-lnl-2/igt@xe_exec_fault_mode@many-bindexecqueue-rebind.html
[105]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-8/igt@xe_exec_fault_mode@many-bindexecqueue-rebind.html
* igt@xe_exec_fault_mode@many-execqueues-rebind:
- shard-adlp: NOTRUN -> [SKIP][106] ([Intel XE#1201] / [Intel XE#288]) +13 other tests skip
[106]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-2/igt@xe_exec_fault_mode@many-execqueues-rebind.html
* igt@xe_live_ktest@xe_migrate@xe_validate_ccs_kunit:
- shard-lnl: NOTRUN -> [SKIP][107] ([Intel XE#2229])
[107]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-7/igt@xe_live_ktest@xe_migrate@xe_validate_ccs_kunit.html
* igt@xe_mmap@small-bar:
- shard-lnl: NOTRUN -> [SKIP][108] ([Intel XE#512])
[108]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-3/igt@xe_mmap@small-bar.html
* igt@xe_module_load@many-reload:
- shard-adlp: [PASS][109] -> [TIMEOUT][110] ([Intel XE#1961] / [Intel XE#2026])
[109]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-adlp-6/igt@xe_module_load@many-reload.html
[110]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-6/igt@xe_module_load@many-reload.html
* igt@xe_oa@privileged-forked-access-vaddr:
- shard-adlp: NOTRUN -> [SKIP][111] ([Intel XE#1201] / [Intel XE#2541]) +1 other test skip
[111]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-2/igt@xe_oa@privileged-forked-access-vaddr.html
* igt@xe_peer2peer@read:
- shard-lnl: NOTRUN -> [SKIP][112] ([Intel XE#1061])
[112]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-4/igt@xe_peer2peer@read.html
* igt@xe_pm@d3cold-multiple-execs:
- shard-adlp: NOTRUN -> [SKIP][113] ([Intel XE#1201] / [Intel XE#2284] / [Intel XE#366])
[113]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-2/igt@xe_pm@d3cold-multiple-execs.html
* igt@xe_pm@s3-d3hot-basic-exec:
- shard-dg2-set2: NOTRUN -> [DMESG-WARN][114] ([Intel XE#1551] / [Intel XE#569])
[114]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-433/igt@xe_pm@s3-d3hot-basic-exec.html
* igt@xe_pm@s4-basic:
- shard-adlp: [PASS][115] -> [ABORT][116] ([Intel XE#1358] / [Intel XE#1607])
[115]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-adlp-1/igt@xe_pm@s4-basic.html
[116]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-9/igt@xe_pm@s4-basic.html
* igt@xe_pm@s4-basic-exec:
- shard-adlp: [PASS][117] -> [ABORT][118] ([Intel XE#1358] / [Intel XE#1607] / [Intel XE#1794])
[117]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-adlp-1/igt@xe_pm@s4-basic-exec.html
[118]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-9/igt@xe_pm@s4-basic-exec.html
- shard-lnl: [PASS][119] -> [ABORT][120] ([Intel XE#1358] / [Intel XE#1607] / [Intel XE#1794])
[119]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-lnl-3/igt@xe_pm@s4-basic-exec.html
[120]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-2/igt@xe_pm@s4-basic-exec.html
* igt@xe_pm@s4-mocs:
- shard-adlp: [PASS][121] -> [ABORT][122] ([Intel XE#1794])
[121]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-adlp-8/igt@xe_pm@s4-mocs.html
[122]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-9/igt@xe_pm@s4-mocs.html
* igt@xe_pm@s4-vm-bind-prefetch:
- shard-lnl: [PASS][123] -> [ABORT][124] ([Intel XE#1607] / [Intel XE#1794])
[123]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-lnl-5/igt@xe_pm@s4-vm-bind-prefetch.html
[124]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-2/igt@xe_pm@s4-vm-bind-prefetch.html
* igt@xe_query@multigpu-query-invalid-query:
- shard-adlp: NOTRUN -> [SKIP][125] ([Intel XE#1201] / [Intel XE#944])
[125]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-8/igt@xe_query@multigpu-query-invalid-query.html
* igt@xe_wedged@basic-wedged:
- shard-adlp: NOTRUN -> [DMESG-WARN][126] ([Intel XE#1760])
[126]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-2/igt@xe_wedged@basic-wedged.html
#### Possible fixes ####
* igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip:
- shard-lnl: [FAIL][127] ([Intel XE#1659]) -> [PASS][128]
[127]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-lnl-3/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip.html
[128]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-5/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip.html
* igt@kms_cursor_legacy@long-nonblocking-modeset-vs-cursor-atomic:
- {shard-bmg}: [ABORT][129] ([Intel XE#2583]) -> [PASS][130] +1 other test pass
[129]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-bmg-5/igt@kms_cursor_legacy@long-nonblocking-modeset-vs-cursor-atomic.html
[130]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-bmg-7/igt@kms_cursor_legacy@long-nonblocking-modeset-vs-cursor-atomic.html
* igt@kms_flip@flip-vs-absolute-wf_vblank@a-edp1:
- shard-lnl: [FAIL][131] ([Intel XE#886]) -> [PASS][132]
[131]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-lnl-2/igt@kms_flip@flip-vs-absolute-wf_vblank@a-edp1.html
[132]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-8/igt@kms_flip@flip-vs-absolute-wf_vblank@a-edp1.html
* igt@kms_flip@flip-vs-suspend-interruptible:
- {shard-bmg}: [INCOMPLETE][133] ([Intel XE#2597]) -> [PASS][134] +1 other test pass
[133]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-bmg-6/igt@kms_flip@flip-vs-suspend-interruptible.html
[134]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-bmg-2/igt@kms_flip@flip-vs-suspend-interruptible.html
* igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-upscaling@pipe-a-default-mode:
- shard-lnl: [ABORT][135] ([Intel XE#2583]) -> [PASS][136] +6 other tests pass
[135]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-lnl-1/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-upscaling@pipe-a-default-mode.html
[136]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-1/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-upscaling@pipe-a-default-mode.html
* igt@kms_pipe_crc_basic@suspend-read-crc@pipe-d-hdmi-a-6:
- shard-dg2-set2: [DMESG-WARN][137] ([Intel XE#2019]) -> [PASS][138]
[137]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-435/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-d-hdmi-a-6.html
[138]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-434/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-d-hdmi-a-6.html
* igt@kms_plane@pixel-format@pipe-b-plane-0:
- {shard-bmg}: [DMESG-WARN][139] ([Intel XE#877]) -> [PASS][140] +9 other tests pass
[139]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-bmg-7/igt@kms_plane@pixel-format@pipe-b-plane-0.html
[140]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-bmg-4/igt@kms_plane@pixel-format@pipe-b-plane-0.html
* igt@kms_plane_lowres@tiling-none@pipe-d-hdmi-a-3:
- {shard-bmg}: [INCOMPLETE][141] -> [PASS][142] +1 other test pass
[141]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-bmg-4/igt@kms_plane_lowres@tiling-none@pipe-d-hdmi-a-3.html
[142]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-bmg-2/igt@kms_plane_lowres@tiling-none@pipe-d-hdmi-a-3.html
* igt@kms_plane_scaling@planes-downscale-factor-0-5:
- shard-dg2-set2: [INCOMPLETE][143] ([Intel XE#1195]) -> [PASS][144] +3 other tests pass
[143]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-433/igt@kms_plane_scaling@planes-downscale-factor-0-5.html
[144]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@kms_plane_scaling@planes-downscale-factor-0-5.html
* igt@kms_pm_dc@dc6-dpms:
- shard-adlp: [FAIL][145] ([Intel XE#718]) -> [PASS][146]
[145]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-adlp-2/igt@kms_pm_dc@dc6-dpms.html
[146]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-8/igt@kms_pm_dc@dc6-dpms.html
* igt@kms_universal_plane@cursor-fb-leak:
- shard-dg2-set2: [FAIL][147] ([Intel XE#771] / [Intel XE#899]) -> [PASS][148]
[147]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-433/igt@kms_universal_plane@cursor-fb-leak.html
[148]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@kms_universal_plane@cursor-fb-leak.html
* igt@kms_universal_plane@cursor-fb-leak@pipe-c-hdmi-a-6:
- shard-dg2-set2: [FAIL][149] ([Intel XE#899]) -> [PASS][150]
[149]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-433/igt@kms_universal_plane@cursor-fb-leak@pipe-c-hdmi-a-6.html
[150]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@kms_universal_plane@cursor-fb-leak@pipe-c-hdmi-a-6.html
* igt@xe_evict@evict-beng-threads-large:
- {shard-bmg}: [TIMEOUT][151] ([Intel XE#1473]) -> [PASS][152]
[151]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-bmg-7/igt@xe_evict@evict-beng-threads-large.html
[152]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-bmg-3/igt@xe_evict@evict-beng-threads-large.html
* igt@xe_evict@evict-mixed-many-threads-small:
- shard-dg2-set2: [TIMEOUT][153] ([Intel XE#1473]) -> [PASS][154]
[153]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-435/igt@xe_evict@evict-mixed-many-threads-small.html
[154]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-435/igt@xe_evict@evict-mixed-many-threads-small.html
* igt@xe_exec_fault_mode@many-rebind-prefetch:
- shard-lnl: [ABORT][155] ([Intel XE#2583] / [Intel XE#2587]) -> [PASS][156]
[155]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-lnl-2/igt@xe_exec_fault_mode@many-rebind-prefetch.html
[156]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-2/igt@xe_exec_fault_mode@many-rebind-prefetch.html
* igt@xe_exec_threads@threads-bal-mixed-shared-vm-rebind:
- shard-dg2-set2: [DMESG-WARN][157] -> [PASS][158]
[157]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-466/igt@xe_exec_threads@threads-bal-mixed-shared-vm-rebind.html
[158]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-435/igt@xe_exec_threads@threads-bal-mixed-shared-vm-rebind.html
* igt@xe_pm@s4-exec-after:
- shard-adlp: [ABORT][159] ([Intel XE#1358] / [Intel XE#1607]) -> [PASS][160] +1 other test pass
[159]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-adlp-9/igt@xe_pm@s4-exec-after.html
[160]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-8/igt@xe_pm@s4-exec-after.html
* igt@xe_pm@s4-vm-bind-unbind-all:
- shard-adlp: [ABORT][161] ([Intel XE#1794]) -> [PASS][162]
[161]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-adlp-9/igt@xe_pm@s4-vm-bind-unbind-all.html
[162]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-2/igt@xe_pm@s4-vm-bind-unbind-all.html
* igt@xe_pm_residency@toggle-gt-c6:
- shard-adlp: [FAIL][163] ([Intel XE#958]) -> [PASS][164]
[163]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-adlp-2/igt@xe_pm_residency@toggle-gt-c6.html
[164]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-6/igt@xe_pm_residency@toggle-gt-c6.html
* igt@xe_query@query-engines:
- shard-lnl: [ABORT][165] -> [PASS][166]
[165]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-lnl-4/igt@xe_query@query-engines.html
[166]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-3/igt@xe_query@query-engines.html
#### Warnings ####
* igt@kms_addfb_basic@addfb25-y-tiled-small-legacy:
- shard-dg2-set2: [SKIP][167] ([Intel XE#1201] / [Intel XE#623]) -> [SKIP][168] ([Intel XE#623])
[167]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-466/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html
[168]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html
* igt@kms_big_fb@4-tiled-32bpp-rotate-270:
- shard-dg2-set2: [SKIP][169] ([Intel XE#316]) -> [SKIP][170] ([Intel XE#1201] / [Intel XE#316]) +4 other tests skip
[169]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-432/igt@kms_big_fb@4-tiled-32bpp-rotate-270.html
[170]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-434/igt@kms_big_fb@4-tiled-32bpp-rotate-270.html
* igt@kms_big_fb@x-tiled-16bpp-rotate-270:
- shard-dg2-set2: [SKIP][171] ([Intel XE#1201] / [Intel XE#316]) -> [SKIP][172] ([Intel XE#316]) +1 other test skip
[171]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-433/igt@kms_big_fb@x-tiled-16bpp-rotate-270.html
[172]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@kms_big_fb@x-tiled-16bpp-rotate-270.html
* igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip:
- shard-adlp: [DMESG-FAIL][173] ([Intel XE#324]) -> [FAIL][174] ([Intel XE#1231])
[173]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-adlp-2/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip.html
[174]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-8/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip.html
* igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip:
- shard-adlp: [FAIL][175] ([Intel XE#1231]) -> [DMESG-FAIL][176] ([Intel XE#324]) +1 other test dmesg-fail
[175]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-adlp-4/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip.html
[176]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-adlp-1/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip.html
* igt@kms_big_fb@yf-tiled-32bpp-rotate-180:
- shard-dg2-set2: [SKIP][177] ([Intel XE#1124]) -> [SKIP][178] ([Intel XE#1124] / [Intel XE#1201]) +6 other tests skip
[177]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-432/igt@kms_big_fb@yf-tiled-32bpp-rotate-180.html
[178]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-434/igt@kms_big_fb@yf-tiled-32bpp-rotate-180.html
* igt@kms_big_fb@yf-tiled-64bpp-rotate-180:
- shard-dg2-set2: [SKIP][179] ([Intel XE#1124] / [Intel XE#1201]) -> [SKIP][180] ([Intel XE#1124]) +4 other tests skip
[179]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-433/igt@kms_big_fb@yf-tiled-64bpp-rotate-180.html
[180]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@kms_big_fb@yf-tiled-64bpp-rotate-180.html
* igt@kms_big_fb@yf-tiled-addfb:
- shard-dg2-set2: [SKIP][181] ([Intel XE#1201] / [Intel XE#619]) -> [SKIP][182] ([Intel XE#619]) +1 other test skip
[181]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-466/igt@kms_big_fb@yf-tiled-addfb.html
[182]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@kms_big_fb@yf-tiled-addfb.html
* igt@kms_big_fb@yf-tiled-addfb-size-offset-overflow:
- shard-dg2-set2: [SKIP][183] ([Intel XE#607]) -> [SKIP][184] ([Intel XE#1201] / [Intel XE#607])
[183]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-432/igt@kms_big_fb@yf-tiled-addfb-size-offset-overflow.html
[184]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-434/igt@kms_big_fb@yf-tiled-addfb-size-offset-overflow.html
* igt@kms_bw@connected-linear-tiling-4-displays-2160x1440p:
- shard-dg2-set2: [SKIP][185] ([Intel XE#1201] / [Intel XE#2191]) -> [SKIP][186] ([Intel XE#2191]) +1 other test skip
[185]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-433/igt@kms_bw@connected-linear-tiling-4-displays-2160x1440p.html
[186]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@kms_bw@connected-linear-tiling-4-displays-2160x1440p.html
* igt@kms_bw@linear-tiling-2-displays-3840x2160p:
- shard-dg2-set2: [SKIP][187] ([Intel XE#367]) -> [SKIP][188] ([Intel XE#1201] / [Intel XE#367]) +3 other tests skip
[187]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-432/igt@kms_bw@linear-tiling-2-displays-3840x2160p.html
[188]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-434/igt@kms_bw@linear-tiling-2-displays-3840x2160p.html
* igt@kms_bw@linear-tiling-3-displays-2160x1440p:
- shard-dg2-set2: [SKIP][189] ([Intel XE#1201] / [Intel XE#367]) -> [SKIP][190] ([Intel XE#367]) +1 other test skip
[189]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-433/igt@kms_bw@linear-tiling-3-displays-2160x1440p.html
[190]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@kms_bw@linear-tiling-3-displays-2160x1440p.html
* igt@kms_ccs@missing-ccs-buffer-4-tiled-mtl-mc-ccs@pipe-d-dp-4:
- shard-dg2-set2: [SKIP][191] ([Intel XE#455] / [Intel XE#787]) -> [SKIP][192] ([Intel XE#1201] / [Intel XE#455] / [Intel XE#787]) +19 other tests skip
[191]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-432/igt@kms_ccs@missing-ccs-buffer-4-tiled-mtl-mc-ccs@pipe-d-dp-4.html
[192]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-434/igt@kms_ccs@missing-ccs-buffer-4-tiled-mtl-mc-ccs@pipe-d-dp-4.html
* igt@kms_ccs@missing-ccs-buffer-yf-tiled-ccs@pipe-b-dp-4:
- shard-dg2-set2: [SKIP][193] ([Intel XE#787]) -> [SKIP][194] ([Intel XE#1201] / [Intel XE#787]) +69 other tests skip
[193]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-432/igt@kms_ccs@missing-ccs-buffer-yf-tiled-ccs@pipe-b-dp-4.html
[194]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-434/igt@kms_ccs@missing-ccs-buffer-yf-tiled-ccs@pipe-b-dp-4.html
* igt@kms_ccs@random-ccs-data-yf-tiled-ccs@pipe-b-dp-4:
- shard-dg2-set2: [SKIP][195] ([Intel XE#1201] / [Intel XE#787]) -> [SKIP][196] ([Intel XE#787]) +62 other tests skip
[195]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-433/igt@kms_ccs@random-ccs-data-yf-tiled-ccs@pipe-b-dp-4.html
[196]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@kms_ccs@random-ccs-data-yf-tiled-ccs@pipe-b-dp-4.html
* igt@kms_ccs@random-ccs-data-yf-tiled-ccs@pipe-d-dp-4:
- shard-dg2-set2: [SKIP][197] ([Intel XE#1201] / [Intel XE#455] / [Intel XE#787]) -> [SKIP][198] ([Intel XE#455] / [Intel XE#787]) +17 other tests skip
[197]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-433/igt@kms_ccs@random-ccs-data-yf-tiled-ccs@pipe-d-dp-4.html
[198]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@kms_ccs@random-ccs-data-yf-tiled-ccs@pipe-d-dp-4.html
* igt@kms_cdclk@mode-transition@pipe-d-dp-4:
- shard-dg2-set2: [SKIP][199] ([Intel XE#314]) -> [SKIP][200] ([Intel XE#1201] / [Intel XE#314]) +3 other tests skip
[199]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-432/igt@kms_cdclk@mode-transition@pipe-d-dp-4.html
[200]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-433/igt@kms_cdclk@mode-transition@pipe-d-dp-4.html
* igt@kms_cdclk@plane-scaling@pipe-b-dp-4:
- shard-dg2-set2: [SKIP][201] ([Intel XE#1152]) -> [SKIP][202] ([Intel XE#1152] / [Intel XE#1201]) +3 other tests skip
[201]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-432/igt@kms_cdclk@plane-scaling@pipe-b-dp-4.html
[202]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-434/igt@kms_cdclk@plane-scaling@pipe-b-dp-4.html
* igt@kms_chamelium_hpd@vga-hpd:
- shard-dg2-set2: [SKIP][203] ([Intel XE#373]) -> [SKIP][204] ([Intel XE#1201] / [Intel XE#373]) +7 other tests skip
[203]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-432/igt@kms_chamelium_hpd@vga-hpd.html
[204]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-434/igt@kms_chamelium_hpd@vga-hpd.html
* igt@kms_chamelium_hpd@vga-hpd-without-ddc:
- shard-dg2-set2: [SKIP][205] ([Intel XE#1201] / [Intel XE#373]) -> [SKIP][206] ([Intel XE#373]) +7 other tests skip
[205]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-466/igt@kms_chamelium_hpd@vga-hpd-without-ddc.html
[206]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@kms_chamelium_hpd@vga-hpd-without-ddc.html
* igt@kms_content_protection@dp-mst-type-1:
- shard-dg2-set2: [SKIP][207] ([Intel XE#1201] / [Intel XE#307]) -> [SKIP][208] ([Intel XE#307])
[207]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-433/igt@kms_content_protection@dp-mst-type-1.html
[208]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@kms_content_protection@dp-mst-type-1.html
* igt@kms_cursor_crc@cursor-offscreen-128x128@pipe-c-edp-1:
- shard-lnl: [DMESG-WARN][209] -> [ABORT][210] ([Intel XE#2583])
[209]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-lnl-8/igt@kms_cursor_crc@cursor-offscreen-128x128@pipe-c-edp-1.html
[210]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-3/igt@kms_cursor_crc@cursor-offscreen-128x128@pipe-c-edp-1.html
* igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy:
- shard-dg2-set2: [SKIP][211] ([Intel XE#323]) -> [SKIP][212] ([Intel XE#1201] / [Intel XE#323])
[211]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-432/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html
[212]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-434/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html
* igt@kms_dsc@dsc-with-output-formats-with-bpc:
- shard-dg2-set2: [SKIP][213] ([Intel XE#1201] / [Intel XE#455]) -> [SKIP][214] ([Intel XE#455]) +9 other tests skip
[213]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-466/igt@kms_dsc@dsc-with-output-formats-with-bpc.html
[214]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@kms_dsc@dsc-with-output-formats-with-bpc.html
* igt@kms_fbcon_fbt@psr-suspend:
- shard-dg2-set2: [SKIP][215] ([Intel XE#1201] / [Intel XE#776]) -> [SKIP][216] ([Intel XE#776])
[215]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-433/igt@kms_fbcon_fbt@psr-suspend.html
[216]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@kms_fbcon_fbt@psr-suspend.html
* igt@kms_feature_discovery@psr1:
- shard-dg2-set2: [SKIP][217] ([Intel XE#1135] / [Intel XE#1201]) -> [SKIP][218] ([Intel XE#1135])
[217]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-433/igt@kms_feature_discovery@psr1.html
[218]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@kms_feature_discovery@psr1.html
* igt@kms_flip@2x-busy-flip:
- shard-lnl: [SKIP][219] ([Intel XE#1421]) -> [ABORT][220] ([Intel XE#2583])
[219]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-lnl-6/igt@kms_flip@2x-busy-flip.html
[220]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-5/igt@kms_flip@2x-busy-flip.html
* igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-onoff:
- shard-dg2-set2: [SKIP][221] ([Intel XE#1201] / [Intel XE#651]) -> [SKIP][222] ([Intel XE#651]) +19 other tests skip
[221]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-433/igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-onoff.html
[222]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-onoff.html
* igt@kms_frontbuffer_tracking@drrs-indfb-scaledprimary:
- shard-dg2-set2: [SKIP][223] ([Intel XE#651]) -> [SKIP][224] ([Intel XE#1201] / [Intel XE#651]) +22 other tests skip
[223]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-432/igt@kms_frontbuffer_tracking@drrs-indfb-scaledprimary.html
[224]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-433/igt@kms_frontbuffer_tracking@drrs-indfb-scaledprimary.html
* igt@kms_frontbuffer_tracking@fbc-tiling-y:
- shard-dg2-set2: [SKIP][225] ([Intel XE#1201] / [Intel XE#658]) -> [SKIP][226] ([Intel XE#658])
[225]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-466/igt@kms_frontbuffer_tracking@fbc-tiling-y.html
[226]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@kms_frontbuffer_tracking@fbc-tiling-y.html
* igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-indfb-msflip-blt:
- shard-dg2-set2: [SKIP][227] ([Intel XE#653]) -> [SKIP][228] ([Intel XE#1201] / [Intel XE#653]) +21 other tests skip
[227]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-432/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-indfb-msflip-blt.html
[228]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-434/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-indfb-msflip-blt.html
* igt@kms_frontbuffer_tracking@fbcpsr-slowdraw:
- shard-dg2-set2: [SKIP][229] ([Intel XE#1201] / [Intel XE#653]) -> [SKIP][230] ([Intel XE#653]) +17 other tests skip
[229]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-433/igt@kms_frontbuffer_tracking@fbcpsr-slowdraw.html
[230]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@kms_frontbuffer_tracking@fbcpsr-slowdraw.html
* igt@kms_getfb@getfb-reject-ccs:
- shard-dg2-set2: [SKIP][231] ([Intel XE#1201] / [Intel XE#605]) -> [SKIP][232] ([Intel XE#605])
[231]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-433/igt@kms_getfb@getfb-reject-ccs.html
[232]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@kms_getfb@getfb-reject-ccs.html
* igt@kms_hdr@invalid-hdr:
- shard-dg2-set2: [SKIP][233] ([Intel XE#455]) -> [SKIP][234] ([Intel XE#1201] / [Intel XE#455]) +12 other tests skip
[233]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-432/igt@kms_hdr@invalid-hdr.html
[234]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-434/igt@kms_hdr@invalid-hdr.html
* igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25:
- shard-dg2-set2: [SKIP][235] ([Intel XE#2318] / [Intel XE#455]) -> [SKIP][236] ([Intel XE#1201] / [Intel XE#2318] / [Intel XE#455]) +1 other test skip
[235]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-432/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25.html
[236]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-434/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25.html
* igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25@pipe-c-hdmi-a-6:
- shard-dg2-set2: [SKIP][237] ([Intel XE#2318]) -> [SKIP][238] ([Intel XE#1201] / [Intel XE#2318]) +2 other tests skip
[237]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-432/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25@pipe-c-hdmi-a-6.html
[238]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-434/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25@pipe-c-hdmi-a-6.html
* igt@kms_pm_backlight@fade-with-dpms:
- shard-dg2-set2: [SKIP][239] ([Intel XE#1201] / [Intel XE#870]) -> [SKIP][240] ([Intel XE#870])
[239]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-433/igt@kms_pm_backlight@fade-with-dpms.html
[240]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@kms_pm_backlight@fade-with-dpms.html
* igt@kms_pm_backlight@fade-with-suspend:
- shard-dg2-set2: [SKIP][241] ([Intel XE#870]) -> [SKIP][242] ([Intel XE#1201] / [Intel XE#870]) +1 other test skip
[241]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-432/igt@kms_pm_backlight@fade-with-suspend.html
[242]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-434/igt@kms_pm_backlight@fade-with-suspend.html
* igt@kms_pm_rpm@dpms-mode-unset-non-lpsp:
- shard-lnl: [ABORT][243] ([Intel XE#2583]) -> [SKIP][244] ([Intel XE#1439])
[243]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-lnl-7/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html
[244]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-4/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html
* igt@kms_psr2_sf@fbc-overlay-plane-update-sf-dmg-area:
- shard-dg2-set2: [SKIP][245] ([Intel XE#1489]) -> [SKIP][246] ([Intel XE#1201] / [Intel XE#1489]) +2 other tests skip
[245]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-432/igt@kms_psr2_sf@fbc-overlay-plane-update-sf-dmg-area.html
[246]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-433/igt@kms_psr2_sf@fbc-overlay-plane-update-sf-dmg-area.html
* igt@kms_psr2_sf@primary-plane-update-sf-dmg-area-big-fb:
- shard-dg2-set2: [SKIP][247] ([Intel XE#1201] / [Intel XE#1489]) -> [SKIP][248] ([Intel XE#1489]) +3 other tests skip
[247]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-466/igt@kms_psr2_sf@primary-plane-update-sf-dmg-area-big-fb.html
[248]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@kms_psr2_sf@primary-plane-update-sf-dmg-area-big-fb.html
* igt@kms_psr@fbc-psr2-no-drrs:
- shard-dg2-set2: [SKIP][249] ([Intel XE#929]) -> [SKIP][250] ([Intel XE#1201] / [Intel XE#929]) +11 other tests skip
[249]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-432/igt@kms_psr@fbc-psr2-no-drrs.html
[250]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-433/igt@kms_psr@fbc-psr2-no-drrs.html
* igt@kms_psr@psr-dpms:
- shard-dg2-set2: [SKIP][251] ([Intel XE#1201] / [Intel XE#929]) -> [SKIP][252] ([Intel XE#929]) +8 other tests skip
[251]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-433/igt@kms_psr@psr-dpms.html
[252]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@kms_psr@psr-dpms.html
* igt@kms_rotation_crc@sprite-rotation-90-pos-100-0:
- shard-dg2-set2: [SKIP][253] ([Intel XE#327]) -> [SKIP][254] ([Intel XE#1201] / [Intel XE#327])
[253]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-432/igt@kms_rotation_crc@sprite-rotation-90-pos-100-0.html
[254]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-434/igt@kms_rotation_crc@sprite-rotation-90-pos-100-0.html
* igt@kms_vrr@cmrr:
- shard-dg2-set2: [SKIP][255] ([Intel XE#1201] / [Intel XE#2168]) -> [SKIP][256] ([Intel XE#2168])
[255]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-433/igt@kms_vrr@cmrr.html
[256]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@kms_vrr@cmrr.html
* igt@kms_writeback@writeback-check-output-xrgb2101010:
- shard-dg2-set2: [SKIP][257] ([Intel XE#1201] / [Intel XE#756]) -> [SKIP][258] ([Intel XE#756]) +1 other test skip
[257]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-433/igt@kms_writeback@writeback-check-output-xrgb2101010.html
[258]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@kms_writeback@writeback-check-output-xrgb2101010.html
* igt@kms_writeback@writeback-fb-id-xrgb2101010:
- shard-dg2-set2: [SKIP][259] ([Intel XE#756]) -> [SKIP][260] ([Intel XE#1201] / [Intel XE#756])
[259]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-432/igt@kms_writeback@writeback-fb-id-xrgb2101010.html
[260]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-434/igt@kms_writeback@writeback-fb-id-xrgb2101010.html
* igt@xe_copy_basic@mem-copy-linear-0x369:
- shard-dg2-set2: [SKIP][261] ([Intel XE#1123]) -> [SKIP][262] ([Intel XE#1123] / [Intel XE#1201])
[261]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-432/igt@xe_copy_basic@mem-copy-linear-0x369.html
[262]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-434/igt@xe_copy_basic@mem-copy-linear-0x369.html
* igt@xe_exec_basic@multigpu-once-userptr-rebind:
- shard-lnl: [ABORT][263] ([Intel XE#2583]) -> [SKIP][264] ([Intel XE#1392])
[263]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-lnl-8/igt@xe_exec_basic@multigpu-once-userptr-rebind.html
[264]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-lnl-3/igt@xe_exec_basic@multigpu-once-userptr-rebind.html
* igt@xe_exec_fault_mode@once-bindexecqueue-rebind:
- shard-dg2-set2: [SKIP][265] ([Intel XE#288]) -> [SKIP][266] ([Intel XE#1201] / [Intel XE#288]) +19 other tests skip
[265]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-432/igt@xe_exec_fault_mode@once-bindexecqueue-rebind.html
[266]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-434/igt@xe_exec_fault_mode@once-bindexecqueue-rebind.html
* igt@xe_exec_fault_mode@twice-userptr-rebind-imm:
- shard-dg2-set2: [SKIP][267] ([Intel XE#1201] / [Intel XE#288]) -> [SKIP][268] ([Intel XE#288]) +15 other tests skip
[267]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-433/igt@xe_exec_fault_mode@twice-userptr-rebind-imm.html
[268]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@xe_exec_fault_mode@twice-userptr-rebind-imm.html
* igt@xe_exec_mix_modes@exec-simple-batch-store-lr:
- shard-dg2-set2: [SKIP][269] ([Intel XE#1201] / [Intel XE#2360]) -> [SKIP][270] ([Intel XE#2360])
[269]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-433/igt@xe_exec_mix_modes@exec-simple-batch-store-lr.html
[270]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@xe_exec_mix_modes@exec-simple-batch-store-lr.html
* igt@xe_huc_copy@huc_copy:
- shard-dg2-set2: [SKIP][271] ([Intel XE#255]) -> [SKIP][272] ([Intel XE#1201] / [Intel XE#255])
[271]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-432/igt@xe_huc_copy@huc_copy.html
[272]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-434/igt@xe_huc_copy@huc_copy.html
* igt@xe_media_fill@media-fill:
- shard-dg2-set2: [SKIP][273] ([Intel XE#560]) -> [SKIP][274] ([Intel XE#1201] / [Intel XE#560])
[273]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-432/igt@xe_media_fill@media-fill.html
[274]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-433/igt@xe_media_fill@media-fill.html
* igt@xe_mmap@small-bar:
- shard-dg2-set2: [SKIP][275] ([Intel XE#1201] / [Intel XE#512]) -> [SKIP][276] ([Intel XE#512])
[275]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-466/igt@xe_mmap@small-bar.html
[276]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@xe_mmap@small-bar.html
* igt@xe_module_load@load:
- shard-dg2-set2: [SKIP][277] ([Intel XE#1201] / [Intel XE#378]) -> [SKIP][278] ([Intel XE#378])
[277]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-433/igt@xe_module_load@load.html
[278]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@xe_module_load@load.html
* igt@xe_oa@buffer-fill:
- shard-dg2-set2: [SKIP][279] ([Intel XE#1201] / [Intel XE#2541]) -> [SKIP][280] ([Intel XE#2541]) +3 other tests skip
[279]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-433/igt@xe_oa@buffer-fill.html
[280]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@xe_oa@buffer-fill.html
* igt@xe_oa@mi-rpc:
- shard-dg2-set2: [SKIP][281] ([Intel XE#2541]) -> [SKIP][282] ([Intel XE#1201] / [Intel XE#2541]) +3 other tests skip
[281]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-432/igt@xe_oa@mi-rpc.html
[282]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-434/igt@xe_oa@mi-rpc.html
* igt@xe_pat@pat-index-xe2:
- shard-dg2-set2: [SKIP][283] ([Intel XE#977]) -> [SKIP][284] ([Intel XE#1201] / [Intel XE#977])
[283]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-432/igt@xe_pat@pat-index-xe2.html
[284]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-434/igt@xe_pat@pat-index-xe2.html
* igt@xe_pm@d3cold-multiple-execs:
- shard-dg2-set2: [SKIP][285] ([Intel XE#2284] / [Intel XE#366]) -> [SKIP][286] ([Intel XE#1201] / [Intel XE#2284] / [Intel XE#366])
[285]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-432/igt@xe_pm@d3cold-multiple-execs.html
[286]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-434/igt@xe_pm@d3cold-multiple-execs.html
* igt@xe_pm@s2idle-d3cold-basic-exec:
- shard-dg2-set2: [SKIP][287] ([Intel XE#1201] / [Intel XE#2284] / [Intel XE#366]) -> [SKIP][288] ([Intel XE#2284] / [Intel XE#366])
[287]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-433/igt@xe_pm@s2idle-d3cold-basic-exec.html
[288]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@xe_pm@s2idle-d3cold-basic-exec.html
* igt@xe_query@multigpu-query-mem-usage:
- shard-dg2-set2: [SKIP][289] ([Intel XE#944]) -> [SKIP][290] ([Intel XE#1201] / [Intel XE#944]) +2 other tests skip
[289]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-432/igt@xe_query@multigpu-query-mem-usage.html
[290]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-434/igt@xe_query@multigpu-query-mem-usage.html
* igt@xe_query@multigpu-query-uc-fw-version-guc:
- shard-dg2-set2: [SKIP][291] ([Intel XE#1201] / [Intel XE#944]) -> [SKIP][292] ([Intel XE#944])
[291]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1807-ddbda36f876f53498924155abfa1cd4c58517903/shard-dg2-433/igt@xe_query@multigpu-query-uc-fw-version-guc.html
[292]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/shard-dg2-432/igt@xe_query@multigpu-query-uc-fw-version-guc.html
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[Intel XE#1000]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1000
[Intel XE#1033]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1033
[Intel XE#1061]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1061
[Intel XE#1122]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1122
[Intel XE#1123]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1123
[Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
[Intel XE#1126]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1126
[Intel XE#1127]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1127
[Intel XE#1135]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1135
[Intel XE#1152]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1152
[Intel XE#1178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1178
[Intel XE#1195]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1195
[Intel XE#1201]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1201
[Intel XE#1204]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1204
[Intel XE#1231]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1231
[Intel XE#1280]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1280
[Intel XE#1358]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1358
[Intel XE#1392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1392
[Intel XE#1399]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1399
[Intel XE#1401]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1401
[Intel XE#1407]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1407
[Intel XE#1421]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1421
[Intel XE#1424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1424
[Intel XE#1426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1426
[Intel XE#1435]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1435
[Intel XE#1439]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1439
[Intel XE#1467]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1467
[Intel XE#1468]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1468
[Intel XE#1469]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1469
[Intel XE#1473]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1473
[Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
[Intel XE#1499]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1499
[Intel XE#1503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1503
[Intel XE#1508]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1508
[Intel XE#1551]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1551
[Intel XE#1607]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1607
[Intel XE#1659]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1659
[Intel XE#1729]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1729
[Intel XE#1745]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1745
[Intel XE#1760]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1760
[Intel XE#1794]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1794
[Intel XE#1874]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1874
[Intel XE#1961]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1961
[Intel XE#2019]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2019
[Intel XE#2026]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2026
[Intel XE#2168]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2168
[Intel XE#2191]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2191
[Intel XE#2229]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2229
[Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
[Intel XE#2251]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2251
[Intel XE#2252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2252
[Intel XE#2284]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2284
[Intel XE#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311
[Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313
[Intel XE#2318]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2318
[Intel XE#2320]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2320
[Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
[Intel XE#2333]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2333
[Intel XE#2360]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2360
[Intel XE#2400]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2400
[Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
[Intel XE#2457]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2457
[Intel XE#2509]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2509
[Intel XE#2541]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2541
[Intel XE#255]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/255
[Intel XE#2583]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2583
[Intel XE#2587]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2587
[Intel XE#2597]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2597
[Intel XE#261]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/261
[Intel XE#288]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/288
[Intel XE#306]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/306
[Intel XE#307]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/307
[Intel XE#309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/309
[Intel XE#310]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/310
[Intel XE#314]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/314
[Intel XE#316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/316
[Intel XE#323]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/323
[Intel XE#324]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/324
[Intel XE#327]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/327
[Intel XE#366]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/366
[Intel XE#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
[Intel XE#373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/373
[Intel XE#378]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/378
[Intel XE#455]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/455
[Intel XE#512]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/512
[Intel XE#560]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/560
[Intel XE#569]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/569
[Intel XE#599]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/599
[Intel XE#605]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/605
[Intel XE#607]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/607
[Intel XE#619]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/619
[Intel XE#623]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/623
[Intel XE#651]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/651
[Intel XE#653]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/653
[Intel XE#656]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/656
[Intel XE#658]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/658
[Intel XE#688]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/688
[Intel XE#702]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/702
[Intel XE#718]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/718
[Intel XE#756]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/756
[Intel XE#771]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/771
[Intel XE#776]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/776
[Intel XE#787]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/787
[Intel XE#870]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/870
[Intel XE#877]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/877
[Intel XE#886]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/886
[Intel XE#899]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/899
[Intel XE#929]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/929
[Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944
[Intel XE#958]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/958
[Intel XE#977]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/977
Build changes
-------------
* Linux: xe-1807-ddbda36f876f53498924155abfa1cd4c58517903 -> xe-pw-137588v1
IGT_7982: 76ebe4ecfa1757f21e3f1d3be5993088a92cd274 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-1807-ddbda36f876f53498924155abfa1cd4c58517903: ddbda36f876f53498924155abfa1cd4c58517903
xe-pw-137588v1: 137588v1
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137588v1/index.html
[-- Attachment #2: Type: text/html, Size: 100160 bytes --]
^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH 11/12] drm/xe: Make xe_ggtt_node struct independent
2024-08-20 20:25 [PATCH 01/12] " Rodrigo Vivi
@ 2024-08-20 20:25 ` Rodrigo Vivi
0 siblings, 0 replies; 28+ messages in thread
From: Rodrigo Vivi @ 2024-08-20 20:25 UTC (permalink / raw)
To: intel-xe
Cc: lucas.demarchi, Rodrigo Vivi, Matthew Auld, Michal Wajdeczko,
Matthew Brost
In some rare cases, the drm_mm node cannot be removed synchronously
due to runtime PM conditions. In this situation, the node removal will
be delegated to a workqueue that will be able to wake up the device
before removing the node.
However, in this situation, the lifetime of the xe_ggtt_node cannot
be restricted to the lifetime of the parent object. So, this patch
introduces the infrastructure so the xe_ggtt_node struct can be
allocated in advance and freed when needed.
By having the ggtt backpointer, it also ensure that the init function
is always called before any attempt to insert or reserve the node
in the GGTT.
v2: s/xe_ggtt_node_force_fini/xe_ggtt_node_fini and use it
internaly (Brost)
v3: - Use GF_NOFS for node allocation (CI)
- Avoid ggtt argument, now that we have it inside the node (Lucas)
- Fix some missed fini cases (CI)
v4: - Fix SRIOV critical case where config->ggtt_region was
lost (Michal)
- Avoid ggtt argument also on removal (missed case on v3) (Michal)
- Remove useless checks (Michal)
- Return 0 instead of negative errno on a u32 addr. (Michal)
- s/xe_ggtt_assign/xe_ggtt_node_assign for coherence, while we
are touching it (Michal)
Cc: Matthew Auld <matthew.auld@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com> #2
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
| 4 +-
drivers/gpu/drm/xe/display/xe_fb_pin.c | 39 +++--
drivers/gpu/drm/xe/xe_bo.c | 2 +-
drivers/gpu/drm/xe/xe_bo.h | 9 +-
drivers/gpu/drm/xe/xe_bo_types.h | 2 +-
drivers/gpu/drm/xe/xe_device_types.h | 2 +-
drivers/gpu/drm/xe/xe_ggtt.c | 140 +++++++++++++-----
drivers/gpu/drm/xe/xe_ggtt.h | 17 +--
drivers/gpu/drm/xe/xe_ggtt_types.h | 8 +-
drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c | 47 +++---
.../gpu/drm/xe/xe_gt_sriov_pf_config_types.h | 2 +-
drivers/gpu/drm/xe/xe_gt_sriov_vf.c | 27 +++-
12 files changed, 206 insertions(+), 93 deletions(-)
--git a/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h b/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
index 3028ac1ba72f..bdae8392e125 100644
--- a/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
+++ b/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
@@ -20,7 +20,7 @@ struct xe_bo;
struct i915_vma {
struct xe_bo *bo, *dpt;
- struct xe_ggtt_node node;
+ struct xe_ggtt_node *node;
};
#define i915_ggtt_clear_scanout(bo) do { } while (0)
@@ -29,7 +29,7 @@ struct i915_vma {
static inline u32 i915_ggtt_offset(const struct i915_vma *vma)
{
- return vma->node.base.start;
+ return vma->node->base.start;
}
#endif
diff --git a/drivers/gpu/drm/xe/display/xe_fb_pin.c b/drivers/gpu/drm/xe/display/xe_fb_pin.c
index de4930b67a29..d650c5ac41a4 100644
--- a/drivers/gpu/drm/xe/display/xe_fb_pin.c
+++ b/drivers/gpu/drm/xe/display/xe_fb_pin.c
@@ -204,20 +204,28 @@ static int __xe_pin_fb_vma_ggtt(const struct intel_framebuffer *fb,
if (xe_bo_is_vram(bo) && ggtt->flags & XE_GGTT_FLAGS_64K)
align = max_t(u32, align, SZ_64K);
- if (bo->ggtt_node.base.size && view->type == I915_GTT_VIEW_NORMAL) {
+ if (bo->ggtt_node && view->type == I915_GTT_VIEW_NORMAL) {
vma->node = bo->ggtt_node;
} else if (view->type == I915_GTT_VIEW_NORMAL) {
u32 x, size = bo->ttm.base.size;
- ret = xe_ggtt_node_insert_locked(ggtt, &vma->node, size, align, 0);
- if (ret)
+ vma->node = xe_ggtt_node_init(ggtt);
+ if (IS_ERR(vma->node)) {
+ ret = PTR_ERR(vma->node);
goto out_unlock;
+ }
+
+ ret = xe_ggtt_node_insert_locked(vma->node, size, align, 0);
+ if (ret) {
+ xe_ggtt_node_fini(vma->node);
+ goto out_unlock;
+ }
for (x = 0; x < size; x += XE_PAGE_SIZE) {
u64 pte = ggtt->pt_ops->pte_encode_bo(bo, x,
xe->pat.idx[XE_CACHE_NONE]);
- ggtt->pt_ops->ggtt_set_pte(ggtt, vma->node.base.start + x, pte);
+ ggtt->pt_ops->ggtt_set_pte(ggtt, vma->node->base.start + x, pte);
}
} else {
u32 i, ggtt_ofs;
@@ -226,11 +234,19 @@ static int __xe_pin_fb_vma_ggtt(const struct intel_framebuffer *fb,
/* display seems to use tiles instead of bytes here, so convert it back.. */
u32 size = intel_rotation_info_size(rot_info) * XE_PAGE_SIZE;
- ret = xe_ggtt_node_insert_locked(ggtt, &vma->node, size, align, 0);
- if (ret)
+ vma->node = xe_ggtt_node_init(ggtt);
+ if (IS_ERR(vma->node)) {
+ ret = PTR_ERR(vma->node);
+ goto out_unlock;
+ }
+
+ ret = xe_ggtt_node_insert_locked(vma->node, size, align, 0);
+ if (ret) {
+ xe_ggtt_node_fini(vma->node);
goto out_unlock;
+ }
- ggtt_ofs = vma->node.base.start;
+ ggtt_ofs = vma->node->base.start;
for (i = 0; i < ARRAY_SIZE(rot_info->plane); i++)
write_ggtt_rotated(bo, ggtt, &ggtt_ofs,
@@ -318,14 +334,11 @@ static struct i915_vma *__xe_pin_fb_vma(const struct intel_framebuffer *fb,
static void __xe_unpin_fb_vma(struct i915_vma *vma)
{
- struct xe_device *xe = to_xe_device(vma->bo->ttm.base.dev);
- struct xe_ggtt *ggtt = xe_device_get_root_tile(xe)->mem.ggtt;
-
if (vma->dpt)
xe_bo_unpin_map_no_vm(vma->dpt);
- else if (!xe_ggtt_node_allocated(&vma->bo->ggtt_node) ||
- vma->bo->ggtt_node.base.start != vma->node.base.start)
- xe_ggtt_node_remove(ggtt, &vma->node, false);
+ else if (!xe_ggtt_node_allocated(vma->bo->ggtt_node) ||
+ vma->bo->ggtt_node->base.start != vma->node->base.start)
+ xe_ggtt_node_remove(vma->node, false);
ttm_bo_reserve(&vma->bo->ttm, false, false, NULL);
ttm_bo_unpin(&vma->bo->ttm);
diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index 1faef9903b87..cbe7bf098970 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -1120,7 +1120,7 @@ static void xe_ttm_bo_destroy(struct ttm_buffer_object *ttm_bo)
xe_assert(xe, list_empty(&ttm_bo->base.gpuva.list));
- if (bo->ggtt_node.base.size)
+ if (bo->ggtt_node && bo->ggtt_node->base.size)
xe_ggtt_remove_bo(bo->tile->mem.ggtt, bo);
#ifdef CONFIG_PROC_FS
diff --git a/drivers/gpu/drm/xe/xe_bo.h b/drivers/gpu/drm/xe/xe_bo.h
index 9904b410be37..dbfb3209615d 100644
--- a/drivers/gpu/drm/xe/xe_bo.h
+++ b/drivers/gpu/drm/xe/xe_bo.h
@@ -194,9 +194,12 @@ xe_bo_main_addr(struct xe_bo *bo, size_t page_size)
static inline u32
xe_bo_ggtt_addr(struct xe_bo *bo)
{
- XE_WARN_ON(bo->ggtt_node.base.size > bo->size);
- XE_WARN_ON(bo->ggtt_node.base.start + bo->ggtt_node.base.size > (1ull << 32));
- return bo->ggtt_node.base.start;
+ if (XE_WARN_ON(!bo->ggtt_node))
+ return 0;
+
+ XE_WARN_ON(bo->ggtt_node->base.size > bo->size);
+ XE_WARN_ON(bo->ggtt_node->base.start + bo->ggtt_node->base.size > (1ull << 32));
+ return bo->ggtt_node->base.start;
}
int xe_bo_vmap(struct xe_bo *bo);
diff --git a/drivers/gpu/drm/xe/xe_bo_types.h b/drivers/gpu/drm/xe/xe_bo_types.h
index 4b1de9f5be00..2ed558ac2264 100644
--- a/drivers/gpu/drm/xe/xe_bo_types.h
+++ b/drivers/gpu/drm/xe/xe_bo_types.h
@@ -40,7 +40,7 @@ struct xe_bo {
/** @placement: current placement for this BO */
struct ttm_placement placement;
/** @ggtt_node: GGTT node if this BO is mapped in the GGTT */
- struct xe_ggtt_node ggtt_node;
+ struct xe_ggtt_node *ggtt_node;
/** @vmap: iosys map of this buffer */
struct iosys_map vmap;
/** @ttm_kmap: TTM bo kmap object for internal use only. Keep off. */
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index 9f7d46a3260c..121a403a1478 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -204,7 +204,7 @@ struct xe_tile {
struct xe_memirq memirq;
/** @sriov.vf.ggtt_balloon: GGTT regions excluded from use. */
- struct xe_ggtt_node ggtt_balloon[2];
+ struct xe_ggtt_node *ggtt_balloon[2];
} vf;
} sriov;
diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
index d21474715bdb..58d7cad2425b 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.c
+++ b/drivers/gpu/drm/xe/xe_ggtt.c
@@ -348,7 +348,6 @@ static void xe_ggtt_dump_node(struct xe_ggtt *ggtt,
/**
* xe_ggtt_node_insert_balloon - prevent allocation of specified GGTT addresses
- * @ggtt: the &xe_ggtt where we want to make reservation
* @node: the &xe_ggtt_node to hold reserved GGTT node
* @start: the starting GGTT address of the reserved region
* @end: then end GGTT address of the reserved region
@@ -357,8 +356,9 @@ static void xe_ggtt_dump_node(struct xe_ggtt *ggtt,
*
* Return: 0 on success or a negative error code on failure.
*/
-int xe_ggtt_node_insert_balloon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node, u64 start, u64 end)
+int xe_ggtt_node_insert_balloon(struct xe_ggtt_node *node, u64 start, u64 end)
{
+ struct xe_ggtt *ggtt = node->ggtt;
int err;
xe_tile_assert(ggtt->tile, start < end);
@@ -385,77 +385,124 @@ int xe_ggtt_node_insert_balloon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
/**
* xe_ggtt_node_remove_balloon - release a reserved GGTT region
- * @ggtt: the &xe_ggtt where reserved node belongs
* @node: the &xe_ggtt_node with reserved GGTT region
*
* See xe_ggtt_node_insert_balloon() for details.
*/
-void xe_ggtt_node_remove_balloon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node)
+void xe_ggtt_node_remove_balloon(struct xe_ggtt_node *node)
{
- if (!drm_mm_node_allocated(&node->base))
+ if (!node || !node->ggtt)
return;
- xe_ggtt_dump_node(ggtt, &node->base, "remove-balloon");
+ if (!drm_mm_node_allocated(&node->base))
+ goto free_node;
- mutex_lock(&ggtt->lock);
+ xe_ggtt_dump_node(node->ggtt, &node->base, "remove-balloon");
+
+ mutex_lock(&node->ggtt->lock);
drm_mm_remove_node(&node->base);
- mutex_unlock(&ggtt->lock);
+ mutex_unlock(&node->ggtt->lock);
+
+free_node:
+ xe_ggtt_node_fini(node);
}
/**
* xe_ggtt_node_insert_locked - Locked version to insert a &xe_ggtt_node into the GGTT
- * @ggtt: the &xe_ggtt where node will be inserted
* @node: the &xe_ggtt_node to be inserted
* @size: size of the node
* @align: alignment constrain of the node
* @mm_flags: flags to control the node behavior
*
+ * It cannot be called without first having called xe_ggtt_init() once.
* To be used in cases where ggtt->lock is already taken.
*
* Return: 0 on success or a negative error code on failure.
*/
-int xe_ggtt_node_insert_locked(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
+int xe_ggtt_node_insert_locked(struct xe_ggtt_node *node,
u32 size, u32 align, u32 mm_flags)
{
- return drm_mm_insert_node_generic(&ggtt->mm, &node->base, size, align, 0,
+ return drm_mm_insert_node_generic(&node->ggtt->mm, &node->base, size, align, 0,
mm_flags);
}
/**
* xe_ggtt_node_insert - Insert a &xe_ggtt_node into the GGTT
- * @ggtt: the &xe_ggtt where node will be inserted
* @node: the &xe_ggtt_node to be inserted
* @size: size of the node
* @align: alignment constrain of the node
*
+ * It cannot be called without first having called xe_ggtt_init() once.
+ *
* Return: 0 on success or a negative error code on failure.
*/
-int xe_ggtt_node_insert(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
- u32 size, u32 align)
+int xe_ggtt_node_insert(struct xe_ggtt_node *node, u32 size, u32 align)
{
int ret;
- mutex_lock(&ggtt->lock);
- ret = xe_ggtt_node_insert_locked(ggtt, node, size,
- align, DRM_MM_INSERT_HIGH);
- mutex_unlock(&ggtt->lock);
+ if (!node || !node->ggtt)
+ return -ENOENT;
+
+ mutex_lock(&node->ggtt->lock);
+ ret = xe_ggtt_node_insert_locked(node, size, align,
+ DRM_MM_INSERT_HIGH);
+ mutex_unlock(&node->ggtt->lock);
return ret;
}
+/**
+ * xe_ggtt_node_init - Initialize %xe_ggtt_node struct
+ * @ggtt: the &xe_ggtt where the new node will later be inserted/reserved.
+ *
+ * This function will allocated the struct %xe_ggtt_node and return it's pointer.
+ * This struct will then be freed after the node removal upon xe_ggtt_node_remove()
+ * or xe_ggtt_node_remove_balloon().
+ * Having %xe_ggtt_node struct allocated doesn't mean that the node is already allocated
+ * in GGTT. Only the xe_ggtt_node_insert(), xe_ggtt_node_insert_locked(),
+ * xe_ggtt_node_insert_balloon() will ensure the node is inserted or reserved in GGTT.
+ *
+ * Return: A pointer to %xe_ggtt_node struct on success. An ERR_PTR otherwise.
+ **/
+struct xe_ggtt_node *xe_ggtt_node_init(struct xe_ggtt *ggtt)
+{
+ struct xe_ggtt_node *node = kzalloc(sizeof(*node), GFP_NOFS);
+
+ if (!node)
+ return ERR_PTR(-ENOMEM);
+
+ node->ggtt = ggtt;
+ return node;
+}
+
+/**
+ * xe_ggtt_node_fini - Forcebly finalize %xe_ggtt_node struct
+ * @node: the &xe_ggtt_node to be freed
+ *
+ * If anything went wrong with either xe_ggtt_node_insert(), xe_ggtt_node_insert_locked(),
+ * or xe_ggtt_node_insert_balloon(); and this @node is not going to be reused, then,
+ * this function needs to be called to free the %xe_ggtt_node struct
+ **/
+void xe_ggtt_node_fini(struct xe_ggtt_node *node)
+{
+ kfree(node);
+}
+
/**
* xe_ggtt_node_remove - Remove a &xe_ggtt_node from the GGTT
- * @ggtt: the &xe_ggtt where node will be removed
* @node: the &xe_ggtt_node to be removed
* @invalidate: if node needs invalidation upon removal
*/
-void xe_ggtt_node_remove(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
- bool invalidate)
+void xe_ggtt_node_remove(struct xe_ggtt_node *node, bool invalidate)
{
+ struct xe_ggtt *ggtt = node->ggtt;
struct xe_device *xe = tile_to_xe(ggtt->tile);
bool bound;
int idx;
+ if (!node || !node->ggtt)
+ return;
+
bound = drm_dev_enter(&xe->drm, &idx);
if (bound)
xe_pm_runtime_get_noresume(xe);
@@ -468,23 +515,29 @@ void xe_ggtt_node_remove(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
mutex_unlock(&ggtt->lock);
if (!bound)
- return;
+ goto free_node;
if (invalidate)
xe_ggtt_invalidate(ggtt);
xe_pm_runtime_put(xe);
drm_dev_exit(idx);
+
+free_node:
+ xe_ggtt_node_fini(node);
}
/**
- * xe_ggtt_node_allocated - Check if node is allocated
+ * xe_ggtt_node_allocated - Check if node is allocated in GGTT
* @node: the &xe_ggtt_node to be inspected
*
* Return: True if allocated, False otherwise.
*/
bool xe_ggtt_node_allocated(const struct xe_ggtt_node *node)
{
+ if (!node || !node->ggtt)
+ return false;
+
return drm_mm_node_allocated(&node->base);
}
@@ -497,9 +550,14 @@ void xe_ggtt_map_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
{
u16 cache_mode = bo->flags & XE_BO_FLAG_NEEDS_UC ? XE_CACHE_NONE : XE_CACHE_WB;
u16 pat_index = tile_to_xe(ggtt->tile)->pat.idx[cache_mode];
- u64 start = bo->ggtt_node.base.start;
+ u64 start;
u64 offset, pte;
+ if (XE_WARN_ON(!bo->ggtt_node))
+ return;
+
+ start = bo->ggtt_node->base.start;
+
for (offset = 0; offset < bo->size; offset += XE_PAGE_SIZE) {
pte = ggtt->pt_ops->pte_encode_bo(bo, offset, pat_index);
ggtt->pt_ops->ggtt_set_pte(ggtt, start + offset, pte);
@@ -515,9 +573,9 @@ static int __xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
if (xe_bo_is_vram(bo) && ggtt->flags & XE_GGTT_FLAGS_64K)
alignment = SZ_64K;
- if (XE_WARN_ON(bo->ggtt_node.base.size)) {
+ if (XE_WARN_ON(bo->ggtt_node)) {
/* Someone's already inserted this BO in the GGTT */
- xe_tile_assert(ggtt->tile, bo->ggtt_node.base.size == bo->size);
+ xe_tile_assert(ggtt->tile, bo->ggtt_node->base.size == bo->size);
return 0;
}
@@ -526,15 +584,26 @@ static int __xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
return err;
xe_pm_runtime_get_noresume(tile_to_xe(ggtt->tile));
+
+ bo->ggtt_node = xe_ggtt_node_init(ggtt);
+ if (IS_ERR(bo->ggtt_node)) {
+ err = PTR_ERR(bo->ggtt_node);
+ goto out;
+ }
+
mutex_lock(&ggtt->lock);
- err = drm_mm_insert_node_in_range(&ggtt->mm, &bo->ggtt_node.base, bo->size,
+ err = drm_mm_insert_node_in_range(&ggtt->mm, &bo->ggtt_node->base, bo->size,
alignment, 0, start, end, 0);
- if (!err)
+ if (err)
+ xe_ggtt_node_fini(bo->ggtt_node);
+ else
xe_ggtt_map_bo(ggtt, bo);
mutex_unlock(&ggtt->lock);
if (!err && bo->flags & XE_BO_FLAG_GGTT_INVALIDATE)
xe_ggtt_invalidate(ggtt);
+
+out:
xe_pm_runtime_put(tile_to_xe(ggtt->tile));
return err;
@@ -574,13 +643,13 @@ int xe_ggtt_insert_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
*/
void xe_ggtt_remove_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
{
- if (XE_WARN_ON(!bo->ggtt_node.base.size))
+ if (XE_WARN_ON(!bo->ggtt_node))
return;
/* This BO is not currently in the GGTT */
- xe_tile_assert(ggtt->tile, bo->ggtt_node.base.size == bo->size);
+ xe_tile_assert(ggtt->tile, bo->ggtt_node->base.size == bo->size);
- xe_ggtt_node_remove(ggtt, &bo->ggtt_node,
+ xe_ggtt_node_remove(bo->ggtt_node,
bo->flags & XE_BO_FLAG_GGTT_INVALIDATE);
}
@@ -647,7 +716,6 @@ static void xe_ggtt_assign_locked(struct xe_ggtt *ggtt, const struct drm_mm_node
/**
* xe_ggtt_assign - assign a GGTT region to the VF
- * @ggtt: the &xe_ggtt where the node belongs
* @node: the &xe_ggtt_node to update
* @vfid: the VF identifier
*
@@ -655,11 +723,11 @@ static void xe_ggtt_assign_locked(struct xe_ggtt *ggtt, const struct drm_mm_node
* In addition to PTE's VFID bits 11:2 also PRESENT bit 0 is set as on some
* platforms VFs can't modify that either.
*/
-void xe_ggtt_assign(struct xe_ggtt *ggtt, const struct xe_ggtt_node *node, u16 vfid)
+void xe_ggtt_assign(const struct xe_ggtt_node *node, u16 vfid)
{
- mutex_lock(&ggtt->lock);
- xe_ggtt_assign_locked(ggtt, &node->base, vfid);
- mutex_unlock(&ggtt->lock);
+ mutex_lock(&node->ggtt->lock);
+ xe_ggtt_assign_locked(node->ggtt, &node->base, vfid);
+ mutex_unlock(&node->ggtt->lock);
}
#endif
diff --git a/drivers/gpu/drm/xe/xe_ggtt.h b/drivers/gpu/drm/xe/xe_ggtt.h
index e258a4f381b4..27e7d67de004 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.h
+++ b/drivers/gpu/drm/xe/xe_ggtt.h
@@ -13,17 +13,16 @@ struct drm_printer;
int xe_ggtt_init_early(struct xe_ggtt *ggtt);
int xe_ggtt_init(struct xe_ggtt *ggtt);
-int xe_ggtt_node_insert_balloon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
+struct xe_ggtt_node *xe_ggtt_node_init(struct xe_ggtt *ggtt);
+void xe_ggtt_node_fini(struct xe_ggtt_node *node);
+int xe_ggtt_node_insert_balloon(struct xe_ggtt_node *node,
u64 start, u64 size);
-void xe_ggtt_node_remove_balloon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node);
+void xe_ggtt_node_remove_balloon(struct xe_ggtt_node *node);
-int xe_ggtt_node_insert(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
- u32 size, u32 align);
-int xe_ggtt_node_insert_locked(struct xe_ggtt *ggtt,
- struct xe_ggtt_node *node,
+int xe_ggtt_node_insert(struct xe_ggtt_node *node, u32 size, u32 align);
+int xe_ggtt_node_insert_locked(struct xe_ggtt_node *node,
u32 size, u32 align, u32 mm_flags);
-void xe_ggtt_node_remove(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
- bool invalidate);
+void xe_ggtt_node_remove(struct xe_ggtt_node *node, bool invalidate);
bool xe_ggtt_node_allocated(const struct xe_ggtt_node *node);
void xe_ggtt_map_bo(struct xe_ggtt *ggtt, struct xe_bo *bo);
int xe_ggtt_insert_bo(struct xe_ggtt *ggtt, struct xe_bo *bo);
@@ -36,7 +35,7 @@ int xe_ggtt_dump(struct xe_ggtt *ggtt, struct drm_printer *p);
u64 xe_ggtt_print_holes(struct xe_ggtt *ggtt, u64 alignment, struct drm_printer *p);
#ifdef CONFIG_PCI_IOV
-void xe_ggtt_assign(struct xe_ggtt *ggtt, const struct xe_ggtt_node *node, u16 vfid);
+void xe_ggtt_assign(const struct xe_ggtt_node *node, u16 vfid);
#endif
#endif
diff --git a/drivers/gpu/drm/xe/xe_ggtt_types.h b/drivers/gpu/drm/xe/xe_ggtt_types.h
index af312a7d1031..0e8822ae13fc 100644
--- a/drivers/gpu/drm/xe/xe_ggtt_types.h
+++ b/drivers/gpu/drm/xe/xe_ggtt_types.h
@@ -50,9 +50,15 @@ struct xe_ggtt {
};
/**
- * struct xe_ggtt_node - A node in GGTT
+ * struct xe_ggtt_node - A node in GGTT.
+ *
+ * This struct needs to be initialized (only-once) with xe_ggtt_node_init() before any node
+ * insertion, reservation, or 'ballooning'.
+ * It will, then, be finalized by either xe_ggtt_node_remove() or xe_ggtt_node_deballoon().
*/
struct xe_ggtt_node {
+ /** @ggtt: Back pointer to xe_ggtt where this region will be inserted at */
+ struct xe_ggtt *ggtt;
/** @base: A drm_mm_node */
struct drm_mm_node base;
};
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
index e133594cc6bd..c8835d9eead6 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
@@ -232,14 +232,14 @@ static u32 encode_config_ggtt(u32 *cfg, const struct xe_gt_sriov_config *config)
{
u32 n = 0;
- if (xe_ggtt_node_allocated(&config->ggtt_region)) {
+ if (xe_ggtt_node_allocated(config->ggtt_region)) {
cfg[n++] = PREP_GUC_KLV_TAG(VF_CFG_GGTT_START);
- cfg[n++] = lower_32_bits(config->ggtt_region.base.start);
- cfg[n++] = upper_32_bits(config->ggtt_region.base.start);
+ cfg[n++] = lower_32_bits(config->ggtt_region->base.start);
+ cfg[n++] = upper_32_bits(config->ggtt_region->base.start);
cfg[n++] = PREP_GUC_KLV_TAG(VF_CFG_GGTT_SIZE);
- cfg[n++] = lower_32_bits(config->ggtt_region.base.size);
- cfg[n++] = upper_32_bits(config->ggtt_region.base.size);
+ cfg[n++] = lower_32_bits(config->ggtt_region->base.size);
+ cfg[n++] = upper_32_bits(config->ggtt_region->base.size);
}
return n;
@@ -371,27 +371,26 @@ static int pf_distribute_config_ggtt(struct xe_tile *tile, unsigned int vfid, u6
static void pf_release_ggtt(struct xe_tile *tile, struct xe_ggtt_node *node)
{
- struct xe_ggtt *ggtt = tile->mem.ggtt;
-
if (xe_ggtt_node_allocated(node)) {
/*
* explicit GGTT PTE assignment to the PF using xe_ggtt_assign()
* is redundant, as PTE will be implicitly re-assigned to PF by
* the xe_ggtt_clear() called by below xe_ggtt_remove_node().
*/
- xe_ggtt_node_remove(ggtt, node, false);
+ xe_ggtt_node_remove(node, false);
}
}
static void pf_release_vf_config_ggtt(struct xe_gt *gt, struct xe_gt_sriov_config *config)
{
- pf_release_ggtt(gt_to_tile(gt), &config->ggtt_region);
+ pf_release_ggtt(gt_to_tile(gt), config->ggtt_region);
+ config->ggtt_region = NULL;
}
static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
{
struct xe_gt_sriov_config *config = pf_pick_vf_config(gt, vfid);
- struct xe_ggtt_node *node = &config->ggtt_region;
+ struct xe_ggtt_node *node = config->ggtt_region;
struct xe_tile *tile = gt_to_tile(gt);
struct xe_ggtt *ggtt = tile->mem.ggtt;
u64 alignment = pf_get_ggtt_alignment(gt);
@@ -415,25 +414,33 @@ static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
if (!size)
return 0;
- err = xe_ggtt_node_insert(ggtt, node, size, alignment);
+ node = xe_ggtt_node_init(ggtt);
+ if (IS_ERR(node))
+ return PTR_ERR(node);
+
+ err = xe_ggtt_node_insert(node, size, alignment);
if (unlikely(err))
- return err;
+ goto err;
- xe_ggtt_assign(ggtt, node, vfid);
+ xe_ggtt_assign(node, vfid);
xe_gt_sriov_dbg_verbose(gt, "VF%u assigned GGTT %llx-%llx\n",
vfid, node->base.start, node->base.start + node->base.size - 1);
err = pf_distribute_config_ggtt(gt->tile, vfid, node->base.start, node->base.size);
if (unlikely(err))
- return err;
+ goto err;
+ config->ggtt_region = node;
return 0;
+err:
+ xe_ggtt_node_fini(node);
+ return err;
}
static u64 pf_get_vf_config_ggtt(struct xe_gt *gt, unsigned int vfid)
{
struct xe_gt_sriov_config *config = pf_pick_vf_config(gt, vfid);
- struct xe_ggtt_node *node = &config->ggtt_region;
+ struct xe_ggtt_node *node = config->ggtt_region;
xe_gt_assert(gt, !xe_gt_is_media_type(gt));
return xe_ggtt_node_allocated(node) ? node->base.size : 0;
@@ -2006,13 +2013,15 @@ int xe_gt_sriov_pf_config_print_ggtt(struct xe_gt *gt, struct drm_printer *p)
for (n = 1; n <= total_vfs; n++) {
config = >->sriov.pf.vfs[n].config;
- if (!xe_ggtt_node_allocated(&config->ggtt_region))
+ if (!xe_ggtt_node_allocated(config->ggtt_region))
continue;
- string_get_size(config->ggtt_region.base.size, 1, STRING_UNITS_2, buf, sizeof(buf));
+ string_get_size(config->ggtt_region->base.size, 1, STRING_UNITS_2,
+ buf, sizeof(buf));
drm_printf(p, "VF%u:\t%#0llx-%#llx\t(%s)\n",
- n, config->ggtt_region.base.start,
- config->ggtt_region.base.start + config->ggtt_region.base.size - 1, buf);
+ n, config->ggtt_region->base.start,
+ config->ggtt_region->base.start + config->ggtt_region->base.size - 1,
+ buf);
}
return 0;
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h
index a73d9a4b9e64..2d3b73d78f14 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h
@@ -18,7 +18,7 @@ struct xe_bo;
*/
struct xe_gt_sriov_config {
/** @ggtt_region: GGTT region assigned to the VF. */
- struct xe_ggtt_node ggtt_region;
+ struct xe_ggtt_node *ggtt_region;
/** @lmem_obj: LMEM allocation for use by the VF. */
struct xe_bo *lmem_obj;
/** @num_ctxs: number of GuC contexts IDs. */
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
index 39ff4e7f902e..a040df733a93 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
@@ -495,6 +495,22 @@ u64 xe_gt_sriov_vf_lmem(struct xe_gt *gt)
return gt->sriov.vf.self_config.lmem_size;
}
+static int vf_balloon_ggtt_node(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
+ u64 start, u64 end)
+{
+ int err;
+
+ node = xe_ggtt_node_init(ggtt);
+ if (IS_ERR(node))
+ return PTR_ERR(node);
+
+ err = xe_ggtt_node_insert_balloon(node, start, end);
+ if (err)
+ xe_ggtt_node_fini(node);
+
+ return err;
+}
+
static int vf_balloon_ggtt(struct xe_gt *gt)
{
struct xe_gt_sriov_vf_selfconfig *config = >->sriov.vf.self_config;
@@ -528,7 +544,7 @@ static int vf_balloon_ggtt(struct xe_gt *gt)
start = xe_wopcm_size(xe);
end = config->ggtt_base;
if (end != start) {
- err = xe_ggtt_node_insert_balloon(ggtt, &tile->sriov.vf.ggtt_balloon[0],
+ err = vf_balloon_ggtt_node(ggtt, tile->sriov.vf.ggtt_balloon[0],
start, end);
if (err)
goto failed;
@@ -537,7 +553,7 @@ static int vf_balloon_ggtt(struct xe_gt *gt)
start = config->ggtt_base + config->ggtt_size;
end = GUC_GGTT_TOP;
if (end != start) {
- err = xe_ggtt_node_insert_balloon(ggtt, &tile->sriov.vf.ggtt_balloon[1],
+ err = vf_balloon_ggtt_node(ggtt, tile->sriov.vf.ggtt_balloon[1],
start, end);
if (err)
goto deballoon;
@@ -546,7 +562,7 @@ static int vf_balloon_ggtt(struct xe_gt *gt)
return 0;
deballoon:
- xe_ggtt_node_remove_balloon(ggtt, &tile->sriov.vf.ggtt_balloon[0]);
+ xe_ggtt_node_remove_balloon(tile->sriov.vf.ggtt_balloon[0]);
failed:
return err;
}
@@ -554,11 +570,10 @@ static int vf_balloon_ggtt(struct xe_gt *gt)
static void deballoon_ggtt(struct drm_device *drm, void *arg)
{
struct xe_tile *tile = arg;
- struct xe_ggtt *ggtt = tile->mem.ggtt;
xe_tile_assert(tile, IS_SRIOV_VF(tile_to_xe(tile)));
- xe_ggtt_node_remove_balloon(ggtt, &tile->sriov.vf.ggtt_balloon[1]);
- xe_ggtt_node_remove_balloon(ggtt, &tile->sriov.vf.ggtt_balloon[0]);
+ xe_ggtt_node_remove_balloon(tile->sriov.vf.ggtt_balloon[1]);
+ xe_ggtt_node_remove_balloon(tile->sriov.vf.ggtt_balloon[0]);
}
/**
--
2.46.0
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 11/12] drm/xe: Make xe_ggtt_node struct independent
2024-08-17 10:35 [PATCH 01/12] drm/xe: Removed unused xe_ggtt_printk Rodrigo Vivi
@ 2024-08-17 10:35 ` Rodrigo Vivi
2024-08-19 19:56 ` Michal Wajdeczko
0 siblings, 1 reply; 28+ messages in thread
From: Rodrigo Vivi @ 2024-08-17 10:35 UTC (permalink / raw)
To: intel-xe
Cc: lucas.demarchi, jose.souza, Rodrigo Vivi, Matthew Auld,
Michal Wajdeczko, Matthew Brost
In some rare cases, the drm_mm node cannot be removed synchronously
due to runtime PM conditions. In this situation, the node removal will
be delegated to a workqueue that will be able to wake up the device
before removing the node.
However, in this situation, the lifetime of the xe_ggtt_node cannot
be restricted to the lifetime of the parent object. So, this patch
introduces the infrastructure so the xe_ggtt_node struct can be
allocated in advance and freed when needed.
By having the ggtt backpointer, it also ensure that the init function
is always called before any attempt to insert or reserve the node
in the GGTT.
v2: s/xe_ggtt_node_force_fini/xe_ggtt_node_fini and use it
internaly (Brost)
v3: - Use GF_NOFS for node allocation (CI)
- Avoid ggtt argument, now that we have it inside the node (Lucas)
- Fix some missed fini cases (CI)
Cc: Matthew Auld <matthew.auld@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com> #2
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
| 4 +-
drivers/gpu/drm/xe/display/xe_fb_pin.c | 36 +++--
drivers/gpu/drm/xe/xe_bo.c | 2 +-
drivers/gpu/drm/xe/xe_bo.h | 9 +-
drivers/gpu/drm/xe/xe_bo_types.h | 2 +-
drivers/gpu/drm/xe/xe_device_types.h | 2 +-
drivers/gpu/drm/xe/xe_ggtt.c | 145 ++++++++++++++----
drivers/gpu/drm/xe/xe_ggtt.h | 14 +-
drivers/gpu/drm/xe/xe_ggtt_types.h | 8 +-
drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c | 41 +++--
.../gpu/drm/xe/xe_gt_sriov_pf_config_types.h | 2 +-
drivers/gpu/drm/xe/xe_gt_sriov_vf.c | 27 +++-
12 files changed, 209 insertions(+), 83 deletions(-)
--git a/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h b/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
index 3028ac1ba72f..bdae8392e125 100644
--- a/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
+++ b/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
@@ -20,7 +20,7 @@ struct xe_bo;
struct i915_vma {
struct xe_bo *bo, *dpt;
- struct xe_ggtt_node node;
+ struct xe_ggtt_node *node;
};
#define i915_ggtt_clear_scanout(bo) do { } while (0)
@@ -29,7 +29,7 @@ struct i915_vma {
static inline u32 i915_ggtt_offset(const struct i915_vma *vma)
{
- return vma->node.base.start;
+ return vma->node->base.start;
}
#endif
diff --git a/drivers/gpu/drm/xe/display/xe_fb_pin.c b/drivers/gpu/drm/xe/display/xe_fb_pin.c
index de4930b67a29..f7a9649745c2 100644
--- a/drivers/gpu/drm/xe/display/xe_fb_pin.c
+++ b/drivers/gpu/drm/xe/display/xe_fb_pin.c
@@ -204,20 +204,28 @@ static int __xe_pin_fb_vma_ggtt(const struct intel_framebuffer *fb,
if (xe_bo_is_vram(bo) && ggtt->flags & XE_GGTT_FLAGS_64K)
align = max_t(u32, align, SZ_64K);
- if (bo->ggtt_node.base.size && view->type == I915_GTT_VIEW_NORMAL) {
+ if (bo->ggtt_node && view->type == I915_GTT_VIEW_NORMAL) {
vma->node = bo->ggtt_node;
} else if (view->type == I915_GTT_VIEW_NORMAL) {
u32 x, size = bo->ttm.base.size;
- ret = xe_ggtt_node_insert_locked(ggtt, &vma->node, size, align, 0);
- if (ret)
+ vma->node = xe_ggtt_node_init(ggtt);
+ if (IS_ERR(vma->node)) {
+ ret = PTR_ERR(vma->node);
goto out_unlock;
+ }
+
+ ret = xe_ggtt_node_insert_locked(vma->node, size, align, 0);
+ if (ret) {
+ xe_ggtt_node_fini(vma->node);
+ goto out_unlock;
+ }
for (x = 0; x < size; x += XE_PAGE_SIZE) {
u64 pte = ggtt->pt_ops->pte_encode_bo(bo, x,
xe->pat.idx[XE_CACHE_NONE]);
- ggtt->pt_ops->ggtt_set_pte(ggtt, vma->node.base.start + x, pte);
+ ggtt->pt_ops->ggtt_set_pte(ggtt, vma->node->base.start + x, pte);
}
} else {
u32 i, ggtt_ofs;
@@ -226,11 +234,19 @@ static int __xe_pin_fb_vma_ggtt(const struct intel_framebuffer *fb,
/* display seems to use tiles instead of bytes here, so convert it back.. */
u32 size = intel_rotation_info_size(rot_info) * XE_PAGE_SIZE;
- ret = xe_ggtt_node_insert_locked(ggtt, &vma->node, size, align, 0);
- if (ret)
+ vma->node = xe_ggtt_node_init(ggtt);
+ if (IS_ERR(vma->node)) {
+ ret = PTR_ERR(vma->node);
goto out_unlock;
+ }
+
+ ret = xe_ggtt_node_insert_locked(vma->node, size, align, 0);
+ if (ret) {
+ xe_ggtt_node_fini(vma->node);
+ goto out_unlock;
+ }
- ggtt_ofs = vma->node.base.start;
+ ggtt_ofs = vma->node->base.start;
for (i = 0; i < ARRAY_SIZE(rot_info->plane); i++)
write_ggtt_rotated(bo, ggtt, &ggtt_ofs,
@@ -323,9 +339,9 @@ static void __xe_unpin_fb_vma(struct i915_vma *vma)
if (vma->dpt)
xe_bo_unpin_map_no_vm(vma->dpt);
- else if (!xe_ggtt_node_allocated(&vma->bo->ggtt_node) ||
- vma->bo->ggtt_node.base.start != vma->node.base.start)
- xe_ggtt_node_remove(ggtt, &vma->node, false);
+ else if (!xe_ggtt_node_allocated(vma->bo->ggtt_node) ||
+ vma->bo->ggtt_node->base.start != vma->node->base.start)
+ xe_ggtt_node_remove(ggtt, vma->node, false);
ttm_bo_reserve(&vma->bo->ttm, false, false, NULL);
ttm_bo_unpin(&vma->bo->ttm);
diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index ae8a786f5d65..f89a382124ca 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -1098,7 +1098,7 @@ static void xe_ttm_bo_destroy(struct ttm_buffer_object *ttm_bo)
xe_assert(xe, list_empty(&ttm_bo->base.gpuva.list));
- if (bo->ggtt_node.base.size)
+ if (bo->ggtt_node && bo->ggtt_node->base.size)
xe_ggtt_remove_bo(bo->tile->mem.ggtt, bo);
#ifdef CONFIG_PROC_FS
diff --git a/drivers/gpu/drm/xe/xe_bo.h b/drivers/gpu/drm/xe/xe_bo.h
index faffbda55517..f588e3a98105 100644
--- a/drivers/gpu/drm/xe/xe_bo.h
+++ b/drivers/gpu/drm/xe/xe_bo.h
@@ -195,9 +195,12 @@ xe_bo_main_addr(struct xe_bo *bo, size_t page_size)
static inline u32
xe_bo_ggtt_addr(struct xe_bo *bo)
{
- XE_WARN_ON(bo->ggtt_node.base.size > bo->size);
- XE_WARN_ON(bo->ggtt_node.base.start + bo->ggtt_node.base.size > (1ull << 32));
- return bo->ggtt_node.base.start;
+ if (XE_WARN_ON(!bo->ggtt_node))
+ return -ENOENT;
+
+ XE_WARN_ON(bo->ggtt_node->base.size > bo->size);
+ XE_WARN_ON(bo->ggtt_node->base.start + bo->ggtt_node->base.size > (1ull << 32));
+ return bo->ggtt_node->base.start;
}
int xe_bo_vmap(struct xe_bo *bo);
diff --git a/drivers/gpu/drm/xe/xe_bo_types.h b/drivers/gpu/drm/xe/xe_bo_types.h
index 4b1de9f5be00..2ed558ac2264 100644
--- a/drivers/gpu/drm/xe/xe_bo_types.h
+++ b/drivers/gpu/drm/xe/xe_bo_types.h
@@ -40,7 +40,7 @@ struct xe_bo {
/** @placement: current placement for this BO */
struct ttm_placement placement;
/** @ggtt_node: GGTT node if this BO is mapped in the GGTT */
- struct xe_ggtt_node ggtt_node;
+ struct xe_ggtt_node *ggtt_node;
/** @vmap: iosys map of this buffer */
struct iosys_map vmap;
/** @ttm_kmap: TTM bo kmap object for internal use only. Keep off. */
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index d2b3d8a0c1bd..06fcb92568c7 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -204,7 +204,7 @@ struct xe_tile {
struct xe_memirq memirq;
/** @sriov.vf.ggtt_balloon: GGTT regions excluded from use. */
- struct xe_ggtt_node ggtt_balloon[2];
+ struct xe_ggtt_node *ggtt_balloon[2];
} vf;
} sriov;
diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
index a359d94a979e..8ea223301ab9 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.c
+++ b/drivers/gpu/drm/xe/xe_ggtt.c
@@ -348,20 +348,25 @@ static void xe_ggtt_dump_node(struct xe_ggtt *ggtt,
/**
* xe_ggtt_node_balloon - prevent allocation of specified GGTT addresses
- * @ggtt: the &xe_ggtt where we want to make reservation
-
* @node: the &xe_ggtt_node to hold reserved GGTT node
* @start: the starting GGTT address of the reserved region
* @end: then end GGTT address of the reserved region
*
+ * It cannot be called without first having called xe_ggtt_init().
* Use xe_ggtt_node_deballoon() to release a reserved GGTT node.
*
* Return: 0 on success or a negative error code on failure.
*/
-int xe_ggtt_node_balloon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node, u64 start, u64 end)
+int xe_ggtt_node_balloon(struct xe_ggtt_node *node, u64 start, u64 end)
{
+ struct xe_ggtt *ggtt;
int err;
+ if (!node || !node->ggtt)
+ return -ENOENT;
+
+ ggtt = node->ggtt;
+
xe_tile_assert(ggtt->tile, start < end);
xe_tile_assert(ggtt->tile, IS_ALIGNED(start, XE_PAGE_SIZE));
xe_tile_assert(ggtt->tile, IS_ALIGNED(end, XE_PAGE_SIZE));
@@ -386,64 +391,112 @@ int xe_ggtt_node_balloon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node, u64 st
/**
* xe_ggtt_node_deballoon - release a reserved GGTT region
- * @ggtt: the &xe_ggtt where reserved node belongs
* @node: the &xe_ggtt_node with reserved GGTT region
*
* See xe_ggtt_node_balloon() for details.
*/
-void xe_ggtt_node_deballoon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node)
+void xe_ggtt_node_deballoon(struct xe_ggtt_node *node)
{
- if (!drm_mm_node_allocated(&node->base))
+ if (!node || !node->ggtt)
return;
- xe_ggtt_dump_node(ggtt, &node->base, "deballoon");
+ if (!drm_mm_node_allocated(&node->base))
+ goto free_node;
- mutex_lock(&ggtt->lock);
+ xe_ggtt_dump_node(node->ggtt, &node->base, "deballoon");
+
+ mutex_lock(&node->ggtt->lock);
drm_mm_remove_node(&node->base);
- mutex_unlock(&ggtt->lock);
+ mutex_unlock(&node->ggtt->lock);
+
+free_node:
+ xe_ggtt_node_fini(node);
}
/**
* xe_ggtt_node_insert_locked - Locked version to insert a &xe_ggtt_node into the GGTT
- * @ggtt: the &xe_ggtt where node will be inserted
* @node: the &xe_ggtt_node to be inserted
* @size: size of the node
* @align: alignment constrain of the node
* @mm_flags: flags to control the node behavior
*
+ * It cannot be called without first having called xe_ggtt_init() once.
* To be used in cases where ggtt->lock is already taken.
*
* Return: 0 on success or a negative error code on failure.
*/
-int xe_ggtt_node_insert_locked(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
+int xe_ggtt_node_insert_locked(struct xe_ggtt_node *node,
u32 size, u32 align, u32 mm_flags)
{
- return drm_mm_insert_node_generic(&ggtt->mm, &node->base, size, align, 0,
+ if (!node || !node->ggtt)
+ return -ENOENT;
+
+ return drm_mm_insert_node_generic(&node->ggtt->mm, &node->base, size, align, 0,
mm_flags);
}
/**
* xe_ggtt_node_insert - Insert a &xe_ggtt_node into the GGTT
- * @ggtt: the &xe_ggtt where node will be inserted
* @node: the &xe_ggtt_node to be inserted
* @size: size of the node
* @align: alignment constrain of the node
*
+ * It cannot be called without first having called xe_ggtt_init() once.
+ *
* Return: 0 on success or a negative error code on failure.
*/
-int xe_ggtt_node_insert(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
- u32 size, u32 align)
+int xe_ggtt_node_insert(struct xe_ggtt_node *node, u32 size, u32 align)
{
int ret;
- mutex_lock(&ggtt->lock);
- ret = xe_ggtt_node_insert_locked(ggtt, node, size,
- align, DRM_MM_INSERT_HIGH);
- mutex_unlock(&ggtt->lock);
+ if (!node || !node->ggtt)
+ return -ENOENT;
+
+ mutex_lock(&node->ggtt->lock);
+ ret = xe_ggtt_node_insert_locked(node, size, align,
+ DRM_MM_INSERT_HIGH);
+ mutex_unlock(&node->ggtt->lock);
return ret;
}
+/**
+ * xe_ggtt_node_init - Initialize %xe_ggtt_node struct
+ * @ggtt: the &xe_ggtt where the new node will later be inserted/reserved.
+ *
+ * This function will allocated the struct %xe_ggtt_node and return it's pointer.
+ * This struct will then be freed after the node removal upon xe_ggtt_node_remove()
+ * or xe_ggtt_node_deballoon().
+ * Having %xe_ggtt_node struct allocated doesn't mean that the node is already allocated
+ * in GGTT. Only the xe_ggtt_node_insert(), xe_ggtt_node_insert_locked(),
+ * xe_ggtt_node_balloon() will ensure the node is inserted or reserved in GGTT.
+ *
+ * Return: A pointer to %xe_ggtt_node struct on success. An ERR_PTR otherwise.
+ **/
+struct xe_ggtt_node *xe_ggtt_node_init(struct xe_ggtt *ggtt)
+{
+ struct xe_ggtt_node *node = kzalloc(sizeof(*node), GFP_NOFS);
+
+ if (!node)
+ return ERR_PTR(-ENOMEM);
+
+ node->ggtt = ggtt;
+ return node;
+}
+
+/**
+ * xe_ggtt_node_fini - Forcebly finalize %xe_ggtt_node struct
+ * @node: the &xe_ggtt_node to be freed
+ *
+ * If anything went wrong with either xe_ggtt_node_insert(), xe_ggtt_node_insert_locked(),
+ * or xe_ggtt_node_balloon(); and this @node is not going to be reused, then,
+ * this function needs to be called to free the %xe_ggtt_node struct
+ **/
+void xe_ggtt_node_fini(struct xe_ggtt_node *node)
+{
+ kfree(node);
+}
+
/**
* xe_ggtt_node_remove - Remove a &xe_ggtt_node from the GGTT
* @ggtt: the &xe_ggtt where node will be removed
@@ -457,6 +510,9 @@ void xe_ggtt_node_remove(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
bool bound;
int idx;
+ if (!node || !node->ggtt)
+ return;
+
bound = drm_dev_enter(&xe->drm, &idx);
if (bound)
xe_pm_runtime_get_noresume(xe);
@@ -469,23 +525,29 @@ void xe_ggtt_node_remove(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
mutex_unlock(&ggtt->lock);
if (!bound)
- return;
+ goto free_node;
if (invalidate)
xe_ggtt_invalidate(ggtt);
xe_pm_runtime_put(xe);
drm_dev_exit(idx);
+
+free_node:
+ xe_ggtt_node_fini(node);
}
/**
- * xe_ggtt_node_allocated - Check if node is allocated
+ * xe_ggtt_node_allocated - Check if node is allocated in GGTT
* @node: the &xe_ggtt_node to be inspected
*
* Return: True if allocated, False otherwise.
*/
bool xe_ggtt_node_allocated(const struct xe_ggtt_node *node)
{
+ if (!node || !node->ggtt)
+ return false;
+
return drm_mm_node_allocated(&node->base);
}
@@ -498,9 +560,14 @@ void xe_ggtt_map_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
{
u16 cache_mode = bo->flags & XE_BO_FLAG_NEEDS_UC ? XE_CACHE_NONE : XE_CACHE_WB;
u16 pat_index = tile_to_xe(ggtt->tile)->pat.idx[cache_mode];
- u64 start = bo->ggtt_node.base.start;
+ u64 start;
u64 offset, pte;
+ if (XE_WARN_ON(!bo->ggtt_node))
+ return;
+
+ start = bo->ggtt_node->base.start;
+
for (offset = 0; offset < bo->size; offset += XE_PAGE_SIZE) {
pte = ggtt->pt_ops->pte_encode_bo(bo, offset, pat_index);
ggtt->pt_ops->ggtt_set_pte(ggtt, start + offset, pte);
@@ -516,9 +583,9 @@ static int __xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
if (xe_bo_is_vram(bo) && ggtt->flags & XE_GGTT_FLAGS_64K)
alignment = SZ_64K;
- if (XE_WARN_ON(bo->ggtt_node.base.size)) {
+ if (XE_WARN_ON(bo->ggtt_node)) {
/* Someone's already inserted this BO in the GGTT */
- xe_tile_assert(ggtt->tile, bo->ggtt_node.base.size == bo->size);
+ xe_tile_assert(ggtt->tile, bo->ggtt_node->base.size == bo->size);
return 0;
}
@@ -527,15 +594,26 @@ static int __xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
return err;
xe_pm_runtime_get_noresume(tile_to_xe(ggtt->tile));
+
+ bo->ggtt_node = xe_ggtt_node_init(ggtt);
+ if (IS_ERR(bo->ggtt_node)) {
+ err = PTR_ERR(bo->ggtt_node);
+ goto out;
+ }
+
mutex_lock(&ggtt->lock);
- err = drm_mm_insert_node_in_range(&ggtt->mm, &bo->ggtt_node.base, bo->size,
+ err = drm_mm_insert_node_in_range(&ggtt->mm, &bo->ggtt_node->base, bo->size,
alignment, 0, start, end, 0);
- if (!err)
+ if (err)
+ xe_ggtt_node_fini(bo->ggtt_node);
+ else
xe_ggtt_map_bo(ggtt, bo);
mutex_unlock(&ggtt->lock);
if (!err && bo->flags & XE_BO_FLAG_GGTT_INVALIDATE)
xe_ggtt_invalidate(ggtt);
+
+out:
xe_pm_runtime_put(tile_to_xe(ggtt->tile));
return err;
@@ -575,13 +653,13 @@ int xe_ggtt_insert_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
*/
void xe_ggtt_remove_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
{
- if (XE_WARN_ON(!bo->ggtt_node.base.size))
+ if (XE_WARN_ON(!bo->ggtt_node))
return;
/* This BO is not currently in the GGTT */
- xe_tile_assert(ggtt->tile, bo->ggtt_node.base.size == bo->size);
+ xe_tile_assert(ggtt->tile, bo->ggtt_node->base.size == bo->size);
- xe_ggtt_node_remove(ggtt, &bo->ggtt_node,
+ xe_ggtt_node_remove(ggtt, bo->ggtt_node,
bo->flags & XE_BO_FLAG_GGTT_INVALIDATE);
}
@@ -648,7 +726,6 @@ static void xe_ggtt_assign_locked(struct xe_ggtt *ggtt, const struct drm_mm_node
/**
* xe_ggtt_assign - assign a GGTT region to the VF
- * @ggtt: the &xe_ggtt where the node belongs
* @node: the &xe_ggtt_node to update
* @vfid: the VF identifier
*
@@ -656,11 +733,11 @@ static void xe_ggtt_assign_locked(struct xe_ggtt *ggtt, const struct drm_mm_node
* In addition to PTE's VFID bits 11:2 also PRESENT bit 0 is set as on some
* platforms VFs can't modify that either.
*/
-void xe_ggtt_assign(struct xe_ggtt *ggtt, const struct xe_ggtt_node *node, u16 vfid)
+void xe_ggtt_assign(const struct xe_ggtt_node *node, u16 vfid)
{
- mutex_lock(&ggtt->lock);
- xe_ggtt_assign_locked(ggtt, &node->base, vfid);
- mutex_unlock(&ggtt->lock);
+ mutex_lock(&node->ggtt->lock);
+ xe_ggtt_assign_locked(node->ggtt, &node->base, vfid);
+ mutex_unlock(&node->ggtt->lock);
}
#endif
diff --git a/drivers/gpu/drm/xe/xe_ggtt.h b/drivers/gpu/drm/xe/xe_ggtt.h
index d61f4f976a5a..96f79a3c8aa6 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.h
+++ b/drivers/gpu/drm/xe/xe_ggtt.h
@@ -13,13 +13,13 @@ struct drm_printer;
int xe_ggtt_init_early(struct xe_ggtt *ggtt);
int xe_ggtt_init(struct xe_ggtt *ggtt);
-int xe_ggtt_node_balloon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node, u64 start, u64 size);
-void xe_ggtt_node_deballoon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node);
+struct xe_ggtt_node *xe_ggtt_node_init(struct xe_ggtt *ggtt);
+void xe_ggtt_node_fini(struct xe_ggtt_node *node);
+int xe_ggtt_node_balloon(struct xe_ggtt_node *node, u64 start, u64 size);
+void xe_ggtt_node_deballoon(struct xe_ggtt_node *node);
-int xe_ggtt_node_insert(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
- u32 size, u32 align);
-int xe_ggtt_node_insert_locked(struct xe_ggtt *ggtt,
- struct xe_ggtt_node *node,
+int xe_ggtt_node_insert(struct xe_ggtt_node *node, u32 size, u32 align);
+int xe_ggtt_node_insert_locked(struct xe_ggtt_node *node,
u32 size, u32 align, u32 mm_flags);
void xe_ggtt_node_remove(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
bool invalidate);
@@ -35,7 +35,7 @@ int xe_ggtt_dump(struct xe_ggtt *ggtt, struct drm_printer *p);
u64 xe_ggtt_print_holes(struct xe_ggtt *ggtt, u64 alignment, struct drm_printer *p);
#ifdef CONFIG_PCI_IOV
-void xe_ggtt_assign(struct xe_ggtt *ggtt, const struct xe_ggtt_node *node, u16 vfid);
+void xe_ggtt_assign(const struct xe_ggtt_node *node, u16 vfid);
#endif
#endif
diff --git a/drivers/gpu/drm/xe/xe_ggtt_types.h b/drivers/gpu/drm/xe/xe_ggtt_types.h
index af312a7d1031..0e8822ae13fc 100644
--- a/drivers/gpu/drm/xe/xe_ggtt_types.h
+++ b/drivers/gpu/drm/xe/xe_ggtt_types.h
@@ -50,9 +50,15 @@ struct xe_ggtt {
};
/**
- * struct xe_ggtt_node - A node in GGTT
+ * struct xe_ggtt_node - A node in GGTT.
+ *
+ * This struct needs to be initialized (only-once) with xe_ggtt_node_init() before any node
+ * insertion, reservation, or 'ballooning'.
+ * It will, then, be finalized by either xe_ggtt_node_remove() or xe_ggtt_node_deballoon().
*/
struct xe_ggtt_node {
+ /** @ggtt: Back pointer to xe_ggtt where this region will be inserted at */
+ struct xe_ggtt *ggtt;
/** @base: A drm_mm_node */
struct drm_mm_node base;
};
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
index e133594cc6bd..c0313d13c27b 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
@@ -232,14 +232,14 @@ static u32 encode_config_ggtt(u32 *cfg, const struct xe_gt_sriov_config *config)
{
u32 n = 0;
- if (xe_ggtt_node_allocated(&config->ggtt_region)) {
+ if (xe_ggtt_node_allocated(config->ggtt_region)) {
cfg[n++] = PREP_GUC_KLV_TAG(VF_CFG_GGTT_START);
- cfg[n++] = lower_32_bits(config->ggtt_region.base.start);
- cfg[n++] = upper_32_bits(config->ggtt_region.base.start);
+ cfg[n++] = lower_32_bits(config->ggtt_region->base.start);
+ cfg[n++] = upper_32_bits(config->ggtt_region->base.start);
cfg[n++] = PREP_GUC_KLV_TAG(VF_CFG_GGTT_SIZE);
- cfg[n++] = lower_32_bits(config->ggtt_region.base.size);
- cfg[n++] = upper_32_bits(config->ggtt_region.base.size);
+ cfg[n++] = lower_32_bits(config->ggtt_region->base.size);
+ cfg[n++] = upper_32_bits(config->ggtt_region->base.size);
}
return n;
@@ -385,13 +385,13 @@ static void pf_release_ggtt(struct xe_tile *tile, struct xe_ggtt_node *node)
static void pf_release_vf_config_ggtt(struct xe_gt *gt, struct xe_gt_sriov_config *config)
{
- pf_release_ggtt(gt_to_tile(gt), &config->ggtt_region);
+ pf_release_ggtt(gt_to_tile(gt), config->ggtt_region);
}
static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
{
struct xe_gt_sriov_config *config = pf_pick_vf_config(gt, vfid);
- struct xe_ggtt_node *node = &config->ggtt_region;
+ struct xe_ggtt_node *node = config->ggtt_region;
struct xe_tile *tile = gt_to_tile(gt);
struct xe_ggtt *ggtt = tile->mem.ggtt;
u64 alignment = pf_get_ggtt_alignment(gt);
@@ -415,25 +415,32 @@ static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
if (!size)
return 0;
- err = xe_ggtt_node_insert(ggtt, node, size, alignment);
+ node = xe_ggtt_node_init(ggtt);
+ if (IS_ERR(node))
+ return PTR_ERR(node);
+
+ err = xe_ggtt_node_insert(node, size, alignment);
if (unlikely(err))
- return err;
+ goto err;
- xe_ggtt_assign(ggtt, node, vfid);
+ xe_ggtt_assign(node, vfid);
xe_gt_sriov_dbg_verbose(gt, "VF%u assigned GGTT %llx-%llx\n",
vfid, node->base.start, node->base.start + node->base.size - 1);
err = pf_distribute_config_ggtt(gt->tile, vfid, node->base.start, node->base.size);
if (unlikely(err))
- return err;
+ goto err;
return 0;
+err:
+ xe_ggtt_node_fini(node);
+ return err;
}
static u64 pf_get_vf_config_ggtt(struct xe_gt *gt, unsigned int vfid)
{
struct xe_gt_sriov_config *config = pf_pick_vf_config(gt, vfid);
- struct xe_ggtt_node *node = &config->ggtt_region;
+ struct xe_ggtt_node *node = config->ggtt_region;
xe_gt_assert(gt, !xe_gt_is_media_type(gt));
return xe_ggtt_node_allocated(node) ? node->base.size : 0;
@@ -2006,13 +2013,15 @@ int xe_gt_sriov_pf_config_print_ggtt(struct xe_gt *gt, struct drm_printer *p)
for (n = 1; n <= total_vfs; n++) {
config = >->sriov.pf.vfs[n].config;
- if (!xe_ggtt_node_allocated(&config->ggtt_region))
+ if (!xe_ggtt_node_allocated(config->ggtt_region))
continue;
- string_get_size(config->ggtt_region.base.size, 1, STRING_UNITS_2, buf, sizeof(buf));
+ string_get_size(config->ggtt_region->base.size, 1, STRING_UNITS_2,
+ buf, sizeof(buf));
drm_printf(p, "VF%u:\t%#0llx-%#llx\t(%s)\n",
- n, config->ggtt_region.base.start,
- config->ggtt_region.base.start + config->ggtt_region.base.size - 1, buf);
+ n, config->ggtt_region->base.start,
+ config->ggtt_region->base.start + config->ggtt_region->base.size - 1,
+ buf);
}
return 0;
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h
index a73d9a4b9e64..2d3b73d78f14 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h
@@ -18,7 +18,7 @@ struct xe_bo;
*/
struct xe_gt_sriov_config {
/** @ggtt_region: GGTT region assigned to the VF. */
- struct xe_ggtt_node ggtt_region;
+ struct xe_ggtt_node *ggtt_region;
/** @lmem_obj: LMEM allocation for use by the VF. */
struct xe_bo *lmem_obj;
/** @num_ctxs: number of GuC contexts IDs. */
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
index db9761a68ce0..6ea5fa016a82 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
@@ -495,6 +495,22 @@ u64 xe_gt_sriov_vf_lmem(struct xe_gt *gt)
return gt->sriov.vf.self_config.lmem_size;
}
+static int vf_balloon_ggtt_node(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
+ u64 start, u64 end)
+{
+ int err;
+
+ node = xe_ggtt_node_init(ggtt);
+ if (IS_ERR(node))
+ return PTR_ERR(node);
+
+ err = xe_ggtt_node_balloon(node, start, end);
+ if (err)
+ xe_ggtt_node_fini(node);
+
+ return err;
+}
+
static int vf_balloon_ggtt(struct xe_gt *gt)
{
struct xe_gt_sriov_vf_selfconfig *config = >->sriov.vf.self_config;
@@ -528,7 +544,7 @@ static int vf_balloon_ggtt(struct xe_gt *gt)
start = xe_wopcm_size(xe);
end = config->ggtt_base;
if (end != start) {
- err = xe_ggtt_node_balloon(ggtt, &tile->sriov.vf.ggtt_balloon[0], start, end);
+ err = vf_balloon_ggtt_node(ggtt, tile->sriov.vf.ggtt_balloon[0], start, end);
if (err)
goto failed;
}
@@ -536,7 +552,7 @@ static int vf_balloon_ggtt(struct xe_gt *gt)
start = config->ggtt_base + config->ggtt_size;
end = GUC_GGTT_TOP;
if (end != start) {
- err = xe_ggtt_node_balloon(ggtt, &tile->sriov.vf.ggtt_balloon[1], start, end);
+ err = vf_balloon_ggtt_node(ggtt, tile->sriov.vf.ggtt_balloon[1], start, end);
if (err)
goto deballoon;
}
@@ -544,7 +560,7 @@ static int vf_balloon_ggtt(struct xe_gt *gt)
return 0;
deballoon:
- xe_ggtt_node_deballoon(ggtt, &tile->sriov.vf.ggtt_balloon[0]);
+ xe_ggtt_node_deballoon(tile->sriov.vf.ggtt_balloon[0]);
failed:
return err;
}
@@ -552,11 +568,10 @@ static int vf_balloon_ggtt(struct xe_gt *gt)
static void deballoon_ggtt(struct drm_device *drm, void *arg)
{
struct xe_tile *tile = arg;
- struct xe_ggtt *ggtt = tile->mem.ggtt;
xe_tile_assert(tile, IS_SRIOV_VF(tile_to_xe(tile)));
- xe_ggtt_node_deballoon(ggtt, &tile->sriov.vf.ggtt_balloon[1]);
- xe_ggtt_node_deballoon(ggtt, &tile->sriov.vf.ggtt_balloon[0]);
+ xe_ggtt_node_deballoon(tile->sriov.vf.ggtt_balloon[1]);
+ xe_ggtt_node_deballoon(tile->sriov.vf.ggtt_balloon[0]);
}
/**
--
2.46.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* Re: [PATCH 11/12] drm/xe: Make xe_ggtt_node struct independent
2024-08-17 10:35 ` [PATCH 11/12] drm/xe: Make xe_ggtt_node struct independent Rodrigo Vivi
@ 2024-08-19 19:56 ` Michal Wajdeczko
0 siblings, 0 replies; 28+ messages in thread
From: Michal Wajdeczko @ 2024-08-19 19:56 UTC (permalink / raw)
To: Rodrigo Vivi, intel-xe
Cc: lucas.demarchi, jose.souza, Matthew Auld, Matthew Brost
On 17.08.2024 12:35, Rodrigo Vivi wrote:
> In some rare cases, the drm_mm node cannot be removed synchronously
> due to runtime PM conditions. In this situation, the node removal will
> be delegated to a workqueue that will be able to wake up the device
> before removing the node.
>
> However, in this situation, the lifetime of the xe_ggtt_node cannot
> be restricted to the lifetime of the parent object. So, this patch
> introduces the infrastructure so the xe_ggtt_node struct can be
> allocated in advance and freed when needed.
>
> By having the ggtt backpointer, it also ensure that the init function
> is always called before any attempt to insert or reserve the node
> in the GGTT.
>
> v2: s/xe_ggtt_node_force_fini/xe_ggtt_node_fini and use it
> internaly (Brost)
> v3: - Use GF_NOFS for node allocation (CI)
> - Avoid ggtt argument, now that we have it inside the node (Lucas)
> - Fix some missed fini cases (CI)
>
> Cc: Matthew Auld <matthew.auld@intel.com>
> Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
> Cc: Matthew Brost <matthew.brost@intel.com>
> Reviewed-by: Matthew Brost <matthew.brost@intel.com> #2
> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> ---
> .../gpu/drm/xe/compat-i915-headers/i915_vma.h | 4 +-
> drivers/gpu/drm/xe/display/xe_fb_pin.c | 36 +++--
> drivers/gpu/drm/xe/xe_bo.c | 2 +-
> drivers/gpu/drm/xe/xe_bo.h | 9 +-
> drivers/gpu/drm/xe/xe_bo_types.h | 2 +-
> drivers/gpu/drm/xe/xe_device_types.h | 2 +-
> drivers/gpu/drm/xe/xe_ggtt.c | 145 ++++++++++++++----
> drivers/gpu/drm/xe/xe_ggtt.h | 14 +-
> drivers/gpu/drm/xe/xe_ggtt_types.h | 8 +-
> drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c | 41 +++--
> .../gpu/drm/xe/xe_gt_sriov_pf_config_types.h | 2 +-
> drivers/gpu/drm/xe/xe_gt_sriov_vf.c | 27 +++-
> 12 files changed, 209 insertions(+), 83 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h b/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
> index 3028ac1ba72f..bdae8392e125 100644
> --- a/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
> +++ b/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
> @@ -20,7 +20,7 @@ struct xe_bo;
>
> struct i915_vma {
> struct xe_bo *bo, *dpt;
> - struct xe_ggtt_node node;
> + struct xe_ggtt_node *node;
> };
>
> #define i915_ggtt_clear_scanout(bo) do { } while (0)
> @@ -29,7 +29,7 @@ struct i915_vma {
>
> static inline u32 i915_ggtt_offset(const struct i915_vma *vma)
> {
> - return vma->node.base.start;
> + return vma->node->base.start;
> }
>
> #endif
> diff --git a/drivers/gpu/drm/xe/display/xe_fb_pin.c b/drivers/gpu/drm/xe/display/xe_fb_pin.c
> index de4930b67a29..f7a9649745c2 100644
> --- a/drivers/gpu/drm/xe/display/xe_fb_pin.c
> +++ b/drivers/gpu/drm/xe/display/xe_fb_pin.c
> @@ -204,20 +204,28 @@ static int __xe_pin_fb_vma_ggtt(const struct intel_framebuffer *fb,
> if (xe_bo_is_vram(bo) && ggtt->flags & XE_GGTT_FLAGS_64K)
> align = max_t(u32, align, SZ_64K);
>
> - if (bo->ggtt_node.base.size && view->type == I915_GTT_VIEW_NORMAL) {
> + if (bo->ggtt_node && view->type == I915_GTT_VIEW_NORMAL) {
> vma->node = bo->ggtt_node;
> } else if (view->type == I915_GTT_VIEW_NORMAL) {
> u32 x, size = bo->ttm.base.size;
>
> - ret = xe_ggtt_node_insert_locked(ggtt, &vma->node, size, align, 0);
> - if (ret)
> + vma->node = xe_ggtt_node_init(ggtt);
> + if (IS_ERR(vma->node)) {
> + ret = PTR_ERR(vma->node);
> goto out_unlock;
> + }
> +
> + ret = xe_ggtt_node_insert_locked(vma->node, size, align, 0);
> + if (ret) {
> + xe_ggtt_node_fini(vma->node);
> + goto out_unlock;
> + }
>
> for (x = 0; x < size; x += XE_PAGE_SIZE) {
> u64 pte = ggtt->pt_ops->pte_encode_bo(bo, x,
> xe->pat.idx[XE_CACHE_NONE]);
>
> - ggtt->pt_ops->ggtt_set_pte(ggtt, vma->node.base.start + x, pte);
> + ggtt->pt_ops->ggtt_set_pte(ggtt, vma->node->base.start + x, pte);
> }
> } else {
> u32 i, ggtt_ofs;
> @@ -226,11 +234,19 @@ static int __xe_pin_fb_vma_ggtt(const struct intel_framebuffer *fb,
> /* display seems to use tiles instead of bytes here, so convert it back.. */
> u32 size = intel_rotation_info_size(rot_info) * XE_PAGE_SIZE;
>
> - ret = xe_ggtt_node_insert_locked(ggtt, &vma->node, size, align, 0);
> - if (ret)
> + vma->node = xe_ggtt_node_init(ggtt);
> + if (IS_ERR(vma->node)) {
> + ret = PTR_ERR(vma->node);
> goto out_unlock;
> + }
> +
> + ret = xe_ggtt_node_insert_locked(vma->node, size, align, 0);
> + if (ret) {
> + xe_ggtt_node_fini(vma->node);
> + goto out_unlock;
> + }
>
> - ggtt_ofs = vma->node.base.start;
> + ggtt_ofs = vma->node->base.start;
>
> for (i = 0; i < ARRAY_SIZE(rot_info->plane); i++)
> write_ggtt_rotated(bo, ggtt, &ggtt_ofs,
> @@ -323,9 +339,9 @@ static void __xe_unpin_fb_vma(struct i915_vma *vma)
>
> if (vma->dpt)
> xe_bo_unpin_map_no_vm(vma->dpt);
> - else if (!xe_ggtt_node_allocated(&vma->bo->ggtt_node) ||
> - vma->bo->ggtt_node.base.start != vma->node.base.start)
> - xe_ggtt_node_remove(ggtt, &vma->node, false);
> + else if (!xe_ggtt_node_allocated(vma->bo->ggtt_node) ||
> + vma->bo->ggtt_node->base.start != vma->node->base.start)
> + xe_ggtt_node_remove(ggtt, vma->node, false);
>
> ttm_bo_reserve(&vma->bo->ttm, false, false, NULL);
> ttm_bo_unpin(&vma->bo->ttm);
> diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
> index ae8a786f5d65..f89a382124ca 100644
> --- a/drivers/gpu/drm/xe/xe_bo.c
> +++ b/drivers/gpu/drm/xe/xe_bo.c
> @@ -1098,7 +1098,7 @@ static void xe_ttm_bo_destroy(struct ttm_buffer_object *ttm_bo)
>
> xe_assert(xe, list_empty(&ttm_bo->base.gpuva.list));
>
> - if (bo->ggtt_node.base.size)
> + if (bo->ggtt_node && bo->ggtt_node->base.size)
if (xe_ggtt_node_allocated(bo->ggtt_node)) ?
> xe_ggtt_remove_bo(bo->tile->mem.ggtt, bo);
>
> #ifdef CONFIG_PROC_FS
> diff --git a/drivers/gpu/drm/xe/xe_bo.h b/drivers/gpu/drm/xe/xe_bo.h
> index faffbda55517..f588e3a98105 100644
> --- a/drivers/gpu/drm/xe/xe_bo.h
> +++ b/drivers/gpu/drm/xe/xe_bo.h
> @@ -195,9 +195,12 @@ xe_bo_main_addr(struct xe_bo *bo, size_t page_size)
> static inline u32
> xe_bo_ggtt_addr(struct xe_bo *bo)
> {
> - XE_WARN_ON(bo->ggtt_node.base.size > bo->size);
> - XE_WARN_ON(bo->ggtt_node.base.start + bo->ggtt_node.base.size > (1ull << 32));
> - return bo->ggtt_node.base.start;
> + if (XE_WARN_ON(!bo->ggtt_node))
> + return -ENOENT;
-ENOENT is still a non zero u32, maybe returning 0 is a better choice ?
> +
> + XE_WARN_ON(bo->ggtt_node->base.size > bo->size);
> + XE_WARN_ON(bo->ggtt_node->base.start + bo->ggtt_node->base.size > (1ull << 32));
the bo has pointer to a tile, so maybe instead of XE_WARN_ON we can use
here our assert:
xe_tile_assert(bo->tile, ....) ?
> + return bo->ggtt_node->base.start;
> }
>
> int xe_bo_vmap(struct xe_bo *bo);
> diff --git a/drivers/gpu/drm/xe/xe_bo_types.h b/drivers/gpu/drm/xe/xe_bo_types.h
> index 4b1de9f5be00..2ed558ac2264 100644
> --- a/drivers/gpu/drm/xe/xe_bo_types.h
> +++ b/drivers/gpu/drm/xe/xe_bo_types.h
> @@ -40,7 +40,7 @@ struct xe_bo {
> /** @placement: current placement for this BO */
> struct ttm_placement placement;
> /** @ggtt_node: GGTT node if this BO is mapped in the GGTT */
> - struct xe_ggtt_node ggtt_node;
> + struct xe_ggtt_node *ggtt_node;
> /** @vmap: iosys map of this buffer */
> struct iosys_map vmap;
> /** @ttm_kmap: TTM bo kmap object for internal use only. Keep off. */
> diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
> index d2b3d8a0c1bd..06fcb92568c7 100644
> --- a/drivers/gpu/drm/xe/xe_device_types.h
> +++ b/drivers/gpu/drm/xe/xe_device_types.h
> @@ -204,7 +204,7 @@ struct xe_tile {
> struct xe_memirq memirq;
>
> /** @sriov.vf.ggtt_balloon: GGTT regions excluded from use. */
> - struct xe_ggtt_node ggtt_balloon[2];
> + struct xe_ggtt_node *ggtt_balloon[2];
> } vf;
> } sriov;
>
> diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
> index a359d94a979e..8ea223301ab9 100644
> --- a/drivers/gpu/drm/xe/xe_ggtt.c
> +++ b/drivers/gpu/drm/xe/xe_ggtt.c
> @@ -348,20 +348,25 @@ static void xe_ggtt_dump_node(struct xe_ggtt *ggtt,
>
> /**
> * xe_ggtt_node_balloon - prevent allocation of specified GGTT addresses
> - * @ggtt: the &xe_ggtt where we want to make reservation
> -
> * @node: the &xe_ggtt_node to hold reserved GGTT node
> * @start: the starting GGTT address of the reserved region
> * @end: then end GGTT address of the reserved region
> *
> + * It cannot be called without first having called xe_ggtt_init().
> * Use xe_ggtt_node_deballoon() to release a reserved GGTT node.
> *
> * Return: 0 on success or a negative error code on failure.
> */
> -int xe_ggtt_node_balloon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node, u64 start, u64 end)
> +int xe_ggtt_node_balloon(struct xe_ggtt_node *node, u64 start, u64 end)
hmm, we want to 'balloon' the GGTT, not the 'node' (which is just an
implementation detail) so maybe moving the balloon nodes to the xe_ggtt
should be done in this series before this patch ?
> {
> + struct xe_ggtt *ggtt;
> int err;
>
> + if (!node || !node->ggtt)
> + return -ENOENT;
hmm, NULL or uninitialized node is a bug on our side, so IMO we
shouldn't do runtime checks for it
> +
> + ggtt = node->ggtt;
> +
> xe_tile_assert(ggtt->tile, start < end);
> xe_tile_assert(ggtt->tile, IS_ALIGNED(start, XE_PAGE_SIZE));
> xe_tile_assert(ggtt->tile, IS_ALIGNED(end, XE_PAGE_SIZE));
> @@ -386,64 +391,112 @@ int xe_ggtt_node_balloon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node, u64 st
>
> /**
> * xe_ggtt_node_deballoon - release a reserved GGTT region
> - * @ggtt: the &xe_ggtt where reserved node belongs
> * @node: the &xe_ggtt_node with reserved GGTT region
> *
> * See xe_ggtt_node_balloon() for details.
> */
> -void xe_ggtt_node_deballoon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node)
> +void xe_ggtt_node_deballoon(struct xe_ggtt_node *node)
> {
> - if (!drm_mm_node_allocated(&node->base))
> + if (!node || !node->ggtt)
> return;
>
> - xe_ggtt_dump_node(ggtt, &node->base, "deballoon");
> + if (!drm_mm_node_allocated(&node->base))
> + goto free_node;
>
> - mutex_lock(&ggtt->lock);
> + xe_ggtt_dump_node(node->ggtt, &node->base, "deballoon");
> +
> + mutex_lock(&node->ggtt->lock);
> drm_mm_remove_node(&node->base);
> - mutex_unlock(&ggtt->lock);
> + mutex_unlock(&node->ggtt->lock);
> +
> +free_node:
> + xe_ggtt_node_fini(node);
> }
>
> /**
> * xe_ggtt_node_insert_locked - Locked version to insert a &xe_ggtt_node into the GGTT
> - * @ggtt: the &xe_ggtt where node will be inserted
> * @node: the &xe_ggtt_node to be inserted
> * @size: size of the node
> * @align: alignment constrain of the node
> * @mm_flags: flags to control the node behavior
> *
> + * It cannot be called without first having called xe_ggtt_init() once.
> * To be used in cases where ggtt->lock is already taken.
> *
> * Return: 0 on success or a negative error code on failure.
> */
> -int xe_ggtt_node_insert_locked(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
> +int xe_ggtt_node_insert_locked(struct xe_ggtt_node *node,
> u32 size, u32 align, u32 mm_flags)
> {
> - return drm_mm_insert_node_generic(&ggtt->mm, &node->base, size, align, 0,
> + if (!node || !node->ggtt)
> + return -ENOENT;
ditto
> +
> + return drm_mm_insert_node_generic(&node->ggtt->mm, &node->base, size, align, 0,
> mm_flags);
> }
>
> /**
> * xe_ggtt_node_insert - Insert a &xe_ggtt_node into the GGTT
> - * @ggtt: the &xe_ggtt where node will be inserted
> * @node: the &xe_ggtt_node to be inserted
> * @size: size of the node
> * @align: alignment constrain of the node
> *
> + * It cannot be called without first having called xe_ggtt_init() once.
> + *
> * Return: 0 on success or a negative error code on failure.
> */
> -int xe_ggtt_node_insert(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
> - u32 size, u32 align)
> +int xe_ggtt_node_insert(struct xe_ggtt_node *node, u32 size, u32 align)
> {
> int ret;
>
> - mutex_lock(&ggtt->lock);
> - ret = xe_ggtt_node_insert_locked(ggtt, node, size,
> - align, DRM_MM_INSERT_HIGH);
> - mutex_unlock(&ggtt->lock);
> + if (!node || !node->ggtt)
> + return -ENOENT;
> +
> + mutex_lock(&node->ggtt->lock);
> + ret = xe_ggtt_node_insert_locked(node, size, align,
> + DRM_MM_INSERT_HIGH);
> + mutex_unlock(&node->ggtt->lock);
>
> return ret;
> }
>
> +/**
> + * xe_ggtt_node_init - Initialize %xe_ggtt_node struct
> + * @ggtt: the &xe_ggtt where the new node will later be inserted/reserved.
> + *
> + * This function will allocated the struct %xe_ggtt_node and return it's pointer.
> + * This struct will then be freed after the node removal upon xe_ggtt_node_remove()
> + * or xe_ggtt_node_deballoon().
> + * Having %xe_ggtt_node struct allocated doesn't mean that the node is already allocated
> + * in GGTT. Only the xe_ggtt_node_insert(), xe_ggtt_node_insert_locked(),
> + * xe_ggtt_node_balloon() will ensure the node is inserted or reserved in GGTT.
> + *
> + * Return: A pointer to %xe_ggtt_node struct on success. An ERR_PTR otherwise.
> + **/
> +struct xe_ggtt_node *xe_ggtt_node_init(struct xe_ggtt *ggtt)
> +{
> + struct xe_ggtt_node *node = kzalloc(sizeof(*node), GFP_NOFS);
> +
> + if (!node)
> + return ERR_PTR(-ENOMEM);
> +
> + node->ggtt = ggtt;
> + return node;
> +}
> +
> +/**
> + * xe_ggtt_node_fini - Forcebly finalize %xe_ggtt_node struct
> + * @node: the &xe_ggtt_node to be freed
> + *
> + * If anything went wrong with either xe_ggtt_node_insert(), xe_ggtt_node_insert_locked(),
> + * or xe_ggtt_node_balloon(); and this @node is not going to be reused, then,
> + * this function needs to be called to free the %xe_ggtt_node struct
> + **/
> +void xe_ggtt_node_fini(struct xe_ggtt_node *node)
> +{
maybe we should assert that node is not allocated ?
> + kfree(node);
> +}
> +
> /**
> * xe_ggtt_node_remove - Remove a &xe_ggtt_node from the GGTT
> * @ggtt: the &xe_ggtt where node will be removed
> @@ -457,6 +510,9 @@ void xe_ggtt_node_remove(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
ggtt is redundant here as it is the same as node->ggtt
> bool bound;
> int idx;
>
> + if (!node || !node->ggtt)
> + return;
> +
> bound = drm_dev_enter(&xe->drm, &idx);
> if (bound)
> xe_pm_runtime_get_noresume(xe);
> @@ -469,23 +525,29 @@ void xe_ggtt_node_remove(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
> mutex_unlock(&ggtt->lock);
>
> if (!bound)
> - return;
> + goto free_node;
>
> if (invalidate)
> xe_ggtt_invalidate(ggtt);
>
> xe_pm_runtime_put(xe);
> drm_dev_exit(idx);
> +
> +free_node:
> + xe_ggtt_node_fini(node);
> }
>
> /**
> - * xe_ggtt_node_allocated - Check if node is allocated
> + * xe_ggtt_node_allocated - Check if node is allocated in GGTT
> * @node: the &xe_ggtt_node to be inspected
> *
> * Return: True if allocated, False otherwise.
> */
> bool xe_ggtt_node_allocated(const struct xe_ggtt_node *node)
> {
> + if (!node || !node->ggtt)
> + return false;
> +
> return drm_mm_node_allocated(&node->base);
> }
>
> @@ -498,9 +560,14 @@ void xe_ggtt_map_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
> {
> u16 cache_mode = bo->flags & XE_BO_FLAG_NEEDS_UC ? XE_CACHE_NONE : XE_CACHE_WB;
> u16 pat_index = tile_to_xe(ggtt->tile)->pat.idx[cache_mode];
> - u64 start = bo->ggtt_node.base.start;
> + u64 start;
> u64 offset, pte;
>
> + if (XE_WARN_ON(!bo->ggtt_node))
> + return;
> +
> + start = bo->ggtt_node->base.start;
> +
> for (offset = 0; offset < bo->size; offset += XE_PAGE_SIZE) {
> pte = ggtt->pt_ops->pte_encode_bo(bo, offset, pat_index);
> ggtt->pt_ops->ggtt_set_pte(ggtt, start + offset, pte);
> @@ -516,9 +583,9 @@ static int __xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
> if (xe_bo_is_vram(bo) && ggtt->flags & XE_GGTT_FLAGS_64K)
> alignment = SZ_64K;
>
> - if (XE_WARN_ON(bo->ggtt_node.base.size)) {
> + if (XE_WARN_ON(bo->ggtt_node)) {
> /* Someone's already inserted this BO in the GGTT */
> - xe_tile_assert(ggtt->tile, bo->ggtt_node.base.size == bo->size);
> + xe_tile_assert(ggtt->tile, bo->ggtt_node->base.size == bo->size);
> return 0;
> }
>
> @@ -527,15 +594,26 @@ static int __xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
> return err;
>
> xe_pm_runtime_get_noresume(tile_to_xe(ggtt->tile));
> +
> + bo->ggtt_node = xe_ggtt_node_init(ggtt);
> + if (IS_ERR(bo->ggtt_node)) {
> + err = PTR_ERR(bo->ggtt_node);
> + goto out;
> + }
> +
> mutex_lock(&ggtt->lock);
> - err = drm_mm_insert_node_in_range(&ggtt->mm, &bo->ggtt_node.base, bo->size,
> + err = drm_mm_insert_node_in_range(&ggtt->mm, &bo->ggtt_node->base, bo->size,
> alignment, 0, start, end, 0);
> - if (!err)
> + if (err)
> + xe_ggtt_node_fini(bo->ggtt_node);
> + else
> xe_ggtt_map_bo(ggtt, bo);
> mutex_unlock(&ggtt->lock);
>
> if (!err && bo->flags & XE_BO_FLAG_GGTT_INVALIDATE)
> xe_ggtt_invalidate(ggtt);
> +
> +out:
> xe_pm_runtime_put(tile_to_xe(ggtt->tile));
>
> return err;
> @@ -575,13 +653,13 @@ int xe_ggtt_insert_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
> */
> void xe_ggtt_remove_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
> {
> - if (XE_WARN_ON(!bo->ggtt_node.base.size))
> + if (XE_WARN_ON(!bo->ggtt_node))
> return;
>
> /* This BO is not currently in the GGTT */
> - xe_tile_assert(ggtt->tile, bo->ggtt_node.base.size == bo->size);
> + xe_tile_assert(ggtt->tile, bo->ggtt_node->base.size == bo->size);
>
> - xe_ggtt_node_remove(ggtt, &bo->ggtt_node,
> + xe_ggtt_node_remove(ggtt, bo->ggtt_node,
> bo->flags & XE_BO_FLAG_GGTT_INVALIDATE);
> }
>
> @@ -648,7 +726,6 @@ static void xe_ggtt_assign_locked(struct xe_ggtt *ggtt, const struct drm_mm_node
>
> /**
> * xe_ggtt_assign - assign a GGTT region to the VF
> - * @ggtt: the &xe_ggtt where the node belongs
> * @node: the &xe_ggtt_node to update
> * @vfid: the VF identifier
> *
> @@ -656,11 +733,11 @@ static void xe_ggtt_assign_locked(struct xe_ggtt *ggtt, const struct drm_mm_node
> * In addition to PTE's VFID bits 11:2 also PRESENT bit 0 is set as on some
> * platforms VFs can't modify that either.
> */
> -void xe_ggtt_assign(struct xe_ggtt *ggtt, const struct xe_ggtt_node *node, u16 vfid)
> +void xe_ggtt_assign(const struct xe_ggtt_node *node, u16 vfid)
it probable should be named as:
xe_ggtt_node_assign()
> {
> - mutex_lock(&ggtt->lock);
> - xe_ggtt_assign_locked(ggtt, &node->base, vfid);
> - mutex_unlock(&ggtt->lock);
> + mutex_lock(&node->ggtt->lock);
> + xe_ggtt_assign_locked(node->ggtt, &node->base, vfid);
> + mutex_unlock(&node->ggtt->lock);
> }
> #endif
>
> diff --git a/drivers/gpu/drm/xe/xe_ggtt.h b/drivers/gpu/drm/xe/xe_ggtt.h
> index d61f4f976a5a..96f79a3c8aa6 100644
> --- a/drivers/gpu/drm/xe/xe_ggtt.h
> +++ b/drivers/gpu/drm/xe/xe_ggtt.h
> @@ -13,13 +13,13 @@ struct drm_printer;
> int xe_ggtt_init_early(struct xe_ggtt *ggtt);
> int xe_ggtt_init(struct xe_ggtt *ggtt);
>
> -int xe_ggtt_node_balloon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node, u64 start, u64 size);
> -void xe_ggtt_node_deballoon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node);
> +struct xe_ggtt_node *xe_ggtt_node_init(struct xe_ggtt *ggtt);
> +void xe_ggtt_node_fini(struct xe_ggtt_node *node);
> +int xe_ggtt_node_balloon(struct xe_ggtt_node *node, u64 start, u64 size);
> +void xe_ggtt_node_deballoon(struct xe_ggtt_node *node);
>
> -int xe_ggtt_node_insert(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
> - u32 size, u32 align);
> -int xe_ggtt_node_insert_locked(struct xe_ggtt *ggtt,
> - struct xe_ggtt_node *node,
> +int xe_ggtt_node_insert(struct xe_ggtt_node *node, u32 size, u32 align);
> +int xe_ggtt_node_insert_locked(struct xe_ggtt_node *node,
> u32 size, u32 align, u32 mm_flags);
> void xe_ggtt_node_remove(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
> bool invalidate);
> @@ -35,7 +35,7 @@ int xe_ggtt_dump(struct xe_ggtt *ggtt, struct drm_printer *p);
> u64 xe_ggtt_print_holes(struct xe_ggtt *ggtt, u64 alignment, struct drm_printer *p);
>
> #ifdef CONFIG_PCI_IOV
> -void xe_ggtt_assign(struct xe_ggtt *ggtt, const struct xe_ggtt_node *node, u16 vfid);
> +void xe_ggtt_assign(const struct xe_ggtt_node *node, u16 vfid);
> #endif
>
> #endif
> diff --git a/drivers/gpu/drm/xe/xe_ggtt_types.h b/drivers/gpu/drm/xe/xe_ggtt_types.h
> index af312a7d1031..0e8822ae13fc 100644
> --- a/drivers/gpu/drm/xe/xe_ggtt_types.h
> +++ b/drivers/gpu/drm/xe/xe_ggtt_types.h
> @@ -50,9 +50,15 @@ struct xe_ggtt {
> };
>
> /**
> - * struct xe_ggtt_node - A node in GGTT
> + * struct xe_ggtt_node - A node in GGTT.
> + *
> + * This struct needs to be initialized (only-once) with xe_ggtt_node_init() before any node
> + * insertion, reservation, or 'ballooning'.
> + * It will, then, be finalized by either xe_ggtt_node_remove() or xe_ggtt_node_deballoon().
> */
> struct xe_ggtt_node {
> + /** @ggtt: Back pointer to xe_ggtt where this region will be inserted at */
> + struct xe_ggtt *ggtt;
> /** @base: A drm_mm_node */
> struct drm_mm_node base;
> };
> diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
> index e133594cc6bd..c0313d13c27b 100644
> --- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
> +++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
> @@ -232,14 +232,14 @@ static u32 encode_config_ggtt(u32 *cfg, const struct xe_gt_sriov_config *config)
> {
> u32 n = 0;
>
> - if (xe_ggtt_node_allocated(&config->ggtt_region)) {
> + if (xe_ggtt_node_allocated(config->ggtt_region)) {
> cfg[n++] = PREP_GUC_KLV_TAG(VF_CFG_GGTT_START);
> - cfg[n++] = lower_32_bits(config->ggtt_region.base.start);
> - cfg[n++] = upper_32_bits(config->ggtt_region.base.start);
> + cfg[n++] = lower_32_bits(config->ggtt_region->base.start);
> + cfg[n++] = upper_32_bits(config->ggtt_region->base.start);
>
> cfg[n++] = PREP_GUC_KLV_TAG(VF_CFG_GGTT_SIZE);
> - cfg[n++] = lower_32_bits(config->ggtt_region.base.size);
> - cfg[n++] = upper_32_bits(config->ggtt_region.base.size);
> + cfg[n++] = lower_32_bits(config->ggtt_region->base.size);
> + cfg[n++] = upper_32_bits(config->ggtt_region->base.size);
> }
>
> return n;
> @@ -385,13 +385,13 @@ static void pf_release_ggtt(struct xe_tile *tile, struct xe_ggtt_node *node)
>
> static void pf_release_vf_config_ggtt(struct xe_gt *gt, struct xe_gt_sriov_config *config)
> {
> - pf_release_ggtt(gt_to_tile(gt), &config->ggtt_region);
> + pf_release_ggtt(gt_to_tile(gt), config->ggtt_region);
in config->ggtt_region here we may still keep stale pointer to the node
that will be already or soon released
> }
>
> static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
> {
> struct xe_gt_sriov_config *config = pf_pick_vf_config(gt, vfid);
> - struct xe_ggtt_node *node = &config->ggtt_region;
> + struct xe_ggtt_node *node = config->ggtt_region;
here 'node' a copy of 'config->ggtt_region'
> struct xe_tile *tile = gt_to_tile(gt);
> struct xe_ggtt *ggtt = tile->mem.ggtt;
> u64 alignment = pf_get_ggtt_alignment(gt);
> @@ -415,25 +415,32 @@ static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
> if (!size)
> return 0;
>
> - err = xe_ggtt_node_insert(ggtt, node, size, alignment);
> + node = xe_ggtt_node_init(ggtt);
but now 'node' is overwritten with new object
> + if (IS_ERR(node))
> + return PTR_ERR(node);
> +
> + err = xe_ggtt_node_insert(node, size, alignment);
> if (unlikely(err))
> - return err;
> + goto err;
>
> - xe_ggtt_assign(ggtt, node, vfid);
> + xe_ggtt_assign(node, vfid);
> xe_gt_sriov_dbg_verbose(gt, "VF%u assigned GGTT %llx-%llx\n",
> vfid, node->base.start, node->base.start + node->base.size - 1);
>
> err = pf_distribute_config_ggtt(gt->tile, vfid, node->base.start, node->base.size);
> if (unlikely(err))
> - return err;
> + goto err;
and this new 'node' is never stored anywhere and thus released, which
leads to ENOSPC when trying to enable/disable VFs few times
>
> return 0;
> +err:
> + xe_ggtt_node_fini(node);
> + return err;
> }
>
> static u64 pf_get_vf_config_ggtt(struct xe_gt *gt, unsigned int vfid)
> {
> struct xe_gt_sriov_config *config = pf_pick_vf_config(gt, vfid);
> - struct xe_ggtt_node *node = &config->ggtt_region;
> + struct xe_ggtt_node *node = config->ggtt_region;
>
> xe_gt_assert(gt, !xe_gt_is_media_type(gt));
> return xe_ggtt_node_allocated(node) ? node->base.size : 0;
> @@ -2006,13 +2013,15 @@ int xe_gt_sriov_pf_config_print_ggtt(struct xe_gt *gt, struct drm_printer *p)
>
> for (n = 1; n <= total_vfs; n++) {
> config = >->sriov.pf.vfs[n].config;
> - if (!xe_ggtt_node_allocated(&config->ggtt_region))
> + if (!xe_ggtt_node_allocated(config->ggtt_region))
> continue;
>
> - string_get_size(config->ggtt_region.base.size, 1, STRING_UNITS_2, buf, sizeof(buf));
> + string_get_size(config->ggtt_region->base.size, 1, STRING_UNITS_2,
> + buf, sizeof(buf));
> drm_printf(p, "VF%u:\t%#0llx-%#llx\t(%s)\n",
> - n, config->ggtt_region.base.start,
> - config->ggtt_region.base.start + config->ggtt_region.base.size - 1, buf);
> + n, config->ggtt_region->base.start,
> + config->ggtt_region->base.start + config->ggtt_region->base.size - 1,
> + buf);
> }
>
> return 0;
> diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h
> index a73d9a4b9e64..2d3b73d78f14 100644
> --- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h
> +++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h
> @@ -18,7 +18,7 @@ struct xe_bo;
> */
> struct xe_gt_sriov_config {
> /** @ggtt_region: GGTT region assigned to the VF. */
> - struct xe_ggtt_node ggtt_region;
> + struct xe_ggtt_node *ggtt_region;
> /** @lmem_obj: LMEM allocation for use by the VF. */
> struct xe_bo *lmem_obj;
> /** @num_ctxs: number of GuC contexts IDs. */
> diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
> index db9761a68ce0..6ea5fa016a82 100644
> --- a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
> +++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
> @@ -495,6 +495,22 @@ u64 xe_gt_sriov_vf_lmem(struct xe_gt *gt)
> return gt->sriov.vf.self_config.lmem_size;
> }
>
> +static int vf_balloon_ggtt_node(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
> + u64 start, u64 end)
> +{
> + int err;
> +
> + node = xe_ggtt_node_init(ggtt);
> + if (IS_ERR(node))
> + return PTR_ERR(node);
> +
> + err = xe_ggtt_node_balloon(node, start, end);
> + if (err)
> + xe_ggtt_node_fini(node);
> +
> + return err;
> +}
> +
> static int vf_balloon_ggtt(struct xe_gt *gt)
> {
> struct xe_gt_sriov_vf_selfconfig *config = >->sriov.vf.self_config;
> @@ -528,7 +544,7 @@ static int vf_balloon_ggtt(struct xe_gt *gt)
> start = xe_wopcm_size(xe);
> end = config->ggtt_base;
> if (end != start) {
> - err = xe_ggtt_node_balloon(ggtt, &tile->sriov.vf.ggtt_balloon[0], start, end);
> + err = vf_balloon_ggtt_node(ggtt, tile->sriov.vf.ggtt_balloon[0], start, end);
> if (err)
> goto failed;
> }
> @@ -536,7 +552,7 @@ static int vf_balloon_ggtt(struct xe_gt *gt)
> start = config->ggtt_base + config->ggtt_size;
> end = GUC_GGTT_TOP;
> if (end != start) {
> - err = xe_ggtt_node_balloon(ggtt, &tile->sriov.vf.ggtt_balloon[1], start, end);
> + err = vf_balloon_ggtt_node(ggtt, tile->sriov.vf.ggtt_balloon[1], start, end);
> if (err)
> goto deballoon;
> }
> @@ -544,7 +560,7 @@ static int vf_balloon_ggtt(struct xe_gt *gt)
> return 0;
>
> deballoon:
> - xe_ggtt_node_deballoon(ggtt, &tile->sriov.vf.ggtt_balloon[0]);
> + xe_ggtt_node_deballoon(tile->sriov.vf.ggtt_balloon[0]);
> failed:
> return err;
> }
> @@ -552,11 +568,10 @@ static int vf_balloon_ggtt(struct xe_gt *gt)
> static void deballoon_ggtt(struct drm_device *drm, void *arg)
> {
> struct xe_tile *tile = arg;
> - struct xe_ggtt *ggtt = tile->mem.ggtt;
>
> xe_tile_assert(tile, IS_SRIOV_VF(tile_to_xe(tile)));
> - xe_ggtt_node_deballoon(ggtt, &tile->sriov.vf.ggtt_balloon[1]);
> - xe_ggtt_node_deballoon(ggtt, &tile->sriov.vf.ggtt_balloon[0]);
> + xe_ggtt_node_deballoon(tile->sriov.vf.ggtt_balloon[1]);
> + xe_ggtt_node_deballoon(tile->sriov.vf.ggtt_balloon[0]);
> }
>
> /**
^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH 11/12] drm/xe: Make xe_ggtt_node struct independent
2024-08-16 15:02 [PATCH 01/12] drm/xe: Removed unused xe_ggtt_printk Rodrigo Vivi
@ 2024-08-16 15:02 ` Rodrigo Vivi
0 siblings, 0 replies; 28+ messages in thread
From: Rodrigo Vivi @ 2024-08-16 15:02 UTC (permalink / raw)
To: intel-xe
Cc: lucas.demarchi, jose.souza, Rodrigo Vivi, Matthew Auld,
Michal Wajdeczko, Matthew Brost
In some rare cases, the drm_mm node cannot be removed synchronously
due to runtime PM conditions. In this situation, the node removal will
be delegated to a workqueue that will be able to wake up the device
before removing the node.
However, in this situation, the lifetime of the xe_ggtt_node cannot
be restricted to the lifetime of the parent object. So, this patch
introduces the infrastructure so the xe_ggtt_node struct can be
allocated in advance and freed when needed.
By having the ggtt backpointer, it also ensure that the init function
is always called before any attempt to insert or reserve the node
in the GGTT.
v2: s/xe_ggtt_node_force_fini/xe_ggtt_node_fini and use it
internaly (Brost)
Cc: Matthew Auld <matthew.auld@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
| 4 +-
drivers/gpu/drm/xe/display/xe_fb_pin.c | 36 ++++--
drivers/gpu/drm/xe/xe_bo.c | 2 +-
drivers/gpu/drm/xe/xe_bo.h | 9 +-
drivers/gpu/drm/xe/xe_bo_types.h | 2 +-
drivers/gpu/drm/xe/xe_device_types.h | 2 +-
drivers/gpu/drm/xe/xe_ggtt.c | 103 ++++++++++++++++--
drivers/gpu/drm/xe/xe_ggtt.h | 2 +
drivers/gpu/drm/xe/xe_ggtt_types.h | 8 +-
drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c | 34 +++---
.../gpu/drm/xe/xe_gt_sriov_pf_config_types.h | 2 +-
drivers/gpu/drm/xe/xe_gt_sriov_vf.c | 26 ++++-
12 files changed, 181 insertions(+), 49 deletions(-)
--git a/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h b/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
index 3028ac1ba72f..bdae8392e125 100644
--- a/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
+++ b/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
@@ -20,7 +20,7 @@ struct xe_bo;
struct i915_vma {
struct xe_bo *bo, *dpt;
- struct xe_ggtt_node node;
+ struct xe_ggtt_node *node;
};
#define i915_ggtt_clear_scanout(bo) do { } while (0)
@@ -29,7 +29,7 @@ struct i915_vma {
static inline u32 i915_ggtt_offset(const struct i915_vma *vma)
{
- return vma->node.base.start;
+ return vma->node->base.start;
}
#endif
diff --git a/drivers/gpu/drm/xe/display/xe_fb_pin.c b/drivers/gpu/drm/xe/display/xe_fb_pin.c
index de4930b67a29..087e553d9c65 100644
--- a/drivers/gpu/drm/xe/display/xe_fb_pin.c
+++ b/drivers/gpu/drm/xe/display/xe_fb_pin.c
@@ -204,20 +204,28 @@ static int __xe_pin_fb_vma_ggtt(const struct intel_framebuffer *fb,
if (xe_bo_is_vram(bo) && ggtt->flags & XE_GGTT_FLAGS_64K)
align = max_t(u32, align, SZ_64K);
- if (bo->ggtt_node.base.size && view->type == I915_GTT_VIEW_NORMAL) {
+ if (bo->ggtt_node && view->type == I915_GTT_VIEW_NORMAL) {
vma->node = bo->ggtt_node;
} else if (view->type == I915_GTT_VIEW_NORMAL) {
u32 x, size = bo->ttm.base.size;
- ret = xe_ggtt_node_insert_locked(ggtt, &vma->node, size, align, 0);
- if (ret)
+ vma->node = xe_ggtt_node_init(ggtt);
+ if (IS_ERR(vma->node)) {
+ ret = PTR_ERR(vma->node);
goto out_unlock;
+ }
+
+ ret = xe_ggtt_node_insert_locked(ggtt, vma->node, size, align, 0);
+ if (ret) {
+ xe_ggtt_node_fini(vma->node);
+ goto out_unlock;
+ }
for (x = 0; x < size; x += XE_PAGE_SIZE) {
u64 pte = ggtt->pt_ops->pte_encode_bo(bo, x,
xe->pat.idx[XE_CACHE_NONE]);
- ggtt->pt_ops->ggtt_set_pte(ggtt, vma->node.base.start + x, pte);
+ ggtt->pt_ops->ggtt_set_pte(ggtt, vma->node->base.start + x, pte);
}
} else {
u32 i, ggtt_ofs;
@@ -226,11 +234,19 @@ static int __xe_pin_fb_vma_ggtt(const struct intel_framebuffer *fb,
/* display seems to use tiles instead of bytes here, so convert it back.. */
u32 size = intel_rotation_info_size(rot_info) * XE_PAGE_SIZE;
- ret = xe_ggtt_node_insert_locked(ggtt, &vma->node, size, align, 0);
- if (ret)
+ vma->node = xe_ggtt_node_init(ggtt);
+ if (IS_ERR(vma->node)) {
+ ret = PTR_ERR(vma->node);
goto out_unlock;
+ }
+
+ ret = xe_ggtt_node_insert_locked(ggtt, vma->node, size, align, 0);
+ if (ret) {
+ xe_ggtt_node_fini(vma->node);
+ goto out_unlock;
+ }
- ggtt_ofs = vma->node.base.start;
+ ggtt_ofs = vma->node->base.start;
for (i = 0; i < ARRAY_SIZE(rot_info->plane); i++)
write_ggtt_rotated(bo, ggtt, &ggtt_ofs,
@@ -323,9 +339,9 @@ static void __xe_unpin_fb_vma(struct i915_vma *vma)
if (vma->dpt)
xe_bo_unpin_map_no_vm(vma->dpt);
- else if (!xe_ggtt_node_allocated(&vma->bo->ggtt_node) ||
- vma->bo->ggtt_node.base.start != vma->node.base.start)
- xe_ggtt_node_remove(ggtt, &vma->node, false);
+ else if (!xe_ggtt_node_allocated(vma->bo->ggtt_node) ||
+ vma->bo->ggtt_node->base.start != vma->node->base.start)
+ xe_ggtt_node_remove(ggtt, vma->node, false);
ttm_bo_reserve(&vma->bo->ttm, false, false, NULL);
ttm_bo_unpin(&vma->bo->ttm);
diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index 74c850777246..c4261527b1c7 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -1098,7 +1098,7 @@ static void xe_ttm_bo_destroy(struct ttm_buffer_object *ttm_bo)
xe_assert(xe, list_empty(&ttm_bo->base.gpuva.list));
- if (bo->ggtt_node.base.size)
+ if (bo->ggtt_node)
xe_ggtt_remove_bo(bo->tile->mem.ggtt, bo);
#ifdef CONFIG_PROC_FS
diff --git a/drivers/gpu/drm/xe/xe_bo.h b/drivers/gpu/drm/xe/xe_bo.h
index faffbda55517..f588e3a98105 100644
--- a/drivers/gpu/drm/xe/xe_bo.h
+++ b/drivers/gpu/drm/xe/xe_bo.h
@@ -195,9 +195,12 @@ xe_bo_main_addr(struct xe_bo *bo, size_t page_size)
static inline u32
xe_bo_ggtt_addr(struct xe_bo *bo)
{
- XE_WARN_ON(bo->ggtt_node.base.size > bo->size);
- XE_WARN_ON(bo->ggtt_node.base.start + bo->ggtt_node.base.size > (1ull << 32));
- return bo->ggtt_node.base.start;
+ if (XE_WARN_ON(!bo->ggtt_node))
+ return -ENOENT;
+
+ XE_WARN_ON(bo->ggtt_node->base.size > bo->size);
+ XE_WARN_ON(bo->ggtt_node->base.start + bo->ggtt_node->base.size > (1ull << 32));
+ return bo->ggtt_node->base.start;
}
int xe_bo_vmap(struct xe_bo *bo);
diff --git a/drivers/gpu/drm/xe/xe_bo_types.h b/drivers/gpu/drm/xe/xe_bo_types.h
index 4b1de9f5be00..2ed558ac2264 100644
--- a/drivers/gpu/drm/xe/xe_bo_types.h
+++ b/drivers/gpu/drm/xe/xe_bo_types.h
@@ -40,7 +40,7 @@ struct xe_bo {
/** @placement: current placement for this BO */
struct ttm_placement placement;
/** @ggtt_node: GGTT node if this BO is mapped in the GGTT */
- struct xe_ggtt_node ggtt_node;
+ struct xe_ggtt_node *ggtt_node;
/** @vmap: iosys map of this buffer */
struct iosys_map vmap;
/** @ttm_kmap: TTM bo kmap object for internal use only. Keep off. */
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index d2b3d8a0c1bd..06fcb92568c7 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -204,7 +204,7 @@ struct xe_tile {
struct xe_memirq memirq;
/** @sriov.vf.ggtt_balloon: GGTT regions excluded from use. */
- struct xe_ggtt_node ggtt_balloon[2];
+ struct xe_ggtt_node *ggtt_balloon[2];
} vf;
} sriov;
diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
index 05c3e6e929ae..5c04c1bc8417 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.c
+++ b/drivers/gpu/drm/xe/xe_ggtt.c
@@ -353,6 +353,7 @@ static void xe_ggtt_dump_node(struct xe_ggtt *ggtt,
* @end: then end GGTT address of the reserved region
* @node: the &xe_ggtt_node to hold reserved GGTT node
*
+ * It cannot be called without first having called xe_ggtt_init().
* Use xe_ggtt_node_deballoon() to release a reserved GGTT node.
*
* Return: 0 on success or a negative error code on failure.
@@ -361,6 +362,9 @@ int xe_ggtt_node_balloon(struct xe_ggtt *ggtt, u64 start, u64 end, struct xe_ggt
{
int err;
+ if (!node || !node->ggtt)
+ return -ENOENT;
+
xe_tile_assert(ggtt->tile, start < end);
xe_tile_assert(ggtt->tile, IS_ALIGNED(start, XE_PAGE_SIZE));
xe_tile_assert(ggtt->tile, IS_ALIGNED(end, XE_PAGE_SIZE));
@@ -392,14 +396,20 @@ int xe_ggtt_node_balloon(struct xe_ggtt *ggtt, u64 start, u64 end, struct xe_ggt
*/
void xe_ggtt_node_deballoon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node)
{
- if (!drm_mm_node_allocated(&node->base))
+ if (!node || !node->ggtt)
return;
+ if (!drm_mm_node_allocated(&node->base))
+ goto free_node;
+
xe_ggtt_dump_node(ggtt, &node->base, "deballoon");
mutex_lock(&ggtt->lock);
drm_mm_remove_node(&node->base);
mutex_unlock(&ggtt->lock);
+
+free_node:
+ xe_ggtt_node_fini(node);
}
/**
@@ -410,6 +420,7 @@ void xe_ggtt_node_deballoon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node)
* @align: alignment constrain of the node
* @mm_flags: flags to control the node behavior
*
+ * It cannot be called without first having called xe_ggtt_init() once.
* To be used in cases where ggtt->lock is already taken.
*
* Return: 0 on success or a negative error code on failure.
@@ -417,6 +428,9 @@ void xe_ggtt_node_deballoon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node)
int xe_ggtt_node_insert_locked(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
u32 size, u32 align, u32 mm_flags)
{
+ if (!node || !node->ggtt)
+ return -ENOENT;
+
return drm_mm_insert_node_generic(&ggtt->mm, &node->base, size, align, 0,
mm_flags);
}
@@ -428,6 +442,8 @@ int xe_ggtt_node_insert_locked(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
* @size: size of the node
* @align: alignment constrain of the node
*
+ * It cannot be called without first having called xe_ggtt_init() once.
+ *
* Return: 0 on success or a negative error code on failure.
*/
int xe_ggtt_node_insert(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
@@ -435,6 +451,9 @@ int xe_ggtt_node_insert(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
{
int ret;
+ if (!node || !node->ggtt)
+ return -ENOENT;
+
mutex_lock(&ggtt->lock);
ret = xe_ggtt_node_insert_locked(ggtt, node, size,
align, DRM_MM_INSERT_HIGH);
@@ -443,6 +462,43 @@ int xe_ggtt_node_insert(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
return ret;
}
+/**
+ * xe_ggtt_node_init - Initialize %xe_ggtt_node struct
+ * @ggtt: the &xe_ggtt where the new node will later be inserted/reserved.
+ *
+ * This function will allocated the struct %xe_ggtt_node and return it's pointer.
+ * This struct will then be freed after the node removal upon xe_ggtt_node_remove()
+ * or xe_ggtt_node_deballoon().
+ * Having %xe_ggtt_node struct allocated doesn't mean that the node is already allocated
+ * in GGTT. Only the xe_ggtt_node_insert(), xe_ggtt_node_insert_locked(),
+ * xe_ggtt_node_balloon() will ensure the node is inserted or reserved in GGTT.
+ *
+ * Return: A pointer to %xe_ggtt_node struct on success. An ERR_PTR otherwise.
+ **/
+struct xe_ggtt_node *xe_ggtt_node_init(struct xe_ggtt *ggtt)
+{
+ struct xe_ggtt_node *node = kzalloc(sizeof(*node), GFP_KERNEL);
+
+ if (!node)
+ return ERR_PTR(-ENOMEM);
+
+ node->ggtt = ggtt;
+ return node;
+}
+
+/**
+ * xe_ggtt_node_fini - Forcebly finalize %xe_ggtt_node struct
+ * @node: the &xe_ggtt_node to be freed
+ *
+ * If anything went wrong with either xe_ggtt_node_insert(), xe_ggtt_node_insert_locked(),
+ * or xe_ggtt_node_balloon(); and this @node is not going to be reused, then,
+ * this function needs to be called to free the %xe_ggtt_node struct
+ **/
+void xe_ggtt_node_fini(struct xe_ggtt_node *node)
+{
+ kfree(node);
+}
+
/**
* xe_ggtt_node_remove - Remove a &xe_ggtt_node from the GGTT
* @ggtt: the &xe_ggtt where node will be removed
@@ -456,6 +512,9 @@ void xe_ggtt_node_remove(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
bool bound;
int idx;
+ if (!node || !node->ggtt)
+ return;
+
bound = drm_dev_enter(&xe->drm, &idx);
if (bound)
xe_pm_runtime_get_noresume(xe);
@@ -468,23 +527,29 @@ void xe_ggtt_node_remove(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
mutex_unlock(&ggtt->lock);
if (!bound)
- return;
+ goto free_node;
if (invalidate)
xe_ggtt_invalidate(ggtt);
xe_pm_runtime_put(xe);
drm_dev_exit(idx);
+
+free_node:
+ xe_ggtt_node_fini(node);
}
/**
- * xe_ggtt_node_allocated - Check if node is allocated
+ * xe_ggtt_node_allocated - Check if node is allocated in GGTT
* @node: the &xe_ggtt_node to be inspected
*
* Return: True if allocated, False otherwise.
*/
bool xe_ggtt_node_allocated(const struct xe_ggtt_node *node)
{
+ if (!node || !node->ggtt)
+ return false;
+
return drm_mm_node_allocated(&node->base);
}
@@ -497,9 +562,14 @@ void xe_ggtt_map_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
{
u16 cache_mode = bo->flags & XE_BO_FLAG_NEEDS_UC ? XE_CACHE_NONE : XE_CACHE_WB;
u16 pat_index = tile_to_xe(ggtt->tile)->pat.idx[cache_mode];
- u64 start = bo->ggtt_node.base.start;
+ u64 start;
u64 offset, pte;
+ if (XE_WARN_ON(!bo->ggtt_node))
+ return;
+
+ start = bo->ggtt_node->base.start;
+
for (offset = 0; offset < bo->size; offset += XE_PAGE_SIZE) {
pte = ggtt->pt_ops->pte_encode_bo(bo, offset, pat_index);
ggtt->pt_ops->ggtt_set_pte(ggtt, start + offset, pte);
@@ -515,9 +585,9 @@ static int __xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
if (xe_bo_is_vram(bo) && ggtt->flags & XE_GGTT_FLAGS_64K)
alignment = SZ_64K;
- if (XE_WARN_ON(bo->ggtt_node.base.size)) {
+ if (XE_WARN_ON(bo->ggtt_node)) {
/* Someone's already inserted this BO in the GGTT */
- xe_tile_assert(ggtt->tile, bo->ggtt_node.base.size == bo->size);
+ xe_tile_assert(ggtt->tile, bo->ggtt_node->base.size == bo->size);
return 0;
}
@@ -526,15 +596,26 @@ static int __xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
return err;
xe_pm_runtime_get_noresume(tile_to_xe(ggtt->tile));
+
+ bo->ggtt_node = xe_ggtt_node_init(ggtt);
+ if (IS_ERR(bo->ggtt_node)) {
+ err = PTR_ERR(bo->ggtt_node);
+ goto out;
+ }
+
mutex_lock(&ggtt->lock);
- err = drm_mm_insert_node_in_range(&ggtt->mm, &bo->ggtt_node.base, bo->size,
+ err = drm_mm_insert_node_in_range(&ggtt->mm, &bo->ggtt_node->base, bo->size,
alignment, 0, start, end, 0);
- if (!err)
+ if (err)
+ xe_ggtt_node_fini(bo->ggtt_node);
+ else
xe_ggtt_map_bo(ggtt, bo);
mutex_unlock(&ggtt->lock);
if (!err && bo->flags & XE_BO_FLAG_GGTT_INVALIDATE)
xe_ggtt_invalidate(ggtt);
+
+out:
xe_pm_runtime_put(tile_to_xe(ggtt->tile));
return err;
@@ -574,13 +655,13 @@ int xe_ggtt_insert_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
*/
void xe_ggtt_remove_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
{
- if (XE_WARN_ON(!bo->ggtt_node.base.size))
+ if (XE_WARN_ON(!bo->ggtt_node))
return;
/* This BO is not currently in the GGTT */
- xe_tile_assert(ggtt->tile, bo->ggtt_node.base.size == bo->size);
+ xe_tile_assert(ggtt->tile, bo->ggtt_node->base.size == bo->size);
- xe_ggtt_node_remove(ggtt, &bo->ggtt_node,
+ xe_ggtt_node_remove(ggtt, bo->ggtt_node,
bo->flags & XE_BO_FLAG_GGTT_INVALIDATE);
}
diff --git a/drivers/gpu/drm/xe/xe_ggtt.h b/drivers/gpu/drm/xe/xe_ggtt.h
index e68cede2e6b5..0e6f8c396ae1 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.h
+++ b/drivers/gpu/drm/xe/xe_ggtt.h
@@ -13,6 +13,8 @@ struct drm_printer;
int xe_ggtt_init_early(struct xe_ggtt *ggtt);
int xe_ggtt_init(struct xe_ggtt *ggtt);
+struct xe_ggtt_node *xe_ggtt_node_init(struct xe_ggtt *ggtt);
+void xe_ggtt_node_fini(struct xe_ggtt_node *node);
int xe_ggtt_node_balloon(struct xe_ggtt *ggtt, u64 start, u64 size, struct xe_ggtt_node *node);
void xe_ggtt_node_deballoon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node);
diff --git a/drivers/gpu/drm/xe/xe_ggtt_types.h b/drivers/gpu/drm/xe/xe_ggtt_types.h
index af312a7d1031..0e8822ae13fc 100644
--- a/drivers/gpu/drm/xe/xe_ggtt_types.h
+++ b/drivers/gpu/drm/xe/xe_ggtt_types.h
@@ -50,9 +50,15 @@ struct xe_ggtt {
};
/**
- * struct xe_ggtt_node - A node in GGTT
+ * struct xe_ggtt_node - A node in GGTT.
+ *
+ * This struct needs to be initialized (only-once) with xe_ggtt_node_init() before any node
+ * insertion, reservation, or 'ballooning'.
+ * It will, then, be finalized by either xe_ggtt_node_remove() or xe_ggtt_node_deballoon().
*/
struct xe_ggtt_node {
+ /** @ggtt: Back pointer to xe_ggtt where this region will be inserted at */
+ struct xe_ggtt *ggtt;
/** @base: A drm_mm_node */
struct drm_mm_node base;
};
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
index e133594cc6bd..c617cdc1e4db 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
@@ -232,14 +232,14 @@ static u32 encode_config_ggtt(u32 *cfg, const struct xe_gt_sriov_config *config)
{
u32 n = 0;
- if (xe_ggtt_node_allocated(&config->ggtt_region)) {
+ if (xe_ggtt_node_allocated(config->ggtt_region)) {
cfg[n++] = PREP_GUC_KLV_TAG(VF_CFG_GGTT_START);
- cfg[n++] = lower_32_bits(config->ggtt_region.base.start);
- cfg[n++] = upper_32_bits(config->ggtt_region.base.start);
+ cfg[n++] = lower_32_bits(config->ggtt_region->base.start);
+ cfg[n++] = upper_32_bits(config->ggtt_region->base.start);
cfg[n++] = PREP_GUC_KLV_TAG(VF_CFG_GGTT_SIZE);
- cfg[n++] = lower_32_bits(config->ggtt_region.base.size);
- cfg[n++] = upper_32_bits(config->ggtt_region.base.size);
+ cfg[n++] = lower_32_bits(config->ggtt_region->base.size);
+ cfg[n++] = upper_32_bits(config->ggtt_region->base.size);
}
return n;
@@ -385,13 +385,13 @@ static void pf_release_ggtt(struct xe_tile *tile, struct xe_ggtt_node *node)
static void pf_release_vf_config_ggtt(struct xe_gt *gt, struct xe_gt_sriov_config *config)
{
- pf_release_ggtt(gt_to_tile(gt), &config->ggtt_region);
+ pf_release_ggtt(gt_to_tile(gt), config->ggtt_region);
}
static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
{
struct xe_gt_sriov_config *config = pf_pick_vf_config(gt, vfid);
- struct xe_ggtt_node *node = &config->ggtt_region;
+ struct xe_ggtt_node *node = config->ggtt_region;
struct xe_tile *tile = gt_to_tile(gt);
struct xe_ggtt *ggtt = tile->mem.ggtt;
u64 alignment = pf_get_ggtt_alignment(gt);
@@ -415,9 +415,15 @@ static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
if (!size)
return 0;
+ node = xe_ggtt_node_init(ggtt);
+ if (IS_ERR(node))
+ return PTR_ERR(node);
+
err = xe_ggtt_node_insert(ggtt, node, size, alignment);
- if (unlikely(err))
+ if (unlikely(err)) {
+ xe_ggtt_node_fini(node);
return err;
+ }
xe_ggtt_assign(ggtt, node, vfid);
xe_gt_sriov_dbg_verbose(gt, "VF%u assigned GGTT %llx-%llx\n",
@@ -433,7 +439,7 @@ static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
static u64 pf_get_vf_config_ggtt(struct xe_gt *gt, unsigned int vfid)
{
struct xe_gt_sriov_config *config = pf_pick_vf_config(gt, vfid);
- struct xe_ggtt_node *node = &config->ggtt_region;
+ struct xe_ggtt_node *node = config->ggtt_region;
xe_gt_assert(gt, !xe_gt_is_media_type(gt));
return xe_ggtt_node_allocated(node) ? node->base.size : 0;
@@ -2006,13 +2012,15 @@ int xe_gt_sriov_pf_config_print_ggtt(struct xe_gt *gt, struct drm_printer *p)
for (n = 1; n <= total_vfs; n++) {
config = >->sriov.pf.vfs[n].config;
- if (!xe_ggtt_node_allocated(&config->ggtt_region))
+ if (!xe_ggtt_node_allocated(config->ggtt_region))
continue;
- string_get_size(config->ggtt_region.base.size, 1, STRING_UNITS_2, buf, sizeof(buf));
+ string_get_size(config->ggtt_region->base.size, 1, STRING_UNITS_2,
+ buf, sizeof(buf));
drm_printf(p, "VF%u:\t%#0llx-%#llx\t(%s)\n",
- n, config->ggtt_region.base.start,
- config->ggtt_region.base.start + config->ggtt_region.base.size - 1, buf);
+ n, config->ggtt_region->base.start,
+ config->ggtt_region->base.start + config->ggtt_region->base.size - 1,
+ buf);
}
return 0;
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h
index a73d9a4b9e64..2d3b73d78f14 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h
@@ -18,7 +18,7 @@ struct xe_bo;
*/
struct xe_gt_sriov_config {
/** @ggtt_region: GGTT region assigned to the VF. */
- struct xe_ggtt_node ggtt_region;
+ struct xe_ggtt_node *ggtt_region;
/** @lmem_obj: LMEM allocation for use by the VF. */
struct xe_bo *lmem_obj;
/** @num_ctxs: number of GuC contexts IDs. */
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
index 9a1be23ae71d..3d9f6a700564 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
@@ -495,6 +495,22 @@ u64 xe_gt_sriov_vf_lmem(struct xe_gt *gt)
return gt->sriov.vf.self_config.lmem_size;
}
+static int vf_balloon_ggtt_node(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
+ u64 start, u64 end)
+{
+ int err;
+
+ node = xe_ggtt_node_init(ggtt);
+ if (IS_ERR(node))
+ return PTR_ERR(node);
+
+ err = xe_ggtt_node_balloon(ggtt, start, end, node);
+ if (err)
+ xe_ggtt_node_fini(node);
+
+ return err;
+}
+
static int vf_balloon_ggtt(struct xe_gt *gt)
{
struct xe_gt_sriov_vf_selfconfig *config = >->sriov.vf.self_config;
@@ -528,7 +544,7 @@ static int vf_balloon_ggtt(struct xe_gt *gt)
start = xe_wopcm_size(xe);
end = config->ggtt_base;
if (end != start) {
- err = xe_ggtt_node_balloon(ggtt, start, end, &tile->sriov.vf.ggtt_balloon[0]);
+ err = vf_balloon_ggtt_node(ggtt, tile->sriov.vf.ggtt_balloon[0], start, end);
if (err)
goto failed;
}
@@ -536,7 +552,7 @@ static int vf_balloon_ggtt(struct xe_gt *gt)
start = config->ggtt_base + config->ggtt_size;
end = GUC_GGTT_TOP;
if (end != start) {
- err = xe_ggtt_node_balloon(ggtt, start, end, &tile->sriov.vf.ggtt_balloon[1]);
+ err = vf_balloon_ggtt_node(ggtt, tile->sriov.vf.ggtt_balloon[1], start, end);
if (err)
goto deballoon;
}
@@ -544,7 +560,7 @@ static int vf_balloon_ggtt(struct xe_gt *gt)
return 0;
deballoon:
- xe_ggtt_node_deballoon(ggtt, &tile->sriov.vf.ggtt_balloon[0]);
+ xe_ggtt_node_deballoon(ggtt, tile->sriov.vf.ggtt_balloon[0]);
failed:
return err;
}
@@ -555,8 +571,8 @@ static void deballoon_ggtt(struct drm_device *drm, void *arg)
struct xe_ggtt *ggtt = tile->mem.ggtt;
xe_tile_assert(tile, IS_SRIOV_VF(tile_to_xe(tile)));
- xe_ggtt_node_deballoon(ggtt, &tile->sriov.vf.ggtt_balloon[1]);
- xe_ggtt_node_deballoon(ggtt, &tile->sriov.vf.ggtt_balloon[0]);
+ xe_ggtt_node_deballoon(ggtt, tile->sriov.vf.ggtt_balloon[1]);
+ xe_ggtt_node_deballoon(ggtt, tile->sriov.vf.ggtt_balloon[0]);
}
/**
--
2.46.0
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 11/12] drm/xe: Make xe_ggtt_node struct independent
2024-08-15 22:07 [PATCH 01/12] drm/xe: Removed unused xe_ggtt_printk Rodrigo Vivi
@ 2024-08-15 22:07 ` Rodrigo Vivi
0 siblings, 0 replies; 28+ messages in thread
From: Rodrigo Vivi @ 2024-08-15 22:07 UTC (permalink / raw)
To: intel-xe
Cc: lucas.demarchi, jose.souza, Rodrigo Vivi, Matthew Auld,
Michal Wajdeczko, Matthew Brost
In some rare cases, the drm_mm node cannot be removed synchronously
due to runtime PM conditions. In this situation, the node removal will
be delegated to a workqueue that will be able to wake up the device
before removing the node.
However, in this situation, the lifetime of the xe_ggtt_node cannot
be restricted to the lifetime of the parent object. So, this patch
introduces the infrastructure so the xe_ggtt_node struct can be
allocated in advance and freed when needed.
By having the ggtt backpointer, it also ensure that the init function
is always called before any attempt to insert or reserve the node
in the GGTT.
v2: s/xe_ggtt_node_force_fini/xe_ggtt_node_fini and use it
internaly (Brost)
Cc: Matthew Auld <matthew.auld@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
| 4 +-
drivers/gpu/drm/xe/display/xe_fb_pin.c | 36 ++++--
drivers/gpu/drm/xe/xe_bo.c | 2 +-
drivers/gpu/drm/xe/xe_bo.h | 9 +-
drivers/gpu/drm/xe/xe_bo_types.h | 2 +-
drivers/gpu/drm/xe/xe_device_types.h | 2 +-
drivers/gpu/drm/xe/xe_ggtt.c | 103 ++++++++++++++++--
drivers/gpu/drm/xe/xe_ggtt.h | 2 +
drivers/gpu/drm/xe/xe_ggtt_types.h | 8 +-
drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c | 34 +++---
.../gpu/drm/xe/xe_gt_sriov_pf_config_types.h | 2 +-
drivers/gpu/drm/xe/xe_gt_sriov_vf.c | 26 ++++-
12 files changed, 181 insertions(+), 49 deletions(-)
--git a/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h b/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
index 3028ac1ba72f..bdae8392e125 100644
--- a/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
+++ b/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
@@ -20,7 +20,7 @@ struct xe_bo;
struct i915_vma {
struct xe_bo *bo, *dpt;
- struct xe_ggtt_node node;
+ struct xe_ggtt_node *node;
};
#define i915_ggtt_clear_scanout(bo) do { } while (0)
@@ -29,7 +29,7 @@ struct i915_vma {
static inline u32 i915_ggtt_offset(const struct i915_vma *vma)
{
- return vma->node.base.start;
+ return vma->node->base.start;
}
#endif
diff --git a/drivers/gpu/drm/xe/display/xe_fb_pin.c b/drivers/gpu/drm/xe/display/xe_fb_pin.c
index de4930b67a29..087e553d9c65 100644
--- a/drivers/gpu/drm/xe/display/xe_fb_pin.c
+++ b/drivers/gpu/drm/xe/display/xe_fb_pin.c
@@ -204,20 +204,28 @@ static int __xe_pin_fb_vma_ggtt(const struct intel_framebuffer *fb,
if (xe_bo_is_vram(bo) && ggtt->flags & XE_GGTT_FLAGS_64K)
align = max_t(u32, align, SZ_64K);
- if (bo->ggtt_node.base.size && view->type == I915_GTT_VIEW_NORMAL) {
+ if (bo->ggtt_node && view->type == I915_GTT_VIEW_NORMAL) {
vma->node = bo->ggtt_node;
} else if (view->type == I915_GTT_VIEW_NORMAL) {
u32 x, size = bo->ttm.base.size;
- ret = xe_ggtt_node_insert_locked(ggtt, &vma->node, size, align, 0);
- if (ret)
+ vma->node = xe_ggtt_node_init(ggtt);
+ if (IS_ERR(vma->node)) {
+ ret = PTR_ERR(vma->node);
goto out_unlock;
+ }
+
+ ret = xe_ggtt_node_insert_locked(ggtt, vma->node, size, align, 0);
+ if (ret) {
+ xe_ggtt_node_fini(vma->node);
+ goto out_unlock;
+ }
for (x = 0; x < size; x += XE_PAGE_SIZE) {
u64 pte = ggtt->pt_ops->pte_encode_bo(bo, x,
xe->pat.idx[XE_CACHE_NONE]);
- ggtt->pt_ops->ggtt_set_pte(ggtt, vma->node.base.start + x, pte);
+ ggtt->pt_ops->ggtt_set_pte(ggtt, vma->node->base.start + x, pte);
}
} else {
u32 i, ggtt_ofs;
@@ -226,11 +234,19 @@ static int __xe_pin_fb_vma_ggtt(const struct intel_framebuffer *fb,
/* display seems to use tiles instead of bytes here, so convert it back.. */
u32 size = intel_rotation_info_size(rot_info) * XE_PAGE_SIZE;
- ret = xe_ggtt_node_insert_locked(ggtt, &vma->node, size, align, 0);
- if (ret)
+ vma->node = xe_ggtt_node_init(ggtt);
+ if (IS_ERR(vma->node)) {
+ ret = PTR_ERR(vma->node);
goto out_unlock;
+ }
+
+ ret = xe_ggtt_node_insert_locked(ggtt, vma->node, size, align, 0);
+ if (ret) {
+ xe_ggtt_node_fini(vma->node);
+ goto out_unlock;
+ }
- ggtt_ofs = vma->node.base.start;
+ ggtt_ofs = vma->node->base.start;
for (i = 0; i < ARRAY_SIZE(rot_info->plane); i++)
write_ggtt_rotated(bo, ggtt, &ggtt_ofs,
@@ -323,9 +339,9 @@ static void __xe_unpin_fb_vma(struct i915_vma *vma)
if (vma->dpt)
xe_bo_unpin_map_no_vm(vma->dpt);
- else if (!xe_ggtt_node_allocated(&vma->bo->ggtt_node) ||
- vma->bo->ggtt_node.base.start != vma->node.base.start)
- xe_ggtt_node_remove(ggtt, &vma->node, false);
+ else if (!xe_ggtt_node_allocated(vma->bo->ggtt_node) ||
+ vma->bo->ggtt_node->base.start != vma->node->base.start)
+ xe_ggtt_node_remove(ggtt, vma->node, false);
ttm_bo_reserve(&vma->bo->ttm, false, false, NULL);
ttm_bo_unpin(&vma->bo->ttm);
diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index 74c850777246..c4261527b1c7 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -1098,7 +1098,7 @@ static void xe_ttm_bo_destroy(struct ttm_buffer_object *ttm_bo)
xe_assert(xe, list_empty(&ttm_bo->base.gpuva.list));
- if (bo->ggtt_node.base.size)
+ if (bo->ggtt_node)
xe_ggtt_remove_bo(bo->tile->mem.ggtt, bo);
#ifdef CONFIG_PROC_FS
diff --git a/drivers/gpu/drm/xe/xe_bo.h b/drivers/gpu/drm/xe/xe_bo.h
index faffbda55517..f588e3a98105 100644
--- a/drivers/gpu/drm/xe/xe_bo.h
+++ b/drivers/gpu/drm/xe/xe_bo.h
@@ -195,9 +195,12 @@ xe_bo_main_addr(struct xe_bo *bo, size_t page_size)
static inline u32
xe_bo_ggtt_addr(struct xe_bo *bo)
{
- XE_WARN_ON(bo->ggtt_node.base.size > bo->size);
- XE_WARN_ON(bo->ggtt_node.base.start + bo->ggtt_node.base.size > (1ull << 32));
- return bo->ggtt_node.base.start;
+ if (XE_WARN_ON(!bo->ggtt_node))
+ return -ENOENT;
+
+ XE_WARN_ON(bo->ggtt_node->base.size > bo->size);
+ XE_WARN_ON(bo->ggtt_node->base.start + bo->ggtt_node->base.size > (1ull << 32));
+ return bo->ggtt_node->base.start;
}
int xe_bo_vmap(struct xe_bo *bo);
diff --git a/drivers/gpu/drm/xe/xe_bo_types.h b/drivers/gpu/drm/xe/xe_bo_types.h
index 4b1de9f5be00..2ed558ac2264 100644
--- a/drivers/gpu/drm/xe/xe_bo_types.h
+++ b/drivers/gpu/drm/xe/xe_bo_types.h
@@ -40,7 +40,7 @@ struct xe_bo {
/** @placement: current placement for this BO */
struct ttm_placement placement;
/** @ggtt_node: GGTT node if this BO is mapped in the GGTT */
- struct xe_ggtt_node ggtt_node;
+ struct xe_ggtt_node *ggtt_node;
/** @vmap: iosys map of this buffer */
struct iosys_map vmap;
/** @ttm_kmap: TTM bo kmap object for internal use only. Keep off. */
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index d2b3d8a0c1bd..06fcb92568c7 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -204,7 +204,7 @@ struct xe_tile {
struct xe_memirq memirq;
/** @sriov.vf.ggtt_balloon: GGTT regions excluded from use. */
- struct xe_ggtt_node ggtt_balloon[2];
+ struct xe_ggtt_node *ggtt_balloon[2];
} vf;
} sriov;
diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
index 05c3e6e929ae..5c04c1bc8417 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.c
+++ b/drivers/gpu/drm/xe/xe_ggtt.c
@@ -353,6 +353,7 @@ static void xe_ggtt_dump_node(struct xe_ggtt *ggtt,
* @end: then end GGTT address of the reserved region
* @node: the &xe_ggtt_node to hold reserved GGTT node
*
+ * It cannot be called without first having called xe_ggtt_init().
* Use xe_ggtt_node_deballoon() to release a reserved GGTT node.
*
* Return: 0 on success or a negative error code on failure.
@@ -361,6 +362,9 @@ int xe_ggtt_node_balloon(struct xe_ggtt *ggtt, u64 start, u64 end, struct xe_ggt
{
int err;
+ if (!node || !node->ggtt)
+ return -ENOENT;
+
xe_tile_assert(ggtt->tile, start < end);
xe_tile_assert(ggtt->tile, IS_ALIGNED(start, XE_PAGE_SIZE));
xe_tile_assert(ggtt->tile, IS_ALIGNED(end, XE_PAGE_SIZE));
@@ -392,14 +396,20 @@ int xe_ggtt_node_balloon(struct xe_ggtt *ggtt, u64 start, u64 end, struct xe_ggt
*/
void xe_ggtt_node_deballoon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node)
{
- if (!drm_mm_node_allocated(&node->base))
+ if (!node || !node->ggtt)
return;
+ if (!drm_mm_node_allocated(&node->base))
+ goto free_node;
+
xe_ggtt_dump_node(ggtt, &node->base, "deballoon");
mutex_lock(&ggtt->lock);
drm_mm_remove_node(&node->base);
mutex_unlock(&ggtt->lock);
+
+free_node:
+ xe_ggtt_node_fini(node);
}
/**
@@ -410,6 +420,7 @@ void xe_ggtt_node_deballoon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node)
* @align: alignment constrain of the node
* @mm_flags: flags to control the node behavior
*
+ * It cannot be called without first having called xe_ggtt_init() once.
* To be used in cases where ggtt->lock is already taken.
*
* Return: 0 on success or a negative error code on failure.
@@ -417,6 +428,9 @@ void xe_ggtt_node_deballoon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node)
int xe_ggtt_node_insert_locked(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
u32 size, u32 align, u32 mm_flags)
{
+ if (!node || !node->ggtt)
+ return -ENOENT;
+
return drm_mm_insert_node_generic(&ggtt->mm, &node->base, size, align, 0,
mm_flags);
}
@@ -428,6 +442,8 @@ int xe_ggtt_node_insert_locked(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
* @size: size of the node
* @align: alignment constrain of the node
*
+ * It cannot be called without first having called xe_ggtt_init() once.
+ *
* Return: 0 on success or a negative error code on failure.
*/
int xe_ggtt_node_insert(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
@@ -435,6 +451,9 @@ int xe_ggtt_node_insert(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
{
int ret;
+ if (!node || !node->ggtt)
+ return -ENOENT;
+
mutex_lock(&ggtt->lock);
ret = xe_ggtt_node_insert_locked(ggtt, node, size,
align, DRM_MM_INSERT_HIGH);
@@ -443,6 +462,43 @@ int xe_ggtt_node_insert(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
return ret;
}
+/**
+ * xe_ggtt_node_init - Initialize %xe_ggtt_node struct
+ * @ggtt: the &xe_ggtt where the new node will later be inserted/reserved.
+ *
+ * This function will allocated the struct %xe_ggtt_node and return it's pointer.
+ * This struct will then be freed after the node removal upon xe_ggtt_node_remove()
+ * or xe_ggtt_node_deballoon().
+ * Having %xe_ggtt_node struct allocated doesn't mean that the node is already allocated
+ * in GGTT. Only the xe_ggtt_node_insert(), xe_ggtt_node_insert_locked(),
+ * xe_ggtt_node_balloon() will ensure the node is inserted or reserved in GGTT.
+ *
+ * Return: A pointer to %xe_ggtt_node struct on success. An ERR_PTR otherwise.
+ **/
+struct xe_ggtt_node *xe_ggtt_node_init(struct xe_ggtt *ggtt)
+{
+ struct xe_ggtt_node *node = kzalloc(sizeof(*node), GFP_KERNEL);
+
+ if (!node)
+ return ERR_PTR(-ENOMEM);
+
+ node->ggtt = ggtt;
+ return node;
+}
+
+/**
+ * xe_ggtt_node_fini - Forcebly finalize %xe_ggtt_node struct
+ * @node: the &xe_ggtt_node to be freed
+ *
+ * If anything went wrong with either xe_ggtt_node_insert(), xe_ggtt_node_insert_locked(),
+ * or xe_ggtt_node_balloon(); and this @node is not going to be reused, then,
+ * this function needs to be called to free the %xe_ggtt_node struct
+ **/
+void xe_ggtt_node_fini(struct xe_ggtt_node *node)
+{
+ kfree(node);
+}
+
/**
* xe_ggtt_node_remove - Remove a &xe_ggtt_node from the GGTT
* @ggtt: the &xe_ggtt where node will be removed
@@ -456,6 +512,9 @@ void xe_ggtt_node_remove(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
bool bound;
int idx;
+ if (!node || !node->ggtt)
+ return;
+
bound = drm_dev_enter(&xe->drm, &idx);
if (bound)
xe_pm_runtime_get_noresume(xe);
@@ -468,23 +527,29 @@ void xe_ggtt_node_remove(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
mutex_unlock(&ggtt->lock);
if (!bound)
- return;
+ goto free_node;
if (invalidate)
xe_ggtt_invalidate(ggtt);
xe_pm_runtime_put(xe);
drm_dev_exit(idx);
+
+free_node:
+ xe_ggtt_node_fini(node);
}
/**
- * xe_ggtt_node_allocated - Check if node is allocated
+ * xe_ggtt_node_allocated - Check if node is allocated in GGTT
* @node: the &xe_ggtt_node to be inspected
*
* Return: True if allocated, False otherwise.
*/
bool xe_ggtt_node_allocated(const struct xe_ggtt_node *node)
{
+ if (!node || !node->ggtt)
+ return false;
+
return drm_mm_node_allocated(&node->base);
}
@@ -497,9 +562,14 @@ void xe_ggtt_map_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
{
u16 cache_mode = bo->flags & XE_BO_FLAG_NEEDS_UC ? XE_CACHE_NONE : XE_CACHE_WB;
u16 pat_index = tile_to_xe(ggtt->tile)->pat.idx[cache_mode];
- u64 start = bo->ggtt_node.base.start;
+ u64 start;
u64 offset, pte;
+ if (XE_WARN_ON(!bo->ggtt_node))
+ return;
+
+ start = bo->ggtt_node->base.start;
+
for (offset = 0; offset < bo->size; offset += XE_PAGE_SIZE) {
pte = ggtt->pt_ops->pte_encode_bo(bo, offset, pat_index);
ggtt->pt_ops->ggtt_set_pte(ggtt, start + offset, pte);
@@ -515,9 +585,9 @@ static int __xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
if (xe_bo_is_vram(bo) && ggtt->flags & XE_GGTT_FLAGS_64K)
alignment = SZ_64K;
- if (XE_WARN_ON(bo->ggtt_node.base.size)) {
+ if (XE_WARN_ON(bo->ggtt_node)) {
/* Someone's already inserted this BO in the GGTT */
- xe_tile_assert(ggtt->tile, bo->ggtt_node.base.size == bo->size);
+ xe_tile_assert(ggtt->tile, bo->ggtt_node->base.size == bo->size);
return 0;
}
@@ -526,15 +596,26 @@ static int __xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
return err;
xe_pm_runtime_get_noresume(tile_to_xe(ggtt->tile));
+
+ bo->ggtt_node = xe_ggtt_node_init(ggtt);
+ if (IS_ERR(bo->ggtt_node)) {
+ err = PTR_ERR(bo->ggtt_node);
+ goto out;
+ }
+
mutex_lock(&ggtt->lock);
- err = drm_mm_insert_node_in_range(&ggtt->mm, &bo->ggtt_node.base, bo->size,
+ err = drm_mm_insert_node_in_range(&ggtt->mm, &bo->ggtt_node->base, bo->size,
alignment, 0, start, end, 0);
- if (!err)
+ if (err)
+ xe_ggtt_node_fini(bo->ggtt_node);
+ else
xe_ggtt_map_bo(ggtt, bo);
mutex_unlock(&ggtt->lock);
if (!err && bo->flags & XE_BO_FLAG_GGTT_INVALIDATE)
xe_ggtt_invalidate(ggtt);
+
+out:
xe_pm_runtime_put(tile_to_xe(ggtt->tile));
return err;
@@ -574,13 +655,13 @@ int xe_ggtt_insert_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
*/
void xe_ggtt_remove_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
{
- if (XE_WARN_ON(!bo->ggtt_node.base.size))
+ if (XE_WARN_ON(!bo->ggtt_node))
return;
/* This BO is not currently in the GGTT */
- xe_tile_assert(ggtt->tile, bo->ggtt_node.base.size == bo->size);
+ xe_tile_assert(ggtt->tile, bo->ggtt_node->base.size == bo->size);
- xe_ggtt_node_remove(ggtt, &bo->ggtt_node,
+ xe_ggtt_node_remove(ggtt, bo->ggtt_node,
bo->flags & XE_BO_FLAG_GGTT_INVALIDATE);
}
diff --git a/drivers/gpu/drm/xe/xe_ggtt.h b/drivers/gpu/drm/xe/xe_ggtt.h
index e68cede2e6b5..0e6f8c396ae1 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.h
+++ b/drivers/gpu/drm/xe/xe_ggtt.h
@@ -13,6 +13,8 @@ struct drm_printer;
int xe_ggtt_init_early(struct xe_ggtt *ggtt);
int xe_ggtt_init(struct xe_ggtt *ggtt);
+struct xe_ggtt_node *xe_ggtt_node_init(struct xe_ggtt *ggtt);
+void xe_ggtt_node_fini(struct xe_ggtt_node *node);
int xe_ggtt_node_balloon(struct xe_ggtt *ggtt, u64 start, u64 size, struct xe_ggtt_node *node);
void xe_ggtt_node_deballoon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node);
diff --git a/drivers/gpu/drm/xe/xe_ggtt_types.h b/drivers/gpu/drm/xe/xe_ggtt_types.h
index af312a7d1031..0e8822ae13fc 100644
--- a/drivers/gpu/drm/xe/xe_ggtt_types.h
+++ b/drivers/gpu/drm/xe/xe_ggtt_types.h
@@ -50,9 +50,15 @@ struct xe_ggtt {
};
/**
- * struct xe_ggtt_node - A node in GGTT
+ * struct xe_ggtt_node - A node in GGTT.
+ *
+ * This struct needs to be initialized (only-once) with xe_ggtt_node_init() before any node
+ * insertion, reservation, or 'ballooning'.
+ * It will, then, be finalized by either xe_ggtt_node_remove() or xe_ggtt_node_deballoon().
*/
struct xe_ggtt_node {
+ /** @ggtt: Back pointer to xe_ggtt where this region will be inserted at */
+ struct xe_ggtt *ggtt;
/** @base: A drm_mm_node */
struct drm_mm_node base;
};
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
index e133594cc6bd..c617cdc1e4db 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
@@ -232,14 +232,14 @@ static u32 encode_config_ggtt(u32 *cfg, const struct xe_gt_sriov_config *config)
{
u32 n = 0;
- if (xe_ggtt_node_allocated(&config->ggtt_region)) {
+ if (xe_ggtt_node_allocated(config->ggtt_region)) {
cfg[n++] = PREP_GUC_KLV_TAG(VF_CFG_GGTT_START);
- cfg[n++] = lower_32_bits(config->ggtt_region.base.start);
- cfg[n++] = upper_32_bits(config->ggtt_region.base.start);
+ cfg[n++] = lower_32_bits(config->ggtt_region->base.start);
+ cfg[n++] = upper_32_bits(config->ggtt_region->base.start);
cfg[n++] = PREP_GUC_KLV_TAG(VF_CFG_GGTT_SIZE);
- cfg[n++] = lower_32_bits(config->ggtt_region.base.size);
- cfg[n++] = upper_32_bits(config->ggtt_region.base.size);
+ cfg[n++] = lower_32_bits(config->ggtt_region->base.size);
+ cfg[n++] = upper_32_bits(config->ggtt_region->base.size);
}
return n;
@@ -385,13 +385,13 @@ static void pf_release_ggtt(struct xe_tile *tile, struct xe_ggtt_node *node)
static void pf_release_vf_config_ggtt(struct xe_gt *gt, struct xe_gt_sriov_config *config)
{
- pf_release_ggtt(gt_to_tile(gt), &config->ggtt_region);
+ pf_release_ggtt(gt_to_tile(gt), config->ggtt_region);
}
static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
{
struct xe_gt_sriov_config *config = pf_pick_vf_config(gt, vfid);
- struct xe_ggtt_node *node = &config->ggtt_region;
+ struct xe_ggtt_node *node = config->ggtt_region;
struct xe_tile *tile = gt_to_tile(gt);
struct xe_ggtt *ggtt = tile->mem.ggtt;
u64 alignment = pf_get_ggtt_alignment(gt);
@@ -415,9 +415,15 @@ static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
if (!size)
return 0;
+ node = xe_ggtt_node_init(ggtt);
+ if (IS_ERR(node))
+ return PTR_ERR(node);
+
err = xe_ggtt_node_insert(ggtt, node, size, alignment);
- if (unlikely(err))
+ if (unlikely(err)) {
+ xe_ggtt_node_fini(node);
return err;
+ }
xe_ggtt_assign(ggtt, node, vfid);
xe_gt_sriov_dbg_verbose(gt, "VF%u assigned GGTT %llx-%llx\n",
@@ -433,7 +439,7 @@ static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
static u64 pf_get_vf_config_ggtt(struct xe_gt *gt, unsigned int vfid)
{
struct xe_gt_sriov_config *config = pf_pick_vf_config(gt, vfid);
- struct xe_ggtt_node *node = &config->ggtt_region;
+ struct xe_ggtt_node *node = config->ggtt_region;
xe_gt_assert(gt, !xe_gt_is_media_type(gt));
return xe_ggtt_node_allocated(node) ? node->base.size : 0;
@@ -2006,13 +2012,15 @@ int xe_gt_sriov_pf_config_print_ggtt(struct xe_gt *gt, struct drm_printer *p)
for (n = 1; n <= total_vfs; n++) {
config = >->sriov.pf.vfs[n].config;
- if (!xe_ggtt_node_allocated(&config->ggtt_region))
+ if (!xe_ggtt_node_allocated(config->ggtt_region))
continue;
- string_get_size(config->ggtt_region.base.size, 1, STRING_UNITS_2, buf, sizeof(buf));
+ string_get_size(config->ggtt_region->base.size, 1, STRING_UNITS_2,
+ buf, sizeof(buf));
drm_printf(p, "VF%u:\t%#0llx-%#llx\t(%s)\n",
- n, config->ggtt_region.base.start,
- config->ggtt_region.base.start + config->ggtt_region.base.size - 1, buf);
+ n, config->ggtt_region->base.start,
+ config->ggtt_region->base.start + config->ggtt_region->base.size - 1,
+ buf);
}
return 0;
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h
index a73d9a4b9e64..2d3b73d78f14 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h
@@ -18,7 +18,7 @@ struct xe_bo;
*/
struct xe_gt_sriov_config {
/** @ggtt_region: GGTT region assigned to the VF. */
- struct xe_ggtt_node ggtt_region;
+ struct xe_ggtt_node *ggtt_region;
/** @lmem_obj: LMEM allocation for use by the VF. */
struct xe_bo *lmem_obj;
/** @num_ctxs: number of GuC contexts IDs. */
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
index 9a1be23ae71d..3d9f6a700564 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
@@ -495,6 +495,22 @@ u64 xe_gt_sriov_vf_lmem(struct xe_gt *gt)
return gt->sriov.vf.self_config.lmem_size;
}
+static int vf_balloon_ggtt_node(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
+ u64 start, u64 end)
+{
+ int err;
+
+ node = xe_ggtt_node_init(ggtt);
+ if (IS_ERR(node))
+ return PTR_ERR(node);
+
+ err = xe_ggtt_node_balloon(ggtt, start, end, node);
+ if (err)
+ xe_ggtt_node_fini(node);
+
+ return err;
+}
+
static int vf_balloon_ggtt(struct xe_gt *gt)
{
struct xe_gt_sriov_vf_selfconfig *config = >->sriov.vf.self_config;
@@ -528,7 +544,7 @@ static int vf_balloon_ggtt(struct xe_gt *gt)
start = xe_wopcm_size(xe);
end = config->ggtt_base;
if (end != start) {
- err = xe_ggtt_node_balloon(ggtt, start, end, &tile->sriov.vf.ggtt_balloon[0]);
+ err = vf_balloon_ggtt_node(ggtt, tile->sriov.vf.ggtt_balloon[0], start, end);
if (err)
goto failed;
}
@@ -536,7 +552,7 @@ static int vf_balloon_ggtt(struct xe_gt *gt)
start = config->ggtt_base + config->ggtt_size;
end = GUC_GGTT_TOP;
if (end != start) {
- err = xe_ggtt_node_balloon(ggtt, start, end, &tile->sriov.vf.ggtt_balloon[1]);
+ err = vf_balloon_ggtt_node(ggtt, tile->sriov.vf.ggtt_balloon[1], start, end);
if (err)
goto deballoon;
}
@@ -544,7 +560,7 @@ static int vf_balloon_ggtt(struct xe_gt *gt)
return 0;
deballoon:
- xe_ggtt_node_deballoon(ggtt, &tile->sriov.vf.ggtt_balloon[0]);
+ xe_ggtt_node_deballoon(ggtt, tile->sriov.vf.ggtt_balloon[0]);
failed:
return err;
}
@@ -555,8 +571,8 @@ static void deballoon_ggtt(struct drm_device *drm, void *arg)
struct xe_ggtt *ggtt = tile->mem.ggtt;
xe_tile_assert(tile, IS_SRIOV_VF(tile_to_xe(tile)));
- xe_ggtt_node_deballoon(ggtt, &tile->sriov.vf.ggtt_balloon[1]);
- xe_ggtt_node_deballoon(ggtt, &tile->sriov.vf.ggtt_balloon[0]);
+ xe_ggtt_node_deballoon(ggtt, tile->sriov.vf.ggtt_balloon[1]);
+ xe_ggtt_node_deballoon(ggtt, tile->sriov.vf.ggtt_balloon[0]);
}
/**
--
2.46.0
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 11/12] drm/xe: Make xe_ggtt_node struct independent
2024-07-11 17:11 [PATCH 01/12] drm/xe: Removed unused xe_ggtt_printk Rodrigo Vivi
@ 2024-07-11 17:11 ` Rodrigo Vivi
2024-07-17 23:50 ` Matthew Brost
0 siblings, 1 reply; 28+ messages in thread
From: Rodrigo Vivi @ 2024-07-11 17:11 UTC (permalink / raw)
To: intel-xe; +Cc: Rodrigo Vivi, Matthew Auld, Michal Wajdeczko, Matthew Brost
In some rare cases, the drm_mm node cannot be removed synchronously
due to runtime PM conditions. In this situation, the node removal will
be delegated to a workqueue that will be able to wake up the device
before removing the node.
However, in this situation, the lifetime of the xe_ggtt_node cannot
be restricted to the lifetime of the parent object. So, this patch
introduces the infrastructure so the xe_ggtt_node struct can be
allocated in advance and freed when needed.
By having the ggtt backpointer, it also ensure that the init function
is always called before any attempt to insert or reserve the node
in the GGTT.
Cc: Matthew Auld <matthew.auld@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
| 4 +-
drivers/gpu/drm/xe/display/xe_fb_pin.c | 36 ++++--
drivers/gpu/drm/xe/xe_bo.c | 2 +-
drivers/gpu/drm/xe/xe_bo.h | 9 +-
drivers/gpu/drm/xe/xe_bo_types.h | 2 +-
drivers/gpu/drm/xe/xe_device_types.h | 2 +-
drivers/gpu/drm/xe/xe_ggtt.c | 103 ++++++++++++++++--
drivers/gpu/drm/xe/xe_ggtt.h | 2 +
drivers/gpu/drm/xe/xe_ggtt_types.h | 8 +-
drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c | 34 +++---
.../gpu/drm/xe/xe_gt_sriov_pf_config_types.h | 2 +-
drivers/gpu/drm/xe/xe_gt_sriov_vf.c | 26 ++++-
12 files changed, 181 insertions(+), 49 deletions(-)
--git a/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h b/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
index 97193e660f6c..ac860414b91f 100644
--- a/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
+++ b/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
@@ -20,7 +20,7 @@ struct xe_bo;
struct i915_vma {
struct xe_bo *bo, *dpt;
- struct xe_ggtt_node node;
+ struct xe_ggtt_node *node;
};
#define i915_ggtt_clear_scanout(bo) do { } while (0)
@@ -29,7 +29,7 @@ struct i915_vma {
static inline u32 i915_ggtt_offset(const struct i915_vma *vma)
{
- return vma->node.base.start;
+ return vma->node->base.start;
}
#endif
diff --git a/drivers/gpu/drm/xe/display/xe_fb_pin.c b/drivers/gpu/drm/xe/display/xe_fb_pin.c
index de4930b67a29..e871957d7565 100644
--- a/drivers/gpu/drm/xe/display/xe_fb_pin.c
+++ b/drivers/gpu/drm/xe/display/xe_fb_pin.c
@@ -204,20 +204,28 @@ static int __xe_pin_fb_vma_ggtt(const struct intel_framebuffer *fb,
if (xe_bo_is_vram(bo) && ggtt->flags & XE_GGTT_FLAGS_64K)
align = max_t(u32, align, SZ_64K);
- if (bo->ggtt_node.base.size && view->type == I915_GTT_VIEW_NORMAL) {
+ if (bo->ggtt_node && view->type == I915_GTT_VIEW_NORMAL) {
vma->node = bo->ggtt_node;
} else if (view->type == I915_GTT_VIEW_NORMAL) {
u32 x, size = bo->ttm.base.size;
- ret = xe_ggtt_node_insert_locked(ggtt, &vma->node, size, align, 0);
- if (ret)
+ vma->node = xe_ggtt_node_init(ggtt);
+ if (IS_ERR(vma->node)) {
+ ret = PTR_ERR(vma->node);
goto out_unlock;
+ }
+
+ ret = xe_ggtt_node_insert_locked(ggtt, vma->node, size, align, 0);
+ if (ret) {
+ xe_ggtt_node_force_fini(vma->node);
+ goto out_unlock;
+ }
for (x = 0; x < size; x += XE_PAGE_SIZE) {
u64 pte = ggtt->pt_ops->pte_encode_bo(bo, x,
xe->pat.idx[XE_CACHE_NONE]);
- ggtt->pt_ops->ggtt_set_pte(ggtt, vma->node.base.start + x, pte);
+ ggtt->pt_ops->ggtt_set_pte(ggtt, vma->node->base.start + x, pte);
}
} else {
u32 i, ggtt_ofs;
@@ -226,11 +234,19 @@ static int __xe_pin_fb_vma_ggtt(const struct intel_framebuffer *fb,
/* display seems to use tiles instead of bytes here, so convert it back.. */
u32 size = intel_rotation_info_size(rot_info) * XE_PAGE_SIZE;
- ret = xe_ggtt_node_insert_locked(ggtt, &vma->node, size, align, 0);
- if (ret)
+ vma->node = xe_ggtt_node_init(ggtt);
+ if (IS_ERR(vma->node)) {
+ ret = PTR_ERR(vma->node);
goto out_unlock;
+ }
+
+ ret = xe_ggtt_node_insert_locked(ggtt, vma->node, size, align, 0);
+ if (ret) {
+ xe_ggtt_node_force_fini(vma->node);
+ goto out_unlock;
+ }
- ggtt_ofs = vma->node.base.start;
+ ggtt_ofs = vma->node->base.start;
for (i = 0; i < ARRAY_SIZE(rot_info->plane); i++)
write_ggtt_rotated(bo, ggtt, &ggtt_ofs,
@@ -323,9 +339,9 @@ static void __xe_unpin_fb_vma(struct i915_vma *vma)
if (vma->dpt)
xe_bo_unpin_map_no_vm(vma->dpt);
- else if (!xe_ggtt_node_allocated(&vma->bo->ggtt_node) ||
- vma->bo->ggtt_node.base.start != vma->node.base.start)
- xe_ggtt_node_remove(ggtt, &vma->node, false);
+ else if (!xe_ggtt_node_allocated(vma->bo->ggtt_node) ||
+ vma->bo->ggtt_node->base.start != vma->node->base.start)
+ xe_ggtt_node_remove(ggtt, vma->node, false);
ttm_bo_reserve(&vma->bo->ttm, false, false, NULL);
ttm_bo_unpin(&vma->bo->ttm);
diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index 3501a5871069..7e277ac0cd8d 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -1090,7 +1090,7 @@ static void xe_ttm_bo_destroy(struct ttm_buffer_object *ttm_bo)
xe_assert(xe, list_empty(&ttm_bo->base.gpuva.list));
- if (bo->ggtt_node.base.size)
+ if (bo->ggtt_node)
xe_ggtt_remove_bo(bo->tile->mem.ggtt, bo);
#ifdef CONFIG_PROC_FS
diff --git a/drivers/gpu/drm/xe/xe_bo.h b/drivers/gpu/drm/xe/xe_bo.h
index 7c95133cc32b..c8a90e5bbd6b 100644
--- a/drivers/gpu/drm/xe/xe_bo.h
+++ b/drivers/gpu/drm/xe/xe_bo.h
@@ -194,9 +194,12 @@ xe_bo_main_addr(struct xe_bo *bo, size_t page_size)
static inline u32
xe_bo_ggtt_addr(struct xe_bo *bo)
{
- XE_WARN_ON(bo->ggtt_node.base.size > bo->size);
- XE_WARN_ON(bo->ggtt_node.base.start + bo->ggtt_node.base.size > (1ull << 32));
- return bo->ggtt_node.base.start;
+ if (XE_WARN_ON(!bo->ggtt_node))
+ return -ENOENT;
+
+ XE_WARN_ON(bo->ggtt_node->base.size > bo->size);
+ XE_WARN_ON(bo->ggtt_node->base.start + bo->ggtt_node->base.size > (1ull << 32));
+ return bo->ggtt_node->base.start;
}
int xe_bo_vmap(struct xe_bo *bo);
diff --git a/drivers/gpu/drm/xe/xe_bo_types.h b/drivers/gpu/drm/xe/xe_bo_types.h
index 3ba96a93623c..0ec6172cc8ba 100644
--- a/drivers/gpu/drm/xe/xe_bo_types.h
+++ b/drivers/gpu/drm/xe/xe_bo_types.h
@@ -40,7 +40,7 @@ struct xe_bo {
/** @placement: current placement for this BO */
struct ttm_placement placement;
/** @ggtt_node: GGTT node if this BO is mapped in the GGTT */
- struct xe_ggtt_node ggtt_node;
+ struct xe_ggtt_node *ggtt_node;
/** @vmap: iosys map of this buffer */
struct iosys_map vmap;
/** @ttm_kmap: TTM bo kmap object for internal use only. Keep off. */
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index 30f9c58932bb..706872711ebf 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -203,7 +203,7 @@ struct xe_tile {
struct xe_memirq memirq;
/** @sriov.vf.ggtt_balloon: GGTT regions excluded from use. */
- struct xe_ggtt_node ggtt_balloon[2];
+ struct xe_ggtt_node *ggtt_balloon[2];
} vf;
} sriov;
diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
index 928c01f9e212..fe0bfd8c26cd 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.c
+++ b/drivers/gpu/drm/xe/xe_ggtt.c
@@ -353,6 +353,7 @@ static void xe_ggtt_dump_node(struct xe_ggtt *ggtt,
* @end: then end GGTT address of the reserved region
* @node: the &xe_ggtt_node to hold reserved GGTT node
*
+ * It cannot be called without first having called xe_ggtt_init().
* Use xe_ggtt_node_deballoon() to release a reserved GGTT node.
*
* Return: 0 on success or a negative error code on failure.
@@ -361,6 +362,9 @@ int xe_ggtt_node_balloon(struct xe_ggtt *ggtt, u64 start, u64 end, struct xe_ggt
{
int err;
+ if (!node || !node->ggtt)
+ return -ENOENT;
+
xe_tile_assert(ggtt->tile, start < end);
xe_tile_assert(ggtt->tile, IS_ALIGNED(start, XE_PAGE_SIZE));
xe_tile_assert(ggtt->tile, IS_ALIGNED(end, XE_PAGE_SIZE));
@@ -392,14 +396,20 @@ int xe_ggtt_node_balloon(struct xe_ggtt *ggtt, u64 start, u64 end, struct xe_ggt
*/
void xe_ggtt_node_deballoon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node)
{
- if (!drm_mm_node_allocated(&node->base))
+ if (!node || !node->ggtt)
return;
+ if (!drm_mm_node_allocated(&node->base))
+ goto free_node;
+
xe_ggtt_dump_node(ggtt, &node->base, "deballoon");
mutex_lock(&ggtt->lock);
drm_mm_remove_node(&node->base);
mutex_unlock(&ggtt->lock);
+
+free_node:
+ kfree(node);
}
/**
@@ -410,6 +420,7 @@ void xe_ggtt_node_deballoon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node)
* @align: alignment constrain of the node
* @mm_flags: flags to control the node behavior
*
+ * It cannot be called without first having called xe_ggtt_init() once.
* To be used in cases where ggtt->lock is already taken.
*
* Return: 0 on success or a negative error code on failure.
@@ -417,6 +428,9 @@ void xe_ggtt_node_deballoon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node)
int xe_ggtt_node_insert_locked(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
u32 size, u32 align, u32 mm_flags)
{
+ if (!node || !node->ggtt)
+ return -ENOENT;
+
return drm_mm_insert_node_generic(&ggtt->mm, &node->base, size, align, 0,
mm_flags);
}
@@ -428,6 +442,8 @@ int xe_ggtt_node_insert_locked(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
* @size: size of the node
* @align: alignment constrain of the node
*
+ * It cannot be called without first having called xe_ggtt_init() once.
+ *
* Return: 0 on success or a negative error code on failure.
*/
int xe_ggtt_node_insert(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
@@ -435,6 +451,9 @@ int xe_ggtt_node_insert(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
{
int ret;
+ if (!node || !node->ggtt)
+ return -ENOENT;
+
mutex_lock(&ggtt->lock);
ret = xe_ggtt_node_insert_locked(ggtt, node, size,
align, DRM_MM_INSERT_HIGH);
@@ -443,6 +462,43 @@ int xe_ggtt_node_insert(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
return ret;
}
+/**
+ * xe_ggtt_node_init - Initialize %xe_ggtt_node struct
+ * @ggtt: the &xe_ggtt where the new node will later be inserted/reserved.
+ *
+ * This function will allocated the struct %xe_ggtt_node and return it's pointer.
+ * This struct will then be freed after the node removal upon xe_ggtt_node_remove()
+ * or xe_ggtt_node_deballoon().
+ * Having %xe_ggtt_node struct allocated doesn't mean that the node is already allocated
+ * in GGTT. Only the xe_ggtt_node_insert(), xe_ggtt_node_insert_locked(),
+ * xe_ggtt_node_balloon() will ensure the node is inserted or reserved in GGTT.
+ *
+ * Return: A pointer to %xe_ggtt_node struct on success. An ERR_PTR otherwise.
+ **/
+struct xe_ggtt_node *xe_ggtt_node_init(struct xe_ggtt *ggtt)
+{
+ struct xe_ggtt_node *node = kzalloc(sizeof(*node), GFP_KERNEL);
+
+ if (!node)
+ return ERR_PTR(-ENOMEM);
+
+ node->ggtt = ggtt;
+ return node;
+}
+
+/**
+ * xe_ggtt_node_force_fini - Forcebly finalize %xe_ggtt_node struct
+ * @node: the &xe_ggtt_node to be freed
+ *
+ * If anything went wrong with either xe_ggtt_node_insert(), xe_ggtt_node_insert_locked(),
+ * or xe_ggtt_node_balloon(); and this @node is not going to be reused, then,
+ * this function needs to be called to free the %xe_ggtt_node struct
+ **/
+void xe_ggtt_node_force_fini(struct xe_ggtt_node *node)
+{
+ kfree(node);
+}
+
/**
* xe_ggtt_node_remove - Remove a &xe_ggtt_node from the GGTT
* @ggtt: the &xe_ggtt where node will be removed
@@ -456,6 +512,9 @@ void xe_ggtt_node_remove(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
bool bound;
int idx;
+ if (!node || !node->ggtt)
+ return;
+
bound = drm_dev_enter(&xe->drm, &idx);
if (bound)
xe_pm_runtime_get_noresume(xe);
@@ -468,23 +527,29 @@ void xe_ggtt_node_remove(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
mutex_unlock(&ggtt->lock);
if (!bound)
- return;
+ goto free_node;
if (invalidate)
xe_ggtt_invalidate(ggtt);
xe_pm_runtime_put(xe);
drm_dev_exit(idx);
+
+free_node:
+ kfree(node);
}
/**
- * xe_ggtt_node_allocated - Check if node is allocated
+ * xe_ggtt_node_allocated - Check if node is allocated in GGTT
* @node: the &xe_ggtt_node to be inspected
*
* Return: True if allocated, False otherwise.
*/
bool xe_ggtt_node_allocated(const struct xe_ggtt_node *node)
{
+ if (!node || !node->ggtt)
+ return false;
+
return drm_mm_node_allocated(&node->base);
}
@@ -497,9 +562,14 @@ void xe_ggtt_map_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
{
u16 cache_mode = bo->flags & XE_BO_FLAG_NEEDS_UC ? XE_CACHE_NONE : XE_CACHE_WB;
u16 pat_index = tile_to_xe(ggtt->tile)->pat.idx[cache_mode];
- u64 start = bo->ggtt_node.base.start;
+ u64 start;
u64 offset, pte;
+ if (XE_WARN_ON(!bo->ggtt_node))
+ return;
+
+ start = bo->ggtt_node->base.start;
+
for (offset = 0; offset < bo->size; offset += XE_PAGE_SIZE) {
pte = ggtt->pt_ops->pte_encode_bo(bo, offset, pat_index);
ggtt->pt_ops->ggtt_set_pte(ggtt, start + offset, pte);
@@ -515,9 +585,9 @@ static int __xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
if (xe_bo_is_vram(bo) && ggtt->flags & XE_GGTT_FLAGS_64K)
alignment = SZ_64K;
- if (XE_WARN_ON(bo->ggtt_node.base.size)) {
+ if (XE_WARN_ON(bo->ggtt_node)) {
/* Someone's already inserted this BO in the GGTT */
- xe_tile_assert(ggtt->tile, bo->ggtt_node.base.size == bo->size);
+ xe_tile_assert(ggtt->tile, bo->ggtt_node->base.size == bo->size);
return 0;
}
@@ -526,15 +596,26 @@ static int __xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
return err;
xe_pm_runtime_get_noresume(tile_to_xe(ggtt->tile));
+
+ bo->ggtt_node = xe_ggtt_node_init(ggtt);
+ if (IS_ERR(bo->ggtt_node)) {
+ err = PTR_ERR(bo->ggtt_node);
+ goto out;
+ }
+
mutex_lock(&ggtt->lock);
- err = drm_mm_insert_node_in_range(&ggtt->mm, &bo->ggtt_node.base, bo->size,
+ err = drm_mm_insert_node_in_range(&ggtt->mm, &bo->ggtt_node->base, bo->size,
alignment, 0, start, end, 0);
- if (!err)
+ if (err)
+ xe_ggtt_node_force_fini(bo->ggtt_node);
+ else
xe_ggtt_map_bo(ggtt, bo);
mutex_unlock(&ggtt->lock);
if (!err && bo->flags & XE_BO_FLAG_GGTT_INVALIDATE)
xe_ggtt_invalidate(ggtt);
+
+out:
xe_pm_runtime_put(tile_to_xe(ggtt->tile));
return err;
@@ -574,13 +655,13 @@ int xe_ggtt_insert_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
*/
void xe_ggtt_remove_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
{
- if (XE_WARN_ON(!bo->ggtt_node.base.size))
+ if (XE_WARN_ON(!bo->ggtt_node))
return;
/* This BO is not currently in the GGTT */
- xe_tile_assert(ggtt->tile, bo->ggtt_node.base.size == bo->size);
+ xe_tile_assert(ggtt->tile, bo->ggtt_node->base.size == bo->size);
- xe_ggtt_node_remove(ggtt, &bo->ggtt_node,
+ xe_ggtt_node_remove(ggtt, bo->ggtt_node,
bo->flags & XE_BO_FLAG_GGTT_INVALIDATE);
}
diff --git a/drivers/gpu/drm/xe/xe_ggtt.h b/drivers/gpu/drm/xe/xe_ggtt.h
index e68cede2e6b5..9ca0a3da8903 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.h
+++ b/drivers/gpu/drm/xe/xe_ggtt.h
@@ -13,6 +13,8 @@ struct drm_printer;
int xe_ggtt_init_early(struct xe_ggtt *ggtt);
int xe_ggtt_init(struct xe_ggtt *ggtt);
+struct xe_ggtt_node *xe_ggtt_node_init(struct xe_ggtt *ggtt);
+void xe_ggtt_node_force_fini(struct xe_ggtt_node *node);
int xe_ggtt_node_balloon(struct xe_ggtt *ggtt, u64 start, u64 size, struct xe_ggtt_node *node);
void xe_ggtt_node_deballoon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node);
diff --git a/drivers/gpu/drm/xe/xe_ggtt_types.h b/drivers/gpu/drm/xe/xe_ggtt_types.h
index f3292e6c3873..60cbce3170d1 100644
--- a/drivers/gpu/drm/xe/xe_ggtt_types.h
+++ b/drivers/gpu/drm/xe/xe_ggtt_types.h
@@ -48,9 +48,15 @@ struct xe_ggtt {
};
/**
- * struct xe_ggtt_node - A node in GGTT
+ * struct xe_ggtt_node - A node in GGTT.
+ *
+ * This struct needs to be initialized (only-once) with xe_ggtt_node_init() before any node
+ * insertion, reservation, or 'ballooning'.
+ * It will, then, be finalized by either xe_ggtt_node_remove() or xe_ggtt_node_deballoon().
*/
struct xe_ggtt_node {
+ /** @ggtt: Back pointer to xe_ggtt where this region will be inserted at */
+ struct xe_ggtt *ggtt;
/** @base: A drm_mm_node */
struct drm_mm_node base;
};
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
index d0995680f53f..ac292351483c 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
@@ -232,14 +232,14 @@ static u32 encode_config_ggtt(u32 *cfg, const struct xe_gt_sriov_config *config)
{
u32 n = 0;
- if (xe_ggtt_node_allocated(&config->ggtt_region)) {
+ if (xe_ggtt_node_allocated(config->ggtt_region)) {
cfg[n++] = PREP_GUC_KLV_TAG(VF_CFG_GGTT_START);
- cfg[n++] = lower_32_bits(config->ggtt_region.base.start);
- cfg[n++] = upper_32_bits(config->ggtt_region.base.start);
+ cfg[n++] = lower_32_bits(config->ggtt_region->base.start);
+ cfg[n++] = upper_32_bits(config->ggtt_region->base.start);
cfg[n++] = PREP_GUC_KLV_TAG(VF_CFG_GGTT_SIZE);
- cfg[n++] = lower_32_bits(config->ggtt_region.base.size);
- cfg[n++] = upper_32_bits(config->ggtt_region.base.size);
+ cfg[n++] = lower_32_bits(config->ggtt_region->base.size);
+ cfg[n++] = upper_32_bits(config->ggtt_region->base.size);
}
return n;
@@ -385,13 +385,13 @@ static void pf_release_ggtt(struct xe_tile *tile, struct xe_ggtt_node *node)
static void pf_release_vf_config_ggtt(struct xe_gt *gt, struct xe_gt_sriov_config *config)
{
- pf_release_ggtt(gt_to_tile(gt), &config->ggtt_region);
+ pf_release_ggtt(gt_to_tile(gt), config->ggtt_region);
}
static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
{
struct xe_gt_sriov_config *config = pf_pick_vf_config(gt, vfid);
- struct xe_ggtt_node *node = &config->ggtt_region;
+ struct xe_ggtt_node *node = config->ggtt_region;
struct xe_tile *tile = gt_to_tile(gt);
struct xe_ggtt *ggtt = tile->mem.ggtt;
u64 alignment = pf_get_ggtt_alignment(gt);
@@ -415,9 +415,15 @@ static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
if (!size)
return 0;
+ node = xe_ggtt_node_init(ggtt);
+ if (IS_ERR(node))
+ return PTR_ERR(node);
+
err = xe_ggtt_node_insert(ggtt, node, size, alignment);
- if (unlikely(err))
+ if (unlikely(err)) {
+ xe_ggtt_node_force_fini(node);
return err;
+ }
xe_ggtt_assign(ggtt, node, vfid);
xe_gt_sriov_dbg_verbose(gt, "VF%u assigned GGTT %llx-%llx\n",
@@ -433,7 +439,7 @@ static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
static u64 pf_get_vf_config_ggtt(struct xe_gt *gt, unsigned int vfid)
{
struct xe_gt_sriov_config *config = pf_pick_vf_config(gt, vfid);
- struct xe_ggtt_node *node = &config->ggtt_region;
+ struct xe_ggtt_node *node = config->ggtt_region;
xe_gt_assert(gt, !xe_gt_is_media_type(gt));
return xe_ggtt_node_allocated(node) ? node->base.size : 0;
@@ -1999,13 +2005,15 @@ int xe_gt_sriov_pf_config_print_ggtt(struct xe_gt *gt, struct drm_printer *p)
for (n = 1; n <= total_vfs; n++) {
config = >->sriov.pf.vfs[n].config;
- if (!xe_ggtt_node_allocated(&config->ggtt_region))
+ if (!xe_ggtt_node_allocated(config->ggtt_region))
continue;
- string_get_size(config->ggtt_region.base.size, 1, STRING_UNITS_2, buf, sizeof(buf));
+ string_get_size(config->ggtt_region->base.size, 1, STRING_UNITS_2,
+ buf, sizeof(buf));
drm_printf(p, "VF%u:\t%#0llx-%#llx\t(%s)\n",
- n, config->ggtt_region.base.start,
- config->ggtt_region.base.start + config->ggtt_region.base.size - 1, buf);
+ n, config->ggtt_region->base.start,
+ config->ggtt_region->base.start + config->ggtt_region->base.size - 1,
+ buf);
}
return 0;
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h
index 6d0d9299bafa..44dc0a6e90d1 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h
@@ -19,7 +19,7 @@ struct xe_bo;
*/
struct xe_gt_sriov_config {
/** @ggtt_region: GGTT region assigned to the VF. */
- struct xe_ggtt_node ggtt_region;
+ struct xe_ggtt_node *ggtt_region;
/** @lmem_obj: LMEM allocation for use by the VF. */
struct xe_bo *lmem_obj;
/** @num_ctxs: number of GuC contexts IDs. */
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
index a478e6e1b20e..5c540e20c785 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
@@ -495,6 +495,22 @@ u64 xe_gt_sriov_vf_lmem(struct xe_gt *gt)
return gt->sriov.vf.self_config.lmem_size;
}
+static int vf_balloon_ggtt_node(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
+ u64 start, u64 end)
+{
+ int err;
+
+ node = xe_ggtt_node_init(ggtt);
+ if (IS_ERR(node))
+ return PTR_ERR(node);
+
+ err = xe_ggtt_node_balloon(ggtt, start, end, node);
+ if (err)
+ xe_ggtt_node_force_fini(node);
+
+ return err;
+}
+
static int vf_balloon_ggtt(struct xe_gt *gt)
{
struct xe_gt_sriov_vf_selfconfig *config = >->sriov.vf.self_config;
@@ -528,7 +544,7 @@ static int vf_balloon_ggtt(struct xe_gt *gt)
start = xe_wopcm_size(xe);
end = config->ggtt_base;
if (end != start) {
- err = xe_ggtt_node_balloon(ggtt, start, end, &tile->sriov.vf.ggtt_balloon[0]);
+ err = vf_balloon_ggtt_node(ggtt, tile->sriov.vf.ggtt_balloon[0], start, end);
if (err)
goto failed;
}
@@ -536,7 +552,7 @@ static int vf_balloon_ggtt(struct xe_gt *gt)
start = config->ggtt_base + config->ggtt_size;
end = GUC_GGTT_TOP;
if (end != start) {
- err = xe_ggtt_node_balloon(ggtt, start, end, &tile->sriov.vf.ggtt_balloon[1]);
+ err = vf_balloon_ggtt_node(ggtt, tile->sriov.vf.ggtt_balloon[1], start, end);
if (err)
goto deballoon;
}
@@ -544,7 +560,7 @@ static int vf_balloon_ggtt(struct xe_gt *gt)
return 0;
deballoon:
- xe_ggtt_node_deballoon(ggtt, &tile->sriov.vf.ggtt_balloon[0]);
+ xe_ggtt_node_deballoon(ggtt, tile->sriov.vf.ggtt_balloon[0]);
failed:
return err;
}
@@ -555,8 +571,8 @@ static void deballoon_ggtt(struct drm_device *drm, void *arg)
struct xe_ggtt *ggtt = tile->mem.ggtt;
xe_tile_assert(tile, IS_SRIOV_VF(tile_to_xe(tile)));
- xe_ggtt_node_deballoon(ggtt, &tile->sriov.vf.ggtt_balloon[1]);
- xe_ggtt_node_deballoon(ggtt, &tile->sriov.vf.ggtt_balloon[0]);
+ xe_ggtt_node_deballoon(ggtt, tile->sriov.vf.ggtt_balloon[1]);
+ xe_ggtt_node_deballoon(ggtt, tile->sriov.vf.ggtt_balloon[0]);
}
/**
--
2.45.2
^ permalink raw reply related [flat|nested] 28+ messages in thread* Re: [PATCH 11/12] drm/xe: Make xe_ggtt_node struct independent
2024-07-11 17:11 ` [PATCH 11/12] drm/xe: Make xe_ggtt_node struct independent Rodrigo Vivi
@ 2024-07-17 23:50 ` Matthew Brost
0 siblings, 0 replies; 28+ messages in thread
From: Matthew Brost @ 2024-07-17 23:50 UTC (permalink / raw)
To: Rodrigo Vivi; +Cc: intel-xe, Matthew Auld, Michal Wajdeczko
On Thu, Jul 11, 2024 at 01:11:54PM -0400, Rodrigo Vivi wrote:
> In some rare cases, the drm_mm node cannot be removed synchronously
> due to runtime PM conditions. In this situation, the node removal will
> be delegated to a workqueue that will be able to wake up the device
> before removing the node.
>
> However, in this situation, the lifetime of the xe_ggtt_node cannot
> be restricted to the lifetime of the parent object. So, this patch
> introduces the infrastructure so the xe_ggtt_node struct can be
> allocated in advance and freed when needed.
>
> By having the ggtt backpointer, it also ensure that the init function
> is always called before any attempt to insert or reserve the node
> in the GGTT.
>
A couple of nits below, but...
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
> Cc: Matthew Auld <matthew.auld@intel.com>
> Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
> Cc: Matthew Brost <matthew.brost@intel.com>
> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> ---
> .../gpu/drm/xe/compat-i915-headers/i915_vma.h | 4 +-
> drivers/gpu/drm/xe/display/xe_fb_pin.c | 36 ++++--
> drivers/gpu/drm/xe/xe_bo.c | 2 +-
> drivers/gpu/drm/xe/xe_bo.h | 9 +-
> drivers/gpu/drm/xe/xe_bo_types.h | 2 +-
> drivers/gpu/drm/xe/xe_device_types.h | 2 +-
> drivers/gpu/drm/xe/xe_ggtt.c | 103 ++++++++++++++++--
> drivers/gpu/drm/xe/xe_ggtt.h | 2 +
> drivers/gpu/drm/xe/xe_ggtt_types.h | 8 +-
> drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c | 34 +++---
> .../gpu/drm/xe/xe_gt_sriov_pf_config_types.h | 2 +-
> drivers/gpu/drm/xe/xe_gt_sriov_vf.c | 26 ++++-
> 12 files changed, 181 insertions(+), 49 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h b/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
> index 97193e660f6c..ac860414b91f 100644
> --- a/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
> +++ b/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
> @@ -20,7 +20,7 @@ struct xe_bo;
>
> struct i915_vma {
> struct xe_bo *bo, *dpt;
> - struct xe_ggtt_node node;
> + struct xe_ggtt_node *node;
> };
>
> #define i915_ggtt_clear_scanout(bo) do { } while (0)
> @@ -29,7 +29,7 @@ struct i915_vma {
>
> static inline u32 i915_ggtt_offset(const struct i915_vma *vma)
> {
> - return vma->node.base.start;
> + return vma->node->base.start;
> }
>
> #endif
> diff --git a/drivers/gpu/drm/xe/display/xe_fb_pin.c b/drivers/gpu/drm/xe/display/xe_fb_pin.c
> index de4930b67a29..e871957d7565 100644
> --- a/drivers/gpu/drm/xe/display/xe_fb_pin.c
> +++ b/drivers/gpu/drm/xe/display/xe_fb_pin.c
> @@ -204,20 +204,28 @@ static int __xe_pin_fb_vma_ggtt(const struct intel_framebuffer *fb,
> if (xe_bo_is_vram(bo) && ggtt->flags & XE_GGTT_FLAGS_64K)
> align = max_t(u32, align, SZ_64K);
>
> - if (bo->ggtt_node.base.size && view->type == I915_GTT_VIEW_NORMAL) {
> + if (bo->ggtt_node && view->type == I915_GTT_VIEW_NORMAL) {
> vma->node = bo->ggtt_node;
> } else if (view->type == I915_GTT_VIEW_NORMAL) {
> u32 x, size = bo->ttm.base.size;
>
> - ret = xe_ggtt_node_insert_locked(ggtt, &vma->node, size, align, 0);
> - if (ret)
> + vma->node = xe_ggtt_node_init(ggtt);
> + if (IS_ERR(vma->node)) {
> + ret = PTR_ERR(vma->node);
> goto out_unlock;
> + }
> +
> + ret = xe_ggtt_node_insert_locked(ggtt, vma->node, size, align, 0);
> + if (ret) {
> + xe_ggtt_node_force_fini(vma->node);
> + goto out_unlock;
> + }
>
> for (x = 0; x < size; x += XE_PAGE_SIZE) {
> u64 pte = ggtt->pt_ops->pte_encode_bo(bo, x,
> xe->pat.idx[XE_CACHE_NONE]);
>
> - ggtt->pt_ops->ggtt_set_pte(ggtt, vma->node.base.start + x, pte);
> + ggtt->pt_ops->ggtt_set_pte(ggtt, vma->node->base.start + x, pte);
> }
> } else {
> u32 i, ggtt_ofs;
> @@ -226,11 +234,19 @@ static int __xe_pin_fb_vma_ggtt(const struct intel_framebuffer *fb,
> /* display seems to use tiles instead of bytes here, so convert it back.. */
> u32 size = intel_rotation_info_size(rot_info) * XE_PAGE_SIZE;
>
> - ret = xe_ggtt_node_insert_locked(ggtt, &vma->node, size, align, 0);
> - if (ret)
> + vma->node = xe_ggtt_node_init(ggtt);
> + if (IS_ERR(vma->node)) {
> + ret = PTR_ERR(vma->node);
> goto out_unlock;
> + }
> +
> + ret = xe_ggtt_node_insert_locked(ggtt, vma->node, size, align, 0);
> + if (ret) {
> + xe_ggtt_node_force_fini(vma->node);
> + goto out_unlock;
> + }
>
> - ggtt_ofs = vma->node.base.start;
> + ggtt_ofs = vma->node->base.start;
>
> for (i = 0; i < ARRAY_SIZE(rot_info->plane); i++)
> write_ggtt_rotated(bo, ggtt, &ggtt_ofs,
> @@ -323,9 +339,9 @@ static void __xe_unpin_fb_vma(struct i915_vma *vma)
>
> if (vma->dpt)
> xe_bo_unpin_map_no_vm(vma->dpt);
> - else if (!xe_ggtt_node_allocated(&vma->bo->ggtt_node) ||
> - vma->bo->ggtt_node.base.start != vma->node.base.start)
> - xe_ggtt_node_remove(ggtt, &vma->node, false);
> + else if (!xe_ggtt_node_allocated(vma->bo->ggtt_node) ||
> + vma->bo->ggtt_node->base.start != vma->node->base.start)
> + xe_ggtt_node_remove(ggtt, vma->node, false);
>
> ttm_bo_reserve(&vma->bo->ttm, false, false, NULL);
> ttm_bo_unpin(&vma->bo->ttm);
> diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
> index 3501a5871069..7e277ac0cd8d 100644
> --- a/drivers/gpu/drm/xe/xe_bo.c
> +++ b/drivers/gpu/drm/xe/xe_bo.c
> @@ -1090,7 +1090,7 @@ static void xe_ttm_bo_destroy(struct ttm_buffer_object *ttm_bo)
>
> xe_assert(xe, list_empty(&ttm_bo->base.gpuva.list));
>
> - if (bo->ggtt_node.base.size)
> + if (bo->ggtt_node)
> xe_ggtt_remove_bo(bo->tile->mem.ggtt, bo);
>
> #ifdef CONFIG_PROC_FS
> diff --git a/drivers/gpu/drm/xe/xe_bo.h b/drivers/gpu/drm/xe/xe_bo.h
> index 7c95133cc32b..c8a90e5bbd6b 100644
> --- a/drivers/gpu/drm/xe/xe_bo.h
> +++ b/drivers/gpu/drm/xe/xe_bo.h
> @@ -194,9 +194,12 @@ xe_bo_main_addr(struct xe_bo *bo, size_t page_size)
> static inline u32
> xe_bo_ggtt_addr(struct xe_bo *bo)
> {
> - XE_WARN_ON(bo->ggtt_node.base.size > bo->size);
> - XE_WARN_ON(bo->ggtt_node.base.start + bo->ggtt_node.base.size > (1ull << 32));
> - return bo->ggtt_node.base.start;
> + if (XE_WARN_ON(!bo->ggtt_node))
> + return -ENOENT;
> +
> + XE_WARN_ON(bo->ggtt_node->base.size > bo->size);
> + XE_WARN_ON(bo->ggtt_node->base.start + bo->ggtt_node->base.size > (1ull << 32));
> + return bo->ggtt_node->base.start;
> }
>
> int xe_bo_vmap(struct xe_bo *bo);
> diff --git a/drivers/gpu/drm/xe/xe_bo_types.h b/drivers/gpu/drm/xe/xe_bo_types.h
> index 3ba96a93623c..0ec6172cc8ba 100644
> --- a/drivers/gpu/drm/xe/xe_bo_types.h
> +++ b/drivers/gpu/drm/xe/xe_bo_types.h
> @@ -40,7 +40,7 @@ struct xe_bo {
> /** @placement: current placement for this BO */
> struct ttm_placement placement;
> /** @ggtt_node: GGTT node if this BO is mapped in the GGTT */
> - struct xe_ggtt_node ggtt_node;
> + struct xe_ggtt_node *ggtt_node;
> /** @vmap: iosys map of this buffer */
> struct iosys_map vmap;
> /** @ttm_kmap: TTM bo kmap object for internal use only. Keep off. */
> diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
> index 30f9c58932bb..706872711ebf 100644
> --- a/drivers/gpu/drm/xe/xe_device_types.h
> +++ b/drivers/gpu/drm/xe/xe_device_types.h
> @@ -203,7 +203,7 @@ struct xe_tile {
> struct xe_memirq memirq;
>
> /** @sriov.vf.ggtt_balloon: GGTT regions excluded from use. */
> - struct xe_ggtt_node ggtt_balloon[2];
> + struct xe_ggtt_node *ggtt_balloon[2];
> } vf;
> } sriov;
>
> diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
> index 928c01f9e212..fe0bfd8c26cd 100644
> --- a/drivers/gpu/drm/xe/xe_ggtt.c
> +++ b/drivers/gpu/drm/xe/xe_ggtt.c
> @@ -353,6 +353,7 @@ static void xe_ggtt_dump_node(struct xe_ggtt *ggtt,
> * @end: then end GGTT address of the reserved region
> * @node: the &xe_ggtt_node to hold reserved GGTT node
> *
> + * It cannot be called without first having called xe_ggtt_init().
> * Use xe_ggtt_node_deballoon() to release a reserved GGTT node.
> *
> * Return: 0 on success or a negative error code on failure.
> @@ -361,6 +362,9 @@ int xe_ggtt_node_balloon(struct xe_ggtt *ggtt, u64 start, u64 end, struct xe_ggt
> {
> int err;
>
> + if (!node || !node->ggtt)
> + return -ENOENT;
> +
> xe_tile_assert(ggtt->tile, start < end);
> xe_tile_assert(ggtt->tile, IS_ALIGNED(start, XE_PAGE_SIZE));
> xe_tile_assert(ggtt->tile, IS_ALIGNED(end, XE_PAGE_SIZE));
> @@ -392,14 +396,20 @@ int xe_ggtt_node_balloon(struct xe_ggtt *ggtt, u64 start, u64 end, struct xe_ggt
> */
> void xe_ggtt_node_deballoon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node)
> {
> - if (!drm_mm_node_allocated(&node->base))
> + if (!node || !node->ggtt)
> return;
>
> + if (!drm_mm_node_allocated(&node->base))
> + goto free_node;
> +
> xe_ggtt_dump_node(ggtt, &node->base, "deballoon");
>
> mutex_lock(&ggtt->lock);
> drm_mm_remove_node(&node->base);
> mutex_unlock(&ggtt->lock);
> +
> +free_node:
> + kfree(node);
xe_ggtt_node_fini
Matt
> }
>
> /**
> @@ -410,6 +420,7 @@ void xe_ggtt_node_deballoon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node)
> * @align: alignment constrain of the node
> * @mm_flags: flags to control the node behavior
> *
> + * It cannot be called without first having called xe_ggtt_init() once.
> * To be used in cases where ggtt->lock is already taken.
> *
> * Return: 0 on success or a negative error code on failure.
> @@ -417,6 +428,9 @@ void xe_ggtt_node_deballoon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node)
> int xe_ggtt_node_insert_locked(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
> u32 size, u32 align, u32 mm_flags)
> {
> + if (!node || !node->ggtt)
> + return -ENOENT;
> +
> return drm_mm_insert_node_generic(&ggtt->mm, &node->base, size, align, 0,
> mm_flags);
> }
> @@ -428,6 +442,8 @@ int xe_ggtt_node_insert_locked(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
> * @size: size of the node
> * @align: alignment constrain of the node
> *
> + * It cannot be called without first having called xe_ggtt_init() once.
> + *
> * Return: 0 on success or a negative error code on failure.
> */
> int xe_ggtt_node_insert(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
> @@ -435,6 +451,9 @@ int xe_ggtt_node_insert(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
> {
> int ret;
>
> + if (!node || !node->ggtt)
> + return -ENOENT;
> +
> mutex_lock(&ggtt->lock);
> ret = xe_ggtt_node_insert_locked(ggtt, node, size,
> align, DRM_MM_INSERT_HIGH);
> @@ -443,6 +462,43 @@ int xe_ggtt_node_insert(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
> return ret;
> }
>
> +/**
> + * xe_ggtt_node_init - Initialize %xe_ggtt_node struct
> + * @ggtt: the &xe_ggtt where the new node will later be inserted/reserved.
> + *
> + * This function will allocated the struct %xe_ggtt_node and return it's pointer.
> + * This struct will then be freed after the node removal upon xe_ggtt_node_remove()
> + * or xe_ggtt_node_deballoon().
> + * Having %xe_ggtt_node struct allocated doesn't mean that the node is already allocated
> + * in GGTT. Only the xe_ggtt_node_insert(), xe_ggtt_node_insert_locked(),
> + * xe_ggtt_node_balloon() will ensure the node is inserted or reserved in GGTT.
> + *
> + * Return: A pointer to %xe_ggtt_node struct on success. An ERR_PTR otherwise.
> + **/
> +struct xe_ggtt_node *xe_ggtt_node_init(struct xe_ggtt *ggtt)
> +{
> + struct xe_ggtt_node *node = kzalloc(sizeof(*node), GFP_KERNEL);
> +
> + if (!node)
> + return ERR_PTR(-ENOMEM);
> +
> + node->ggtt = ggtt;
> + return node;
> +}
> +
> +/**
> + * xe_ggtt_node_force_fini - Forcebly finalize %xe_ggtt_node struct
> + * @node: the &xe_ggtt_node to be freed
> + *
> + * If anything went wrong with either xe_ggtt_node_insert(), xe_ggtt_node_insert_locked(),
> + * or xe_ggtt_node_balloon(); and this @node is not going to be reused, then,
> + * this function needs to be called to free the %xe_ggtt_node struct
> + **/
> +void xe_ggtt_node_force_fini(struct xe_ggtt_node *node)
s/xe_ggtt_node_force_fini/xe_ggtt_node_fini
> +{
> + kfree(node);
> +}
> +
> /**
> * xe_ggtt_node_remove - Remove a &xe_ggtt_node from the GGTT
> * @ggtt: the &xe_ggtt where node will be removed
> @@ -456,6 +512,9 @@ void xe_ggtt_node_remove(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
> bool bound;
> int idx;
>
> + if (!node || !node->ggtt)
> + return;
> +
> bound = drm_dev_enter(&xe->drm, &idx);
> if (bound)
> xe_pm_runtime_get_noresume(xe);
> @@ -468,23 +527,29 @@ void xe_ggtt_node_remove(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
> mutex_unlock(&ggtt->lock);
>
> if (!bound)
> - return;
> + goto free_node;
>
> if (invalidate)
> xe_ggtt_invalidate(ggtt);
>
> xe_pm_runtime_put(xe);
> drm_dev_exit(idx);
> +
> +free_node:
> + kfree(node);
xe_ggtt_node_fini
> }
>
> /**
> - * xe_ggtt_node_allocated - Check if node is allocated
> + * xe_ggtt_node_allocated - Check if node is allocated in GGTT
> * @node: the &xe_ggtt_node to be inspected
> *
> * Return: True if allocated, False otherwise.
> */
> bool xe_ggtt_node_allocated(const struct xe_ggtt_node *node)
> {
> + if (!node || !node->ggtt)
> + return false;
> +
> return drm_mm_node_allocated(&node->base);
> }
>
> @@ -497,9 +562,14 @@ void xe_ggtt_map_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
> {
> u16 cache_mode = bo->flags & XE_BO_FLAG_NEEDS_UC ? XE_CACHE_NONE : XE_CACHE_WB;
> u16 pat_index = tile_to_xe(ggtt->tile)->pat.idx[cache_mode];
> - u64 start = bo->ggtt_node.base.start;
> + u64 start;
> u64 offset, pte;
>
> + if (XE_WARN_ON(!bo->ggtt_node))
> + return;
> +
> + start = bo->ggtt_node->base.start;
> +
> for (offset = 0; offset < bo->size; offset += XE_PAGE_SIZE) {
> pte = ggtt->pt_ops->pte_encode_bo(bo, offset, pat_index);
> ggtt->pt_ops->ggtt_set_pte(ggtt, start + offset, pte);
> @@ -515,9 +585,9 @@ static int __xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
> if (xe_bo_is_vram(bo) && ggtt->flags & XE_GGTT_FLAGS_64K)
> alignment = SZ_64K;
>
> - if (XE_WARN_ON(bo->ggtt_node.base.size)) {
> + if (XE_WARN_ON(bo->ggtt_node)) {
> /* Someone's already inserted this BO in the GGTT */
> - xe_tile_assert(ggtt->tile, bo->ggtt_node.base.size == bo->size);
> + xe_tile_assert(ggtt->tile, bo->ggtt_node->base.size == bo->size);
> return 0;
> }
>
> @@ -526,15 +596,26 @@ static int __xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
> return err;
>
> xe_pm_runtime_get_noresume(tile_to_xe(ggtt->tile));
> +
> + bo->ggtt_node = xe_ggtt_node_init(ggtt);
> + if (IS_ERR(bo->ggtt_node)) {
> + err = PTR_ERR(bo->ggtt_node);
> + goto out;
> + }
> +
> mutex_lock(&ggtt->lock);
> - err = drm_mm_insert_node_in_range(&ggtt->mm, &bo->ggtt_node.base, bo->size,
> + err = drm_mm_insert_node_in_range(&ggtt->mm, &bo->ggtt_node->base, bo->size,
> alignment, 0, start, end, 0);
> - if (!err)
> + if (err)
> + xe_ggtt_node_force_fini(bo->ggtt_node);
> + else
> xe_ggtt_map_bo(ggtt, bo);
> mutex_unlock(&ggtt->lock);
>
> if (!err && bo->flags & XE_BO_FLAG_GGTT_INVALIDATE)
> xe_ggtt_invalidate(ggtt);
> +
> +out:
> xe_pm_runtime_put(tile_to_xe(ggtt->tile));
>
> return err;
> @@ -574,13 +655,13 @@ int xe_ggtt_insert_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
> */
> void xe_ggtt_remove_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
> {
> - if (XE_WARN_ON(!bo->ggtt_node.base.size))
> + if (XE_WARN_ON(!bo->ggtt_node))
> return;
>
> /* This BO is not currently in the GGTT */
> - xe_tile_assert(ggtt->tile, bo->ggtt_node.base.size == bo->size);
> + xe_tile_assert(ggtt->tile, bo->ggtt_node->base.size == bo->size);
>
> - xe_ggtt_node_remove(ggtt, &bo->ggtt_node,
> + xe_ggtt_node_remove(ggtt, bo->ggtt_node,
> bo->flags & XE_BO_FLAG_GGTT_INVALIDATE);
> }
>
> diff --git a/drivers/gpu/drm/xe/xe_ggtt.h b/drivers/gpu/drm/xe/xe_ggtt.h
> index e68cede2e6b5..9ca0a3da8903 100644
> --- a/drivers/gpu/drm/xe/xe_ggtt.h
> +++ b/drivers/gpu/drm/xe/xe_ggtt.h
> @@ -13,6 +13,8 @@ struct drm_printer;
> int xe_ggtt_init_early(struct xe_ggtt *ggtt);
> int xe_ggtt_init(struct xe_ggtt *ggtt);
>
> +struct xe_ggtt_node *xe_ggtt_node_init(struct xe_ggtt *ggtt);
> +void xe_ggtt_node_force_fini(struct xe_ggtt_node *node);
> int xe_ggtt_node_balloon(struct xe_ggtt *ggtt, u64 start, u64 size, struct xe_ggtt_node *node);
> void xe_ggtt_node_deballoon(struct xe_ggtt *ggtt, struct xe_ggtt_node *node);
>
> diff --git a/drivers/gpu/drm/xe/xe_ggtt_types.h b/drivers/gpu/drm/xe/xe_ggtt_types.h
> index f3292e6c3873..60cbce3170d1 100644
> --- a/drivers/gpu/drm/xe/xe_ggtt_types.h
> +++ b/drivers/gpu/drm/xe/xe_ggtt_types.h
> @@ -48,9 +48,15 @@ struct xe_ggtt {
> };
>
> /**
> - * struct xe_ggtt_node - A node in GGTT
> + * struct xe_ggtt_node - A node in GGTT.
> + *
> + * This struct needs to be initialized (only-once) with xe_ggtt_node_init() before any node
> + * insertion, reservation, or 'ballooning'.
> + * It will, then, be finalized by either xe_ggtt_node_remove() or xe_ggtt_node_deballoon().
> */
> struct xe_ggtt_node {
> + /** @ggtt: Back pointer to xe_ggtt where this region will be inserted at */
> + struct xe_ggtt *ggtt;
> /** @base: A drm_mm_node */
> struct drm_mm_node base;
> };
> diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
> index d0995680f53f..ac292351483c 100644
> --- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
> +++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
> @@ -232,14 +232,14 @@ static u32 encode_config_ggtt(u32 *cfg, const struct xe_gt_sriov_config *config)
> {
> u32 n = 0;
>
> - if (xe_ggtt_node_allocated(&config->ggtt_region)) {
> + if (xe_ggtt_node_allocated(config->ggtt_region)) {
> cfg[n++] = PREP_GUC_KLV_TAG(VF_CFG_GGTT_START);
> - cfg[n++] = lower_32_bits(config->ggtt_region.base.start);
> - cfg[n++] = upper_32_bits(config->ggtt_region.base.start);
> + cfg[n++] = lower_32_bits(config->ggtt_region->base.start);
> + cfg[n++] = upper_32_bits(config->ggtt_region->base.start);
>
> cfg[n++] = PREP_GUC_KLV_TAG(VF_CFG_GGTT_SIZE);
> - cfg[n++] = lower_32_bits(config->ggtt_region.base.size);
> - cfg[n++] = upper_32_bits(config->ggtt_region.base.size);
> + cfg[n++] = lower_32_bits(config->ggtt_region->base.size);
> + cfg[n++] = upper_32_bits(config->ggtt_region->base.size);
> }
>
> return n;
> @@ -385,13 +385,13 @@ static void pf_release_ggtt(struct xe_tile *tile, struct xe_ggtt_node *node)
>
> static void pf_release_vf_config_ggtt(struct xe_gt *gt, struct xe_gt_sriov_config *config)
> {
> - pf_release_ggtt(gt_to_tile(gt), &config->ggtt_region);
> + pf_release_ggtt(gt_to_tile(gt), config->ggtt_region);
> }
>
> static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
> {
> struct xe_gt_sriov_config *config = pf_pick_vf_config(gt, vfid);
> - struct xe_ggtt_node *node = &config->ggtt_region;
> + struct xe_ggtt_node *node = config->ggtt_region;
> struct xe_tile *tile = gt_to_tile(gt);
> struct xe_ggtt *ggtt = tile->mem.ggtt;
> u64 alignment = pf_get_ggtt_alignment(gt);
> @@ -415,9 +415,15 @@ static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
> if (!size)
> return 0;
>
> + node = xe_ggtt_node_init(ggtt);
> + if (IS_ERR(node))
> + return PTR_ERR(node);
> +
> err = xe_ggtt_node_insert(ggtt, node, size, alignment);
> - if (unlikely(err))
> + if (unlikely(err)) {
> + xe_ggtt_node_force_fini(node);
> return err;
> + }
>
> xe_ggtt_assign(ggtt, node, vfid);
> xe_gt_sriov_dbg_verbose(gt, "VF%u assigned GGTT %llx-%llx\n",
> @@ -433,7 +439,7 @@ static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
> static u64 pf_get_vf_config_ggtt(struct xe_gt *gt, unsigned int vfid)
> {
> struct xe_gt_sriov_config *config = pf_pick_vf_config(gt, vfid);
> - struct xe_ggtt_node *node = &config->ggtt_region;
> + struct xe_ggtt_node *node = config->ggtt_region;
>
> xe_gt_assert(gt, !xe_gt_is_media_type(gt));
> return xe_ggtt_node_allocated(node) ? node->base.size : 0;
> @@ -1999,13 +2005,15 @@ int xe_gt_sriov_pf_config_print_ggtt(struct xe_gt *gt, struct drm_printer *p)
>
> for (n = 1; n <= total_vfs; n++) {
> config = >->sriov.pf.vfs[n].config;
> - if (!xe_ggtt_node_allocated(&config->ggtt_region))
> + if (!xe_ggtt_node_allocated(config->ggtt_region))
> continue;
>
> - string_get_size(config->ggtt_region.base.size, 1, STRING_UNITS_2, buf, sizeof(buf));
> + string_get_size(config->ggtt_region->base.size, 1, STRING_UNITS_2,
> + buf, sizeof(buf));
> drm_printf(p, "VF%u:\t%#0llx-%#llx\t(%s)\n",
> - n, config->ggtt_region.base.start,
> - config->ggtt_region.base.start + config->ggtt_region.base.size - 1, buf);
> + n, config->ggtt_region->base.start,
> + config->ggtt_region->base.start + config->ggtt_region->base.size - 1,
> + buf);
> }
>
> return 0;
> diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h
> index 6d0d9299bafa..44dc0a6e90d1 100644
> --- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h
> +++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config_types.h
> @@ -19,7 +19,7 @@ struct xe_bo;
> */
> struct xe_gt_sriov_config {
> /** @ggtt_region: GGTT region assigned to the VF. */
> - struct xe_ggtt_node ggtt_region;
> + struct xe_ggtt_node *ggtt_region;
> /** @lmem_obj: LMEM allocation for use by the VF. */
> struct xe_bo *lmem_obj;
> /** @num_ctxs: number of GuC contexts IDs. */
> diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
> index a478e6e1b20e..5c540e20c785 100644
> --- a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
> +++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
> @@ -495,6 +495,22 @@ u64 xe_gt_sriov_vf_lmem(struct xe_gt *gt)
> return gt->sriov.vf.self_config.lmem_size;
> }
>
> +static int vf_balloon_ggtt_node(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
> + u64 start, u64 end)
> +{
> + int err;
> +
> + node = xe_ggtt_node_init(ggtt);
> + if (IS_ERR(node))
> + return PTR_ERR(node);
> +
> + err = xe_ggtt_node_balloon(ggtt, start, end, node);
> + if (err)
> + xe_ggtt_node_force_fini(node);
> +
> + return err;
> +}
> +
> static int vf_balloon_ggtt(struct xe_gt *gt)
> {
> struct xe_gt_sriov_vf_selfconfig *config = >->sriov.vf.self_config;
> @@ -528,7 +544,7 @@ static int vf_balloon_ggtt(struct xe_gt *gt)
> start = xe_wopcm_size(xe);
> end = config->ggtt_base;
> if (end != start) {
> - err = xe_ggtt_node_balloon(ggtt, start, end, &tile->sriov.vf.ggtt_balloon[0]);
> + err = vf_balloon_ggtt_node(ggtt, tile->sriov.vf.ggtt_balloon[0], start, end);
> if (err)
> goto failed;
> }
> @@ -536,7 +552,7 @@ static int vf_balloon_ggtt(struct xe_gt *gt)
> start = config->ggtt_base + config->ggtt_size;
> end = GUC_GGTT_TOP;
> if (end != start) {
> - err = xe_ggtt_node_balloon(ggtt, start, end, &tile->sriov.vf.ggtt_balloon[1]);
> + err = vf_balloon_ggtt_node(ggtt, tile->sriov.vf.ggtt_balloon[1], start, end);
> if (err)
> goto deballoon;
> }
> @@ -544,7 +560,7 @@ static int vf_balloon_ggtt(struct xe_gt *gt)
> return 0;
>
> deballoon:
> - xe_ggtt_node_deballoon(ggtt, &tile->sriov.vf.ggtt_balloon[0]);
> + xe_ggtt_node_deballoon(ggtt, tile->sriov.vf.ggtt_balloon[0]);
> failed:
> return err;
> }
> @@ -555,8 +571,8 @@ static void deballoon_ggtt(struct drm_device *drm, void *arg)
> struct xe_ggtt *ggtt = tile->mem.ggtt;
>
> xe_tile_assert(tile, IS_SRIOV_VF(tile_to_xe(tile)));
> - xe_ggtt_node_deballoon(ggtt, &tile->sriov.vf.ggtt_balloon[1]);
> - xe_ggtt_node_deballoon(ggtt, &tile->sriov.vf.ggtt_balloon[0]);
> + xe_ggtt_node_deballoon(ggtt, tile->sriov.vf.ggtt_balloon[1]);
> + xe_ggtt_node_deballoon(ggtt, tile->sriov.vf.ggtt_balloon[0]);
> }
>
> /**
> --
> 2.45.2
>
^ permalink raw reply [flat|nested] 28+ messages in thread