qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Kangjie Xu <kangjie.xu@linux.alibaba.com>
To: Jason Wang <jasowang@redhat.com>
Cc: qemu-devel@nongnu.org, "Michael S. Tsirkin" <mst@redhat.com>,
	eduardo@habkost.net, marcel.apfelbaum@gmail.com, f4bug@amsat.org,
	wangyanan55@huawei.com, hengqi@linux.alibaba.com,
	Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Subject: Re: [PATCH v3 13/15] virtio-net: support queue reset
Date: Tue, 6 Sep 2022 00:25:39 +0800	[thread overview]
Message-ID: <7d0b6e52-c6c7-bd6d-3669-659a2573e133@linux.alibaba.com> (raw)
In-Reply-To: <8e7c93bc-2430-f0fb-d425-5e43fde23c14@redhat.com>


在 2022/9/5 16:30, Jason Wang 写道:
>
> 在 2022/8/25 16:08, Kangjie Xu 写道:
>> From: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
>>
>> virtio-net and vhost-kernel implement queue reset.
>> Queued packets in the corresponding queue pair are flushed
>> or purged.
>>
>> Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
>> Signed-off-by: Kangjie Xu <kangjie.xu@linux.alibaba.com>
>> ---
>>   hw/net/virtio-net.c | 18 ++++++++++++++++++
>>   1 file changed, 18 insertions(+)
>>
>> diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
>> index 27b59c0ad6..d774a3e652 100644
>> --- a/hw/net/virtio-net.c
>> +++ b/hw/net/virtio-net.c
>> @@ -540,6 +540,23 @@ static RxFilterInfo 
>> *virtio_net_query_rxfilter(NetClientState *nc)
>>       return info;
>>   }
>>   +static void virtio_net_queue_reset(VirtIODevice *vdev, uint32_t 
>> queue_index)
>> +{
>> +    VirtIONet *n = VIRTIO_NET(vdev);
>> +    NetClientState *nc = qemu_get_subqueue(n->nic, vq2q(queue_index));
>> +
>> +    if (!nc->peer) {
>> +        return;
>> +    }
>> +
>> +    if (get_vhost_net(nc->peer) &&
>> +        nc->peer->info->type == NET_CLIENT_DRIVER_TAP) {
>> +        vhost_net_virtqueue_reset(vdev, nc, queue_index);
>> +    }
>> +
>> +    flush_or_purge_queued_packets(nc);
>
>
> But the codes doesn't prevent the usersapce datapath from being used? 
> (e.g vhost=off)
>
> E.g vhost_net_start_one() had:
>
>     if (net->nc->info->poll) {
>         net->nc->info->poll(net->nc, false);
>     }
I review this part in vhost_net_start/stop_one().

I didn't take the usersapce datapath into consideration. If we don't 
prevent it, the userspace datapath may access it and causes some 
problems. From this point, we should disable it.

But if we add net->nc->info->poll in vq reset, it can only operate at 
queue-pair level, which obeys "per-virtqueue".

What's your opinion on this point? I think it's ok to add it in vq reset.

>
> And I will wonder if it's better to consider to:
>
> 1) factor out the per virtqueue start/stop from 
> vhost_net_start/stop_one()
>
> 2) simply use the helper factored out via step 1)
>
> Thanks
>
I have a different idea about it, vhost_virtqueue_start/stop()(in 
hw/virtio/vhost.c) are already good abstractions of per virtqueue 
start/stop.

These two functions are used in vhost_dev_start. It's just because 
vhost-net needs some configuration, so we add net->nc->info->poll and 
set_backend for it. But for other devices using vhost_dev_start, 
set_backend and net->nc->info->poll may be not necessary.

I think your apporach to abstract per virtqueue start/stop from 
vhost_net_start/stop_one() will break the generality of 
vhost_dev_start(), which is a common interface for different devices.

To conclude my opinions

1. I think we need to add net->nc->info->poll in our 
vhost_net_virtqueue_reset() and vhost_net_virtqueue_restart()

2. We still need vhost_net_virtqueue_reset() and 
vhost_net_virtqueue_restart().

     a. vhost_net_virtqueue_reset() is a wrapper for vhost_virtqueue_stop().

     b. vhost_net_virtqueue_restart() is a wrapper for 
vhost_virtqueue_start().

Thanks

