From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38287) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XM8Xn-0002mn-Nc for qemu-devel@nongnu.org; Tue, 26 Aug 2014 00:39:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XM8Xi-0005T4-PK for qemu-devel@nongnu.org; Tue, 26 Aug 2014 00:39:43 -0400 Received: from mx1.redhat.com ([209.132.183.28]:30106) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XM8Xi-0005Sq-HK for qemu-devel@nongnu.org; Tue, 26 Aug 2014 00:39:38 -0400 Message-ID: <53FC0F79.5080808@redhat.com> Date: Tue, 26 Aug 2014 12:39:21 +0800 From: Jason Wang MIME-Version: 1.0 References: <1408963656-12308-1-git-send-email-zhang.zhanghailiang@huawei.com> In-Reply-To: <1408963656-12308-1-git-send-email-zhang.zhanghailiang@huawei.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH V3] net: Fix dealing with packets when runstate changes List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: zhanghailiang , qemu-devel@nongnu.org Cc: peter.maydell@linaro.org, mst@redhat.com, jan.kiszka@siemens.com, luonengjun@huawei.com, peter.huangpeng@huawei.com, hani@linux.com, stefanha@redhat.com On 08/25/2014 06:47 PM, zhanghailiang wrote: > For all NICs(except virtio-net) emulated by qemu, > Such as e1000, rtl8139, pcnet and ne2k_pci, > Qemu can still receive packets when VM is not running. > If this happened in *migration's* last PAUSE VM stage, > The new dirty RAM related to the packets will be missed, > And this will lead serious network fault in VM. > > To avoid this, we forbid receiving packets in generic net code when > VM is not running. Also, when the runstate changes back to running, > we definitely need to flush queues to get packets flowing again. > > Here we implement this in the net layer: > (1) Judge the vm runstate in qemu_can_send_packet > (2) Add a member 'VMChangeStateEntry *vmstate' to struct NICState, > Which will listen for VM runstate changes. > (3) Register a handler function for VMstate change. > When vm changes back to running, we flush all queues in the callback function. > (4) Remove checking vm state in virtio_net_can_receive > > Signed-off-by: zhanghailiang > --- > v3: > - change the 'vmstate' to 'vm_running' > > v2: > - remove the superfluous check of nc->received_disabled > --- > hw/net/virtio-net.c | 4 ---- > include/net/net.h | 2 ++ > net/net.c | 31 +++++++++++++++++++++++++++++++ > 3 files changed, 33 insertions(+), 4 deletions(-) Hi: Have you seen Stefan's replied? We think there's no need to flush the queued packets or is there anything new issue you found?