[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