From: Tommy Christensen <tommy.christensen@tpack.net>
To: Herbert Xu <herbert@gondor.apana.org.au>
Cc: davem@davemloft.net, netdev@oss.sgi.com
Subject: Re: [PATCH] net: Disable queueing when carrier is lost
Date: Thu, 28 Apr 2005 01:27:57 +0200 [thread overview]
Message-ID: <42701FFD.5000505@tpack.net> (raw)
In-Reply-To: <20050427214224.GA25325@gondor.apana.org.au>
Herbert Xu wrote:
> On Wed, Apr 27, 2005 at 08:52:59PM +0200, Tommy Christensen wrote:
>
>>My theory was this: Almost all drivers should be able to use the generic
>>watchdog (and I believe most of them do). If the "TX stalled" supervision
>>isn't appropriate for some particular driver, e.g. due to unorthodox use
>>of netif_stop_queue, then I didn't want to force my addition on this
>>driver either.
>
>
> Not having a TX timeout handler doesn't mean that the driver is doing
> something weird. If you do a grep in drivers/net you'll find loads
> of drivers that don't have TX timeout handlers but their handling of
> stop_queue/start_queue is exactly the same as anybody else.
Hmm, maybe this is more common than I thought. But do any of these really
have a problem? I.e. do they call netif_stop_queue on link down?
That's the case I'm trying to address with the patch.
> There's also another problem. The thing that triggered the original
> discussion is the fact that the socket send buffer was filled up.
> Theoretically, it is possible to exhaust someone's socket buffer
> without filling up a NIC's TX ring. Assuming that the NIC does not
> transmit at all when the carrier is off, the watchdog would not trigger
> and your application will block anyway.
This is indeed possible, but hopefully you can agree that this would be
a driver bug. As stated above, I'm not trying to solve everything. We
have to assume some level of sanity of the drivers. E.g. for a NIC that
stalls the TX engine on carrier off, the driver would have to flush the
TX ring and either call netif_stop_queue or discard packets in their
hard_start_xmit function. At present, even such well-behaving drivers
would hit the problem, because packets were piling up in the qdisc.
>>Hooking into dev_watchdog() has the additional benefit of adding some
>>latency, so that a short-break doesn't necessarily trigger the flushing.
>
>
> I don't think this is too important. If your link is flapping constantly
> then you've got a serious problem. If it's just an isolated event then
> whether we do the flush or not isn't going to have a significant impact
> on the system.
>
> Besides, someone might be watching from user-space and could have taken
> much more drastic actions as a result of the carrier off message which is
> certainly not delayed.
Good point. So I shouldn't be too carefull.
>>... unless the HW already takes care of this by draining the packets
>>from the ring buffer, disregarding the link status.
>
>
> Although this may be true for a lot of NICs, you can't bank on that.
>
> Cheers,
Thanks for your comments, Herbert.
Tommy
next prev parent reply other threads:[~2005-04-27 23:27 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-04-26 21:53 [PATCH] net: Disable queueing when carrier is lost Tommy Christensen
2005-04-27 12:43 ` Herbert Xu
[not found] ` <426FDF8B.1030808@tpack.net>
2005-04-27 21:42 ` Herbert Xu
2005-04-27 23:27 ` Tommy Christensen [this message]
2005-04-27 23:43 ` Herbert Xu
2005-04-29 9:51 ` Tommy Christensen
2005-04-29 10:18 ` Herbert Xu
2005-04-29 12:22 ` Tommy Christensen
2005-04-29 23:45 ` Herbert Xu
2005-04-30 0:46 ` Herbert Xu
2005-04-30 12:59 ` Tommy Christensen
2005-04-30 12:57 ` Tommy Christensen
2005-05-01 8:11 ` Herbert Xu
2005-05-02 23:00 ` Tommy Christensen
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=42701FFD.5000505@tpack.net \
--to=tommy.christensen@tpack.net \
--cc=davem@davemloft.net \
--cc=herbert@gondor.apana.org.au \
--cc=netdev@oss.sgi.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.