[PATCH] drm/exynos: allocate non-contigous buffers when iommu is enabled

Rahul Sharma rahul.sharma at samsung.com
Wed May 21 23:32:07 PDT 2014


Thanks Sachin.

On 22 May 2014 11:38, Sachin Kamat <sachin.kamat at linaro.org> wrote:
> Hi Rahul,
>
> On 7 May 2014 17:21, Rahul Sharma <rahul.sharma at samsung.com> wrote:
>> From: Rahul Sharma <Rahul.Sharma at samsung.com>
>>
>> Allow to allocate non-contigous buffers when iommu is enabled.
>> Currently, it tries to allocates contigous buffer which consistently
>> fail for large buffers and then fall back to non contigous. Apart
>> from being slow, this implementation is also very noisy and fills
>> the screen with alloc fail logs.
>>
>> Change-Id: I523e95aa308122ed2edc55e065ae6eb8be996541
>
> Not needed.
>
>> Signed-off-by: Rahul Sharma <Rahul.Sharma at samsung.com>
>> ---
>>  drivers/gpu/drm/exynos/exynos_drm_gem.c |   22 ++++++++++------------
>>  1 file changed, 10 insertions(+), 12 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_gem.c b/drivers/gpu/drm/exynos/exynos_drm_gem.c
>> index 5d88924..7136945 100644
>> --- a/drivers/gpu/drm/exynos/exynos_drm_gem.c
>> +++ b/drivers/gpu/drm/exynos/exynos_drm_gem.c
>> @@ -624,22 +624,20 @@ int exynos_drm_gem_dumb_create(struct drm_file *file_priv,
>>         args->pitch = args->width * ((args->bpp + 7) / 8);
>>         args->size = args->pitch * args->height;
>>
>> -       exynos_gem_obj = exynos_drm_gem_create(dev, EXYNOS_BO_CONTIG |
>> -                                               EXYNOS_BO_WC, args->size);
>> -       /*
>> -        * If physically contiguous memory allocation fails and if IOMMU is
>> -        * supported then try to get buffer from non physically contiguous
>> -        * memory area.
>> -        */
>
> This comment could be retained after suitable modification to reflect
> current logic.
>

ok. Posting V2.

Regards,
Rahul Sharma

>> -       if (IS_ERR(exynos_gem_obj) && is_drm_iommu_supported(dev)) {
>> -               dev_warn(dev->dev, "contiguous FB allocation failed, falling back to non-contiguous\n");
>> +       if (is_drm_iommu_supported(dev)) {
>> +               exynos_gem_obj = exynos_drm_gem_create(dev,
>> +                       EXYNOS_BO_NONCONTIG | EXYNOS_BO_WC,
>> +                       args->size);
>> +       } else {
>>                 exynos_gem_obj = exynos_drm_gem_create(dev,
>> -                                       EXYNOS_BO_NONCONTIG | EXYNOS_BO_WC,
>> -                                       args->size);
>> +                       EXYNOS_BO_CONTIG | EXYNOS_BO_WC,
>> +                       args->size);
>>         }
>>
>> -       if (IS_ERR(exynos_gem_obj))
>> +       if (IS_ERR(exynos_gem_obj)) {
>> +               dev_warn(dev->dev, "FB allocation failed.\n");
>>                 return PTR_ERR(exynos_gem_obj);
>> +       }
>>
>>         ret = exynos_drm_gem_handle_create(&exynos_gem_obj->base, file_priv,
>>                         &args->handle);
>> --
>> 1.7.9.5
>
> Otherwise looks good.
> Reviewed-by: Sachin Kamat <sachin.kamat at linaro.org>
>
> --
> With warm regards,
> Sachin


More information about the dri-devel mailing list