drm/virtio: batch display query
authorGerd Hoffmann <kraxel@redhat.com>
Fri, 14 Feb 2020 12:55:34 +0000 (13:55 +0100)
committerGerd Hoffmann <kraxel@redhat.com>
Mon, 17 Feb 2020 13:50:49 +0000 (14:50 +0100)
Move virtio_gpu_notify() to higher-level functions for
virtio_gpu_cmd_get_display_info() and virtio_gpu_cmd_get_edids().

virtio_gpu_config_changed_work_func() and virtio_gpu_init() will
batch commands and notify only once per update

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Chia-I Wu <olvaffe@gmail.com>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Link: http://patchwork.freedesktop.org/patch/msgid/20200214125535.26349-6-kraxel@redhat.com
drivers/gpu/drm/virtio/virtgpu_kms.c
drivers/gpu/drm/virtio/virtgpu_vq.c

index 4009c2f..8fd7ace 100644 (file)
@@ -44,6 +44,7 @@ static void virtio_gpu_config_changed_work_func(struct work_struct *work)
                if (vgdev->has_edid)
                        virtio_gpu_cmd_get_edids(vgdev);
                virtio_gpu_cmd_get_display_info(vgdev);
+               virtio_gpu_notify(vgdev);
                drm_helper_hpd_irq_event(vgdev->ddev);
                events_clear |= VIRTIO_GPU_EVENT_DISPLAY;
        }
@@ -205,6 +206,7 @@ int virtio_gpu_init(struct drm_device *dev)
        if (vgdev->has_edid)
                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);
        return 0;
index 4e9b2f2..2e108b4 100644 (file)
@@ -775,7 +775,6 @@ int virtio_gpu_cmd_get_display_info(struct virtio_gpu_device *vgdev)
        vgdev->display_info_pending = true;
        cmd_p->type = cpu_to_le32(VIRTIO_GPU_CMD_GET_DISPLAY_INFO);
        virtio_gpu_queue_ctrl_buffer(vgdev, vbuf);
-       virtio_gpu_notify(vgdev);
        return 0;
 }
 
@@ -903,7 +902,6 @@ int virtio_gpu_cmd_get_edids(struct virtio_gpu_device *vgdev)
                cmd_p->hdr.type = cpu_to_le32(VIRTIO_GPU_CMD_GET_EDID);
                cmd_p->scanout = cpu_to_le32(scanout);
                virtio_gpu_queue_ctrl_buffer(vgdev, vbuf);
-               virtio_gpu_notify(vgdev);
        }
 
        return 0;