1. 02 Apr, 2020 5 commits
  2. 01 Apr, 2020 8 commits
  3. 31 Mar, 2020 4 commits
  4. 30 Mar, 2020 5 commits
  5. 28 Mar, 2020 12 commits
  6. 27 Mar, 2020 5 commits
  7. 26 Mar, 2020 1 commit
    • Daniel Vetter's avatar
      drm: Add docs for managed resources · 9e1ed9fb
      Daniel Vetter authored
      All collected together to provide a consistent story in one patch,
      instead of the somewhat bumpy refactor-evolution leading to this.
      
      Also some thoughts on what the next steps could be:
      
      - Create a macro called devm_drm_dev_alloc() which essentially wraps
        the kzalloc(); devm_drm_dev_init(); drmm_add_final_kfree() combo.
        Needs to be a macro since we'll have to do some typeof trickery and
        casting to make this fully generic for all drivers that embed struct
        drm_device into their own thing.
      
      - A lot of the simple drivers now have essentially just
        drm_dev_unplug(); drm_atomic_helper_shutdown(); as their
        $bus_driver->remove hook. We could create a devm_mode_config_reset
        which sets drm_atomic_helper_shutdown as it's cleanup action, and a
        devm_drm_dev_register with drm_dev_unplug as it's cleanup action,
        and simple drivers wouldn't have a need for a ->remove function at
        all, and we could delete them.
      
      - For more complicated drivers we need drmm_ versions of a _lot_ more
        things. All the userspace visible objects (crtc, plane, encoder,
        crtc), anything else hanging of those (maybe a drmm_get_edid, at
        least for panels and other built-in stuff).
      
      Also some more thoughts on why we're not reusing devm_ with maybe a
      fake struct device embedded into the drm_device (we can't use the
      kdev, since that's in each drm_minor).
      
      - Code review gets extremely tricky, since every time you see a devm_
        you need to carefully check whether the fake device (with the
        drm_device lifetim) or the real device (with the lifetim of the
        underlying physical device and driver binding) are used. That's not
        going to help at all, and we have enormous amounts of drivers who
        use devm_ where they really shouldn't. Having different types makes
        sure the compiler type checks this for us and ensures correctness.
      
      - The set of functions are very much non-overlapping. E.g.
        devm_ioremap makes total sense, drmm_ioremap has the wrong lifetime,
        since hw resources need to be cleaned out at driver unbind and wont
        outlive that like a drm_device. Similar, but other way round for
        drmm_connector_init (which is the only correct version, devm_ for
        drm_connector is just buggy). Simply not having the wrong version
        again prevents bugs.
      
      Finally I guess this opens a huge todo for all the drivers. I'm
      semi-tempted to do a tree-wide s/devm_kzalloc/drmm_kzalloc/ since most
      likely that'll fix an enormous amount of bugs and most likely not
      cause any issues at all (aside from maybe holding onto memory slightly
      too long).
      
      v2:
      - Doc improvements from Laurent.
      - Also add kerneldoc for the new drmm_add_action_or_reset.
      
      v3:
      - Remove kerneldoc for drmm_remove_action.
      Reviewed-by: default avatarSam Ravnborg <sam@ravnborg.org>
      Cc: Sam Ravnborg <sam@ravnborg.org>
      Cc: Jonathan Corbet <corbet@lwn.net>
      Cc: linux-doc@vger.kernel.org
      Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: "Rafael J. Wysocki" <rafael@kernel.org>
      Signed-off-by: default avatarDaniel Vetter <daniel.vetter@intel.com>
      
      fixup docs
      Link: https://patchwork.freedesktop.org/patch/msgid/20200323144950.3018436-52-daniel.vetter@ffwll.ch
      9e1ed9fb