Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1451459 > unrolled thread
| Started by | Chunhao Lin <hau@realtek.com> |
|---|---|
| First post | 2016-07-27 20:50 +0200 |
| Last post | 2016-07-31 05:40 +0200 |
| Articles | 2 — 2 participants |
Back to article view | Back to linux.kernel
[PATCH net] 8139too:fix system hang when there is a tx timeout event. Chunhao Lin <hau@realtek.com> - 2016-07-27 20:50 +0200
Re: [PATCH net] 8139too:fix system hang when there is a tx timeout event. David Miller <davem@davemloft.net> - 2016-07-31 05:40 +0200
| From | Chunhao Lin <hau@realtek.com> |
|---|---|
| Date | 2016-07-27 20:50 +0200 |
| Subject | [PATCH net] 8139too:fix system hang when there is a tx timeout event. |
| Message-ID | <rZC41-39n-3@gated-at.bofh.it> |
If tx timeout event occur, kernel will call rtl8139_tx_timeout_task() to reset
hardware. But in this function, driver does not stop tx and rx function before
reset hardware, that will cause system hang.
In this patch, add stop tx and rx function before reset hardware.
Signed-off-by: Chunhao Lin <hau@realtek.com>
---
drivers/net/ethernet/realtek/8139too.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/drivers/net/ethernet/realtek/8139too.c b/drivers/net/ethernet/realtek/8139too.c
index ef668d3..0d77f3c 100644
--- a/drivers/net/ethernet/realtek/8139too.c
+++ b/drivers/net/ethernet/realtek/8139too.c
@@ -1667,6 +1667,10 @@ static void rtl8139_tx_timeout_task (struct work_struct *work)
int i;
u8 tmp8;
+ napi_disable(&tp->napi);
+ netif_stop_queue(dev);
+ synchronize_sched();
+
netdev_dbg(dev, "Transmit timeout, status %02x %04x %04x media %02x\n",
RTL_R8(ChipCmd), RTL_R16(IntrStatus),
RTL_R16(IntrMask), RTL_R8(MediaStatus));
@@ -1696,10 +1700,10 @@ static void rtl8139_tx_timeout_task (struct work_struct *work)
spin_unlock_irq(&tp->lock);
/* ...and finally, reset everything */
- if (netif_running(dev)) {
- rtl8139_hw_start (dev);
- netif_wake_queue (dev);
- }
+ napi_enable(&tp->napi);
+ rtl8139_hw_start (dev);
+ netif_wake_queue (dev);
+
spin_unlock_bh(&tp->rx_lock);
}
--
1.9.1
[toc] | [next] | [standalone]
| From | David Miller <davem@davemloft.net> |
|---|---|
| Date | 2016-07-31 05:40 +0200 |
| Subject | Re: [PATCH net] 8139too:fix system hang when there is a tx timeout event. |
| Message-ID | <s0PLz-374-1@gated-at.bofh.it> |
| In reply to | #1451459 |
From: Chunhao Lin <hau@realtek.com>
Date: Thu, 28 Jul 2016 02:39:57 +0800
> If tx timeout event occur, kernel will call rtl8139_tx_timeout_task() to reset
> hardware. But in this function, driver does not stop tx and rx function before
> reset hardware, that will cause system hang.
>
> In this patch, add stop tx and rx function before reset hardware.
>
> Signed-off-by: Chunhao Lin <hau@realtek.com>
First, please always place a space after the subsystem prefix in your Subject
lines "8139too: ".
> @@ -1667,6 +1667,10 @@ static void rtl8139_tx_timeout_task (struct work_struct *work)
> int i;
> u8 tmp8;
>
> + napi_disable(&tp->napi);
> + netif_stop_queue(dev);
> + synchronize_sched();
> +
> netdev_dbg(dev, "Transmit timeout, status %02x %04x %04x media %02x\n",
> RTL_R8(ChipCmd), RTL_R16(IntrStatus),
> RTL_R16(IntrMask), RTL_R8(MediaStatus));
> @@ -1696,10 +1700,10 @@ static void rtl8139_tx_timeout_task (struct work_struct *work)
> spin_unlock_irq(&tp->lock);
>
> /* ...and finally, reset everything */
> - if (netif_running(dev)) {
> - rtl8139_hw_start (dev);
> - netif_wake_queue (dev);
> - }
> + napi_enable(&tp->napi);
> + rtl8139_hw_start (dev);
> + netif_wake_queue (dev);
> +
Get rid of these spaces in these function calls before the openning parenthesis.
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web