virtio-gpu: Add virtio_gpu_find_check_resource
Move finding the resource and validating its backing storage into one function. Based-on-patch-by: Gerd Hoffmann <kraxel@redhat.com> Cc: Gerd Hoffmann <kraxel@redhat.com> Signed-off-by: Vivek Kasireddy <vivek.kasireddy@intel.com> Message-Id: <20210526231429.1045476-6-vivek.kasireddy@intel.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
9192a40655
commit
25c001a403
@ -35,6 +35,10 @@
|
||||
|
||||
static struct virtio_gpu_simple_resource*
|
||||
virtio_gpu_find_resource(VirtIOGPU *g, uint32_t resource_id);
|
||||
static struct virtio_gpu_simple_resource *
|
||||
virtio_gpu_find_check_resource(VirtIOGPU *g, uint32_t resource_id,
|
||||
bool require_backing,
|
||||
const char *caller, uint32_t *error);
|
||||
|
||||
static void virtio_gpu_cleanup_mapping(VirtIOGPU *g,
|
||||
struct virtio_gpu_simple_resource *res);
|
||||
@ -46,7 +50,8 @@ void virtio_gpu_update_cursor_data(VirtIOGPU *g,
|
||||
struct virtio_gpu_simple_resource *res;
|
||||
uint32_t pixels;
|
||||
|
||||
res = virtio_gpu_find_resource(g, resource_id);
|
||||
res = virtio_gpu_find_check_resource(g, resource_id, false,
|
||||
__func__, NULL);
|
||||
if (!res) {
|
||||
return;
|
||||
}
|
||||
@ -114,6 +119,37 @@ virtio_gpu_find_resource(VirtIOGPU *g, uint32_t resource_id)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static struct virtio_gpu_simple_resource *
|
||||
virtio_gpu_find_check_resource(VirtIOGPU *g, uint32_t resource_id,
|
||||
bool require_backing,
|
||||
const char *caller, uint32_t *error)
|
||||
{
|
||||
struct virtio_gpu_simple_resource *res;
|
||||
|
||||
res = virtio_gpu_find_resource(g, resource_id);
|
||||
if (!res) {
|
||||
qemu_log_mask(LOG_GUEST_ERROR, "%s: invalid resource specified %d\n",
|
||||
caller, resource_id);
|
||||
if (error) {
|
||||
*error = VIRTIO_GPU_RESP_ERR_INVALID_RESOURCE_ID;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (require_backing) {
|
||||
if (!res->iov || !res->image) {
|
||||
qemu_log_mask(LOG_GUEST_ERROR, "%s: no backing storage %d\n",
|
||||
caller, resource_id);
|
||||
if (error) {
|
||||
*error = VIRTIO_GPU_RESP_ERR_UNSPEC;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
void virtio_gpu_ctrl_response(VirtIOGPU *g,
|
||||
struct virtio_gpu_ctrl_command *cmd,
|
||||
struct virtio_gpu_ctrl_hdr *resp,
|
||||
@ -352,11 +388,9 @@ static void virtio_gpu_transfer_to_host_2d(VirtIOGPU *g,
|
||||
virtio_gpu_t2d_bswap(&t2d);
|
||||
trace_virtio_gpu_cmd_res_xfer_toh_2d(t2d.resource_id);
|
||||
|
||||
res = virtio_gpu_find_resource(g, t2d.resource_id);
|
||||
if (!res || !res->iov) {
|
||||
qemu_log_mask(LOG_GUEST_ERROR, "%s: illegal resource specified %d\n",
|
||||
__func__, t2d.resource_id);
|
||||
cmd->error = VIRTIO_GPU_RESP_ERR_INVALID_RESOURCE_ID;
|
||||
res = virtio_gpu_find_check_resource(g, t2d.resource_id, true,
|
||||
__func__, &cmd->error);
|
||||
if (!res) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -410,11 +444,9 @@ static void virtio_gpu_resource_flush(VirtIOGPU *g,
|
||||
trace_virtio_gpu_cmd_res_flush(rf.resource_id,
|
||||
rf.r.width, rf.r.height, rf.r.x, rf.r.y);
|
||||
|
||||
res = virtio_gpu_find_resource(g, rf.resource_id);
|
||||
res = virtio_gpu_find_check_resource(g, rf.resource_id, false,
|
||||
__func__, &cmd->error);
|
||||
if (!res) {
|
||||
qemu_log_mask(LOG_GUEST_ERROR, "%s: illegal resource specified %d\n",
|
||||
__func__, rf.resource_id);
|
||||
cmd->error = VIRTIO_GPU_RESP_ERR_INVALID_RESOURCE_ID;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -497,11 +529,9 @@ static void virtio_gpu_set_scanout(VirtIOGPU *g,
|
||||
}
|
||||
|
||||
/* create a surface for this scanout */
|
||||
res = virtio_gpu_find_resource(g, ss.resource_id);
|
||||
res = virtio_gpu_find_check_resource(g, ss.resource_id, true,
|
||||
__func__, &cmd->error);
|
||||
if (!res) {
|
||||
qemu_log_mask(LOG_GUEST_ERROR, "%s: illegal resource specified %d\n",
|
||||
__func__, ss.resource_id);
|
||||
cmd->error = VIRTIO_GPU_RESP_ERR_INVALID_RESOURCE_ID;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -709,11 +739,9 @@ virtio_gpu_resource_detach_backing(VirtIOGPU *g,
|
||||
virtio_gpu_bswap_32(&detach, sizeof(detach));
|
||||
trace_virtio_gpu_cmd_res_back_detach(detach.resource_id);
|
||||
|
||||
res = virtio_gpu_find_resource(g, detach.resource_id);
|
||||
if (!res || !res->iov) {
|
||||
qemu_log_mask(LOG_GUEST_ERROR, "%s: illegal resource specified %d\n",
|
||||
__func__, detach.resource_id);
|
||||
cmd->error = VIRTIO_GPU_RESP_ERR_INVALID_RESOURCE_ID;
|
||||
res = virtio_gpu_find_check_resource(g, detach.resource_id, true,
|
||||
__func__, &cmd->error);
|
||||
if (!res) {
|
||||
return;
|
||||
}
|
||||
virtio_gpu_cleanup_mapping(g, res);
|
||||
|
Loading…
Reference in New Issue
Block a user