From 482b02b3f333a865bec4467f1683768db2d993b6 Mon Sep 17 00:00:00 2001 From: Gleb Smirnoff Date: Thu, 29 Sep 2005 13:23:34 +0000 Subject: [PATCH] In em_process_receive_interrupts() store and clear adapter->fmt. This make function reenterable. In the runtime the race is masked by serializing of em_process_receive_interrupts() either by interrupt thread, or by polling. The race can be triggered when polling is switched on or off. --- sys/dev/em/if_em.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sys/dev/em/if_em.c b/sys/dev/em/if_em.c index 1fd5467a2149..f380e1e8face 100644 --- a/sys/dev/em/if_em.c +++ b/sys/dev/em/if_em.c @@ -2911,12 +2911,14 @@ em_process_receive_interrupts(struct adapter * adapter, int count) adapter->fmp = NULL); if (adapter->fmp != NULL) { + struct mbuf *m = adapter->fmp; + + adapter->fmp = NULL; EM_UNLOCK(adapter); - (*ifp->if_input)(ifp, adapter->fmp); + (*ifp->if_input)(ifp, m); EM_LOCK(adapter); } #endif - adapter->fmp = NULL; adapter->lmp = NULL; } } else {