lkml.org 
[lkml]   [2020]   [May]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [RFC v4 03/12] drm/vblank: Register drmm cleanup action once per drm_vblank_crtc
    On Fri, May 8, 2020 at 10:48 PM Lyude Paul <lyude@redhat.com> wrote:
    >
    > Since we'll be allocating resources for kthread_create_worker() in the
    > next commit (which could fail and require us to clean up the mess),
    > let's simplify the cleanup process a bit by registering a
    > drm_vblank_init_release() action for each drm_vblank_crtc so they're
    > still cleaned up if we fail to initialize one of them.
    >
    > Changes since v3:
    > * Use drmm_add_action_or_reset() - Daniel Vetter
    >
    > Cc: Daniel Vetter <daniel@ffwll.ch>
    > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
    > Cc: dri-devel@lists.freedesktop.org
    > Cc: nouveau@lists.freedesktop.org
    > Signed-off-by: Lyude Paul <lyude@redhat.com>

    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>

    I think the other patches need a brain that's less in w/e mode :-)

    Cheers, Daniel

    > ---
    > drivers/gpu/drm/drm_vblank.c | 23 ++++++++++-------------
    > 1 file changed, 10 insertions(+), 13 deletions(-)
    >
    > diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
    > index 758bf74e1cab..a4a9013584e2 100644
    > --- a/drivers/gpu/drm/drm_vblank.c
    > +++ b/drivers/gpu/drm/drm_vblank.c
    > @@ -491,16 +491,12 @@ static void vblank_disable_fn(struct timer_list *t)
    >
    > static void drm_vblank_init_release(struct drm_device *dev, void *ptr)
    > {
    > - unsigned int pipe;
    > -
    > - for (pipe = 0; pipe < dev->num_crtcs; pipe++) {
    > - struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
    > + struct drm_vblank_crtc *vblank = ptr;
    >
    > - WARN_ON(READ_ONCE(vblank->enabled) &&
    > - drm_core_check_feature(dev, DRIVER_MODESET));
    > + WARN_ON(READ_ONCE(vblank->enabled) &&
    > + drm_core_check_feature(dev, DRIVER_MODESET));
    >
    > - del_timer_sync(&vblank->disable_timer);
    > - }
    > + del_timer_sync(&vblank->disable_timer);
    > }
    >
    > /**
    > @@ -510,7 +506,7 @@ static void drm_vblank_init_release(struct drm_device *dev, void *ptr)
    > *
    > * This function initializes vblank support for @num_crtcs display pipelines.
    > * Cleanup is handled automatically through a cleanup function added with
    > - * drmm_add_action().
    > + * drmm_add_action_or_reset().
    > *
    > * Returns:
    > * Zero on success or a negative error code on failure.
    > @@ -529,10 +525,6 @@ int drm_vblank_init(struct drm_device *dev, unsigned int num_crtcs)
    >
    > dev->num_crtcs = num_crtcs;
    >
    > - ret = drmm_add_action(dev, drm_vblank_init_release, NULL);
    > - if (ret)
    > - return ret;
    > -
    > for (i = 0; i < num_crtcs; i++) {
    > struct drm_vblank_crtc *vblank = &dev->vblank[i];
    >
    > @@ -541,6 +533,11 @@ int drm_vblank_init(struct drm_device *dev, unsigned int num_crtcs)
    > init_waitqueue_head(&vblank->queue);
    > timer_setup(&vblank->disable_timer, vblank_disable_fn, 0);
    > seqlock_init(&vblank->seqlock);
    > +
    > + ret = drmm_add_action_or_reset(dev, drm_vblank_init_release,
    > + vblank);
    > + if (ret)
    > + return ret;
    > }
    >
    > DRM_INFO("Supports vblank timestamp caching Rev 2 (21.10.2013).\n");
    > --
    > 2.25.4
    >


    --
    Daniel Vetter
    Software Engineer, Intel Corporation
    +41 (0) 79 365 57 48 - http://blog.ffwll.ch

    \
     
     \ /
      Last update: 2020-05-08 23:00    [W:2.270 / U:0.572 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site