On 2026-08-28 at 01:14:57 +0200, Andi Shyti wrote:
> Hi Krzysztof,
> 
> ...
> 
> > Amend the problem by removing debugfs entries and marking
> > registered flag as false upon error in drm_dev_register().
> > 
> > Signed-off-by: Krzysztof Karas <[email protected]>
> > Co-developed-by: Krzysztof Niemiec <[email protected]>
> > Signed-off-by: Krzysztof Niemiec <[email protected]>
> 
> I think the right order should be:
> 
> Co-developed-by: Krzysztof Karas <[email protected]>
> Signed-off-by: Krzysztof Karas <[email protected]>
> Signed-off-by: Krzysztof Niemiec <[email protected]>
> 
> > diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
> > index e51ed959da89..b98e8af6f1c1 100644
> > --- a/drivers/gpu/drm/drm_drv.c
> > +++ b/drivers/gpu/drm/drm_drv.c
> > @@ -1140,6 +1140,8 @@ int drm_dev_register(struct drm_device *dev, unsigned 
> > long flags)
> >     drm_minor_unregister(dev, DRM_MINOR_ACCEL);
> >     drm_minor_unregister(dev, DRM_MINOR_PRIMARY);
> >     drm_minor_unregister(dev, DRM_MINOR_RENDER);
> > +   drm_debugfs_dev_fini(dev);
> 
> I think sashiko is right here, this should be removed.
> 
> > +   dev->registered = false;
> 
> dev->registered = false should be set at the very beginning,
> maybe something like this:
> 
> err_unload:
>       dev->registered = false;
>       if (dev->driver->unload)
>               dev->driver->unload(dev);
>       goto err_cleanup;
> err_minors:
>       dev->registered = false;
> err_clenup:
>       ...
> 
I think we may need another label. Currently, dev->registered
state is ambiguous, because it is set to true before the last
goto err_minors. That would mean that putting it under
err_unload would still leave a gap, where registered == true and
is never unset on the error path, if driver->load() would fail.

How about:

        if (driver->load) {
                ret = driver->load(dev, flags);
                if (ret)
                        goto err_registered;
        }

...

err_unload:
        if (dev->driver->unload)
                dev->driver->unload(dev);
err_registered:
        dev->registered = false;
err_minors:
...

-- 
Best Regards,
Krzysztof

Reply via email to