drm/radeon: track pinned memory (v2)
So we know how large an allocation we can allow. v2: incorporate Michel's comments Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
This commit is contained in:
Родитель
02376d8282
Коммит
71ecc97eaa
|
@ -2353,6 +2353,10 @@ struct radeon_device {
|
||||||
|
|
||||||
struct dev_pm_domain vga_pm_domain;
|
struct dev_pm_domain vga_pm_domain;
|
||||||
bool have_disp_power_ref;
|
bool have_disp_power_ref;
|
||||||
|
|
||||||
|
/* tracking pinned memory */
|
||||||
|
u64 vram_pin_size;
|
||||||
|
u64 gart_pin_size;
|
||||||
};
|
};
|
||||||
|
|
||||||
bool radeon_is_px(struct drm_device *dev);
|
bool radeon_is_px(struct drm_device *dev);
|
||||||
|
|
|
@ -306,9 +306,13 @@ int radeon_bo_pin_restricted(struct radeon_bo *bo, u32 domain, u64 max_offset,
|
||||||
bo->pin_count = 1;
|
bo->pin_count = 1;
|
||||||
if (gpu_addr != NULL)
|
if (gpu_addr != NULL)
|
||||||
*gpu_addr = radeon_bo_gpu_offset(bo);
|
*gpu_addr = radeon_bo_gpu_offset(bo);
|
||||||
}
|
if (domain == RADEON_GEM_DOMAIN_VRAM)
|
||||||
if (unlikely(r != 0))
|
bo->rdev->vram_pin_size += radeon_bo_size(bo);
|
||||||
|
else
|
||||||
|
bo->rdev->gart_pin_size += radeon_bo_size(bo);
|
||||||
|
} else {
|
||||||
dev_err(bo->rdev->dev, "%p pin failed\n", bo);
|
dev_err(bo->rdev->dev, "%p pin failed\n", bo);
|
||||||
|
}
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -331,8 +335,14 @@ int radeon_bo_unpin(struct radeon_bo *bo)
|
||||||
for (i = 0; i < bo->placement.num_placement; i++)
|
for (i = 0; i < bo->placement.num_placement; i++)
|
||||||
bo->placements[i] &= ~TTM_PL_FLAG_NO_EVICT;
|
bo->placements[i] &= ~TTM_PL_FLAG_NO_EVICT;
|
||||||
r = ttm_bo_validate(&bo->tbo, &bo->placement, false, false);
|
r = ttm_bo_validate(&bo->tbo, &bo->placement, false, false);
|
||||||
if (unlikely(r != 0))
|
if (likely(r == 0)) {
|
||||||
|
if (bo->tbo.mem.mem_type == TTM_PL_VRAM)
|
||||||
|
bo->rdev->vram_pin_size -= radeon_bo_size(bo);
|
||||||
|
else
|
||||||
|
bo->rdev->gart_pin_size -= radeon_bo_size(bo);
|
||||||
|
} else {
|
||||||
dev_err(bo->rdev->dev, "%p validate failed for unpin\n", bo);
|
dev_err(bo->rdev->dev, "%p validate failed for unpin\n", bo);
|
||||||
|
}
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче