Date: Thu, 22 Apr 2004 00:08:39 -0700 (PDT) From: Bill Paul <wpaul@FreeBSD.org> To: src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org Subject: cvs commit: src/sys/compat/ndis kern_ndis.c src/sys/dev/if_ndis if_ndis.c Message-ID: <200404220708.i3M78d1Q016504@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
wpaul 2004/04/22 00:08:39 PDT
FreeBSD src repository
Modified files:
sys/compat/ndis kern_ndis.c
sys/dev/if_ndis if_ndis.c
Log:
Ok, _really_ fix the Intel 2100B Centrino deadlock problems this time.
(I hope.)
My original instinct to make ndis_return_packet() asynchronous was correct.
Making ndis_rxeof() submit packets to the stack asynchronously fixes
one recursive spinlock acquisition, but it's also possible for it to
happen via the ndis_txeof() path too. So:
- In if_ndis.c, revert ndis_rxeof() to its old behavior (and don't bother
putting ndis_rxeof_serial() back since we don't need it anymore).
- In kern_ndis.c, make ndis_return_packet() submit the call to the
MiniportReturnPacket() function to the "ndis swi" thread so that
it always happens in another context no matter who calls it.
Revision Changes Path
1.53 +27 -12 src/sys/compat/ndis/kern_ndis.c
1.55 +3 -29 src/sys/dev/if_ndis/if_ndis.c
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200404220708.i3M78d1Q016504>