>
>> +}
>> +
>>   static void virtio_net_reset(VirtIODevice *vdev)
>>   {
>>       VirtIONet *n = VIRTIO_NET(vdev);
>> @@ -3784,6 +3801,7 @@ static void virtio_net_class_init(ObjectClass 
>> *klass, void *data)
>>       vdc->set_features = virtio_net_set_features;
>>       vdc->bad_features = virtio_net_bad_features;
>>       vdc->reset = virtio_net_reset;
>> +    vdc->queue_reset = virtio_net_queue_reset;
>>       vdc->set_status = virtio_net_set_status;
>>       vdc->guest_notifier_mask = virtio_net_guest_notifier_mask;
>>       vdc->guest_notifier_pending = virtio_net_guest_notifier_pending;


  parent reply	other threads:[~2022-09-05 16:26 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-25  8:08 [PATCH v3 00/15] Support VIRTIO_F_RING_RESET for virtio-net, vhost-net kernel in virtio pci-modern Kangjie Xu
2022-08-25  8:08 ` [PATCH v3 01/15] virtio: sync relevant definitions with linux Kangjie Xu
2022-09-05  4:56   ` Jason Wang
2022-08-25  8:08 ` [PATCH v3 02/15] virtio: introduce __virtio_queue_reset() Kangjie Xu
2022-08-25  8:08 ` [PATCH v3 03/15] virtio: introduce virtio_queue_reset() Kangjie Xu
2022-08-25  8:08 ` [PATCH v3 04/15] virtio: introduce virtio_queue_enable() Kangjie Xu
2022-08-25  8:08 ` [PATCH v3 05/15] virtio: core: vq reset feature negotation support Kangjie Xu
2022-08-25  8:08 ` [PATCH v3 06/15] virtio-pci: support queue reset Kangjie Xu
2022-09-05  7:59   ` Jason Wang
2022-08-25  8:08 ` [PATCH v3 07/15] virtio-pci: support queue enable Kangjie Xu
2022-09-05  8:00   ` Jason Wang
2022-08-25  8:08 ` [PATCH v3 08/15] vhost: extract the logic of unmapping the vrings and desc Kangjie Xu
2022-08-25  8:08 ` [PATCH v3 09/15] vhost: expose vhost_virtqueue_start() Kangjie Xu
2022-08-25  8:08 ` [PATCH v3 10/15] vhost-net: vhost-kernel: introduce vhost_net_virtqueue_reset() Kangjie Xu
2022-09-05  8:03   ` Jason Wang
2022-09-05 10:15     ` Kangjie Xu
2022-09-06  5:24       ` Jason Wang
2022-08-25  8:08 ` [PATCH v3 11/15] vhost-net: vhost-kernel: introduce vhost_net_virtqueue_restart() Kangjie Xu
2022-09-05  8:24   ` Jason Wang
2022-09-05 10:21     ` Kangjie Xu
2022-08-25  8:08 ` [PATCH v3 12/15] virtio-net: introduce flush_or_purge_queued_packets() Kangjie Xu
2022-09-05  8:25   ` Jason Wang
2022-08-25  8:08 ` [PATCH v3 13/15] virtio-net: support queue reset Kangjie Xu
2022-09-05  8:30   ` Jason Wang
2022-09-05 10:25     ` Kangjie Xu
2022-09-05 16:25     ` Kangjie Xu [this message]
2022-09-06  5:37       ` Jason Wang
2022-09-06  3:14     ` Kangjie Xu
2022-08-25  8:08 ` [PATCH v3 14/15] virtio-net: support queue_enable Kangjie Xu
2022-08-25  8:08 ` [PATCH v3 15/15] vhost: vhost-kernel: enable vq reset feature Kangjie Xu
2022-09-02  1:04 ` [PATCH v3 00/15] Support VIRTIO_F_RING_RESET for virtio-net, vhost-net kernel in virtio pci-modern Kangjie Xu

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=7d0b6e52-c6c7-bd6d-3669-659a2573e133@linux.alibaba.com \
    --to=kangjie.xu@linux.alibaba.com \
    --cc=eduardo@habkost.net \
    --cc=f4bug@amsat.org \
    --cc=hengqi@linux.alibaba.com \
    --cc=jasowang@redhat.com \
    --cc=marcel.apfelbaum@gmail.com \
    --cc=mst@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=wangyanan55@huawei.com \
    --cc=xuanzhuo@linux.alibaba.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).