[PATCH] drm/exynos: allocate non-contigous buffers when iommu is enabled
Sachin Kamat
sachin.kamat at linaro.org
Wed May 21 23:08:05 PDT 2014
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.
> - 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