[PATCH v2 1/3] drm: Add callbacks for late registering
Benjamin Gaignard
benjamin.gaignard at linaro.org
Tue Jun 21 11:09:20 UTC 2016
2016-06-21 12:31 GMT+02:00 Chris Wilson <chris at chris-wilson.co.uk>:
> On Tue, Jun 21, 2016 at 11:31:34AM +0200, Benjamin Gaignard wrote:
>> Like what has been done for connectors add callbacks on encoder,
>> crtc and plane to let driver do actions after drm device registration.
>>
>> Correspondingly, add callbacks called before unregister drm device.
>>
>> version 2:
>> add drm_modeset_register_all() and drm_modeset_unregister_all()
>> to centralize all calls
>>
>> Signed-off-by: Benjamin Gaignard <benjamin.gaignard at linaro.org>
>> ---
>> drivers/gpu/drm/drm_crtc.c | 122 +++++++++++++++++++++++++++++++++++++++++++++
>> drivers/gpu/drm/drm_drv.c | 4 +-
>> include/drm/drm_crtc.h | 79 +++++++++++++++++++++++++++++
>> 3 files changed, 203 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
>> index e7c862b..b393feb 100644
>> --- a/drivers/gpu/drm/drm_crtc.c
>> +++ b/drivers/gpu/drm/drm_crtc.c
>> @@ -608,6 +608,31 @@ static unsigned int drm_num_crtcs(struct drm_device *dev)
>> return num;
>> }
>>
>> +static int drm_crtc_register_all(struct drm_device *dev)
>> +{
>> + struct drm_crtc *crtc;
>> + int ret;
>> +
>> + drm_for_each_crtc(crtc, dev) {
>> + if (crtc->funcs->late_register)
>> + ret = crtc->funcs->late_register(crtc);
>> + if (ret)
>
> ret is uninitialised.
OK I fix that for v3
>
> It is a good question (probably for another series) on what exactly to
> do on registration failure? At the very least we need to unwind on the
> error path, or we just ignore errors (other than a DRM_ERROR to
> userspace explaining why one object is not available, but otherwise let
> the driver load).
>
>> +int drm_modeset_register_all(struct drm_device *dev)
>> +{
>> + int ret;
>> +
>> + ret = drm_plane_register_all(dev);
>> + if (ret)
>> + return ret;
>> +
>> + ret = drm_crtc_register_all(dev);
>> + if (ret)
>> + return ret;
>> +
>> + ret = drm_encoder_register_all(dev);
>> + if (ret)
>> + return ret;
>> +
>> + ret = drm_connector_register_all(dev);
>
> Might as well continue on with
>
> ret = <>
> if (ret)
> return ret;
>
> for a consistent style. Along with the comment about how should we be
> handling errors? If we report an error, everything up to that point
> should be unwound.
>
OK I will add goto for each case.
>> + return ret;
>> +}
>> +EXPORT_SYMBOL(drm_modeset_register_all);
>> +
>> +/**
>> + * drm_modeset_unregister_all - do early unregistration
>> + * @dev: drm device
>> + *
>> + * This function call early_unregister callbakc for all planes,
>> + * crtcs, encoders and connectors
>> + */
>> +void drm_modeset_unregister_all(struct drm_device *dev)
>> +{
>> + drm_plane_unregister_all(dev);
>> + drm_crtc_unregister_all(dev);
>> + drm_encoder_unregister_all(dev);
>> + drm_connector_unregister_all(dev);
>
> Unregister should be in the opposite order.
OK for v3
>> +}
>> +EXPORT_SYMBOL(drm_modeset_unregister_all);
>
> I think the plan is not to export these symbols,
> -Chris
>
> --
> Chris Wilson, Intel Open Source Technology Centre
--
Benjamin Gaignard
Graphic Working Group
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
More information about the dri-devel
mailing list