qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Stefan Hajnoczi <stefanha@redhat.com>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
	Scott Feldman <sfeldma@gmail.com>,
	Stefan Hajnoczi <stefanha@redhat.com>
Subject: [Qemu-devel] [PULL for-2.4 4/9] rocker: don't queue receive pkts when port is disabled
Date: Tue,  7 Jul 2015 13:38:20 +0100	[thread overview]
Message-ID: <1436272705-28499-5-git-send-email-stefanha@redhat.com> (raw)
In-Reply-To: <1436272705-28499-1-git-send-email-stefanha@redhat.com>

From: Scott Feldman <sfeldma@gmail.com>

Commit 6e99c63 ("net/socket: Drop net_socket_can_send") changed the
semantics around .can_receive for sockets to now require the device to
flush queued pkts when transitioning to a .can_receive=true state.  Rocker
device was not flushing the queue on .can_receive=true transition, so the
receiver was stuck.

But, turns out we really don't want any queuing at all on the port when the
port is disabled, otherwise when the port transitions to enabled, we'd
receive and forward stale pkts that really should have been dropped.  So,
let's remove .can_receive so avoid queuing and drop the pkt in .receive if
the port is disabled.

Signed-off-by: Scott Feldman <sfeldma@gmail.com>
Reviewed-by: Fam Zheng <famz@redhat.com>
Message-id: 1435717553-36187-1-git-send-email-sfeldma@gmail.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 hw/net/rocker/rocker_fp.c | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/hw/net/rocker/rocker_fp.c b/hw/net/rocker/rocker_fp.c
index d8d934c..c693ae5 100644
--- a/hw/net/rocker/rocker_fp.c
+++ b/hw/net/rocker/rocker_fp.c
@@ -125,18 +125,21 @@ int fp_port_eg(FpPort *port, const struct iovec *iov, int iovcnt)
     return ROCKER_OK;
 }
 
-static int fp_port_can_receive(NetClientState *nc)
-{
-    FpPort *port = qemu_get_nic_opaque(nc);
-
-    return port->enabled;
-}
-
 static ssize_t fp_port_receive_iov(NetClientState *nc, const struct iovec *iov,
                                    int iovcnt)
 {
     FpPort *port = qemu_get_nic_opaque(nc);
 
+    /* If the port is disabled, we want to drop this pkt
+     * now rather than queing it for later.  We don't want
+     * any stale pkts getting into the device when the port
+     * transitions to enabled.
+     */
+
+    if (!port->enabled) {
+        return -1;
+    }
+
     return world_ingress(port->world, port->pport, iov, iovcnt);
 }
 
@@ -165,7 +168,6 @@ static void fp_port_set_link_status(NetClientState *nc)
 static NetClientInfo fp_port_info = {
     .type = NET_CLIENT_OPTIONS_KIND_NIC,
     .size = sizeof(NICState),
-    .can_receive = fp_port_can_receive,
     .receive = fp_port_receive,
     .receive_iov = fp_port_receive_iov,
     .cleanup = fp_port_cleanup,
-- 
2.4.3

  parent reply	other threads:[~2015-07-07 12:38 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-07 12:38 [Qemu-devel] [PULL for-2.4 0/9] Net patches Stefan Hajnoczi
2015-07-07 12:38 ` [Qemu-devel] [PULL for-2.4 1/9] rocker: fix memory leak Stefan Hajnoczi
2015-07-07 12:38 ` [Qemu-devel] [PULL for-2.4 2/9] e1000: flush packets when link comes up Stefan Hajnoczi
2015-07-07 12:38 ` [Qemu-devel] [PULL for-2.4 3/9] vmxnet3: Fix incorrect small packet padding Stefan Hajnoczi
2015-07-07 12:38 ` Stefan Hajnoczi [this message]
2015-07-07 12:38 ` [Qemu-devel] [PULL for-2.4 5/9] rocker: fix misplaced break statement Stefan Hajnoczi
2015-07-07 12:38 ` [Qemu-devel] [PULL for-2.4 6/9] rocker: fix missing break statements Stefan Hajnoczi
2015-07-07 12:38 ` [Qemu-devel] [PULL for-2.4 7/9] rocker: return -1 when dropping packet on ingress Stefan Hajnoczi
2015-07-07 12:38 ` [Qemu-devel] [PULL for-2.4 8/9] rocker: mark copy-to-cpu pkts as forwarding offloaded Stefan Hajnoczi
2015-07-07 12:38 ` [Qemu-devel] [PULL for-2.4 9/9] rocker: tests: don't need to specify master/self when setting vlans Stefan Hajnoczi
2015-07-07 15:57 ` [Qemu-devel] [PULL for-2.4 0/9] Net patches Peter Maydell

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=1436272705-28499-5-git-send-email-stefanha@redhat.com \
    --to=stefanha@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=sfeldma@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).