drm/amdgpu: add new bo flag that indicates BOs don't need fallback (v2)
authorChunming Zhou <david1.zhou@amd.com>
Mon, 2 Apr 2018 03:20:44 +0000 (11:20 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 11 Apr 2018 18:08:01 +0000 (13:08 -0500)
user cases:
1. KFD wraps amdgpu_bo_create, they have no fallback case which is different
with amdgpu_gem_object_create.
since upstream branch has no amdgpu_amdkfd_gpuvm.c, which need KFD
guys add this flag to __alloc_memory_of_gpu:
+       flags |= AMDGPU_GEM_CREATE_NO_FALLBACK;
2. UMD can specify this flag for their allocation as well if they like.

v2: squash in merge conflict fix (Chunming)

Signed-off-by: Chunming Zhou <david1.zhou@amd.com>
Acked-by: Felix Kuehling <Felix.Kuehling@amd.com>
Cc: felix.kuehling@amd.com
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
include/uapi/drm/amdgpu_drm.h

index dc34b50e6b29b6e3d421db70457ad1d263b9d53b..d7d7ce1507ec6c5889c9f688774451a3e6870497 100644 (file)
@@ -386,7 +386,8 @@ retry:
            bo->tbo.mem.start < adev->gmc.visible_vram_size >> PAGE_SHIFT)
                p->bytes_moved_vis += ctx.bytes_moved;
 
-       if (unlikely(r == -ENOMEM) && domain != bo->allowed_domains) {
+       if (unlikely(r == -ENOMEM) && domain != bo->allowed_domains &&
+           !(bo->flags & AMDGPU_GEM_CREATE_NO_FALLBACK)) {
                domain = bo->allowed_domains;
                goto retry;
        }
index 04d6830347ec832a99b4b952554fced8bc7a8eb8..9e23d6f6f3f36cf842ec7bb87a19f6142e2400e5 100644 (file)
@@ -388,6 +388,8 @@ retry:
        drm_gem_private_object_init(adev->ddev, &bo->gem_base, size);
        INIT_LIST_HEAD(&bo->shadow_list);
        INIT_LIST_HEAD(&bo->va);
+       bo->preferred_domains = preferred_domains;
+       bo->allowed_domains = allowed_domains;
 
        bo->flags = flags;
 
@@ -424,7 +426,8 @@ retry:
        r = ttm_bo_init_reserved(&adev->mman.bdev, &bo->tbo, size, type,
                                 &bo->placement, page_align, &ctx, acc_size,
                                 NULL, resv, &amdgpu_ttm_bo_destroy);
-       if (unlikely(r && r != -ERESTARTSYS) && type == ttm_bo_type_device) {
+       if (unlikely(r && r != -ERESTARTSYS) && type == ttm_bo_type_device &&
+           !(flags & AMDGPU_GEM_CREATE_NO_FALLBACK)) {
                if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) {
                        flags &= ~AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
                        goto retry;
index c363b67f2d0ad0c10036b6f0b16906430d6344fe..4f5a27d64c540eb5f8c013d4ac588b46e1ff6e67 100644 (file)
@@ -95,6 +95,8 @@ extern "C" {
 #define AMDGPU_GEM_CREATE_VM_ALWAYS_VALID      (1 << 6)
 /* Flag that BO sharing will be explicitly synchronized */
 #define AMDGPU_GEM_CREATE_EXPLICIT_SYNC                (1 << 7)
+/* Flag that BO doesn't need fallback */
+#define AMDGPU_GEM_CREATE_NO_FALLBACK          (1 << 8)
 
 struct drm_amdgpu_gem_create_in  {
        /** the requested memory size */