在 2022/8/3 01:57, Eugenio Pérez 写道:
> There is no need to get them by parameter, since they're contained in
> VhostVDPAState. The only useful information was the written length in
> out.
>
> Simplify the function removing those.
>
> Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
> ---
> net/vhost-vdpa.c | 17 ++++++-----------
> 1 file changed, 6 insertions(+), 11 deletions(-)
>
> diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c
> index ac1810723c..c6699edfbc 100644
> --- a/net/vhost-vdpa.c
> +++ b/net/vhost-vdpa.c
> @@ -303,34 +303,29 @@ dma_map_err:
>
> /**
> * Copy the guest element into a dedicated buffer suitable to be sent to NIC
> - *
> - * @iov: [0] is the out buffer, [1] is the in one
> */
> static bool vhost_vdpa_net_cvq_map_elem(VhostVDPAState *s,
> VirtQueueElement *elem,
> - struct iovec *iov)
> + size_t *out_len)
> {
> size_t in_copied;
> bool ok;
>
> - iov[0].iov_base = s->cvq_cmd_out_buffer;
> ok = vhost_vdpa_cvq_map_buf(&s->vhost_vdpa, elem->out_sg, elem->out_num,
> - vhost_vdpa_net_cvq_cmd_len(), iov[0].iov_base,
> - &iov[0].iov_len, false);
> + vhost_vdpa_net_cvq_cmd_len(),
> + s->cvq_cmd_out_buffer, out_len, false);
> if (unlikely(!ok)) {
> return false;
> }
>
> - iov[1].iov_base = s->cvq_cmd_in_buffer;
> ok = vhost_vdpa_cvq_map_buf(&s->vhost_vdpa, NULL, 0,
> - sizeof(virtio_net_ctrl_ack), iov[1].iov_base,
> - &in_copied, true);
> + sizeof(virtio_net_ctrl_ack),
> + s->cvq_cmd_in_buffer, &in_copied, true);
I'd suggest to do some tweak to make it easier for the reviewers:
- let vhost_vdpa_cvq_map_buf() and vhost_vdpa_net_cvq_map_elem() return
ssize_t and drop the confusing written/out_len parameter of those
functions.
- rename vhost_vdpa_net_cvq_map_elem() to
vhost_vdpa_net_cvq_bounce_map() since it uses a bounce buffer actually
Thanks
> if (unlikely(!ok)) {
> vhost_vdpa_cvq_unmap_buf(&s->vhost_vdpa, s->cvq_cmd_out_buffer);
> return false;
> }
>
> - iov[1].iov_len = sizeof(virtio_net_ctrl_ack);
> return true;
> }
>
> @@ -395,7 +390,7 @@ static int vhost_vdpa_net_handle_ctrl_avail(VhostShadowVirtqueue *svq,
> int r = -EINVAL;
> bool ok;
>
> - ok = vhost_vdpa_net_cvq_map_elem(s, elem, dev_buffers);
> + ok = vhost_vdpa_net_cvq_map_elem(s, elem, &dev_buffers[0].iov_len);
> if (unlikely(!ok)) {
> goto out;
> }