Check IFF_DRV_RUNNING in the re_intr() loop. It can disappear,

since re_rxeof() drops the lock for some time.

Reported & tested by:	XueFeng Deng <dsnofe yahoo.com.cn>
This commit is contained in:
Gleb Smirnoff 2005-11-22 12:46:15 +00:00
parent 0da07b29c3
commit a9fe9149a8
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=152681

View File

@ -1852,13 +1852,15 @@ re_intr(arg)
if ((status & RL_INTRS_CPLUS) == 0)
break;
if ((status & RL_ISR_RX_OK) ||
(status & RL_ISR_RX_ERR))
if (((status & RL_ISR_RX_OK) ||
(status & RL_ISR_RX_ERR)) &&
ifp->if_drv_flags & IFF_DRV_RUNNING)
re_rxeof(sc);
if ((status & RL_ISR_TIMEOUT_EXPIRED) ||
if (((status & RL_ISR_TIMEOUT_EXPIRED) ||
(status & RL_ISR_TX_ERR) ||
(status & RL_ISR_TX_DESC_UNAVAIL))
(status & RL_ISR_TX_DESC_UNAVAIL)) &&
ifp->if_drv_flags & IFF_DRV_RUNNING)
re_txeof(sc);
if (status & RL_ISR_SYSTEM_ERR) {