From: zhanghailiang <zhang.zhanghailiang@huawei.com>
To: Stefan Hajnoczi <stefanha@redhat.com>
Cc: peter.maydell@linaro.org, mst@redhat.com,
Jason Wang <jasowang@redhat.com>,
luonengjun@huawei.com, peter.huangpeng@huawei.com,
qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] net: Forbid dealing with packets when VM is not running
Date: Wed, 20 Aug 2014 10:19:38 +0800 [thread overview]
Message-ID: <53F405BA.8090409@huawei.com> (raw)
In-Reply-To: <20140819122953.GG25538@stefanha-thinkpad.redhat.com>
On 2014/8/19 20:29, Stefan Hajnoczi wrote:
> On Mon, Aug 18, 2014 at 04:32:42PM +0800, zhanghailiang wrote:
>> On 2014/8/18 14:55, Jason Wang wrote:
>>> On 08/18/2014 12:46 PM, zhanghailiang wrote:
>>>> diff --git a/net/net.c b/net/net.c
>>>> index 6d930ea..21f0d48 100644
>>>> --- a/net/net.c
>>>> +++ b/net/net.c
>>>> @@ -242,6 +242,29 @@ NetClientState *qemu_new_net_client(NetClientInfo *info,
>>>> return nc;
>>>> }
>>>>
>>>> +static void nic_vmstate_change_handler(void *opaque,
>>>> + int running,
>>>> + RunState state)
>>>> +{
>>>> + NICState *nic = opaque;
>>>> + NetClientState *nc;
>>>> + int i, queues;
>>>> +
>>>> + if (!running) {
>>>> + return;
>>>> + }
>>>> +
>>>> + queues = MAX(1, nic->conf->peers.queues);
>>>> + for (i = 0; i< queues; i++) {
>>>> + nc =&nic->ncs[i];
>>>> + if (nc->receive_disabled
>>>> + || (nc->info->can_receive&& !nc->info->can_receive(nc))) {
>>>> + continue;
>>>> + }
>>>> + qemu_flush_queued_packets(nc);
>>>
>>> How about simply purge the receive queue during stop? If ok, there's no
>>> need to introduce extra vmstate change handler.
>>>
>>
>> I don't know whether it is OK to purge the receive packages, it was
>> suggested by Stefan Hajnoczi, and i am waiting for his opinion .:)
>>
>> I think we still need the extra vmstate change handler, Without the
>> change handler, we don't know if the VM will go to stop and the time
>> when to call qemu_purge_queued_packets.
>
> qemu_flush_queued_packets() sets nc->received_disabled = 0. This may be
> needed to get packets flowing again if ->receive() previously returned 0.
>
> Purging the queue does not clear nc->received_disabled so it is not
> enough.
So this is the reason why we need to do flush after VM runstate come
back to running again.:)
Oh, In the above patch, we don't need check the nc->receive_disabled
before qemu_flush_queued_packets(nc), but still need check
nc->info->can_receive(nc), is it?
Before send another patch, I will check if this patch has side-effect
when we use vhost_net.
Thanks,
zhanghailiang
next prev parent reply other threads:[~2014-08-20 2:20 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-18 4:46 [Qemu-devel] [PATCH] net: Forbid dealing with packets when VM is not running zhanghailiang
2014-08-18 6:55 ` Jason Wang
2014-08-18 8:32 ` zhanghailiang
2014-08-18 9:14 ` Jason Wang
2014-08-20 1:59 ` zhanghailiang
2014-08-19 12:29 ` Stefan Hajnoczi
2014-08-20 2:19 ` zhanghailiang [this message]
2014-08-20 3:17 ` Jason Wang
2014-08-22 10:08 ` Stefan Hajnoczi
2014-08-18 12:27 ` Dr. David Alan Gilbert
2014-08-19 6:46 ` zhanghailiang
2014-08-19 8:48 ` Dr. David Alan Gilbert
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=53F405BA.8090409@huawei.com \
--to=zhang.zhanghailiang@huawei.com \
--cc=jasowang@redhat.com \
--cc=luonengjun@huawei.com \
--cc=mst@redhat.com \
--cc=peter.huangpeng@huawei.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.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 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.