mirror of https://github.com/xemu-project/xemu.git
virtio-gpu: Refactor virtio_gpu_create_mapping_iov
Instead of passing the attach_backing object to extract nr_entries and offset, explicitly pass these as arguments to this function. This will be helpful when adding create_blob API. Cc: Gerd Hoffmann <kraxel@redhat.com> Signed-off-by: Vivek Kasireddy <vivek.kasireddy@intel.com> Message-Id: <20210526231429.1045476-8-vivek.kasireddy@intel.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
e64d4b6a9b
commit
70d3766231
|
@ -289,7 +289,8 @@ static void virgl_resource_attach_backing(VirtIOGPU *g,
|
||||||
VIRTIO_GPU_FILL_CMD(att_rb);
|
VIRTIO_GPU_FILL_CMD(att_rb);
|
||||||
trace_virtio_gpu_cmd_res_back_attach(att_rb.resource_id);
|
trace_virtio_gpu_cmd_res_back_attach(att_rb.resource_id);
|
||||||
|
|
||||||
ret = virtio_gpu_create_mapping_iov(g, &att_rb, cmd, NULL, &res_iovs, &res_niov);
|
ret = virtio_gpu_create_mapping_iov(g, att_rb.nr_entries, sizeof(att_rb),
|
||||||
|
cmd, NULL, &res_iovs, &res_niov);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
cmd->error = VIRTIO_GPU_RESP_ERR_UNSPEC;
|
cmd->error = VIRTIO_GPU_RESP_ERR_UNSPEC;
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -615,7 +615,7 @@ static void virtio_gpu_set_scanout(VirtIOGPU *g,
|
||||||
}
|
}
|
||||||
|
|
||||||
int virtio_gpu_create_mapping_iov(VirtIOGPU *g,
|
int virtio_gpu_create_mapping_iov(VirtIOGPU *g,
|
||||||
struct virtio_gpu_resource_attach_backing *ab,
|
uint32_t nr_entries, uint32_t offset,
|
||||||
struct virtio_gpu_ctrl_command *cmd,
|
struct virtio_gpu_ctrl_command *cmd,
|
||||||
uint64_t **addr, struct iovec **iov,
|
uint64_t **addr, struct iovec **iov,
|
||||||
uint32_t *niov)
|
uint32_t *niov)
|
||||||
|
@ -624,17 +624,17 @@ int virtio_gpu_create_mapping_iov(VirtIOGPU *g,
|
||||||
size_t esize, s;
|
size_t esize, s;
|
||||||
int e, v;
|
int e, v;
|
||||||
|
|
||||||
if (ab->nr_entries > 16384) {
|
if (nr_entries > 16384) {
|
||||||
qemu_log_mask(LOG_GUEST_ERROR,
|
qemu_log_mask(LOG_GUEST_ERROR,
|
||||||
"%s: nr_entries is too big (%d > 16384)\n",
|
"%s: nr_entries is too big (%d > 16384)\n",
|
||||||
__func__, ab->nr_entries);
|
__func__, nr_entries);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
esize = sizeof(*ents) * ab->nr_entries;
|
esize = sizeof(*ents) * nr_entries;
|
||||||
ents = g_malloc(esize);
|
ents = g_malloc(esize);
|
||||||
s = iov_to_buf(cmd->elem.out_sg, cmd->elem.out_num,
|
s = iov_to_buf(cmd->elem.out_sg, cmd->elem.out_num,
|
||||||
sizeof(*ab), ents, esize);
|
offset, ents, esize);
|
||||||
if (s != esize) {
|
if (s != esize) {
|
||||||
qemu_log_mask(LOG_GUEST_ERROR,
|
qemu_log_mask(LOG_GUEST_ERROR,
|
||||||
"%s: command data size incorrect %zu vs %zu\n",
|
"%s: command data size incorrect %zu vs %zu\n",
|
||||||
|
@ -647,7 +647,7 @@ int virtio_gpu_create_mapping_iov(VirtIOGPU *g,
|
||||||
if (addr) {
|
if (addr) {
|
||||||
*addr = NULL;
|
*addr = NULL;
|
||||||
}
|
}
|
||||||
for (e = 0, v = 0; e < ab->nr_entries; e++) {
|
for (e = 0, v = 0; e < nr_entries; e++) {
|
||||||
uint64_t a = le64_to_cpu(ents[e].addr);
|
uint64_t a = le64_to_cpu(ents[e].addr);
|
||||||
uint32_t l = le32_to_cpu(ents[e].length);
|
uint32_t l = le32_to_cpu(ents[e].length);
|
||||||
hwaddr len;
|
hwaddr len;
|
||||||
|
@ -659,8 +659,7 @@ int virtio_gpu_create_mapping_iov(VirtIOGPU *g,
|
||||||
a, &len, DMA_DIRECTION_TO_DEVICE);
|
a, &len, DMA_DIRECTION_TO_DEVICE);
|
||||||
if (!map) {
|
if (!map) {
|
||||||
qemu_log_mask(LOG_GUEST_ERROR, "%s: failed to map MMIO memory for"
|
qemu_log_mask(LOG_GUEST_ERROR, "%s: failed to map MMIO memory for"
|
||||||
" resource %d element %d\n",
|
" element %d\n", __func__, e);
|
||||||
__func__, ab->resource_id, e);
|
|
||||||
virtio_gpu_cleanup_mapping_iov(g, *iov, v);
|
virtio_gpu_cleanup_mapping_iov(g, *iov, v);
|
||||||
g_free(ents);
|
g_free(ents);
|
||||||
*iov = NULL;
|
*iov = NULL;
|
||||||
|
@ -743,8 +742,8 @@ virtio_gpu_resource_attach_backing(VirtIOGPU *g,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = virtio_gpu_create_mapping_iov(g, &ab, cmd, &res->addrs,
|
ret = virtio_gpu_create_mapping_iov(g, ab.nr_entries, sizeof(ab), cmd,
|
||||||
&res->iov, &res->iov_cnt);
|
&res->addrs, &res->iov, &res->iov_cnt);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
cmd->error = VIRTIO_GPU_RESP_ERR_UNSPEC;
|
cmd->error = VIRTIO_GPU_RESP_ERR_UNSPEC;
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -238,7 +238,7 @@ void virtio_gpu_get_display_info(VirtIOGPU *g,
|
||||||
void virtio_gpu_get_edid(VirtIOGPU *g,
|
void virtio_gpu_get_edid(VirtIOGPU *g,
|
||||||
struct virtio_gpu_ctrl_command *cmd);
|
struct virtio_gpu_ctrl_command *cmd);
|
||||||
int virtio_gpu_create_mapping_iov(VirtIOGPU *g,
|
int virtio_gpu_create_mapping_iov(VirtIOGPU *g,
|
||||||
struct virtio_gpu_resource_attach_backing *ab,
|
uint32_t nr_entries, uint32_t offset,
|
||||||
struct virtio_gpu_ctrl_command *cmd,
|
struct virtio_gpu_ctrl_command *cmd,
|
||||||
uint64_t **addr, struct iovec **iov,
|
uint64_t **addr, struct iovec **iov,
|
||||||
uint32_t *niov);
|
uint32_t *niov);
|
||||||
|
|
Loading…
Reference in New Issue