Skip to content

Commit c818b26

Browse files
author
Maarten Lankhorst
committed
drm/xe: Add xe_ggtt_node_addr() to avoid dereferencing xe_ggtt_node
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
1 parent 004311a commit c818b26

3 files changed

Lines changed: 18 additions & 3 deletions

File tree

drivers/gpu/drm/xe/xe_bo.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include <drm/ttm/ttm_tt.h>
1010

1111
#include "xe_bo_types.h"
12+
#include "xe_ggtt.h"
1213
#include "xe_macros.h"
1314
#include "xe_validation.h"
1415
#include "xe_vm_types.h"
@@ -252,13 +253,14 @@ static inline u32
252253
__xe_bo_ggtt_addr(struct xe_bo *bo, u8 tile_id)
253254
{
254255
struct xe_ggtt_node *ggtt_node = bo->ggtt_node[tile_id];
256+
u64 offset;
255257

256258
if (XE_WARN_ON(!ggtt_node))
257259
return 0;
258260

259-
XE_WARN_ON(ggtt_node->base.size > xe_bo_size(bo));
260-
XE_WARN_ON(ggtt_node->base.start + ggtt_node->base.size > (1ull << 32));
261-
return ggtt_node->base.start;
261+
offset = xe_ggtt_node_addr(ggtt_node);
262+
XE_WARN_ON(offset + xe_bo_size(bo) > (1ull << 32));
263+
return offset;
262264
}
263265

264266
static inline u32

drivers/gpu/drm/xe/xe_ggtt.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1185,3 +1185,14 @@ u64 xe_ggtt_read_pte(struct xe_ggtt *ggtt, u64 offset)
11851185
{
11861186
return ioread64(ggtt->gsm + (offset / XE_PAGE_SIZE));
11871187
}
1188+
1189+
/**
1190+
* xe_ggtt_node_addr - Get @node offset in GGTT.
1191+
* @node: &xe_ggtt_node
1192+
*
1193+
* Get the GGTT offset for allocated node.
1194+
*/
1195+
u64 xe_ggtt_node_addr(const struct xe_ggtt_node *node)
1196+
{
1197+
return node->base.start;
1198+
}

drivers/gpu/drm/xe/xe_ggtt.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,4 +61,6 @@ void xe_ggtt_might_lock(struct xe_ggtt *ggtt);
6161
u64 xe_ggtt_encode_pte_flags(struct xe_ggtt *ggtt, struct xe_bo *bo, u16 pat_index);
6262
u64 xe_ggtt_read_pte(struct xe_ggtt *ggtt, u64 offset);
6363

64+
u64 xe_ggtt_node_addr(const struct xe_ggtt_node *node);
65+
6466
#endif

0 commit comments

Comments
 (0)