All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Fam Zheng <famz@redhat.com>
Cc: Jason Wang <jasowang@redhat.com>,
	qemu-devel@nongnu.org, Stefan Hajnoczi <stefanha@redhat.com>
Subject: Re: [Qemu-devel] [PATCH] virtio-net: Drop net_virtio_info.can_receive
Date: Sat, 4 Jul 2015 20:48:55 +0200	[thread overview]
Message-ID: <20150704203118-mutt-send-email-mst@redhat.com> (raw)
In-Reply-To: <20150703041738.GA23138@ad.nay.redhat.com>

On Fri, Jul 03, 2015 at 12:17:38PM +0800, Fam Zheng wrote:
> On Fri, 07/03 09:12, Fam Zheng wrote:
> > On Thu, 07/02 18:46, Michael S. Tsirkin wrote:
> > > On Thu, Jul 02, 2015 at 01:46:26PM +0100, Stefan Hajnoczi wrote:
> > > > On Tue, Jun 30, 2015 at 04:35:24PM +0800, Jason Wang wrote:
> > > > > On 06/30/2015 11:06 AM, Fam Zheng wrote:
> > > > > > virtio_net_receive still does the check by calling
> > > > > > virtio_net_can_receive, if the device or driver is not ready, the packet
> > > > > > is dropped.
> > > > > >
> > > > > > This is necessary because returning false from can_receive complicates
> > > > > > things: the peer would disable sending until we explicitly flush the
> > > > > > queue.
> > > > > >
> > > > > > Signed-off-by: Fam Zheng <famz@redhat.com>
> > > > > > ---
> > > > > >  hw/net/virtio-net.c | 1 -
> > > > > >  1 file changed, 1 deletion(-)
> > > > > >
> > > > > > diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
> > > > > > index d728233..dbef0d0 100644
> > > > > > --- a/hw/net/virtio-net.c
> > > > > > +++ b/hw/net/virtio-net.c
> > > > > > @@ -1503,7 +1503,6 @@ static int virtio_net_load_device(VirtIODevice *vdev, QEMUFile *f,
> > > > > >  static NetClientInfo net_virtio_info = {
> > > > > >      .type = NET_CLIENT_OPTIONS_KIND_NIC,
> > > > > >      .size = sizeof(NICState),
> > > > > > -    .can_receive = virtio_net_can_receive,
> > > > > >      .receive = virtio_net_receive,
> > > > > >      .link_status_changed = virtio_net_set_link_status,
> > > > > >      .query_rx_filter = virtio_net_query_rxfilter,
> > > > > 
> > > > > A side effect of this patch is it will read and then drop packet is
> > > > > guest driver is no ok.
> > > > 
> > > > I think that the semantics of .can_receive() and .receive() return
> > > > values are currently incorrect in many NICs.  They have .can_receive()
> > > > functions that return false for conditions where .receive() would
> > > > discard the packet.  So what happens is that packets get queued when
> > > > they should actually be discarded.
> > > > 
> > > > The purpose of the flow control (queuing) mechanism is to tell the
> > > > sender to hold off until the receiver has more rx buffers available.
> > > > It's a short-term thing that doesn't included link down, rx disable, or
> > > > NIC reset states.
> > > > 
> > > > Therefore, I think this patch will not introduce a regression.  It is
> > > > adjusting the code to stop queuing packets when they should actually be
> > > > dropped.
> > > > 
> > > > Thoughts?
> > > > 
> > > > Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
> > > 
> > > OK, but we do have transient out of buffers states too, and
> > > virtio_net_can_receive checks these as well.
> 
> I'm a bit confused, do you mean virtio_queue_ready()? That is buffer presence
> check, and the free buffer check virtio_net_has_buffers() is only in
> virtio_net_receive(). Am I missing things?
> 
> Fam

Interesting. You are right.

See also commit cdd5cc12ba8cf0c068da319370bdd3ba45eaf7ac.


> > > 
> > > To me, it looks like we should change virtio_net_can_receive to
> > > avoid checking link down state, etc.
> > > But I don't see why we should remove it completely.
> > 
> > OK, it makse sense to check buffer state.
> > 
> > Fam
> > 

  reply	other threads:[~2015-07-04 18:49 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-30  3:06 [Qemu-devel] [PATCH] virtio-net: Drop net_virtio_info.can_receive Fam Zheng
2015-06-30  8:35 ` Jason Wang
2015-07-02 12:46   ` Stefan Hajnoczi
2015-07-02 16:46     ` Michael S. Tsirkin
2015-07-03  1:12       ` Fam Zheng
2015-07-03  4:17         ` Fam Zheng
2015-07-04 18:48           ` Michael S. Tsirkin [this message]
2015-07-06  3:32     ` Jason Wang
2015-07-06 15:21       ` Stefan Hajnoczi
2015-07-06 17:09         ` Michael S. Tsirkin
2015-07-07  0:53           ` Fam Zheng
2015-07-07  8:10             ` Michael S. Tsirkin
2015-07-07  8:45         ` Jason Wang
2015-07-08 10:50           ` Stefan Hajnoczi
2015-07-13  4:52             ` Jason Wang

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=20150704203118-mutt-send-email-mst@redhat.com \
    --to=mst@redhat.com \
    --cc=famz@redhat.com \
    --cc=jasowang@redhat.com \
    --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.