@@ -75,6 +75,7 @@ static void amdgpu_ttm_mem_global_release(struct drm_global_reference *ref)
static int amdgpu_ttm_global_init(struct amdgpu_device *adev)
{
struct drm_global_reference *global_ref;
+ struct ttm_mem_global *mem_glob;
struct amdgpu_ring *ring;
struct drm_sched_rq *rq;
int r;
@@ -91,6 +92,8 @@ static int amdgpu_ttm_global_init(struct amdgpu_device *adev)
"subsystem.\n");
goto error_mem;
}
+ mem_glob = (struct ttm_mem_global *)global_ref->object;
+ mem_glob->no_retry = adev->mman.bdev.no_retry;
adev->mman.bo_global_ref.mem_glob =
adev->mman.mem_global_ref.object;
@@ -1371,6 +1374,8 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)
int r;
u64 vis_vram_limit;
+ /* We opt to avoid OOM on system pages allocations */
+ adev->mman.bdev.no_retry = true;
r = amdgpu_ttm_global_init(adev);
if (r) {
return r;
@@ -1388,9 +1393,6 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)
}
adev->mman.initialized = true;
- /* We opt to avoid OOM on system pages allocations */
- adev->mman.bdev.no_retry = true;
-
r = ttm_bo_init_mm(&adev->mman.bdev, TTM_PL_VRAM,
adev->gmc.real_vram_size >> PAGE_SHIFT);
if (r) {
@@ -488,6 +488,9 @@ ttm_check_over_swaplimit(struct ttm_mem_global *glob)
{
bool ret = false;
+ if (!glob->no_retry)
+ return ret;
+
if (get_nr_swap_pages() < FREE_SWAP_SPACE
&& si_mem_available() < glob->sys_mem_limit)
ret = true;
@@ -56,6 +56,8 @@
* @zone_kernel: Pointer to the kernel zone.
* @zone_highmem: Pointer to the highmem zone if there is one.
* @zone_dma32: Pointer to the dma32 zone if there is one.
+ * @no_retry: if free swap space is under the fixed limit, no retry for
+ * avoid OOM
*
* Note that this structure is not per device. It should be global for all
* graphics devices.
@@ -78,6 +80,7 @@ struct ttm_mem_global {
#else
struct ttm_mem_zone *zone_dma32;
#endif
+ bool no_retry;
};
extern int ttm_mem_global_init(struct ttm_mem_global *glob);
set the no_retry flag in struct ttm_mem_global and init it after ttm_mem_global_init Signed-off-by: Roger He <Hongbo.He@amd.com> --- drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 8 +++++--- drivers/gpu/drm/ttm/ttm_memory.c | 3 +++ include/drm/ttm/ttm_memory.h | 3 +++ 3 files changed, 11 insertions(+), 3 deletions(-)