tbr_timeout() is a timer driven function[1]. While the previous commit
made LINT happy this does the proper looping over all vnets as we are only called `globally' and not once per vnet instance. Reported by: zec [1] Missed by: bz [1] in r192264 Reviewed by: zec
This commit is contained in:
parent
e9d57f2fd1
commit
ce9237f1b2
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=192278
@ -454,7 +454,9 @@ static void
|
||||
tbr_timeout(arg)
|
||||
void *arg;
|
||||
{
|
||||
INIT_VNET_NET(curvnet);
|
||||
#if defined(__FreeBSD__)
|
||||
VNET_ITERATOR_DECL(vnet_iter);
|
||||
#endif
|
||||
struct ifnet *ifp;
|
||||
int active, s;
|
||||
|
||||
@ -466,16 +468,25 @@ tbr_timeout(arg)
|
||||
#endif
|
||||
#if defined(__FreeBSD__) && (__FreeBSD_version >= 500000)
|
||||
IFNET_RLOCK();
|
||||
VNET_LIST_RLOCK();
|
||||
VNET_FOREACH(vnet_iter) {
|
||||
CURVNET_SET(vnet_iter);
|
||||
INIT_VNET_NET(vnet_iter);
|
||||
#endif
|
||||
for (ifp = TAILQ_FIRST(&V_ifnet); ifp; ifp = TAILQ_NEXT(ifp, if_list)) {
|
||||
/* read from if_snd unlocked */
|
||||
if (!TBR_IS_ENABLED(&ifp->if_snd))
|
||||
continue;
|
||||
active++;
|
||||
if (!IFQ_IS_EMPTY(&ifp->if_snd) && ifp->if_start != NULL)
|
||||
(*ifp->if_start)(ifp);
|
||||
}
|
||||
for (ifp = TAILQ_FIRST(&V_ifnet); ifp;
|
||||
ifp = TAILQ_NEXT(ifp, if_list)) {
|
||||
/* read from if_snd unlocked */
|
||||
if (!TBR_IS_ENABLED(&ifp->if_snd))
|
||||
continue;
|
||||
active++;
|
||||
if (!IFQ_IS_EMPTY(&ifp->if_snd) &&
|
||||
ifp->if_start != NULL)
|
||||
(*ifp->if_start)(ifp);
|
||||
}
|
||||
#if defined(__FreeBSD__) && (__FreeBSD_version >= 500000)
|
||||
CURVNET_RESTORE();
|
||||
}
|
||||
VNET_LIST_RUNLOCK();
|
||||
IFNET_RUNLOCK();
|
||||
#endif
|
||||
splx(s);
|
||||
|
Loading…
Reference in New Issue
Block a user