lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Mon, 19 Mar 2012 10:48:47 -0700 From: Stephen Hemminger <shemminger@...tta.com> To: Eric Dumazet <eric.dumazet@...il.com> Cc: Haiyang Zhang <haiyangz@...rosoft.com>, kys@...rosoft.com, davem@...emloft.net, netdev@...r.kernel.org, linux-kernel@...r.kernel.org, devel@...uxdriverproject.org Subject: Re: [PATCH 1/1] net/hyperv: Fix the code handling tx busy On Mon, 19 Mar 2012 10:11:58 -0700 Eric Dumazet <eric.dumazet@...il.com> wrote: > On Mon, 2012-03-19 at 10:02 -0700, Haiyang Zhang wrote: > > Instead of dropping the packet, we keep the skb buffer, and return > > NETDEV_TX_BUSY to let upper layer retry send. This will not cause > > endless loop, because the host is taking data away from ring buffer. > > > > Signed-off-by: Haiyang Zhang <haiyangz@...rosoft.com> > > Reviewed-by: K. Y. Srinivasan <kys@...rosoft.com> > > --- > > drivers/net/hyperv/netvsc_drv.c | 5 +---- > > 1 files changed, 1 insertions(+), 4 deletions(-) > > > > diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c > > index 2517d20..dd29478 100644 > > --- a/drivers/net/hyperv/netvsc_drv.c > > +++ b/drivers/net/hyperv/netvsc_drv.c > > @@ -223,13 +223,10 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net) > > net->stats.tx_bytes += skb->len; > > net->stats.tx_packets++; > > } else { > > - /* we are shutting down or bus overloaded, just drop packet */ > > - net->stats.tx_dropped++; > > kfree(packet); > > - dev_kfree_skb_any(skb); > > } > > > > - return NETDEV_TX_OK; > > + return ret ? NETDEV_TX_BUSY : NETDEV_TX_OK; > > } > > > > /* > > Thats simply not true at all. > > A start_xmit() cannot do that. > > TX_BUSY should never be returned at all, its a deprecated code, for > pretty good reasons. (assuming queue is not stopped) > > Try this on a machine with one CPU, I am pretty sure this can trigger > complete freezes. > > Once softirq loops in your start_xmit(), how do you think one process > can help you now ? Eric is right, look how devices with real physical rings work. They test for space left at end of start xmit and stop the transmit queue with netif_stop_queue. The transmit done code then re-enables when enough space is netif_wake_queue. Think of it as classic high/low water mark on a FIFO. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists