This patch doesn't apply to the .36 stable tree
If someone wants it applied there, please email the backport
to [email protected]

thanks,

greg k-h

> commit: 93225b0d7bc030f4a93165347a65893685822d70
> From: Jerome Glisse <[email protected]>
> Date: Fri, 3 Dec 2010 16:38:19 -0500
> Subject: [PATCH] drm/radeon/kms: forbid big bo allocation (fdo 31708) v3
> 
> Forbid allocating buffer bigger than visible VRAM or GTT, also
> properly set lpfn field.
> 
> v2 - use max macro
>    - silence warning
> v3 - don't explicitly set range limit
>    - use min macro
> 
> Cc: stable <[email protected]>
> 
> Signed-off-by: Jerome Glisse <[email protected]>
> Signed-off-by: Dave Airlie <[email protected]>
> ---
>  drivers/gpu/drm/radeon/radeon_object.c |   13 +++++++++++--
>  1 files changed, 11 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/radeon/radeon_object.c 
> b/drivers/gpu/drm/radeon/radeon_object.c
> index 1d06774..a598d00 100644
> --- a/drivers/gpu/drm/radeon/radeon_object.c
> +++ b/drivers/gpu/drm/radeon/radeon_object.c
> @@ -69,7 +69,7 @@ void radeon_ttm_placement_from_domain(struct radeon_bo 
> *rbo, u32 domain)
>       u32 c = 0;
>  
>       rbo->placement.fpfn = 0;
> -     rbo->placement.lpfn = rbo->rdev->mc.active_vram_size >> PAGE_SHIFT;
> +     rbo->placement.lpfn = 0;
>       rbo->placement.placement = rbo->placements;
>       rbo->placement.busy_placement = rbo->placements;
>       if (domain & RADEON_GEM_DOMAIN_VRAM)
> @@ -91,7 +91,8 @@ int radeon_bo_create(struct radeon_device *rdev, struct 
> drm_gem_object *gobj,
>  {
>       struct radeon_bo *bo;
>       enum ttm_bo_type type;
> -     int 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;
>       int r;
>  
>       if (unlikely(rdev->mman.bdev.dev_mapping == NULL)) {
> @@ -104,6 +105,14 @@ int radeon_bo_create(struct radeon_device *rdev, struct 
> drm_gem_object *gobj,
>       }
>       *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;
> +     }
> +
>  retry:
>       bo = kzalloc(sizeof(struct radeon_bo), GFP_KERNEL);
>       if (bo == NULL)
> 
> _______________________________________________
> stable mailing list
> [email protected]
> http://linux.kernel.org/mailman/listinfo/stable

_______________________________________________
stable mailing list
[email protected]
http://linux.kernel.org/mailman/listinfo/stable

Reply via email to