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.
This commit is contained in:
parent
e6f7c17ebd
commit
482b02b3f3
@ -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 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user