From: Jason Wang <jasowang@redhat.com>
To: Eugenio Perez Martin <eperezma@redhat.com>
Cc: qemu-level <qemu-devel@nongnu.org>,
Liuxiangdong <liuxiangdong5@huawei.com>,
Markus Armbruster <armbru@redhat.com>,
Harpreet Singh Anand <hanand@xilinx.com>,
Eric Blake <eblake@redhat.com>,
Laurent Vivier <lvivier@redhat.com>,
Parav Pandit <parav@mellanox.com>,
Cornelia Huck <cohuck@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Gautam Dawar <gdawar@xilinx.com>, Eli Cohen <eli@mellanox.com>,
"Gonglei (Arei)" <arei.gonglei@huawei.com>,
Zhu Lingshan <lingshan.zhu@intel.com>,
"Michael S. Tsirkin" <mst@redhat.com>, Cindy Lu <lulu@redhat.com>
Subject: Re: [RFC PATCH v9 12/23] vhost: Add opaque member to SVQElement
Date: Tue, 12 Jul 2022 15:53:15 +0800 [thread overview]
Message-ID: <bcaee23e-6d48-e35b-856b-97e1d397d418@redhat.com> (raw)
In-Reply-To: <CAJaqyWccXPE5A4wAQb5rymPGfEDjQzNMeVCHhjCAXww2fdk7Pw@mail.gmail.com>
在 2022/7/11 17:56, Eugenio Perez Martin 写道:
> On Mon, Jul 11, 2022 at 11:05 AM Jason Wang <jasowang@redhat.com> wrote:
>>
>> 在 2022/7/7 02:39, Eugenio Pérez 写道:
>>> When qemu injects buffers to the vdpa device it will be used to maintain
>>> contextual data. If SVQ has no operation, it will be used to maintain
>>> the VirtQueueElement pointer.
>>>
>>> Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
>>> ---
>>> hw/virtio/vhost-shadow-virtqueue.h | 3 ++-
>>> hw/virtio/vhost-shadow-virtqueue.c | 13 +++++++------
>>> 2 files changed, 9 insertions(+), 7 deletions(-)
>>>
>>> diff --git a/hw/virtio/vhost-shadow-virtqueue.h b/hw/virtio/vhost-shadow-virtqueue.h
>>> index 0e434e9fd0..a811f90e01 100644
>>> --- a/hw/virtio/vhost-shadow-virtqueue.h
>>> +++ b/hw/virtio/vhost-shadow-virtqueue.h
>>> @@ -16,7 +16,8 @@
>>> #include "hw/virtio/vhost-iova-tree.h"
>>>
>>> typedef struct SVQElement {
>>> - VirtQueueElement *elem;
>>> + /* Opaque data */
>>> + void *opaque;
>>
>> So I wonder if we can simply:
>>
>> 1) introduce a opaque to VirtQueueElement
> (answered in other thread, pasting here for completion)
>
> It does not work for messages that are not generated by the guest. For
> example, the ones used to restore the device state at live migration
> destination.
For the ones that requires more metadata, we can store it in elem->opaque?
>
>> 2) store pointers to ring_id_maps
>>
> I think you mean to keep storing VirtQueueElement at ring_id_maps?
Yes and introduce a pointer to metadata in VirtQueueElement
> Otherwise, looking for them will not be immediate.
>
>> Since
>>
>> 1) VirtQueueElement's member looks general
> Not general enough :).
>
>> 2) help to reduce the tricky codes like vhost_svq_empty_elem() and
>> vhost_svq_empty_elem().
>>
> I'm ok to change to whatever other method, but to allocate them
> individually seems worse to me. Both performance wise and because
> error paths are more complicated. Maybe it would be less tricky if I
> try to move the use of them less "by value" and more "as pointers"?
Or let's having a dedicated arrays (like desc_state/desc_extra in
kernel) instead of trying to reuse ring_id_maps.
Thanks
>
> Thanks!
>
>> Thanks
>>
>>
>>> /* Last descriptor of the chain */
>>> uint32_t last_chain_id;
>>> diff --git a/hw/virtio/vhost-shadow-virtqueue.c b/hw/virtio/vhost-shadow-virtqueue.c
>>> index c5e49e51c5..492bb12b5f 100644
>>> --- a/hw/virtio/vhost-shadow-virtqueue.c
>>> +++ b/hw/virtio/vhost-shadow-virtqueue.c
>>> @@ -237,7 +237,7 @@ static uint16_t vhost_svq_last_desc_of_chain(const VhostShadowVirtqueue *svq,
>>> */
>>> static bool vhost_svq_add(VhostShadowVirtqueue *svq, const struct iovec *out_sg,
>>> size_t out_num, const struct iovec *in_sg,
>>> - size_t in_num, VirtQueueElement *elem)
>>> + size_t in_num, void *opaque)
>>> {
>>> SVQElement *svq_elem;
>>> unsigned qemu_head;
>>> @@ -245,13 +245,12 @@ static bool vhost_svq_add(VhostShadowVirtqueue *svq, const struct iovec *out_sg,
>>> bool ok = vhost_svq_add_split(svq, out_sg, out_num, in_sg, in_num,
>>> &qemu_head);
>>> if (unlikely(!ok)) {
>>> - g_free(elem);
>>> return false;
>>> }
>>>
>>> n = out_num + in_num;
>>> svq_elem = &svq->ring_id_maps[qemu_head];
>>> - svq_elem->elem = elem;
>>> + svq_elem->opaque = opaque;
>>> svq_elem->last_chain_id = vhost_svq_last_desc_of_chain(svq, n, qemu_head);
>>> return true;
>>> }
>>> @@ -277,6 +276,8 @@ static bool vhost_svq_add_element(VhostShadowVirtqueue *svq,
>>> elem->in_num, elem);
>>> if (ok) {
>>> vhost_svq_kick(svq);
>>> + } else {
>>> + g_free(elem);
>>> }
>>>
>>> return ok;
>>> @@ -392,7 +393,7 @@ static void vhost_svq_disable_notification(VhostShadowVirtqueue *svq)
>>>
>>> static bool vhost_svq_is_empty_elem(SVQElement elem)
>>> {
>>> - return elem.elem == NULL;
>>> + return elem.opaque == NULL;
>>> }
>>>
>>> static SVQElement vhost_svq_empty_elem(void)
>>> @@ -483,7 +484,7 @@ static void vhost_svq_flush(VhostShadowVirtqueue *svq,
>>> break;
>>> }
>>>
>>> - elem = g_steal_pointer(&svq_elem.elem);
>>> + elem = g_steal_pointer(&svq_elem.opaque);
>>> virtqueue_fill(vq, elem, len, i++);
>>> }
>>>
>>> @@ -651,7 +652,7 @@ void vhost_svq_stop(VhostShadowVirtqueue *svq)
>>>
>>> for (unsigned i = 0; i < svq->vring.num; ++i) {
>>> g_autofree VirtQueueElement *elem = NULL;
>>> - elem = g_steal_pointer(&svq->ring_id_maps[i].elem);
>>> + elem = g_steal_pointer(&svq->ring_id_maps[i].opaque);
>>> if (elem) {
>>> virtqueue_detach_element(svq->vq, elem, 0);
>>> }
next prev parent reply other threads:[~2022-07-12 7:59 UTC|newest]
Thread overview: 65+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-06 18:39 [RFC PATCH v9 00/23] Net Control VQ support in SVQ Eugenio Pérez
2022-07-06 18:39 ` [RFC PATCH v9 01/23] vhost: Return earlier if used buffers overrun Eugenio Pérez
2022-07-08 8:52 ` Jason Wang
2022-07-06 18:39 ` [RFC PATCH v9 02/23] vhost: move descriptor translation to vhost_svq_vring_write_descs Eugenio Pérez
2022-07-06 18:39 ` [RFC PATCH v9 03/23] vdpa: delay set_vring_ready after DRIVER_OK Eugenio Pérez
2022-07-08 9:06 ` Jason Wang
2022-07-08 9:56 ` Eugenio Perez Martin
2022-07-08 9:59 ` Eugenio Perez Martin
2022-07-13 5:51 ` Michael S. Tsirkin
2022-07-13 6:18 ` Eugenio Perez Martin
2022-07-06 18:39 ` [RFC PATCH v9 04/23] vhost: Get vring base from vq, not svq Eugenio Pérez
2022-07-08 9:12 ` Jason Wang
2022-07-08 10:10 ` Eugenio Perez Martin
2022-07-12 7:42 ` Jason Wang
2022-07-12 9:42 ` Eugenio Perez Martin
2022-07-06 18:39 ` [RFC PATCH v9 05/23] vhost: Add ShadowVirtQueueStart operation Eugenio Pérez
2022-07-06 18:39 ` [RFC PATCH v9 06/23] virtio-net: Expose ctrl virtqueue logic Eugenio Pérez
2022-07-06 18:39 ` [RFC PATCH v9 07/23] vhost: add vhost_svq_push_elem Eugenio Pérez
2022-07-06 18:39 ` [RFC PATCH v9 08/23] vhost: Decouple vhost_svq_add_split from VirtQueueElement Eugenio Pérez
2022-07-11 8:00 ` Jason Wang
2022-07-11 8:27 ` Eugenio Perez Martin
2022-07-12 7:43 ` Jason Wang
2022-07-06 18:39 ` [RFC PATCH v9 09/23] vhost: Add SVQElement Eugenio Pérez
2022-07-11 9:00 ` Jason Wang
2022-07-11 9:33 ` Eugenio Perez Martin
2022-07-12 7:49 ` Jason Wang
2022-07-06 18:39 ` [RFC PATCH v9 10/23] vhost: Reorder vhost_svq_last_desc_of_chain Eugenio Pérez
2022-07-06 18:39 ` [RFC PATCH v9 11/23] vhost: Move last chain id to SVQ element Eugenio Pérez
2022-07-11 9:02 ` Jason Wang
2022-07-06 18:39 ` [RFC PATCH v9 12/23] vhost: Add opaque member to SVQElement Eugenio Pérez
2022-07-11 9:05 ` Jason Wang
2022-07-11 9:56 ` Eugenio Perez Martin
2022-07-12 7:53 ` Jason Wang [this message]
2022-07-12 8:32 ` Eugenio Perez Martin
2022-07-12 8:43 ` Jason Wang
2022-07-06 18:39 ` [RFC PATCH v9 13/23] vhost: Add vhost_svq_inject Eugenio Pérez
2022-07-11 9:14 ` Jason Wang
2022-07-11 9:43 ` Eugenio Perez Martin
2022-07-12 7:58 ` Jason Wang
2022-07-06 18:39 ` [RFC PATCH v9 14/23] vhost: add vhost_svq_poll Eugenio Pérez
2022-07-11 9:19 ` Jason Wang
2022-07-11 17:52 ` Eugenio Perez Martin
2022-07-06 18:40 ` [RFC PATCH v9 15/23] vhost: Add custom used buffer callback Eugenio Pérez
2022-07-06 18:40 ` [RFC PATCH v9 16/23] vhost: Add svq avail_handler callback Eugenio Pérez
2022-07-06 18:40 ` [RFC PATCH v9 17/23] vhost: add detach SVQ operation Eugenio Pérez
2022-07-06 18:40 ` [RFC PATCH v9 18/23] vdpa: Export vhost_vdpa_dma_map and unmap calls Eugenio Pérez
2022-07-11 9:22 ` Jason Wang
2022-07-06 18:40 ` [RFC PATCH v9 19/23] vdpa: Extract get features part from vhost_vdpa_get_max_queue_pairs Eugenio Pérez
2022-07-12 4:11 ` Jason Wang
2022-07-06 18:40 ` [RFC PATCH v9 20/23] vdpa: Buffer CVQ support on shadow virtqueue Eugenio Pérez
2022-07-12 7:17 ` Jason Wang
2022-07-12 9:47 ` Eugenio Perez Martin
2022-07-14 6:54 ` Eugenio Perez Martin
2022-07-14 7:04 ` Jason Wang
2022-07-14 17:37 ` Eugenio Perez Martin
2022-07-06 18:40 ` [RFC PATCH v9 21/23] vdpa: Add vhost_vdpa_start_control_svq Eugenio Pérez
2022-07-12 7:26 ` Jason Wang
2022-07-17 10:30 ` Eugenio Perez Martin
2022-07-17 11:00 ` Eugenio Perez Martin
2022-07-06 18:40 ` [RFC PATCH v9 22/23] vdpa: Inject virtio-net mac address via CVQ at start Eugenio Pérez
2022-07-06 18:40 ` [RFC PATCH v9 23/23] vdpa: Add x-svq to NetdevVhostVDPAOptions Eugenio Pérez
2022-07-07 6:23 ` Markus Armbruster
2022-07-08 10:53 ` Eugenio Perez Martin
2022-07-08 12:51 ` Markus Armbruster
2022-07-11 7:14 ` Eugenio Perez Martin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=bcaee23e-6d48-e35b-856b-97e1d397d418@redhat.com \
--to=jasowang@redhat.com \
--cc=arei.gonglei@huawei.com \
--cc=armbru@redhat.com \
--cc=cohuck@redhat.com \
--cc=eblake@redhat.com \
--cc=eli@mellanox.com \
--cc=eperezma@redhat.com \
--cc=gdawar@xilinx.com \
--cc=hanand@xilinx.com \
--cc=lingshan.zhu@intel.com \
--cc=liuxiangdong5@huawei.com \
--cc=lulu@redhat.com \
--cc=lvivier@redhat.com \
--cc=mst@redhat.com \
--cc=parav@mellanox.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.