--- //depot/user/gcooper/atf-head/src/sys/dev/e1000/if_lem.c 2012-07-25 17:11:00.000000000 0000 +++ /scratch/p4/user/gcooper/atf-head/src/sys/dev/e1000/if_lem.c 2012-07-25 17:11:00.000000000 0000 @@ -1294,12 +1294,13 @@ struct adapter *adapter = arg; struct ifnet *ifp = adapter->ifp; u32 reg_icr; - + int locked; if (ifp->if_capenable & IFCAP_POLLING) return; EM_CORE_LOCK(adapter); + locked = 1; reg_icr = E1000_READ_REG(&adapter->hw, E1000_ICR); if (reg_icr & E1000_ICR_RXO) adapter->rx_overruns++; @@ -1320,9 +1321,11 @@ lem_local_timer, adapter); goto out; } + EM_CORE_UNLOCK(adapter); + locked = 0; + lem_rxeof(adapter, -1, NULL); EM_TX_LOCK(adapter); - lem_rxeof(adapter, -1, NULL); lem_txeof(adapter); if (ifp->if_drv_flags & IFF_DRV_RUNNING && !IFQ_DRV_IS_EMPTY(&ifp->if_snd)) @@ -1330,7 +1333,9 @@ EM_TX_UNLOCK(adapter); out: - EM_CORE_UNLOCK(adapter); + if (locked) + EM_CORE_UNLOCK(adapter); + return; }