Index | Thread | Search

From:
Jonathan Gray <jsg@jsg.id.au>
Subject:
Re: apldrm: switch to drm_atomic_helper_commit_tail_rpm()
To:
Tobias Heider <tobias.heider@stusta.de>
Cc:
tech@openbsd.org, kettenis@openbsd.org
Date:
Wed, 26 Aug 2026 13:12:49 +1000

Download raw body.

Thread
On Tue, Aug 25, 2026 at 01:29:03PM +0200, Tobias Heider wrote:
> Hi,
> 
> I was investigating high latency for the display on my m2 macbook air
> and traced it back to drm_atomic_helper_wait_for_flip_done() in our
> custom dcp_atomic_commit_tail().
> 
> Looking closer at the asahi tree it turns out they switched back to
> the generic drm_atomic_helper_commit_tail_rpm() in
>  https://github.com/AsahiLinux/linux/commit/bd8ce96f6e76b98940352b18fe735a7943471ed7
> 
> I propose we do the same. With this the graphical interface feels noticably
> snappier.

this is effectively:

-	drm_atomic_helper_wait_for_flip_done(dev, state);
+	drm_atomic_helper_wait_for_vblanks(dev, state);

m1 mini still works here, didn't notice any changes

> 
> ok?

ok jsg@

> 
> diff /usr/src
> path + /usr/src
> commit - c9c6a4136a24cbff385a3cfe930ee8cf183d41a5
> blob - ffe2d92a4994103f8db5afe7bcd395ea70067d2b
> file + sys/dev/pci/drm/apple/apple_drv.c
> --- sys/dev/pci/drm/apple/apple_drv.c
> +++ sys/dev/pci/drm/apple/apple_drv.c
> @@ -237,26 +237,6 @@ static void apple_crtc_atomic_begin(struct drm_crtc *c
>  	}
>  }
>  
> -static void dcp_atomic_commit_tail(struct drm_atomic_state *old_state)
> -{
> -	struct drm_device *dev = old_state->dev;
> -
> -	drm_atomic_helper_commit_modeset_disables(dev, old_state);
> -
> -	drm_atomic_helper_commit_modeset_enables(dev, old_state);
> -
> -	drm_atomic_helper_commit_planes(dev, old_state,
> -					DRM_PLANE_COMMIT_ACTIVE_ONLY);
> -
> -	drm_atomic_helper_fake_vblank(old_state);
> -
> -	drm_atomic_helper_commit_hw_done(old_state);
> -
> -	drm_atomic_helper_wait_for_flip_done(dev, old_state);
> -
> -	drm_atomic_helper_cleanup_planes(dev, old_state);
> -}
> -
>  static void apple_crtc_cleanup(struct drm_crtc *crtc)
>  {
>  	drm_crtc_cleanup(crtc);
> @@ -279,7 +259,7 @@ static const struct drm_mode_config_funcs apple_mode_c
>  };
>  
>  static const struct drm_mode_config_helper_funcs apple_mode_config_helpers = {
> -	.atomic_commit_tail	= dcp_atomic_commit_tail,
> +	.atomic_commit_tail	= drm_atomic_helper_commit_tail_rpm,
>  };
>  
>  static void appledrm_connector_cleanup(struct drm_connector *connector)
> 
>