From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43688) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z9wQx-0006UA-Db for qemu-devel@nongnu.org; Tue, 30 Jun 2015 10:22:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Z9wQw-0006gt-M2 for qemu-devel@nongnu.org; Tue, 30 Jun 2015 10:22:47 -0400 Received: from mail-ob0-x22f.google.com ([2607:f8b0:4003:c01::22f]:35351) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z9wQw-0006gf-H0 for qemu-devel@nongnu.org; Tue, 30 Jun 2015 10:22:46 -0400 Received: by obbop1 with SMTP id op1so7462167obb.2 for ; Tue, 30 Jun 2015 07:22:46 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: <20150630071813.GB5599@ad.nay.redhat.com> References: <20150630071813.GB5599@ad.nay.redhat.com> From: Scott Feldman Date: Tue, 30 Jun 2015 10:22:26 -0400 Message-ID: Content-Type: text/plain; charset=UTF-8 Subject: Re: [Qemu-devel] (no subject) List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Fam Zheng Cc: =?UTF-8?B?SmnFmcOtIFDDrXJrbw==?= , QEMU Developers , Stefan Hajnoczi On Tue, Jun 30, 2015 at 3:18 AM, Fam Zheng wrote: > On Tue, 06/30 00:49, Scott Feldman wrote: >> Hi Fam, Stefan, >> >> I'm running a test with rocker device using UDP sockets connections >> and I'm seeing the socket s->read_poll stay disabled if the device >> receives a packet when the device's can_receive returns false. >> Receive is stuck after that; nothing ever re-enables s->read_poll. I >> see the first packet queued on queue->packets and that's it. No more >> receives. If I modify the device to lie and always return >> can_receive=true, and drop the pkt in driver receive, then things work >> fine. >> >> I think this patch broke can_receive semantics for net/socket.c: > > Yes. The semantics now is if .can_receive returns false, the NIC needs to flush > the queue explicitly when the conditions in .can_receive become true, because > net/{socket,tap,...} no longer polls .can_receive(). Ah, that makes sense. >> commit 6e99c631f116221d169ea53953d91b8aa74d297a >> Author: Fam Zheng >> Date: Thu Jun 4 14:45:16 2015 +0800 >> >> net/socket: Drop net_socket_can_send >> >> Anything jump out? >> >> (In the test, rocker device is enabling the netdev port once the guest >> OS driver signals to enable the port based on STP process running on >> the guest. The initial STP state is DISABLED, so the port is isolated >> from the network. As STP algo progresses, the port is opened up and >> the netdev is enabled for Rx traffic). >> >> -scott >> > > Does dropping .can_receive or forcing 1 work for you? Or maybe something like > this: Dropping .can_receive works. Actually, we really don't want any pkts queued when the device port is disabled, otherwise when the port transitions to enabled, we'll receive stale network pkts. This would be bad for a switch device. So I think this is a happy outcome: removing .can_receive prevents pkt queuing on the backend, and the .receive handler can eat the pkt if the port is disabled. I'll send a rocker patch to fix this. Thanks Fam. -scott