This patchset adds the callbacks begin_fb_access and end_fb_access to struct drm_plane_helper_funcs. They provide hooks to acquire and release resources that are only held during the commit. It adds related simple-KMS helpers and converts a number of drivers. A number of drivers call drm_gem_fb_begin_cpu_access() in the plane's atomic_update. While the call can fail, it's too late to handle the error correctly within the atomic update. A correct place would be in prepare_fb, where the atomic commit can still be aborted upon errors. But the corresponding drm_gem_fb_end_cpu_access() needs to be called at the end of the commit, so that the BO resource is available again for other drivers. Hence, calling drm_Gem_fb_end_cpu_access() cannot be located in the plane's cleanup_pl, which is only called after the next page flip. (With an unbounded waiting time in between.) Therefore introduce the begin_fb_access and end_fb_access callbacks in struct drm_plane_helper_funcs. The atomic helpers call begin_fb_access when preparing the planes for the commit and end_fb_access when cleaning up afterwards. The argument to end_fb_access is the new plane state, so that acquired resources are not held after the end of the commit. With this in place, move drm_gem_fb_{begin,end}_cpu_access() behind the new callbacks for shadow-plane helpers and 2 other drivers. For the shadow-plane helpers, also move the automatic vmap/vunmap behind the new callbacks. The shadow-plane mapping is only required during the atomic commit. Tested with combinations of radeon, udl and simpledrm under X11, Weston and Wayland-Gnome. Thomas Zimmermann (5): drm/atomic-helper: Add {begin,end}_fb_access to plane helpers drm/gem: Implement shadow-plane {begin,end}_fb_access with vmap drm/gem: Handle drm_gem_{begin,end}_cpu_access() in shadow-plane helpers drm/repaper: Implement {begin,end}_fb_access helpers drm/st7586: Implement {begin,end}_fb_access helpers drivers/gpu/drm/drm_atomic_helper.c | 34 ++++++++++- drivers/gpu/drm/drm_gem_atomic_helper.c | 78 +++++++++++++----------- drivers/gpu/drm/drm_simple_kms_helper.c | 26 ++++++++ drivers/gpu/drm/solomon/ssd130x.c | 10 +-- drivers/gpu/drm/tiny/gm12u320.c | 10 +-- drivers/gpu/drm/tiny/ofdrm.c | 8 +-- drivers/gpu/drm/tiny/repaper.c | 30 +++++++-- drivers/gpu/drm/tiny/simpledrm.c | 10 +-- drivers/gpu/drm/tiny/st7586.c | 44 ++++++++----- drivers/gpu/drm/udl/udl_modeset.c | 11 +--- include/drm/drm_gem_atomic_helper.h | 20 +++--- include/drm/drm_modeset_helper_vtables.h | 27 ++++++++ include/drm/drm_simple_kms_helper.h | 20 ++++++ 13 files changed, 217 insertions(+), 111 deletions(-) base-commit: 8c797a984264f04708d2099e83c85978a0fede89 prerequisite-patch-id: c2b2f08f0eccc9f5df0c0da49fa1d36267deb11d prerequisite-patch-id: c67e5d886a47b7d0266d81100837557fda34cb24 prerequisite-patch-id: 3f204510fcbf9530d6540bd8e6128cce598988b6 -- 2.38.0