On 2/13/26 20:35, Hamza Mahfooz wrote:
> On Thu, Feb 12, 2026 at 06:18:17PM -0600, Mario Limonciello wrote:
> 
>>> @@ -1881,13 +1886,43 @@ void drm_atomic_helper_wait_for_flip_done(struct 
>>> drm_device *dev,
>>>                     continue;
>>>             ret = wait_for_completion_timeout(&commit->flip_done, 10 * HZ);
>>> -           if (ret == 0)
>>> -                   drm_err(dev, "[CRTC:%d:%s] flip_done timed out\n",
>>> -                           crtc->base.id, crtc->name);
>>> +           if (!ret) {
>>> +                   switch (dev->reset_phase) {
>>> +                   case DRM_KMS_RESET_NONE:
>>> +                           drm_err(dev, "[CRTC:%d:%s] flip_done timed 
>>> out\n",
>>> +                                   crtc->base.id, crtc->name);
>>> +                           dev->reset_phase = DRM_KMS_RESET_FORCE_MODESET;
>>> +                           drm_kms_helper_hotplug_event(dev);
>>> +                           break;
>>
>> Since you're iterating multiple CRTCs if you manage to recover from one
>> with this call shouldn't you keep iterating the rest?
> 
> Most measures that the can be implemented at the kernel level (including
> forcing a full modeset), can't save the the current commit.

Why couldn't a full modeset?


> So, in all likelihood we will just end up waiting an extra 10 seconds per CRTC
> (assuming they haven't completed already, unrelated to the forced
> modeset).

In principle it's possible to do (the equivalent of) a modeset with the current 
state for all CRTCs, no need to do it separately per CRTC.


-- 
Earthling Michel Dänzer       \        GNOME / Xwayland / Mesa developer
https://redhat.com             \               Libre software enthusiast

Reply via email to