mirror of https://gitee.com/openkylin/qemu.git
virtio-gpu: add support to enable/disable command processing
So we can stop rendering for a while in case we have to. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
This commit is contained in:
parent
3eb769fd1c
commit
0c55a1cfd3
|
@ -554,7 +554,8 @@ static void virtio_gpu_fence_poll(void *opaque)
|
||||||
VirtIOGPU *g = opaque;
|
VirtIOGPU *g = opaque;
|
||||||
|
|
||||||
virgl_renderer_poll();
|
virgl_renderer_poll();
|
||||||
if (g->inflight) {
|
virtio_gpu_process_cmdq(g);
|
||||||
|
if (!QTAILQ_EMPTY(&g->cmdq) || !QTAILQ_EMPTY(&g->fenceq)) {
|
||||||
timer_mod(g->fence_poll, qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) + 10);
|
timer_mod(g->fence_poll, qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) + 10);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -755,7 +755,7 @@ static void virtio_gpu_handle_cursor_cb(VirtIODevice *vdev, VirtQueue *vq)
|
||||||
qemu_bh_schedule(g->cursor_bh);
|
qemu_bh_schedule(g->cursor_bh);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void virtio_gpu_process_cmdq(VirtIOGPU *g)
|
void virtio_gpu_process_cmdq(VirtIOGPU *g)
|
||||||
{
|
{
|
||||||
struct virtio_gpu_ctrl_command *cmd;
|
struct virtio_gpu_ctrl_command *cmd;
|
||||||
|
|
||||||
|
@ -765,6 +765,9 @@ static void virtio_gpu_process_cmdq(VirtIOGPU *g)
|
||||||
/* process command */
|
/* process command */
|
||||||
VIRGL(g, virtio_gpu_virgl_process_cmd, virtio_gpu_simple_process_cmd,
|
VIRGL(g, virtio_gpu_virgl_process_cmd, virtio_gpu_simple_process_cmd,
|
||||||
g, cmd);
|
g, cmd);
|
||||||
|
if (cmd->waiting) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
QTAILQ_REMOVE(&g->cmdq, cmd, next);
|
QTAILQ_REMOVE(&g->cmdq, cmd, next);
|
||||||
if (virtio_gpu_stats_enabled(g->conf)) {
|
if (virtio_gpu_stats_enabled(g->conf)) {
|
||||||
g->stats.requests++;
|
g->stats.requests++;
|
||||||
|
|
|
@ -76,6 +76,7 @@ struct virtio_gpu_ctrl_command {
|
||||||
VirtQueue *vq;
|
VirtQueue *vq;
|
||||||
struct virtio_gpu_ctrl_hdr cmd_hdr;
|
struct virtio_gpu_ctrl_hdr cmd_hdr;
|
||||||
uint32_t error;
|
uint32_t error;
|
||||||
|
bool waiting;
|
||||||
bool finished;
|
bool finished;
|
||||||
QTAILQ_ENTRY(virtio_gpu_ctrl_command) next;
|
QTAILQ_ENTRY(virtio_gpu_ctrl_command) next;
|
||||||
};
|
};
|
||||||
|
@ -152,6 +153,7 @@ int virtio_gpu_create_mapping_iov(struct virtio_gpu_resource_attach_backing *ab,
|
||||||
struct virtio_gpu_ctrl_command *cmd,
|
struct virtio_gpu_ctrl_command *cmd,
|
||||||
struct iovec **iov);
|
struct iovec **iov);
|
||||||
void virtio_gpu_cleanup_mapping_iov(struct iovec *iov, uint32_t count);
|
void virtio_gpu_cleanup_mapping_iov(struct iovec *iov, uint32_t count);
|
||||||
|
void virtio_gpu_process_cmdq(VirtIOGPU *g);
|
||||||
|
|
||||||
/* virtio-gpu-3d.c */
|
/* virtio-gpu-3d.c */
|
||||||
void virtio_gpu_virgl_process_cmd(VirtIOGPU *g,
|
void virtio_gpu_virgl_process_cmd(VirtIOGPU *g,
|
||||||
|
|
Loading…
Reference in New Issue