mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 10:04:04 +02:00
drm/xe/bo: add GPU memory trace points
Add TRACE_GPU_MEM tracepoints for tracking global GPU memory usage. These are required by VSR on Android 12+ for reporting GPU driver memory allocations. v5: - Drop process_mem tracking - Set the gpu_id field to dev->primary->index (Lucas, Tvrtko) - Formatting cleanup under 80 columns v3: - Use now configurable CONFIG_TRACE_GPU_MEM instead of adding a per-driver Kconfig (Lucas) v2: - Use u64 as preferred by checkpatch (Tvrtko) - Fix errors in comments/Kconfig description (Tvrtko) - drop redundant "CONFIG" in Kconfig Signed-off-by: Juston Li <justonli@chromium.org> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com> Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com> Link: https://lore.kernel.org/r/20250709192313.479336-2-lucas.demarchi@intel.com Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
This commit is contained in:
parent
f5c5d29522
commit
ce3d39fae3
|
|
@ -19,6 +19,8 @@
|
||||||
|
|
||||||
#include <kunit/static_stub.h>
|
#include <kunit/static_stub.h>
|
||||||
|
|
||||||
|
#include <trace/events/gpu_mem.h>
|
||||||
|
|
||||||
#include "xe_device.h"
|
#include "xe_device.h"
|
||||||
#include "xe_dma_buf.h"
|
#include "xe_dma_buf.h"
|
||||||
#include "xe_drm_client.h"
|
#include "xe_drm_client.h"
|
||||||
|
|
@ -418,6 +420,19 @@ static void xe_ttm_tt_account_subtract(struct xe_device *xe, struct ttm_tt *tt)
|
||||||
xe_shrinker_mod_pages(xe->mem.shrinker, -(long)tt->num_pages, 0);
|
xe_shrinker_mod_pages(xe->mem.shrinker, -(long)tt->num_pages, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void update_global_total_pages(struct ttm_device *ttm_dev,
|
||||||
|
long num_pages)
|
||||||
|
{
|
||||||
|
#if IS_ENABLED(CONFIG_TRACE_GPU_MEM)
|
||||||
|
struct xe_device *xe = ttm_to_xe_device(ttm_dev);
|
||||||
|
u64 global_total_pages =
|
||||||
|
atomic64_add_return(num_pages, &xe->global_total_pages);
|
||||||
|
|
||||||
|
trace_gpu_mem_total(xe->drm.primary->index, 0,
|
||||||
|
global_total_pages << PAGE_SHIFT);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
static struct ttm_tt *xe_ttm_tt_create(struct ttm_buffer_object *ttm_bo,
|
static struct ttm_tt *xe_ttm_tt_create(struct ttm_buffer_object *ttm_bo,
|
||||||
u32 page_flags)
|
u32 page_flags)
|
||||||
{
|
{
|
||||||
|
|
@ -525,6 +540,7 @@ static int xe_ttm_tt_populate(struct ttm_device *ttm_dev, struct ttm_tt *tt,
|
||||||
|
|
||||||
xe_tt->purgeable = false;
|
xe_tt->purgeable = false;
|
||||||
xe_ttm_tt_account_add(ttm_to_xe_device(ttm_dev), tt);
|
xe_ttm_tt_account_add(ttm_to_xe_device(ttm_dev), tt);
|
||||||
|
update_global_total_pages(ttm_dev, tt->num_pages);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -541,6 +557,7 @@ static void xe_ttm_tt_unpopulate(struct ttm_device *ttm_dev, struct ttm_tt *tt)
|
||||||
|
|
||||||
ttm_pool_free(&ttm_dev->pool, tt);
|
ttm_pool_free(&ttm_dev->pool, tt);
|
||||||
xe_ttm_tt_account_subtract(xe, tt);
|
xe_ttm_tt_account_subtract(xe, tt);
|
||||||
|
update_global_total_pages(ttm_dev, -(long)tt->num_pages);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void xe_ttm_tt_destroy(struct ttm_device *ttm_dev, struct ttm_tt *tt)
|
static void xe_ttm_tt_destroy(struct ttm_device *ttm_dev, struct ttm_tt *tt)
|
||||||
|
|
|
||||||
|
|
@ -600,6 +600,14 @@ struct xe_device {
|
||||||
u8 vm_inject_error_position;
|
u8 vm_inject_error_position;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_TRACE_GPU_MEM)
|
||||||
|
/**
|
||||||
|
* @global_total_pages: global GPU page usage tracked for gpu_mem
|
||||||
|
* tracepoints
|
||||||
|
*/
|
||||||
|
atomic64_t global_total_pages;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* private: */
|
/* private: */
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_DRM_XE_DISPLAY)
|
#if IS_ENABLED(CONFIG_DRM_XE_DISPLAY)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user