Message ID | 1342785709-3152-17-git-send-email-stefanha@linux.vnet.ibm.com |
---|---|
State | New |
Headers | show |
On 07/20/12 14:01, Stefan Hajnoczi wrote: > From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com> > > Only when all other hub port's *peer* .can_receive() all return 1, > the source hub port .can_receive() return 1. > > Reviewed-off-by: Paolo Bonzini <pbonzini@redhat.com> Probably a typo. > Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com> > Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com> > --- > net/hub.c | 27 ++++++++++++++++++++++++--- > 1 file changed, 24 insertions(+), 3 deletions(-) > > diff --git a/net/hub.c b/net/hub.c > index f697a78..2d67df5 100644 > --- a/net/hub.c > +++ b/net/hub.c > @@ -15,6 +15,7 @@ > #include "monitor.h" > #include "net.h" > #include "hub.h" > +#include "iov.h" > > /* > * A hub broadcasts incoming packets to all its ports except the source port. > @@ -59,16 +60,16 @@ static ssize_t net_hub_receive_iov(NetHub *hub, NetHubPort *source_port, > const struct iovec *iov, int iovcnt) > { > NetHubPort *port; > - ssize_t ret = 0; > + ssize_t len = iov_size(iov, iovcnt); > > QLIST_FOREACH(port, &hub->ports, next) { > if (port == source_port) { > continue; > } > > - ret = qemu_sendv_packet(&port->nc, iov, iovcnt); > + qemu_sendv_packet(&port->nc, iov, iovcnt); > } > - return ret; > + return len; > } This seems to consolidate net_hub_receive_iov()'s retval with that of net_hub_receive(), but may I ask why it used to be calculated differently? > > static NetHub *net_hub_new(unsigned int id) > @@ -85,6 +86,25 @@ static NetHub *net_hub_new(unsigned 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 0; > + } > + } > + > + return 1; > +} > + (qemu_can_send_packet() handles a NULL sender->peer, OK.) No further comments for the series. Thanks! Laszlo
Il 24/07/2012 00:27, Laszlo Ersek ha scritto: > This seems to consolidate net_hub_receive_iov()'s retval with that of > net_hub_receive(), but may I ask why it used to be calculated differently? Because until this patch was introduced, net/hub.c had a TODO about the return values of net_hub_receive_*(). Probably this patch could be squashed earlier in the series, but it's not paramount. Paolo
diff --git a/net/hub.c b/net/hub.c index f697a78..2d67df5 100644 --- a/net/hub.c +++ b/net/hub.c @@ -15,6 +15,7 @@ #include "monitor.h" #include "net.h" #include "hub.h" +#include "iov.h" /* * A hub broadcasts incoming packets to all its ports except the source port. @@ -59,16 +60,16 @@ static ssize_t net_hub_receive_iov(NetHub *hub, NetHubPort *source_port, const struct iovec *iov, int iovcnt) { NetHubPort *port; - ssize_t ret = 0; + ssize_t len = iov_size(iov, iovcnt); QLIST_FOREACH(port, &hub->ports, next) { if (port == source_port) { continue; } - ret = qemu_sendv_packet(&port->nc, iov, iovcnt); + qemu_sendv_packet(&port->nc, iov, iovcnt); } - return ret; + return len; } static NetHub *net_hub_new(unsigned int id) @@ -85,6 +86,25 @@ static NetHub *net_hub_new(unsigned 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 0; + } + } + + return 1; +} + static ssize_t net_hub_port_receive(NetClientState *nc, const uint8_t *buf, size_t len) { @@ -111,6 +131,7 @@ 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,