diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2014-07-17 12:26:29 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2014-08-05 08:53:35 -0400 |
commit | 391bfec33cd4e103274f197924d41ef648b849de (patch) | |
tree | bafd9a543a1c258ac747faa01f8b0ff2cd5404e8 | |
parent | 2c6316cbcd724adaea123a64a939b0ec4c39d009 (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.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_gem.c | 12 |
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 | ||
548 | int radeon_gem_init(struct radeon_device *rdev); | 548 | int radeon_gem_init(struct radeon_device *rdev); |
549 | void radeon_gem_fini(struct radeon_device *rdev); | 549 | void radeon_gem_fini(struct radeon_device *rdev); |
550 | int radeon_gem_object_create(struct radeon_device *rdev, int size, | 550 | int 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 | ||
43 | int radeon_gem_object_create(struct radeon_device *rdev, int size, | 43 | int 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; |