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; | ||||
| 
 | ||||
|     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); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -755,7 +755,7 @@ static void virtio_gpu_handle_cursor_cb(VirtIODevice *vdev, VirtQueue *vq) | ||||
|     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; | ||||
| 
 | ||||
| @ -765,6 +765,9 @@ static void virtio_gpu_process_cmdq(VirtIOGPU *g) | ||||
|         /* process command */ | ||||
|         VIRGL(g, virtio_gpu_virgl_process_cmd, virtio_gpu_simple_process_cmd, | ||||
|               g, cmd); | ||||
|         if (cmd->waiting) { | ||||
|             break; | ||||
|         } | ||||
|         QTAILQ_REMOVE(&g->cmdq, cmd, next); | ||||
|         if (virtio_gpu_stats_enabled(g->conf)) { | ||||
|             g->stats.requests++; | ||||
|  | ||||
| @ -76,6 +76,7 @@ struct virtio_gpu_ctrl_command { | ||||
|     VirtQueue *vq; | ||||
|     struct virtio_gpu_ctrl_hdr cmd_hdr; | ||||
|     uint32_t error; | ||||
|     bool waiting; | ||||
|     bool finished; | ||||
|     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 iovec **iov); | ||||
| void virtio_gpu_cleanup_mapping_iov(struct iovec *iov, uint32_t count); | ||||
| void virtio_gpu_process_cmdq(VirtIOGPU *g); | ||||
| 
 | ||||
| /* virtio-gpu-3d.c */ | ||||
| void virtio_gpu_virgl_process_cmd(VirtIOGPU *g, | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Gerd Hoffmann
						Gerd Hoffmann