qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH for-2.4] net-hub: Drop can_receive
@ 2015-06-30  2:29 Fam Zheng
  2015-06-30  6:19 ` Thomas Huth
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Fam Zheng @ 2015-06-30  2:29 UTC (permalink / raw)
  To: qemu-devel; +Cc: Jason Wang, Stefan Hajnoczi

It returns true as long as there is another attached port. This is not
strictly necessary because even if there is only one port (the sender),
net_hub_port_receive could succeed with a NOP. So always deliver the
packets, instead of queuing them.

This fixes the possible hanging issue after net layer changed how
can_read is handled. That is, if net_hub_port_can_receive returned
false, the peer would disable the queue until it's explicitly flushed
(for example, a call to qemu_flush_queued_packets() in net_hub_add_port,
where net_hub_port_can_receive() would become true). This patch avoids
that complication.

Signed-off-by: Fam Zheng <famz@redhat.com>
---
 net/hub.c | 20 --------------------
 1 file changed, 20 deletions(-)

diff --git a/net/hub.c b/net/hub.c
index 3047f12..65a8e09 100644
--- a/net/hub.c
+++ b/net/hub.c
@@ -87,25 +87,6 @@ static NetHub *net_hub_new(int id)
     return hub;
 }
 
-static int net_hub_port_can_receive(NetClientState *nc)
-{
-    NetHubPort *port;
-    NetHubPort *src_port = DO_UPCAST(NetHubPort, nc, nc);
-    NetHub *hub = src_port->hub;
-
-    QLIST_FOREACH(port, &hub->ports, next) {
-        if (port == src_port) {
-            continue;
-        }
-
-        if (qemu_can_send_packet(&port->nc)) {
-            return 1;
-        }
-    }
-
-    return 0;
-}
-
 static ssize_t net_hub_port_receive(NetClientState *nc,
                                     const uint8_t *buf, size_t len)
 {
@@ -132,7 +113,6 @@ static void net_hub_port_cleanup(NetClientState *nc)
 static NetClientInfo net_hub_port_info = {
     .type = NET_CLIENT_OPTIONS_KIND_HUBPORT,
     .size = sizeof(NetHubPort),
-    .can_receive = net_hub_port_can_receive,
     .receive = net_hub_port_receive,
     .receive_iov = net_hub_port_receive_iov,
     .cleanup = net_hub_port_cleanup,
-- 
2.4.4

^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2015-07-03 10:28 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-06-30  2:29 [Qemu-devel] [PATCH for-2.4] net-hub: Drop can_receive Fam Zheng
2015-06-30  6:19 ` Thomas Huth
2015-07-02 12:27 ` Stefan Hajnoczi
2015-07-02 13:30 ` Stefan Hajnoczi
2015-07-03  0:42   ` Fam Zheng
2015-07-03 10:28     ` Stefan Hajnoczi

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).