[PATCH] drm/mgag200: Fix calling drm_fb_helper_fini() twice

From: Ingo Molnar
Date: Wed Sep 16 2015 - 05:47:03 EST



* Archit Taneja <architt@xxxxxxxxxxxxxx> wrote:

> From: Archit Taneja <architt@xxxxxxxxxxxxxx>
> Date: Mon, 14 Sep 2015 20:11:43 +0530
> Subject: [PATCH] drm/mgag200: Prevent calling drm_fb_helper_fini twice
>
> mgag200_fbdev_init's error handling path calls drm_fb_helper_fini before
> bailing out. The error handling path of mgag200_driver_load also ends
> up calling drm_fb_helper_fini.
>
> This results in drm_fb_helper_fini being called twice if the driver load
> drm op fails somewhere in between.
>
> Make only mgag200_driver_unload call drm_fb_helper_fini, remove the call
> from mgag200_fbdev_init.
>
> Signed-off-by: Archit Taneja <architt@xxxxxxxxxxxxxx>
> ---
> drivers/gpu/drm/mgag200/mgag200_fb.c | 8 ++------
> 1 file changed, 2 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/mgag200/mgag200_fb.c
> b/drivers/gpu/drm/mgag200/mgag200_fb.c
> index 87de15e..6259b0a 100644
> --- a/drivers/gpu/drm/mgag200/mgag200_fb.c
> +++ b/drivers/gpu/drm/mgag200/mgag200_fb.c
> @@ -280,20 +280,16 @@ int mgag200_fbdev_init(struct mga_device *mdev)
>
> ret = drm_fb_helper_single_add_all_connectors(&mfbdev->helper);
> if (ret)
> - goto fini;
> + return ret;
>
> /* disable all the possible outputs/crtcs before entering KMS mode */
> drm_helper_disable_unused_functions(mdev->dev);
>
> ret = drm_fb_helper_initial_config(&mfbdev->helper, bpp_sel);
> if (ret)
> - goto fini;
> + return ret;
>
> return 0;
> -
> -fini:
> - drm_fb_helper_fini(&mfbdev->helper);
> - return ret;
> }
>
> void mgag200_fbdev_fini(struct mga_device *mdev)

So this patch was whitespace damaged - I applied it by hand and made the commit
below. This has solved the crash, thanks Archit!

And yes, you are right that my config probably crashed with older kernels too.

Ingo

=============>