]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/xe: Add xe_ggtt_node_addr() to avoid dereferencing xe_ggtt_node
authorMaarten Lankhorst <dev@lankhorst.se>
Thu, 8 Jan 2026 10:10:18 +0000 (11:10 +0100)
committerMaarten Lankhorst <dev@lankhorst.se>
Mon, 12 Jan 2026 15:28:34 +0000 (16:28 +0100)
This function makes it possible to add an offset that is applied to
all xe_ggtt_node's, and hides the internals from all its users.

Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Link: https://patch.msgid.link/20260108101014.579906-12-dev@lankhorst.se
drivers/gpu/drm/xe/xe_bo.h
drivers/gpu/drm/xe/xe_ggtt.c
drivers/gpu/drm/xe/xe_ggtt.h

index 8ab4474129c3d7c28b464348e8d119565c5d120e..c914ab719f20ee05b1fd4a54daeac13126f1c468 100644 (file)
@@ -9,6 +9,7 @@
 #include <drm/ttm/ttm_tt.h>
 
 #include "xe_bo_types.h"
+#include "xe_ggtt.h"
 #include "xe_macros.h"
 #include "xe_validation.h"
 #include "xe_vm_types.h"
@@ -252,13 +253,14 @@ static inline u32
 __xe_bo_ggtt_addr(struct xe_bo *bo, u8 tile_id)
 {
        struct xe_ggtt_node *ggtt_node = bo->ggtt_node[tile_id];
+       u64 offset;
 
        if (XE_WARN_ON(!ggtt_node))
                return 0;
 
-       XE_WARN_ON(ggtt_node->base.size > xe_bo_size(bo));
-       XE_WARN_ON(ggtt_node->base.start + ggtt_node->base.size > (1ull << 32));
-       return ggtt_node->base.start;
+       offset = xe_ggtt_node_addr(ggtt_node);
+       XE_WARN_ON(offset + xe_bo_size(bo) > (1ull << 32));
+       return offset;
 }
 
 static inline u32
index 2bd386b0f7b9782472b39502c357355684380e0d..37c1ccca23bf4ee0646a06e739387faf16f8c046 100644 (file)
@@ -1185,3 +1185,14 @@ u64 xe_ggtt_read_pte(struct xe_ggtt *ggtt, u64 offset)
 {
        return ioread64(ggtt->gsm + (offset / XE_PAGE_SIZE));
 }
+
+/**
+ * xe_ggtt_node_addr - Get @node offset in GGTT.
+ * @node: &xe_ggtt_node
+ *
+ * Get the GGTT offset for allocated node.
+ */
+u64 xe_ggtt_node_addr(const struct xe_ggtt_node *node)
+{
+       return node->base.start;
+}
index 9adfc58edf581834df1953e413e4291b4bc413fb..76336a6296c45ed071e795497a4fbd501ec8e6e6 100644 (file)
@@ -61,4 +61,6 @@ void xe_ggtt_might_lock(struct xe_ggtt *ggtt);
 u64 xe_ggtt_encode_pte_flags(struct xe_ggtt *ggtt, struct xe_bo *bo, u16 pat_index);
 u64 xe_ggtt_read_pte(struct xe_ggtt *ggtt, u64 offset);
 
+u64 xe_ggtt_node_addr(const struct xe_ggtt_node *node);
+
 #endif