diff options
Diffstat (limited to 'drivers/gpu/drm/virtio/virtgpu_vq.c')
| -rw-r--r-- | drivers/gpu/drm/virtio/virtgpu_vq.c | 27 | 
1 files changed, 7 insertions, 20 deletions
| diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c b/drivers/gpu/drm/virtio/virtgpu_vq.c index 2e71e91278b4..7c052efe8836 100644 --- a/drivers/gpu/drm/virtio/virtgpu_vq.c +++ b/drivers/gpu/drm/virtio/virtgpu_vq.c @@ -91,9 +91,7 @@ virtio_gpu_get_vbuf(struct virtio_gpu_device *vgdev,  {  	struct virtio_gpu_vbuffer *vbuf; -	vbuf = kmem_cache_zalloc(vgdev->vbufs, GFP_KERNEL); -	if (!vbuf) -		return ERR_PTR(-ENOMEM); +	vbuf = kmem_cache_zalloc(vgdev->vbufs, GFP_KERNEL | __GFP_NOFAIL);  	BUG_ON(size > MAX_INLINE_CMD_SIZE ||  	       size < sizeof(struct virtio_gpu_ctrl_hdr)); @@ -147,10 +145,6 @@ static void *virtio_gpu_alloc_cmd_resp(struct virtio_gpu_device *vgdev,  	vbuf = virtio_gpu_get_vbuf(vgdev, cmd_size,  				   resp_size, resp_buf, cb); -	if (IS_ERR(vbuf)) { -		*vbuffer_p = NULL; -		return ERR_CAST(vbuf); -	}  	*vbuffer_p = vbuf;  	return (struct virtio_gpu_command *)vbuf->buf;  } @@ -205,7 +199,7 @@ void virtio_gpu_dequeue_ctrl_func(struct work_struct *work)  	struct list_head reclaim_list;  	struct virtio_gpu_vbuffer *entry, *tmp;  	struct virtio_gpu_ctrl_hdr *resp; -	u64 fence_id = 0; +	u64 fence_id;  	INIT_LIST_HEAD(&reclaim_list);  	spin_lock(&vgdev->ctrlq.qlock); @@ -232,23 +226,14 @@ void virtio_gpu_dequeue_ctrl_func(struct work_struct *work)  				DRM_DEBUG("response 0x%x\n", le32_to_cpu(resp->type));  		}  		if (resp->flags & cpu_to_le32(VIRTIO_GPU_FLAG_FENCE)) { -			u64 f = le64_to_cpu(resp->fence_id); - -			if (fence_id > f) { -				DRM_ERROR("%s: Oops: fence %llx -> %llx\n", -					  __func__, fence_id, f); -			} else { -				fence_id = f; -			} +			fence_id = le64_to_cpu(resp->fence_id); +			virtio_gpu_fence_event_process(vgdev, fence_id);  		}  		if (entry->resp_cb)  			entry->resp_cb(vgdev, entry);  	}  	wake_up(&vgdev->ctrlq.ack_queue); -	if (fence_id) -		virtio_gpu_fence_event_process(vgdev, fence_id); -  	list_for_each_entry_safe(entry, tmp, &reclaim_list, list) {  		if (entry->objs)  			virtio_gpu_array_put_free_delayed(vgdev, entry->objs); @@ -917,7 +902,8 @@ int virtio_gpu_cmd_get_edids(struct virtio_gpu_device *vgdev)  }  void virtio_gpu_cmd_context_create(struct virtio_gpu_device *vgdev, uint32_t id, -				   uint32_t nlen, const char *name) +				   uint32_t context_init, uint32_t nlen, +				   const char *name)  {  	struct virtio_gpu_ctx_create *cmd_p;  	struct virtio_gpu_vbuffer *vbuf; @@ -928,6 +914,7 @@ void virtio_gpu_cmd_context_create(struct virtio_gpu_device *vgdev, uint32_t id,  	cmd_p->hdr.type = cpu_to_le32(VIRTIO_GPU_CMD_CTX_CREATE);  	cmd_p->hdr.ctx_id = cpu_to_le32(id);  	cmd_p->nlen = cpu_to_le32(nlen); +	cmd_p->context_init = cpu_to_le32(context_init);  	strncpy(cmd_p->debug_name, name, sizeof(cmd_p->debug_name) - 1);  	cmd_p->debug_name[sizeof(cmd_p->debug_name) - 1] = 0;  	virtio_gpu_queue_ctrl_buffer(vgdev, vbuf); |