]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
Ok, _really_ fix the Intel 2100B Centrino deadlock problems this time.
authorwpaul <wpaul@FreeBSD.org>
Thu, 22 Apr 2004 07:08:39 +0000 (07:08 +0000)
committerwpaul <wpaul@FreeBSD.org>
Thu, 22 Apr 2004 07:08:39 +0000 (07:08 +0000)
commit6bc1da1c05748794ddfba4b35ad43a0752b9d9ce
treed7c8788b2df34a961795a4183df16cf79dd6cf16
parentea882c9688f650396d1f4b076c564a13bb55b025
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.
sys/compat/ndis/kern_ndis.c
sys/dev/if_ndis/if_ndis.c