diff options
author | sam <sam@FreeBSD.org> | 2003-11-14 19:00:32 +0000 |
---|---|---|
committer | sam <sam@FreeBSD.org> | 2003-11-14 19:00:32 +0000 |
commit | 29f07789b1fc26f60bc1c931437f78725f1bc994 (patch) | |
tree | 0e5901939d8633065a9035209aa5138fe4ea6820 /sys/pci/if_ste.c | |
parent | 6873e20b753b589bfb09a3e55bb3781e9889e442 (diff) | |
download | FreeBSD-src-29f07789b1fc26f60bc1c931437f78725f1bc994.zip FreeBSD-src-29f07789b1fc26f60bc1c931437f78725f1bc994.tar.gz |
Drop the driver lock around calls to if_input to avoid a LOR when
the packets are immediately returned for sending (e.g. when bridging
or packet forwarding). There are more efficient ways to do this
but for now use the least intrusive approach.
Reviewed by: imp, rwatson
Diffstat (limited to 'sys/pci/if_ste.c')
-rw-r--r-- | sys/pci/if_ste.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/pci/if_ste.c b/sys/pci/if_ste.c index cf1e920..5c08f85 100644 --- a/sys/pci/if_ste.c +++ b/sys/pci/if_ste.c @@ -693,6 +693,8 @@ ste_rxeof(sc) int total_len = 0, count=0; u_int32_t rxstat; + STE_LOCK_ASSERT(sc); + ifp = &sc->arpcom.ac_if; while((rxstat = sc->ste_cdata.ste_rx_head->ste_ptr->ste_status) @@ -750,7 +752,9 @@ ste_rxeof(sc) m->m_pkthdr.len = m->m_len = total_len; ifp->if_ipackets++; + STE_UNLOCK(sc); (*ifp->if_input)(ifp, m); + STE_LOCK(sc); cur_rx->ste_ptr->ste_status = 0; count++; |