mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
drm/amdgpu: cap GTT size to physical RAM on APUs
On APUs, the GTT pool is backed by system RAM, but its size is not bound to the non-carveout memory that actually backs it. A user can end up with GTT + VRAM exceeding total physical memory through the following sequence: - Have a large non-carveout memory space (~128GB) and accordingly set a large GTT (~100GB) via the ttm module parameter. - Lower the non-carveout memory space in BIOS by increasing the UMA Frame Buffer Size (VRAM) to 64GB. - The previously set GTT value (~100GB) persists, even though the new non-carveout space (64GB) can no longer back it. This leads to a case where kernel reports GTT (100GB) + VRAM (64GB) despite the sum being greater than total physical memory (128GB). Cap the GTT size to totalram_pages() on APUs. totalram_pages() already excludes the VRAM carveout, so the resulting GTT can never exceed the system RAM that actually backs it. Signed-off-by: Harkirat Gill <harkirat.gill@amd.com> Reviewed-by: David Francis <David.Francis@amd.com> Assisted-by: Claude:claude-opus-4 Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
committed by
Alex Deucher
parent
757ba0790b
commit
5dafdd6492
@@ -2174,6 +2174,18 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)
|
||||
gtt_size = configured_size;
|
||||
}
|
||||
|
||||
/* Cap GTT so that it does not exceed total physical RAM. */
|
||||
if (adev->flags & AMD_IS_APU) {
|
||||
u64 phys_ram = (u64)totalram_pages() << PAGE_SHIFT;
|
||||
|
||||
if (gtt_size > phys_ram) {
|
||||
gtt_size = phys_ram;
|
||||
dev_info(adev->dev,
|
||||
"Capping GTT to %uM to not exceed available system memory\n",
|
||||
(unsigned int)(gtt_size / (1024 * 1024)));
|
||||
}
|
||||
}
|
||||
|
||||
/* Initialize GTT memory pool */
|
||||
r = amdgpu_gtt_mgr_init(adev, gtt_size);
|
||||
if (r) {
|
||||
|
||||
Reference in New Issue
Block a user