Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0a2f0d2d authored by Chun-Hao Lin's avatar Chun-Hao Lin Committed by David S. Miller
Browse files

8139too: fix system hang when there is a tx timeout event.



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: default avatarChunhao Lin <hau@realtek.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 1b4985b5
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -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)) {
	napi_enable(&tp->napi);
	rtl8139_hw_start(dev);
	netif_wake_queue(dev);
	}

	spin_unlock_bh(&tp->rx_lock);
}