1. 19 7月, 2016 3 次提交
  2. 12 7月, 2016 1 次提交
  3. 24 6月, 2016 1 次提交
  4. 22 6月, 2016 2 次提交
  5. 17 6月, 2016 2 次提交
  6. 10 6月, 2016 2 次提交
    • D
      drm/atomic-helper: nonblocking commit support · 9f2a7950
      Daniel Vetter 提交于
      Design ideas:
      
      - split up the actual commit into different phases, and have
        completions for each of them. This will be useful for the future
        when we want to interleave phases much more aggressively, for e.g.
        queue depth > 1. For not it's just a minimal optimization compared
        to current common nonblocking implementation patterns from drivers,
        which all stall for the entire commit to complete, including vblank
        waits and cleanups.
      
      - Extract a separate atomic_commit_hw hook since that's the part most
        drivers will need to overwrite, hopefully allowing even more shared
        code.
      
      - Enforce EBUSY seamntics by attaching one of the completions to the
        flip_done vblank event. Side benefit of forcing atomic drivers using
        these helpers to implement event handlign at least semi-correct. I'm
        evil that way ;-)
      
      - Ridiculously modular, as usual.
      
      - The main tracking unit for a commit stays struct drm_atomic_state,
        and the ownership rules for that are unchanged. Ownership still
        gets transferred to the driver (and subsequently to the worker) on
        successful commits. What is added is a small, per-crtc, refcounted
        structure to track pending commits called struct drm_crtc_commit.
        No actual state is attached to that though, it's purely for ordering
        and waiting.
      
      - Dependencies are implicitly handled by assuming that any CRTC part
        of &drm_atomic_state is a dependency, and that the current commit
        must wait for any commits to complete on those CRTC. This way
        drivers can easily add more depencies using
        drm_atomic_get_crtc_state(), which is very natural since in most
        case a dependency exists iff there's some bit of state that needs to
        be cross checked.
      
        Removing depencies is not possible, drivers simply need to be
        careful to not include every CRTC in a commit if that's not
        necessary. Which is a good idea anyway, since that also avoids
        ww_mutex lock contention.
      
      - Queue depth > 1 sees some prep work in this patch by adding a stall
        paramater to drm_atomic_helper_swap_states(). To be able to push
        commits entirely free-standing and in a deeper queue through the
        back-end the driver must not access any obj->state pointers. This
        means we need to track the old state in drm_atomic_state (much
        easier with the consolidated arrays), and pass them all explicitly
        to driver backends (this will be serious amounts of churn).
      
        Once that's done stall can be set to false in swap_states.
      
      v2: Dont ask for flip_done signalling when the CRTC is off and stays
      off: Drivers don't handle events in that case. Instead complete right
      away. This way future commits don't need to have special-case logic,
      but can keep blocking for the flip_done completion.
      
      v3: Tons of fixes:
      - Stall for preceeding commit for real, not the current one by
        accident.
      - Add WARN_ON in case drivers don't fire the drm event.
      - Don't double-free drm events.
      
      v4: Make legacy cursor not stall.
      
      v5: Extend the helper hook to cover the entire commit tail. Some
      drivers need special code for cleanup and vblank waiting, this makes
      it a bit more useful. Inspired by the rockchip driver.
      
      v6: Add WARN_ON to catch drivers who forget to send out the
      drm event.
      
      v7: Fixup the stalls in swap_state for real!!
      
      v8:
      - Fixup trailing whitespace, spotted by Maarten.
      - Actually wait for flip_done in cleanup_done, like the comment says
        we should do. Thanks a lot for Tomeu for helping with debugging this
        on.
      
      v9: Now with awesome kerneldoc!
      
      v10: Split out drm_crtc_commit tracking infrastructure.
      
      v:
      - Add missing static (Gustavo).
      - Split out the sync functions, only do the actual nonblocking
        logic in this patch (Maarten).
      
      Cc: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
      Tested-by: NTomeu Vizoso <tomeu.vizoso@collabora.com>
      Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Cc: Tomeu Vizoso <tomeu.vizoso@gmail.com>
      Cc: Daniel Stone <daniels@collabora.com>
      Tested-by: NLiviu Dudau <Liviu.Dudau@arm.com>
      Reviewed-by: NMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Testcase: igt/kms_flip/*
      Testcase: igt/kms_cursor*
      Testcase: igt/kms*plane*
      Signed-off-by: NDaniel Vetter <daniel.vetter@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/1465388359-8070-10-git-send-email-daniel.vetter@ffwll.ch
      9f2a7950
    • D
      drm/atomic: Add struct drm_crtc_commit to track async updates · 3b24f7d6
      Daniel Vetter 提交于
      Split out from my big nonblocking atomic commit helper code as prep
      work. While add it, also add some neat asciiart to document how it's
      supposed to be used.
      
      v2: Resurrect misplaced hunk in the kerneldoc.
      
      v3: Wording improvements from Liviu.
      Tested-by: NTomeu Vizoso <tomeu.vizoso@collabora.com>
      Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Cc: Tomeu Vizoso <tomeu.vizoso@gmail.com>
      Cc: Daniel Stone <daniels@collabora.com>
      Tested-by: NLiviu Dudau <Liviu.Dudau@arm.com>
      Reviewed-by: NMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/1465388359-8070-8-git-send-email-daniel.vetter@ffwll.ch
      3b24f7d6
  7. 09 6月, 2016 1 次提交
  8. 07 6月, 2016 3 次提交
  9. 04 6月, 2016 1 次提交
  10. 03 6月, 2016 1 次提交
  11. 02 6月, 2016 3 次提交
  12. 06 5月, 2016 1 次提交
  13. 05 5月, 2016 2 次提交
  14. 02 5月, 2016 1 次提交
  15. 27 4月, 2016 1 次提交
    • D
      drm: Switch blobs to the new generic modeset obj refcounting · 152ef5fa
      Daniel Vetter 提交于
      Need to move the free function around a bit, but otherwise mostly
      just removing code.
      
      Specifically we can nuke all the _locked variants since the weak idr
      reference is now protected by the idr_mutex, which we never hold
      anywhere expect in the lookup/reg/unreg functions. And those never
      call anything else.
      
      Another benefit of this is that this patch switches the weak reference
      logic from kref_put_mutex to kref_get_unless_zero. And the later is in
      general more flexible wrt accomodating multiple weak references
      protected by different locks, which might or might not come handy
      eventually.
      
      But one consequence of that switch is that we need to acquire the
      blob_lock from the free function for the list_del calls. That's a bit
      tricky to pull off, but works well if we pick the exact same scheme as
      is already used for framebuffers. Most important changes:
      
      - filp list is maintainer by create/destroy_blob ioctls directly
        (already the case, so we can just remove the redundant list_del from
        the free function).
      
      - filp close handler walks the filp-private list lockless - works
        because we know no one else can access it. I copied the same comment
        from the fb code over to explain this.
      
      - Otherwise we need to sufficiently restrict blob_lock critical
        sections to avoid all the unreference calls. Easy to do once the
        blob_lock only protects the list, and no longer the weak reference.
      
      Cc: Dave Airlie <airlied@gmail.com>
      Cc: Daniel Stone <daniels@collabora.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@intel.com>
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      152ef5fa
  16. 22 4月, 2016 2 次提交
  17. 20 4月, 2016 2 次提交
  18. 15 4月, 2016 1 次提交
  19. 31 3月, 2016 1 次提交
  20. 29 3月, 2016 2 次提交
  21. 08 3月, 2016 2 次提交
  22. 03 3月, 2016 1 次提交
  23. 19 2月, 2016 1 次提交
    • M
      drm/atomic: Allow for holes in connector state, v2. · 5fff80bb
      Maarten Lankhorst 提交于
      Because we record connector_mask using 1 << drm_connector_index now
      the connector_mask should stay the same even when other connectors
      are removed. This was not the case with MST, in that case when removing
      a connector all other connectors may change their index.
      
      This is fixed by waiting until the first get_connector_state to allocate
      connector_state, and force reallocation when state is too small.
      
      As a side effect connector arrays no longer have to be preallocated,
      and can be allocated on first use which means a less allocations in
      the page flip only path.
      
      Changes since v1:
      - Whitespace. (Ville)
      - Call ida_remove when destroying the connector. (Ville)
      - u32 alloc -> int. (Ville)
      
      Fixes: 14de6c44 ("drm/atomic: Remove drm_atomic_connectors_for_crtc.")
      Signed-off-by: NMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Reviewed-by: NLyude <cpaul@redhat.com>
      Reviewed-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      5fff80bb
  24. 09 2月, 2016 3 次提交