diff options
author | Piotr Piórkowski <piotr.piorkowski@intel.com> | 2025-07-14 20:48:17 +0200 |
---|---|---|
committer | Lucas De Marchi <lucas.demarchi@intel.com> | 2025-07-16 12:12:49 -0700 |
commit | d65ff1ec85355959e4ca452fba458687e4da583a (patch) | |
tree | 8a41f8e2fe224ab1d85a660b15a7db7477c7ff3e | |
parent | 7a20b4f558f4291161f71a5b7384262db9ccd6b0 (diff) |
drm/xe: Split xe_migrate allocation from initialization
Currently, xe_migrate_init handled both allocation and initialization,
Lets moves allocation to xe_tile_alloc via a new xe_migrate_alloc
function, and keep initialization in xe_migrate_init.
This will allow the migration pointers to be passed to other structures
before full initialization.
Also replaces devm_kzalloc with drmm_kzalloc for better
DRM-managed memory.
Signed-off-by: Piotr Piórkowski <piotr.piorkowski@intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Link: https://lore.kernel.org/r/20250714184818.89201-5-piotr.piorkowski@intel.com
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
-rw-r--r-- | drivers/gpu/drm/xe/xe_migrate.c | 25 | ||||
-rw-r--r-- | drivers/gpu/drm/xe/xe_migrate.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/xe/xe_tile.c | 4 |
3 files changed, 23 insertions, 7 deletions
diff --git a/drivers/gpu/drm/xe/xe_migrate.c b/drivers/gpu/drm/xe/xe_migrate.c index d6186ac530cb..6a80ae6104dd 100644 --- a/drivers/gpu/drm/xe/xe_migrate.c +++ b/drivers/gpu/drm/xe/xe_migrate.c @@ -390,6 +390,23 @@ static bool xe_migrate_needs_ccs_emit(struct xe_device *xe) } /** + * xe_migrate_alloc - Allocate a migrate struct for a given &xe_tile + * @tile: &xe_tile + * + * Allocates a &xe_migrate for a given tile. + * + * Return: &xe_migrate on success, or NULL when out of memory. + */ +struct xe_migrate *xe_migrate_alloc(struct xe_tile *tile) +{ + struct xe_migrate *m = drmm_kzalloc(&tile_to_xe(tile)->drm, sizeof(*m), GFP_KERNEL); + + if (m) + m->tile = tile; + return m; +} + +/** * xe_migrate_init() - Initialize a migrate context * @tile: Back-pointer to the tile we're initializing for. * @@ -399,16 +416,10 @@ struct xe_migrate *xe_migrate_init(struct xe_tile *tile) { struct xe_device *xe = tile_to_xe(tile); struct xe_gt *primary_gt = tile->primary_gt; - struct xe_migrate *m; + struct xe_migrate *m = tile->migrate; struct xe_vm *vm; int err; - m = devm_kzalloc(xe->drm.dev, sizeof(*m), GFP_KERNEL); - if (!m) - return ERR_PTR(-ENOMEM); - - m->tile = tile; - /* Special layout, prepared below.. */ vm = xe_vm_create(xe, XE_VM_FLAG_MIGRATION | XE_VM_FLAG_SET_TILE_ID(tile)); diff --git a/drivers/gpu/drm/xe/xe_migrate.h b/drivers/gpu/drm/xe/xe_migrate.h index fb9839c1bae0..74c60f55004a 100644 --- a/drivers/gpu/drm/xe/xe_migrate.h +++ b/drivers/gpu/drm/xe/xe_migrate.h @@ -93,6 +93,7 @@ struct xe_migrate_pt_update { u8 tile_id; }; +struct xe_migrate *xe_migrate_alloc(struct xe_tile *tile); struct xe_migrate *xe_migrate_init(struct xe_tile *tile); struct dma_fence *xe_migrate_to_vram(struct xe_migrate *m, diff --git a/drivers/gpu/drm/xe/xe_tile.c b/drivers/gpu/drm/xe/xe_tile.c index bd2ff91a7d1c..171de6a4ba95 100644 --- a/drivers/gpu/drm/xe/xe_tile.c +++ b/drivers/gpu/drm/xe/xe_tile.c @@ -94,6 +94,10 @@ static int xe_tile_alloc(struct xe_tile *tile) if (!tile->mem.ggtt) return -ENOMEM; + tile->migrate = xe_migrate_alloc(tile); + if (!tile->migrate) + return -ENOMEM; + return 0; } |