Sat, 19 Sep 2020 12:37:25 -0700 Rob Clark wrote:
>  
> @@ -1797,6 +1797,7 @@ int drm_atomic_helper_commit(struct drm_device *dev,
>                            struct drm_atomic_state *state,
>                            bool nonblock)
>  {
> +     struct kthread_worker *worker = NULL;
>       int ret;
>  
>       if (state->async_update) {
> @@ -1814,7 +1815,7 @@ int drm_atomic_helper_commit(struct drm_device *dev,
>       if (ret)
>               return ret;
>  
> -     INIT_WORK(&state->commit_work, commit_work);
> +     kthread_init_work(&state->commit_kwork, commit_work);
>  
>       ret = drm_atomic_helper_prepare_planes(dev, state);
>       if (ret)
> @@ -1857,8 +1858,12 @@ int drm_atomic_helper_commit(struct drm_device *dev,
>        */
>  
>       drm_atomic_state_get(state);
> +
>       if (nonblock)
> -             queue_work(system_unbound_wq, &state->commit_work);
> +             worker = drm_atomic_pick_worker(state);
> +
> +     if (worker)
> +             kthread_queue_work(worker, &state->commit_kwork);
>       else
>               commit_tail(state);

A minor change in behavior: commit_tail() would have nothing to do with
either worker or work, rather than the fallback in case no worker is
available.

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to