Commit 6c0d112f authored by Christian König's avatar Christian König Committed by Alex Deucher

drm/radeon: move size limits to gem_object_create.

Driver internal users shouldn't be limited in their allocation size.
Signed-off-by: default avatarChristian König <deathsimple@vodafone.de>
Reviewed-by: default avatarMichel Dänzer <michel.daenzer@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 59240ee3
...@@ -53,6 +53,7 @@ int radeon_gem_object_create(struct radeon_device *rdev, int size, ...@@ -53,6 +53,7 @@ int radeon_gem_object_create(struct radeon_device *rdev, int size,
struct drm_gem_object **obj) struct drm_gem_object **obj)
{ {
struct radeon_bo *robj; struct radeon_bo *robj;
unsigned long max_size;
int r; int r;
*obj = NULL; *obj = NULL;
...@@ -60,6 +61,15 @@ int radeon_gem_object_create(struct radeon_device *rdev, int size, ...@@ -60,6 +61,15 @@ int radeon_gem_object_create(struct radeon_device *rdev, int size,
if (alignment < PAGE_SIZE) { if (alignment < PAGE_SIZE) {
alignment = PAGE_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);
if (size > max_size) {
printk(KERN_WARNING "%s:%d alloc size %dMb bigger than %ldMb limit\n",
__func__, __LINE__, size >> 20, max_size >> 20);
return -ENOMEM;
}
r = radeon_bo_create(rdev, size, alignment, kernel, initial_domain, NULL, &robj); r = radeon_bo_create(rdev, size, alignment, kernel, initial_domain, NULL, &robj);
if (r) { if (r) {
if (r != -ERESTARTSYS) if (r != -ERESTARTSYS)
......
...@@ -105,7 +105,6 @@ int radeon_bo_create(struct radeon_device *rdev, ...@@ -105,7 +105,6 @@ int radeon_bo_create(struct radeon_device *rdev,
struct radeon_bo *bo; struct radeon_bo *bo;
enum ttm_bo_type type; enum ttm_bo_type type;
unsigned long page_align = roundup(byte_align, PAGE_SIZE) >> PAGE_SHIFT; unsigned long page_align = roundup(byte_align, PAGE_SIZE) >> PAGE_SHIFT;
unsigned long max_size = 0;
size_t acc_size; size_t acc_size;
int r; int r;
...@@ -121,14 +120,6 @@ int radeon_bo_create(struct radeon_device *rdev, ...@@ -121,14 +120,6 @@ int radeon_bo_create(struct radeon_device *rdev,
} }
*bo_ptr = NULL; *bo_ptr = NULL;
/* maximun bo size is the minimun btw visible vram and gtt size */
max_size = min(rdev->mc.visible_vram_size, rdev->mc.gtt_size);
if ((page_align << PAGE_SHIFT) >= max_size) {
printk(KERN_WARNING "%s:%d alloc size %ldM bigger than %ldMb limit\n",
__func__, __LINE__, page_align >> (20 - PAGE_SHIFT), max_size >> 20);
return -ENOMEM;
}
acc_size = ttm_bo_dma_acc_size(&rdev->mman.bdev, size, acc_size = ttm_bo_dma_acc_size(&rdev->mman.bdev, size,
sizeof(struct radeon_bo)); sizeof(struct radeon_bo));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment