On 6/30/26 16:36, Dmitry Osipenko wrote:
> On 6/25/26 06:02, Pengpeng Hou wrote:
>> virtio_gpu_init() sends GET_DISPLAY_INFO when scanouts are present and
>> waits for display_info_pending to clear. If the response never arrives,
>> the wait result is ignored and probe still succeeds.
>>
>> Return -ETIMEDOUT on display-info timeout. Because this happens after
>> virtio_device_ready(), reset the device and tear down modesetting before
>> using the existing vbuf and virtqueue cleanup path.
>>
>> Signed-off-by: Pengpeng Hou <[email protected]>
>> ---
>>  drivers/gpu/drm/virtio/virtgpu_kms.c | 12 ++++++++++--
>>  1 file changed, 10 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/virtio/virtgpu_kms.c 
>> b/drivers/gpu/drm/virtio/virtgpu_kms.c
>> index cfde9f573df6..31209bea97ae 100644
>> --- a/drivers/gpu/drm/virtio/virtgpu_kms.c
>> +++ b/drivers/gpu/drm/virtio/virtgpu_kms.c
>> @@ -262,11 +262,19 @@ int virtio_gpu_init(struct virtio_device *vdev, struct 
>> drm_device *dev)
>>                      virtio_gpu_cmd_get_edids(vgdev);
>>              virtio_gpu_cmd_get_display_info(vgdev);
>>              virtio_gpu_notify(vgdev);
>> -            wait_event_timeout(vgdev->resp_wq, !vgdev->display_info_pending,
>> -                               5 * HZ);
>> +            if (!wait_event_timeout(vgdev->resp_wq,
>> +                                    !vgdev->display_info_pending,
>> +                                    5 * HZ)) {
>> +                    DRM_ERROR("timed out waiting for display info\n");
>> +                    ret = -ETIMEDOUT;
>> +                    goto err_ready;
>> +            }
>>      }
>>      return 0;
>>  
>> +err_ready:
>> +    virtio_reset_device(vgdev->vdev);
>> +    virtio_gpu_modeset_fini(vgdev);
>>  err_scanouts:
>>      virtio_gpu_free_vbufs(vgdev);
>>  err_vbufs:
> 
> Rebased and applied to misc-next, thanks!

Now see [1] having valid point on a leaked memory allocations. It's not
trivial to free that memory properly. Perhaps best will be to revert
this change and use wait_event() without timeout, will think further on
it before proceeding.

[1]
https://sashiko.dev/#/patchset/20260625030202.82590-1-pengpeng%40iscas.ac.cn

-- 
Best regards,
Dmitry

Reply via email to