set the no_retry flag in struct ttm_mem_global and init it
after ttm_mem_global_init

Signed-off-by: Roger He <hongbo...@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(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 95f9901..f740248 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -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) {
diff --git a/drivers/gpu/drm/ttm/ttm_memory.c b/drivers/gpu/drm/ttm/ttm_memory.c
index e19e727..3f00ed8 100644
--- a/drivers/gpu/drm/ttm/ttm_memory.c
+++ b/drivers/gpu/drm/ttm/ttm_memory.c
@@ -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;
diff --git a/include/drm/ttm/ttm_memory.h b/include/drm/ttm/ttm_memory.h
index ad7cf63..7fee446 100644
--- a/include/drm/ttm/ttm_memory.h
+++ b/include/drm/ttm/ttm_memory.h
@@ -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);
-- 
2.7.4

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to