svn commit: r202738 - user/luigi/ipfw3-head/sys/netinet/ipfw
Luigi Rizzo
luigi at FreeBSD.org
Thu Jan 21 10:09:19 UTC 2010
Author: luigi
Date: Thu Jan 21 10:09:19 2010
New Revision: 202738
URL: http://svn.freebsd.org/changeset/base/202738
Log:
some documentation fixes
Modified:
user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_fifo.c
user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_wf2q.c
Modified: user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_fifo.c
==============================================================================
--- user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_fifo.c Thu Jan 21 10:08:58 2010 (r202737)
+++ user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_fifo.c Thu Jan 21 10:09:19 2010 (r202738)
@@ -47,13 +47,16 @@
* This file implements a FIFO scheduler for a single queue.
* The queue is allocated as part of the scheduler instance,
* and there is a single flowset is in the template which stores
- * queue-related information.
- * No parameters are used except queue sizes and management policy.
+ * queue size and policy.
* Enqueue and dequeue use the default library functions.
*/
static int
fifo_enqueue(struct new_sch_inst *si, struct new_queue *q, struct mbuf *m)
{
+ /* XXX if called with q != NULL and m=NULL, this is a
+ * re-enqueue from an existing scheduler, which we should
+ * handle.
+ */
return dn_enqueue((struct new_queue *)(si+1), m, 0);
}
Modified: user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_wf2q.c
==============================================================================
--- user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_wf2q.c Thu Jan 21 10:08:58 2010 (r202737)
+++ user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_wf2q.c Thu Jan 21 10:09:19 2010 (r202738)
@@ -48,10 +48,6 @@
#define MY_M 16 /* shift for fixed point arithmetic */
#endif
-#ifndef isdigit
-#define isdigit(x) ((x) >= '0' && (x) <= '9' )
-#endif
-
/*
* Private information for the scheduler instance:
* sch_heap (key is Finish time) returns the next queue to serve
@@ -234,7 +230,7 @@ wf2qp_new_sched(struct new_sch_inst *_si
struct wf2qp_si *si = (struct wf2qp_si *)(_si + 1);
int ofs = sizeof(*_si) + offsetof(struct wf2qp_queue, heap_pos);
- /* only idle-heap supports extract from middle */
+ /* all heaps support extract from middle */
if (heap_init(&si->idle_heap, 16, ofs) ||
heap_init(&si->sch_heap, 16, ofs) ||
heap_init(&si->ne_heap, 16, ofs)) {
@@ -283,6 +279,12 @@ wf2qp_new_queue(struct new_queue *_q)
return 0;
}
+/*
+ * Called when the infrastructure removes a queue (e.g. flowset
+ * is reconfigured). Nothing to do if we did not 'own' the queue,
+ * otherwise remove it from the right heap and adjust the sum
+ * of weights.
+ */
static int
wf2qp_free_queue(struct new_queue *q)
{
@@ -290,13 +292,11 @@ wf2qp_free_queue(struct new_queue *q)
struct wf2qp_si *si = (struct wf2qp_si *)(q->_si + 1);
printf("%s called\n", __FUNCTION__);
- /* If the queue was valid, decrement the sum value */
- if (alg_fq->S == alg_fq->F + 1)
+ if (alg_fq->S >= alg_fq->F + 1)
return 0; /* nothing to do, not in any heap */
- /* decrement the sum of weights */
si->sum -= q->fs->fs.weight;
- /* extract from the heap. Note that we may need to adjust V
+ /* extract from the heap. XXX TODO we may need to adjust V
* to make sure the invariants hold.
*/
if (q->mq.head == NULL) {
@@ -319,6 +319,7 @@ static struct dn_sched wf2qp_desc = {
.name = "WF2Q+",
.flags = DN_MULTIQUEUE,
+ /* we need extra space in the si and the queue */
.si_datalen = sizeof(struct wf2qp_si),
.q_datalen = sizeof(struct wf2qp_queue),
More information about the svn-src-user
mailing list