From: Nicolas Ferre <email@example.com>
To: Havard Skinnemoen <firstname.lastname@example.org>,
David Miller <email@example.com>, <firstname.lastname@example.org>
Cc: <email@example.com>, <firstname.lastname@example.org>,
Subject: Re: [PATCH 04/10] net/macb: Fix a race in macb_start_xmit()
Date: Fri, 7 Sep 2012 18:34:48 +0200 [thread overview]
Message-ID: <504A2228.email@example.com> (raw)
On 09/06/2012 05:49 PM, Havard Skinnemoen :
> On Wed, Sep 5, 2012 at 11:30 PM, David Miller <firstname.lastname@example.org> wrote:
>> From: Nicolas Ferre <email@example.com>
>> Date: Wed, 5 Sep 2012 10:19:11 +0200
>>> From: Havard Skinnemoen <firstname.lastname@example.org>
>>> Fix a race in macb_start_xmit() where we unconditionally set the TSTART bit.
>>> If an underrun just happened (we do this with interrupts disabled, so it might
>>> not have been handled yet), the controller starts transmitting from the first
>>> entry in the ring, which is usually wrong.
>>> Restart the controller after error handling.
>>> Signed-off-by: Havard Skinnemoen <email@example.com>
>>> [firstname.lastname@example.org: split patch in topics]
>>> Signed-off-by: Nicolas Ferre <email@example.com>
>> Accumulating special case code and checks into the hot path of TX packet
>> processing is extremely unwise.
>> Instead, when you handle the TX error conditions and reset the chip you
>> should first ensure that there are no flows of control in the transmit
>> function of your driver by using the appropriate locking et al. facilities.
> IIRC, the hardware resets the ring pointers when an error happens, and
> if we set TSTART right after that happens, the hardware will happily
> transmit whatever is sitting in the beginning of the ring. This is
> what I was trying to avoid.
> The details are a bit hazy as it's been a while since I looked at
> this, so it could be that simply letting it happen and using a bigger
> hammer during reset processing might work just as well. Just want to
> make sure y'all understand that we're talking about a race against
> hardware, not against interrupt handlers, threads or anything that can
> be solved by locking :)
Yes, you are right Havard.
I will see if we can let the transmitter go just before being
interrupted by the pending error.
It is true that there are several cases here:
- tx immediately stopped again by the USED bit of a non initialized
descriptor. We thus have to cleanup the error frame but also take care
about the newly queued packet...
- beginning of transmission of a not-related fragment that has just been
queued by the start_xmit; just before catching the pending error IRQ. We
may have to consider the consequences of this!
So, stay tuned ;-)
next prev parent reply other threads:[~2012-09-07 16:35 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-05 8:19 [PATCH 00/10] net/macb: driver enhancement concerning GEM support, ring logic and cleanup Nicolas Ferre
2012-09-05 8:19 ` [PATCH 01/10] net/macb: Add support for Gigabit Ethernet mode Nicolas Ferre
2012-09-05 8:19 ` [PATCH 02/10] net/macb: memory barriers cleanup Nicolas Ferre
2012-09-05 8:19 ` [PATCH 03/10] net/macb: change debugging messages Nicolas Ferre
2012-09-05 8:19 ` [PATCH 04/10] net/macb: Fix a race in macb_start_xmit() Nicolas Ferre
2012-09-05 21:30 ` David Miller
2012-09-06 14:52 ` Nicolas Ferre
2012-09-06 15:49 ` Havard Skinnemoen
2012-09-07 16:34 ` Nicolas Ferre [this message]
2012-09-05 9:00 ` [PATCH 05/10] net/macb: clean up ring buffer logic Nicolas Ferre
2012-09-05 9:00 ` [PATCH 06/10] net/macb: better manage tx errors Nicolas Ferre
2012-09-05 9:00 ` [PATCH 07/10] net/macb: tx status is more than 8 bits now Nicolas Ferre
2012-09-05 9:00 ` [PATCH 08/10] net/macb: macb_get_drvinfo: add GEM/MACB suffix to differentiate revision Nicolas Ferre
2012-09-05 21:31 ` David Miller
2012-09-05 23:27 ` Ben Hutchings
2012-09-06 14:01 ` Nicolas Ferre
2012-09-06 17:42 ` David Miller
2012-09-05 9:00 ` [PATCH 09/10] net/macb: ethtool interface: add register dump feature Nicolas Ferre
2012-09-05 21:32 ` David Miller
2012-09-05 23:36 ` Ben Hutchings
2012-09-06 14:20 ` [PATCH v2 " Nicolas Ferre
2012-09-06 14:34 ` Ben Hutchings
2012-09-05 9:04 ` [PATCH 10/10] net/macb: Offset first RX buffer by two bytes Nicolas Ferre
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:
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
* 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).