All of lore.kernel.org
 help / color / mirror / Atom feed
From: nicolas.ferre@atmel.com (Nicolas Ferre)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 04/10] net/macb: Fix a race in macb_start_xmit()
Date: Thu, 6 Sep 2012 16:52:45 +0200	[thread overview]
Message-ID: <5048B8BD.3000804@atmel.com> (raw)
In-Reply-To: <20120905.173023.2235590074897156746.davem@davemloft.net>

On 09/05/2012 11:30 PM, David Miller :
> From: Nicolas Ferre <nicolas.ferre@atmel.com>
> Date: Wed, 5 Sep 2012 10:19:11 +0200
> 
>> From: Havard Skinnemoen <havard@skinnemoen.net>
>>
>> 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 <havard@skinnemoen.net>
>> [nicolas.ferre at atmel.com: split patch in topics]
>> Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.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.
> 
> For example, you can quiesce the transmit path by handling the chip error
> interrupt as follows:
> 
> 1) Disable chip interrupt generation.
> 
> 2) Schedule a workqueue so you can process the reset outside of hard
>    interrupt context.
> 
> 3) In the workqueue function, disable NAPI and perform a
>    netif_tx_disable() to guarentee there are no threads of
>    execution trying to queue up packets for TX into the driver.
> 
> 4) Perform your chip reset and whatever else is necessary.
> 
> 5) Re-enable NAPI and TX.
> 
> Then you don't need any special checks in your xmit method at all.

I see... I will rework the series and try to implement this as part of
the "[PATCH 06/10] net/macb: better manage tx errors"

So this patch will disappear in future v2 series and patch 06 will be
seriously modified. In fact I will also try to stack "cosmetic" patches
at the beginning of the series.

Thanks, best regards,
-- 
Nicolas Ferre

WARNING: multiple messages have this Message-ID (diff)
From: Nicolas Ferre <nicolas.ferre@atmel.com>
To: David Miller <davem@davemloft.net>
Cc: <netdev@vger.kernel.org>, <linux-arm-kernel@lists.infradead.org>,
	<havard@skinnemoen.net>, <plagnioj@jcrosoft.com>,
	<jamie@jamieiles.com>, <linux-kernel@vger.kernel.org>,
	<patrice.vilchez@atmel.com>
Subject: Re: [PATCH 04/10] net/macb: Fix a race in macb_start_xmit()
Date: Thu, 6 Sep 2012 16:52:45 +0200	[thread overview]
Message-ID: <5048B8BD.3000804@atmel.com> (raw)
In-Reply-To: <20120905.173023.2235590074897156746.davem@davemloft.net>

On 09/05/2012 11:30 PM, David Miller :
> From: Nicolas Ferre <nicolas.ferre@atmel.com>
> Date: Wed, 5 Sep 2012 10:19:11 +0200
> 
>> From: Havard Skinnemoen <havard@skinnemoen.net>
>>
>> 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 <havard@skinnemoen.net>
>> [nicolas.ferre@atmel.com: split patch in topics]
>> Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.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.
> 
> For example, you can quiesce the transmit path by handling the chip error
> interrupt as follows:
> 
> 1) Disable chip interrupt generation.
> 
> 2) Schedule a workqueue so you can process the reset outside of hard
>    interrupt context.
> 
> 3) In the workqueue function, disable NAPI and perform a
>    netif_tx_disable() to guarentee there are no threads of
>    execution trying to queue up packets for TX into the driver.
> 
> 4) Perform your chip reset and whatever else is necessary.
> 
> 5) Re-enable NAPI and TX.
> 
> Then you don't need any special checks in your xmit method at all.

I see... I will rework the series and try to implement this as part of
the "[PATCH 06/10] net/macb: better manage tx errors"

So this patch will disappear in future v2 series and patch 06 will be
seriously modified. In fact I will also try to stack "cosmetic" patches
at the beginning of the series.

Thanks, best regards,
-- 
Nicolas Ferre

  reply	other threads:[~2012-09-06 14:52 UTC|newest]

Thread overview: 50+ 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 ` Nicolas Ferre
2012-09-05  8:19 ` 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   ` Nicolas Ferre
2012-09-05  8:19 ` [PATCH 02/10] net/macb: memory barriers cleanup Nicolas Ferre
2012-09-05  8:19   ` Nicolas Ferre
2012-09-05  8:19   ` Nicolas Ferre
2012-09-05  8:19 ` [PATCH 03/10] net/macb: change debugging messages Nicolas Ferre
2012-09-05  8:19   ` Nicolas Ferre
2012-09-05  8:19 ` [PATCH 04/10] net/macb: Fix a race in macb_start_xmit() Nicolas Ferre
2012-09-05  8:19   ` Nicolas Ferre
2012-09-05 21:30   ` David Miller
2012-09-05 21:30     ` David Miller
2012-09-05 21:30     ` David Miller
2012-09-06 14:52     ` Nicolas Ferre [this message]
2012-09-06 14:52       ` Nicolas Ferre
2012-09-06 15:49     ` Havard Skinnemoen
2012-09-06 15:49       ` Havard Skinnemoen
2012-09-07 16:34       ` Nicolas Ferre
2012-09-07 16:34         ` Nicolas Ferre
2012-09-05  9:00 ` [PATCH 05/10] net/macb: clean up ring buffer logic Nicolas Ferre
2012-09-05  9:00   ` Nicolas Ferre
2012-09-05  9:00 ` [PATCH 06/10] net/macb: better manage tx errors Nicolas Ferre
2012-09-05  9:00   ` Nicolas Ferre
2012-09-05  9:00   ` 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   ` 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  9:00   ` Nicolas Ferre
2012-09-05 21:31   ` David Miller
2012-09-05 21:31     ` David Miller
2012-09-05 23:27   ` Ben Hutchings
2012-09-05 23:27     ` Ben Hutchings
2012-09-06 14:01     ` Nicolas Ferre
2012-09-06 14:01       ` Nicolas Ferre
2012-09-06 17:42       ` David Miller
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  9:00   ` Nicolas Ferre
2012-09-05 21:32   ` David Miller
2012-09-05 21:32     ` David Miller
2012-09-05 23:36   ` Ben Hutchings
2012-09-05 23:36     ` Ben Hutchings
2012-09-06 14:20     ` [PATCH v2 " Nicolas Ferre
2012-09-06 14:20       ` Nicolas Ferre
2012-09-06 14:34       ` Ben Hutchings
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
2012-09-05  9:04   ` Nicolas Ferre

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=5048B8BD.3000804@atmel.com \
    --to=nicolas.ferre@atmel.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /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.