Reverse the stopgap change made in revision 1.29:
date: 1998/08/01 01:47:24; author: thorpej; state: Exp; lines: +18 -8 Don't call the protocol drain routines if how == M_NOWAIT, which typically means we're in interrupt context. Since we can be called from a network hardware interrupt, we could corrupt the protocol queues we try to drain them at that time. The problem has been addressed by letting the drain'able protocols use a locking scheme to prevent queue corruption.
This commit is contained in:
parent
4f177aec90
commit
489d6d0e46
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: uipc_mbuf.c,v 1.32 1998/08/28 20:05:48 thorpej Exp $ */
|
||||
/* $NetBSD: uipc_mbuf.c,v 1.33 1998/12/18 21:40:14 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1982, 1986, 1988, 1991, 1993
|
||||
@ -168,19 +168,11 @@ m_reclaim(how)
|
||||
struct ifnet *ifp;
|
||||
int s = splimp();
|
||||
|
||||
/*
|
||||
* Don't call the protocol drain routines if how == M_NOWAIT, which
|
||||
* typically means we're in interrupt context. Since we can be
|
||||
* called from a network hardware interrupt, we could corrupt the
|
||||
* protocol queues we try to drain them at that time.
|
||||
*/
|
||||
if (how == M_WAIT) {
|
||||
for (dp = domains; dp; dp = dp->dom_next)
|
||||
for (pr = dp->dom_protosw;
|
||||
pr < dp->dom_protoswNPROTOSW; pr++)
|
||||
if (pr->pr_drain)
|
||||
(*pr->pr_drain)();
|
||||
}
|
||||
for (dp = domains; dp; dp = dp->dom_next)
|
||||
for (pr = dp->dom_protosw;
|
||||
pr < dp->dom_protoswNPROTOSW; pr++)
|
||||
if (pr->pr_drain)
|
||||
(*pr->pr_drain)();
|
||||
for (ifp = TAILQ_FIRST(&ifnet); ifp; ifp = TAILQ_NEXT(ifp, if_list))
|
||||
if (ifp->if_drain)
|
||||
(*ifp->if_drain)(ifp);
|
||||
|
Loading…
Reference in New Issue
Block a user