[PATCH] drm/amdgpu: Verify bo size can fit framebuffer size

Alex Deucher alexdeucher at gmail.com
Tue Mar 2 18:20:51 UTC 2021


On Mon, Mar 1, 2021 at 12:11 PM Mark Yacoub <markyacoub at chromium.org> wrote:
>
> When creating a new framebuffer, verify that the bo size associated with
> it can handle the fb size.
> drm_gem_fb_init_with_funcs implements this check by calculating the
> minimum expected size of each plane. amdgpu now uses this function to
> initialize its fb as it performs the required checks.
>
> The bug was caught using igt-gpu-tools test: kms_addfb_basic.too-high
> and kms_addfb_basic.bo-too-small
>
> Suggested-by: Sean Paul <seanpaul at chromium.org>
> Cc: Alex Deucher <alexander.deucher at amd.com>
> Cc: amd-gfx at lists.freedesktop.org
> Cc: dri-devel at lists.freedesktop.org
> Signed-off-by: Mark Yacoub <markyacoub at google.com>

Applied.  Thanks!

Alex

> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 8 +++++---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c      | 3 ++-
>  drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h    | 1 +
>  3 files changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
> index 48cb33e5b3826..61684d543b8ef 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
> @@ -872,13 +872,14 @@ static int amdgpu_display_get_fb_info(const struct amdgpu_framebuffer *amdgpu_fb
>
>  int amdgpu_display_framebuffer_init(struct drm_device *dev,
>                                     struct amdgpu_framebuffer *rfb,
> +                                   struct drm_file *file,
>                                     const struct drm_mode_fb_cmd2 *mode_cmd,
>                                     struct drm_gem_object *obj)
>  {
>         int ret, i;
>         rfb->base.obj[0] = obj;
> -       drm_helper_mode_fill_fb_struct(dev, &rfb->base, mode_cmd);
> -       ret = drm_framebuffer_init(dev, &rfb->base, &amdgpu_fb_funcs);
> +       ret = drm_gem_fb_init_with_funcs(dev, &rfb->base, file, mode_cmd,
> +                                        &amdgpu_fb_funcs);
>         if (ret)
>                 goto fail;
>
> @@ -953,7 +954,8 @@ amdgpu_display_user_framebuffer_create(struct drm_device *dev,
>                 return ERR_PTR(-ENOMEM);
>         }
>
> -       ret = amdgpu_display_framebuffer_init(dev, amdgpu_fb, mode_cmd, obj);
> +       ret = amdgpu_display_framebuffer_init(dev, amdgpu_fb, file_priv,
> +                                             mode_cmd, obj);
>         if (ret) {
>                 kfree(amdgpu_fb);
>                 drm_gem_object_put(obj);
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c
> index 0bf7d36c6686d..2b9c9a621c437 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c
> @@ -233,7 +233,8 @@ static int amdgpufb_create(struct drm_fb_helper *helper,
>         }
>
>         ret = amdgpu_display_framebuffer_init(adev_to_drm(adev), &rfbdev->rfb,
> -                                             &mode_cmd, gobj);
> +                                             helper->client.file, &mode_cmd,
> +                                             gobj);
>         if (ret) {
>                 DRM_ERROR("failed to initialize framebuffer %d\n", ret);
>                 goto out;
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
> index 319cb19e1b99f..997b93674955e 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
> @@ -604,6 +604,7 @@ int amdgpu_display_get_crtc_scanoutpos(struct drm_device *dev,
>
>  int amdgpu_display_framebuffer_init(struct drm_device *dev,
>                                     struct amdgpu_framebuffer *rfb,
> +                                   struct drm_file *file,
>                                     const struct drm_mode_fb_cmd2 *mode_cmd,
>                                     struct drm_gem_object *obj);
>
> --
> 2.30.1.766.gb4fecdf3b7-goog
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


More information about the amd-gfx mailing list