PERFORCE change 126104 for review
Marko Zec
zec at FreeBSD.org
Wed Sep 5 13:59:41 PDT 2007
http://perforce.freebsd.org/chv.cgi?CH=126104
Change 126104 by zec at zec_tpx32 on 2007/09/05 20:58:48
Set / restore vnet context when pipe_dequeue() is invoked
via a timer.
While here, clean up some obsolete fields in struct hookinfo
and a few chode chunks previously used by RED code which
is not present in this version of ng_pipe.
Affected files ...
.. //depot/projects/vimage/src/sys/netgraph/ng_pipe.c#3 edit
Differences ...
==== //depot/projects/vimage/src/sys/netgraph/ng_pipe.c#3 (text+ko) ====
@@ -36,6 +36,8 @@
* both directions can be set separately, except for delay.
*/
+#include "opt_vimage.h"
+
#include <sys/param.h>
#include <sys/errno.h>
#include <sys/systm.h>
@@ -43,6 +45,7 @@
#include <sys/malloc.h>
#include <sys/mbuf.h>
#include <sys/time.h>
+#include <sys/vimage.h>
#include <vm/uma.h>
@@ -77,29 +80,18 @@
u_int32_t packets; /* # of packets in this queue */
};
-#define TABLE_SIZE 20 /* XXX */
/* Per hook info */
struct hookinfo {
hook_p hook;
+ int noqueue;
LIST_ENTRY(hookinfo) hook_le; /* all active instances */
TAILQ_HEAD(, ngp_fifo) fifo_head; /* this hooks's FIFO queues */
TAILQ_HEAD(, ngp_hdr) qout_head; /* delay queue head */
- int noqueue;
struct timeval qin_utime;
- struct timeval q_time; /* used by RED */
- struct timeval ared_interval;
struct ng_pipe_hookcfg cfg;
struct ng_pipe_hookrun run;
struct ng_pipe_hookstat stats;
uint64_t *ber_p; /* loss_p(BER,psize) map */
- int64_t avg_octets;
- int64_t avg_frames;
- u_int64_t target;
- int64_t max_p;
- u_int64_t k[TABLE_SIZE]; /* used by RED */
-#ifdef XCP
- struct xcp_router_state xcps;
-#endif
};
/* Per node info */
@@ -810,11 +802,6 @@
ngp_f->packets--;
}
- if (hinfo->run.qin_frames == 0) {
- hinfo->q_time.tv_sec = now->tv_sec;
- hinfo->q_time.tv_usec = now->tv_usec;
- }
-
/* Calculate the serialization delay */
if (hinfo->cfg.bandwidth) {
hinfo->qin_utime.tv_usec += ((uint64_t) m->m_pkthdr.len
@@ -909,17 +896,6 @@
static void
pipe_scheduler(void)
{
- static struct timeval old;
- struct timeval new;
-
- microuptime(&new);
- if (old.tv_sec > new.tv_sec)
- printf ("ng_pipe: dsec=%d\n", old.tv_sec - new.tv_sec);
- else if (old.tv_sec == new.tv_sec && old.tv_usec > new.tv_usec)
- printf ("ng_pipe: dusec=%ld\n", old.tv_usec - new.tv_usec);
- old.tv_sec = new.tv_sec;
- old.tv_usec = new.tv_usec;
-
pipe_poll();
/* Reschedule */
@@ -927,6 +903,11 @@
}
+/*
+ * Traverse the list of all active hooks and attempt to dequeue
+ * some packets. Hooks with empty queues are not traversed since
+ * they are not linked into this list.
+ */
static void
pipe_poll(void)
{
@@ -935,8 +916,11 @@
microuptime(&now);
mtx_lock(&ng_pipe_giant);
- LIST_FOREACH(hinfo, &hook_head, hook_le)
+ LIST_FOREACH(hinfo, &hook_head, hook_le) {
+ CURVNET_SET(NG_HOOK_NODE(hinfo->hook)->nd_vnet);
pipe_dequeue(hinfo, &now);
+ CURVNET_RESTORE();
+ }
mtx_unlock(&ng_pipe_giant);
}
@@ -1048,6 +1032,5 @@
break;
}
- printf("XXX ngp_modevent type = %d error = %d\n", type, error);
return (error);
}
More information about the p4-projects
mailing list