aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2014-07-17 12:26:29 -0400
committerAlex Deucher <alexander.deucher@amd.com>2014-08-05 08:53:35 -0400
commit391bfec33cd4e103274f197924d41ef648b849de (patch)
treebafd9a543a1c258ac747faa01f8b0ff2cd5404e8
parent2c6316cbcd724adaea123a64a939b0ec4c39d009 (diff)
drm/radeon: remove visible vram size limit on bo allocation (v4)
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>
-rw-r--r--drivers/gpu/drm/radeon/radeon.h2
-rw-r--r--drivers/gpu/drm/radeon/radeon_gem.c12
2 files changed, 8 insertions, 6 deletions
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index ee101b24ede1..f9ffd98aa6a4 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -547,7 +547,7 @@ struct radeon_gem {
547 547
548int radeon_gem_init(struct radeon_device *rdev); 548int radeon_gem_init(struct radeon_device *rdev);
549void radeon_gem_fini(struct radeon_device *rdev); 549void radeon_gem_fini(struct radeon_device *rdev);
550int radeon_gem_object_create(struct radeon_device *rdev, int size, 550int radeon_gem_object_create(struct radeon_device *rdev, unsigned long size,
551 int alignment, int initial_domain, 551 int alignment, int initial_domain,
552 u32 flags, bool discardable, bool kernel, 552 u32 flags, bool discardable, bool kernel,
553 struct drm_gem_object **obj); 553 struct drm_gem_object **obj);
diff --git a/drivers/gpu/drm/radeon/radeon_gem.c b/drivers/gpu/drm/radeon/radeon_gem.c
index 1ec62444e32e..a2ae91a4862e 100644
--- a/drivers/gpu/drm/radeon/radeon_gem.c
+++ b/drivers/gpu/drm/radeon/radeon_gem.c
@@ -40,7 +40,7 @@ void radeon_gem_object_free(struct drm_gem_object *gobj)
40 } 40 }
41} 41}
42 42
43int radeon_gem_object_create(struct radeon_device *rdev, int size, 43int radeon_gem_object_create(struct radeon_device *rdev, unsigned long size,
44 int alignment, int initial_domain, 44 int alignment, int initial_domain,
45 u32 flags, bool discardable, bool kernel, 45 u32 flags, bool discardable, bool kernel,
46 struct drm_gem_object **obj) 46 struct drm_gem_object **obj)
@@ -55,10 +55,12 @@ int radeon_gem_object_create(struct radeon_device *rdev, int size,
55 alignment = PAGE_SIZE; 55 alignment = PAGE_SIZE;
56 } 56 }
57 57
58 /* maximun bo size is the minimun btw visible vram and gtt size */ 58 /* Maximum bo size is the unpinned gtt size since we use the gtt to
59 max_size = min(rdev->mc.visible_vram_size, rdev->mc.gtt_size); 59 * handle vram to system pool migrations.
60 */
61 max_size = rdev->mc.gtt_size - rdev->gart_pin_size;
60 if (size > max_size) { 62 if (size > max_size) {
61 DRM_DEBUG("Allocation size %dMb bigger than %ldMb limit\n", 63 DRM_DEBUG("Allocation size %ldMb bigger than %ldMb limit\n",
62 size >> 20, max_size >> 20); 64 size >> 20, max_size >> 20);
63 return -ENOMEM; 65 return -ENOMEM;
64 } 66 }
@@ -72,7 +74,7 @@ retry:
72 initial_domain |= RADEON_GEM_DOMAIN_GTT; 74 initial_domain |= RADEON_GEM_DOMAIN_GTT;
73 goto retry; 75 goto retry;
74 } 76 }
75 DRM_ERROR("Failed to allocate GEM object (%d, %d, %u, %d)\n", 77 DRM_ERROR("Failed to allocate GEM object (%ld, %d, %u, %d)\n",
76 size, initial_domain, alignment, r); 78 size, initial_domain, alignment, r);
77 } 79 }
78 return r; 80 return r;