From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54992) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XJid9-0007mF-KS for qemu-devel@nongnu.org; Tue, 19 Aug 2014 08:35:16 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XJid3-0000HX-CX for qemu-devel@nongnu.org; Tue, 19 Aug 2014 08:35:15 -0400 Received: from mx1.redhat.com ([209.132.183.28]:25625) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XJid3-0000H0-69 for qemu-devel@nongnu.org; Tue, 19 Aug 2014 08:35:09 -0400 Date: Tue, 19 Aug 2014 13:29:53 +0100 From: Stefan Hajnoczi Message-ID: <20140819122953.GG25538@stefanha-thinkpad.redhat.com> References: <1408337205-10260-1-git-send-email-zhang.zhanghailiang@huawei.com> <53F1A363.8070009@redhat.com> <53F1BA2A.8020008@huawei.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="+1TulI7fc0PCHNy3" Content-Disposition: inline In-Reply-To: <53F1BA2A.8020008@huawei.com> Subject: Re: [Qemu-devel] [PATCH] net: Forbid dealing with packets when VM is not running List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: zhanghailiang Cc: peter.maydell@linaro.org, mst@redhat.com, Jason Wang , luonengjun@huawei.com, peter.huangpeng@huawei.com, qemu-devel@nongnu.org --+1TulI7fc0PCHNy3 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable 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 =3D opaque; > >>+ NetClientState *nc; > >>+ int i, queues; > >>+ > >>+ if (!running) { > >>+ return; > >>+ } > >>+ > >>+ queues =3D MAX(1, nic->conf->peers.queues); > >>+ for (i =3D 0; i< queues; i++) { > >>+ nc =3D&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. > > >=20 > 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 .:) >=20 > 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 =3D 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. --+1TulI7fc0PCHNy3 Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAEBAgAGBQJT80NBAAoJEJykq7OBq3PIyscH/AkWXUkaXz14ca6BQUDNeG50 kKwuoyBlTbqsBbLLbpdPs5uOqtVDPMsjYtySqtI+bszLDD8flzcSDnstyYoe9UaI vn4imswpN5CP+zpZZXaXk4KyDlAGqVHtGbaZMEmcye9md+hhtxigrcbBg0oRk7x7 MqocU6iGdXtSL+L+Wn/q6Ys15dtkgysJhgw9GTZPoLNeTipB9L5in/a7UX/Lrx1l GNjx4+VmimpwT+BC+7k68vkzwVPhTCUjHhrhYZallAvQu1UhLkXfvsqVa14nWE+q DAbFniraj+Zzh14RiLfhfT18nm3LuSUYGObeCTNpJauZ6gnaYeztyzJUBQ/fJrk= =YBWj -----END PGP SIGNATURE----- --+1TulI7fc0PCHNy3--