Hi all, So I finally unlazied and implemented generic nonblocking atomic commit support in the atomic helpers. Still an early draft, but stopped being a fireworks show on i915 at least. Rockchip still oopses somewhere, virtio conversion is entirely untested. Same for arc/hdlcd/fsl-du/sun4i. All these untested drivers must be converted since they've been a bit too lazy in their atomic implementations and simply didn't bother implementing nonblocking. The main patch adding the helpers explains the design, I just want to highlight one key aspect: This code fully relies on correct handling of crtc_state->event, drivers which don't get this right will fall over. To avoid too much trouble the helpers all have a 10s timeout, in case of broken drivers. This is both good - hopefully no more atomic drivers that just outright forget to implement drm event handling. And also a bit annoying for getting this series in since the above mentioned 5 atomic drivers all look like they haven't been properly tested with events. Stuff left to do: - Debug at least rockchip&virtio I'd say to make sure it works there flawlessly. Would be good to also convert some other drivers. - Get as much debugging on the other 4 drivers which have to be converted. Otoh they already have a broken atomic implementation in-tree, so me. - Kerneldoc for a bunch of functions is still missing, plus the updated overview section for nonblocking commits. - Bugfixing, but I hope that the helpers themselves are solid now. Cheers, Daniel Daniel Vetter (25): drm/atomic-helper: use for_each_*_in_state more drm/i915: Use drm_atomic_get_existing_plane_state drm/msm: Use for_each_*_in_state drm/rcar-du: Use for_each_*_in_state drm/vc4: Use for_each_plane_in_state drm/atomic: Add __drm_atomic_get_current_plane_state drm/exynos: Use for_each_crtc_in_state drm: Consolidate connector arrays in drm_atomic_state drm: Consolidate plane arrays in drm_atomic_state drm: Consolidate crtc arrays in drm_atomic_state drm/atomic-helper: Massage swap_state signature somewhat drm/arc: Nuke event_list drm/arc: Actually bother with handling atomic events. drm/arc: Implement nonblocking commit correctly drm/hdlcd: Use helper support for nonblocking commits drm/fsl-du: Implement some semblance of vblank event handling drm/hisilicon: Implement some semblance of vblank event handling drm/sun4i: Implement some semblance of vblank event handling drm/atomic: kerneldoc for drm_atomic_crtc_needs_modeset drm/atomic-helper: nonblocking commit support drm/i915: Signal drm events for atomic drm/i915: Roll out the helper nonblock tracking drm/rockchip: convert to helper nonblocking atomic commit drm/rockchip: Nuke pending event handling in preclose drm/virtio: Don't reinvent a flipping wheel Gustavo Padovan (1): drm/fence: add fence to drm_pending_event drivers/gpu/drm/arc/arcpgu.h | 1 - drivers/gpu/drm/arc/arcpgu_crtc.c | 19 +- drivers/gpu/drm/arc/arcpgu_drv.c | 27 +- drivers/gpu/drm/arm/hdlcd_drv.c | 8 +- drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c | 2 +- drivers/gpu/drm/drm_atomic.c | 102 +++--- drivers/gpu/drm/drm_atomic_helper.c | 421 ++++++++++++++++++++---- drivers/gpu/drm/drm_crtc.c | 3 + drivers/gpu/drm/drm_fops.c | 22 +- drivers/gpu/drm/exynos/exynos_drm_drv.c | 10 +- drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c | 23 +- drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c | 20 +- drivers/gpu/drm/i915/intel_atomic.c | 6 +- drivers/gpu/drm/i915/intel_display.c | 25 +- drivers/gpu/drm/i915/intel_sprite.c | 14 + drivers/gpu/drm/mediatek/mtk_drm_drv.c | 2 +- drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c | 20 +- drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c | 10 +- drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c | 12 +- drivers/gpu/drm/msm/msm_atomic.c | 37 +-- drivers/gpu/drm/nouveau/nouveau_usif.c | 1 - drivers/gpu/drm/omapdrm/omap_drv.c | 2 +- drivers/gpu/drm/rcar-du/rcar_du_kms.c | 10 +- drivers/gpu/drm/rcar-du/rcar_du_plane.c | 20 +- drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 25 -- drivers/gpu/drm/rockchip/rockchip_drm_drv.h | 11 - drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 73 +--- drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 35 +- drivers/gpu/drm/sti/sti_drv.c | 2 +- drivers/gpu/drm/sun4i/sun4i_crtc.c | 12 + drivers/gpu/drm/tegra/drm.c | 2 +- drivers/gpu/drm/vc4/vc4_crtc.c | 11 +- drivers/gpu/drm/vc4/vc4_drv.h | 2 +- drivers/gpu/drm/vc4/vc4_kms.c | 12 +- drivers/gpu/drm/vc4/vc4_plane.c | 5 +- drivers/gpu/drm/virtio/virtgpu_display.c | 48 +-- include/drm/drmP.h | 4 +- include/drm/drm_atomic.h | 79 ++++- include/drm/drm_atomic_helper.h | 12 +- include/drm/drm_crtc.h | 149 ++++++++- include/drm/drm_modeset_helper_vtables.h | 36 ++ 41 files changed, 847 insertions(+), 488 deletions(-) -- 2.8.1 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel