From 2e4c2f73c4a8e57e3ffe382e01d9b0c8b1dcaf17 Mon Sep 17 00:00:00 2001 From: wpaul Date: Fri, 16 Dec 2005 17:21:28 +0000 Subject: In ndis_rxeof_eth(), avoid acquiring the NDIS miniport block spinlock for serialized miniports when updating the packet list. This fixes a deadlock that can occur with the Ralink RT2500 driver when using wpa_supplicant. --- sys/dev/if_ndis/if_ndis.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'sys') diff --git a/sys/dev/if_ndis/if_ndis.c b/sys/dev/if_ndis/if_ndis.c index 00c5216..296d9a7 100644 --- a/sys/dev/if_ndis/if_ndis.c +++ b/sys/dev/if_ndis/if_ndis.c @@ -1129,11 +1129,13 @@ ndis_rxeof_eth(adapter, ctx, addr, hdr, hdrlen, lookahead, lookaheadlen, pktlen) priv = (ndis_ethpriv *)&p->np_protocolreserved; priv->nep_ctx = ctx; - KeAcquireSpinLock(&block->nmb_lock, &irql); + if (!NDIS_SERIALIZED(block)) + KeAcquireSpinLock(&block->nmb_lock, &irql); InsertTailList((&block->nmb_packetlist), (&p->np_list)); - KeReleaseSpinLock(&block->nmb_lock, irql); + if (!NDIS_SERIALIZED(block)) + KeReleaseSpinLock(&block->nmb_lock, irql); return; } -- cgit v1.1