[PATCH] firmware: sysfb: Fix reference count of sysfb parent device
Marek Olšák
maraeo at gmail.com
Fri Jun 28 18:54:42 UTC 2024
Hi Thomas,
FYI, this doesn't fix the issue of lightdm not being able to start for me.
Marek
Marek
On Tue, Jun 25, 2024 at 4:18 AM Thomas Zimmermann <tzimmermann at suse.de> wrote:
>
> Retrieving the system framebuffer's parent device in sysfb_init()
> increments the parent device's reference count. Hence release the
> reference before leaving the init function.
>
> Adding the sysfb platform device acquires and additional reference
> for the parent. This keeps the parent device around while the system
> framebuffer is in use.
>
> Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
> Fixes: 9eac534db001 ("firmware/sysfb: Set firmware-framebuffer parent device")
> Cc: Thomas Zimmermann <tzimmermann at suse.de>
> Cc: Javier Martinez Canillas <javierm at redhat.com>
> Cc: Helge Deller <deller at gmx.de>
> Cc: Jani Nikula <jani.nikula at intel.com>
> Cc: Dan Carpenter <dan.carpenter at linaro.org>
> Cc: Arnd Bergmann <arnd at arndb.de>
> Cc: Sui Jingfeng <suijingfeng at loongson.cn>
> Cc: <stable at vger.kernel.org> # v6.9+
> ---
> drivers/firmware/sysfb.c | 13 +++++++++----
> 1 file changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/firmware/sysfb.c b/drivers/firmware/sysfb.c
> index 880ffcb50088..dd274563deeb 100644
> --- a/drivers/firmware/sysfb.c
> +++ b/drivers/firmware/sysfb.c
> @@ -101,8 +101,10 @@ static __init struct device *sysfb_parent_dev(const struct screen_info *si)
> if (IS_ERR(pdev)) {
> return ERR_CAST(pdev);
> } else if (pdev) {
> - if (!sysfb_pci_dev_is_enabled(pdev))
> + if (!sysfb_pci_dev_is_enabled(pdev)) {
> + pci_dev_put(pdev);
> return ERR_PTR(-ENODEV);
> + }
> return &pdev->dev;
> }
>
> @@ -137,7 +139,7 @@ static __init int sysfb_init(void)
> if (compatible) {
> pd = sysfb_create_simplefb(si, &mode, parent);
> if (!IS_ERR(pd))
> - goto unlock_mutex;
> + goto put_device;
> }
>
> /* if the FB is incompatible, create a legacy framebuffer device */
> @@ -155,7 +157,7 @@ static __init int sysfb_init(void)
> pd = platform_device_alloc(name, 0);
> if (!pd) {
> ret = -ENOMEM;
> - goto unlock_mutex;
> + goto put_device;
> }
>
> pd->dev.parent = parent;
> @@ -170,9 +172,12 @@ static __init int sysfb_init(void)
> if (ret)
> goto err;
>
> - goto unlock_mutex;
> +
> + goto put_device;
> err:
> platform_device_put(pd);
> +put_device:
> + put_device(parent);
> unlock_mutex:
> mutex_unlock(&disable_lock);
> return ret;
> --
> 2.45.2
>
More information about the dri-devel
mailing list