]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/xe: Move VRAM manager to struct xe_vram_region
authorPiotr Piórkowski <piotr.piorkowski@intel.com>
Mon, 10 Feb 2025 08:15:11 +0000 (09:15 +0100)
committerMichal Wajdeczko <michal.wajdeczko@intel.com>
Mon, 10 Feb 2025 12:08:59 +0000 (13:08 +0100)
VRAM manager is related directly to struct xe_vram_region so it
should be inside this structure.
Let's move the VRAM to struct xe_vram_region.

v2:
 - remove xe_vram_region pointer from xe_ttm_vram_mgr
 - stop use dynamic alloaction for xe_ttm_vram_mgr in xe_vram_region
 - rename struct xe_ttm_vram_mgr vram_mgr to ttm
v3:
 - fix "'ttm' not described in 'xe_vram_region'"

Signed-off-by: Piotr Piórkowski <piotr.piorkowski@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250210081511.906452-3-piotr.piorkowski@intel.com
drivers/gpu/drm/xe/xe_bo.c
drivers/gpu/drm/xe/xe_device_types.h
drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
drivers/gpu/drm/xe/xe_tile.c
drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h

index a202d552582252d6b7628001bc7c698989628bd1..78d09c5ed26d1fb1dad31006e4c6c0fcce6d43a1 100644 (file)
@@ -147,10 +147,13 @@ static struct xe_vram_region *res_to_mem_region(struct ttm_resource *res)
 {
        struct xe_device *xe = ttm_to_xe_device(res->bo->bdev);
        struct ttm_resource_manager *mgr;
+       struct xe_ttm_vram_mgr *vram_mgr;
 
        xe_assert(xe, resource_is_vram(res));
        mgr = ttm_manager_type(&xe->ttm, res->mem_type);
-       return to_xe_ttm_vram_mgr(mgr)->vram;
+       vram_mgr = to_xe_ttm_vram_mgr(mgr);
+
+       return container_of(vram_mgr, struct xe_vram_region, ttm);
 }
 
 static void try_add_system(struct xe_device *xe, struct xe_bo *bo,
@@ -179,12 +182,15 @@ static void add_vram(struct xe_device *xe, struct xe_bo *bo,
                     struct ttm_place *places, u32 bo_flags, u32 mem_type, u32 *c)
 {
        struct ttm_place place = { .mem_type = mem_type };
+       struct ttm_resource_manager *mgr = ttm_manager_type(&xe->ttm, mem_type);
+       struct xe_ttm_vram_mgr *vram_mgr = to_xe_ttm_vram_mgr(mgr);
+
        struct xe_vram_region *vram;
        u64 io_size;
 
        xe_assert(xe, *c < ARRAY_SIZE(bo->placements));
 
-       vram = to_xe_ttm_vram_mgr(ttm_manager_type(&xe->ttm, mem_type))->vram;
+       vram = container_of(vram_mgr, struct xe_vram_region, ttm);
        xe_assert(xe, vram && vram->usable_size);
        io_size = vram->io_size;
 
index 1f27ed2c0448c39386b7d319ba3f396828561a6c..28d10a1d7b649014ef279502030c77b6a2afd3ea 100644 (file)
@@ -23,6 +23,7 @@
 #include "xe_sriov_types.h"
 #include "xe_step_types.h"
 #include "xe_survivability_mode_types.h"
+#include "xe_ttm_vram_mgr_types.h"
 
 #if IS_ENABLED(CONFIG_DRM_XE_DEBUG)
 #define TEST_VM_OPS_ERROR
@@ -105,6 +106,8 @@ struct xe_vram_region {
        resource_size_t actual_physical_size;
        /** @mapping: pointer to VRAM mappable space */
        void __iomem *mapping;
+       /** @ttm: VRAM TTM manager */
+       struct xe_ttm_vram_mgr ttm;
 };
 
 /**
@@ -199,9 +202,6 @@ struct xe_tile {
                 */
                struct xe_vram_region vram;
 
-               /** @mem.vram_mgr: VRAM TTM manager */
-               struct xe_ttm_vram_mgr *vram_mgr;
-
                /** @mem.ggtt: Global graphics translation table */
                struct xe_ggtt *ggtt;
 
index 5c3e9e5bd05191bc9cd9207650e9765610379600..88bd9d97ba5ca80b937b96e50eac49e6e622a8e3 100644 (file)
@@ -1564,7 +1564,7 @@ static u64 pf_query_free_lmem(struct xe_gt *gt)
 {
        struct xe_tile *tile = gt->tile;
 
-       return xe_ttm_vram_get_avail(&tile->mem.vram_mgr->manager);
+       return xe_ttm_vram_get_avail(&tile->mem.vram.ttm.manager);
 }
 
 static u64 pf_query_max_lmem(struct xe_gt *gt)
index 2825553b568f7e63c3dd4121f9c98000d617acf0..d9a7a04ff652fb52e41c5f58a21167f2d7e67a71 100644 (file)
@@ -94,10 +94,6 @@ static int xe_tile_alloc(struct xe_tile *tile)
                return -ENOMEM;
        tile->mem.ggtt->tile = tile;
 
-       tile->mem.vram_mgr = drmm_kzalloc(drm, sizeof(*tile->mem.vram_mgr), GFP_KERNEL);
-       if (!tile->mem.vram_mgr)
-               return -ENOMEM;
-
        return 0;
 }
 
@@ -139,7 +135,7 @@ static int tile_ttm_mgr_init(struct xe_tile *tile)
        int err;
 
        if (tile->mem.vram.usable_size) {
-               err = xe_ttm_vram_mgr_init(tile, tile->mem.vram_mgr);
+               err = xe_ttm_vram_mgr_init(tile, &tile->mem.vram.ttm);
                if (err)
                        return err;
                xe->info.mem_region_mask |= BIT(tile->id) << 1;
index a8c37fb4fec089ab4cca89a0dbbfc6d77a4b60fd..9e375a40aee90a07a51eeb8362837fd0c787e7e8 100644 (file)
@@ -342,7 +342,6 @@ int xe_ttm_vram_mgr_init(struct xe_tile *tile, struct xe_ttm_vram_mgr *mgr)
        struct xe_device *xe = tile_to_xe(tile);
        struct xe_vram_region *vram = &tile->mem.vram;
 
-       mgr->vram = vram;
        return __xe_ttm_vram_mgr_init(xe, mgr, XE_PL_VRAM0 + tile->id,
                                      vram->usable_size, vram->io_size,
                                      PAGE_SIZE);
index 4c52ced4ee44726697527dc2b45f957cc7779e53..1144f9232ebbba96efd7ed878171cbe57a891482 100644 (file)
@@ -9,8 +9,6 @@
 #include <drm/drm_buddy.h>
 #include <drm/ttm/ttm_device.h>
 
-struct xe_vram_region;
-
 /**
  * struct xe_ttm_vram_mgr - XE TTM VRAM manager
  *
@@ -21,8 +19,6 @@ struct xe_ttm_vram_mgr {
        struct ttm_resource_manager manager;
        /** @mm: DRM buddy allocator which manages the VRAM */
        struct drm_buddy mm;
-       /** @vram: ptr to details of associated VRAM region */
-       struct xe_vram_region *vram;
        /** @visible_size: Proped size of the CPU visible portion */
        u64 visible_size;
        /** @visible_avail: CPU visible portion still unallocated */