drm/radeon: remove visible vram size limit on bo allocation (v4)
authorAlex Deucher <alexander.deucher@amd.com>
Thu, 17 Jul 2014 16:26:29 +0000 (12:26 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 5 Aug 2014 12:53:35 +0000 (08:53 -0400)
Now that fallback to gtt is fixed for cpu access, we can
remove this limit.

bug:
https://bugs.freedesktop.org/show_bug.cgi?id=78717

v2: use new gart_pin_size to accurately track available gtt.
v3: fix comment
v4: clarify comment

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>
drivers/gpu/drm/radeon/radeon.h
drivers/gpu/drm/radeon/radeon_gem.c

index ee101b2..f9ffd98 100644 (file)
@@ -547,7 +547,7 @@ struct radeon_gem {
 
 int radeon_gem_init(struct radeon_device *rdev);
 void radeon_gem_fini(struct radeon_device *rdev);
-int radeon_gem_object_create(struct radeon_device *rdev, int size,
+int radeon_gem_object_create(struct radeon_device *rdev, unsigned long size,
                                int alignment, int initial_domain,
                                u32 flags, bool discardable, bool kernel,
                                struct drm_gem_object **obj);
index 1ec6244..a2ae91a 100644 (file)
@@ -40,7 +40,7 @@ void radeon_gem_object_free(struct drm_gem_object *gobj)
        }
 }
 
-int radeon_gem_object_create(struct radeon_device *rdev, int size,
+int radeon_gem_object_create(struct radeon_device *rdev, unsigned long size,
                                int alignment, int initial_domain,
                                u32 flags, bool discardable, bool kernel,
                                struct drm_gem_object **obj)
@@ -55,10 +55,12 @@ int radeon_gem_object_create(struct radeon_device *rdev, int size,
                alignment = PAGE_SIZE;
        }
 
-       /* maximun bo size is the minimun btw visible vram and gtt size */
-       max_size = min(rdev->mc.visible_vram_size, rdev->mc.gtt_size);
+       /* Maximum bo size is the unpinned gtt size since we use the gtt to
+        * handle vram to system pool migrations.
+        */
+       max_size = rdev->mc.gtt_size - rdev->gart_pin_size;
        if (size > max_size) {
-               DRM_DEBUG("Allocation size %dMb bigger than %ldMb limit\n",
+               DRM_DEBUG("Allocation size %ldMb bigger than %ldMb limit\n",
                          size >> 20, max_size >> 20);
                return -ENOMEM;
        }
@@ -72,7 +74,7 @@ retry:
                                initial_domain |= RADEON_GEM_DOMAIN_GTT;
                                goto retry;
                        }
-                       DRM_ERROR("Failed to allocate GEM object (%d, %d, %u, %d)\n",
+                       DRM_ERROR("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
                                  size, initial_domain, alignment, r);
                }
                return r;