svn commit: r203382 - user/luigi/ipfw3-head/sys/netinet/ipfw

Luigi Rizzo luigi at FreeBSD.org
Tue Feb 2 16:18:51 UTC 2010


Author: luigi
Date: Tue Feb  2 16:18:51 2010
New Revision: 203382
URL: http://svn.freebsd.org/changeset/base/203382

Log:
  some portability fixes.

Modified:
  user/luigi/ipfw3-head/sys/netinet/ipfw/dn_heap.c
  user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_qfq.c
  user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dn_private.h
  user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dummynet.c

Modified: user/luigi/ipfw3-head/sys/netinet/ipfw/dn_heap.c
==============================================================================
--- user/luigi/ipfw3-head/sys/netinet/ipfw/dn_heap.c	Tue Feb  2 16:17:44 2010	(r203381)
+++ user/luigi/ipfw3-head/sys/netinet/ipfw/dn_heap.c	Tue Feb  2 16:18:51 2010	(r203382)
@@ -43,6 +43,7 @@ __FBSDID("$FreeBSD$");
 #else /* !_KERNEL */
 
 #include <stdio.h>
+#include <dn_test.h>
 #include <strings.h>
 #include <stdlib.h>
 
@@ -74,7 +75,7 @@ MALLOC_DEFINE(M_DN_HEAP, "dummynet", "du
 #define HEAP_INCREMENT	15
 
 static int
-heap_resize(struct dn_heap *h, int new_size)
+heap_resize(struct dn_heap *h, unsigned int new_size)
 {
 	struct dn_heap_entry *p;
 

Modified: user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_qfq.c
==============================================================================
--- user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_qfq.c	Tue Feb  2 16:17:44 2010	(r203381)
+++ user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_qfq.c	Tue Feb  2 16:18:51 2010	(r203382)
@@ -53,22 +53,18 @@ static void dump_sched(struct qfq_sched 
 #define DN_SCHED_QFQ	4 // XXX Where?
 typedef	unsigned long	bitmap;
 
-#ifndef __FreeBSD__	/* actually, only linux X86 */
-static inline unsigned long __fls(unsigned long word)
-{
-	asm("bsr %1,%0"
-	    : "=r" (word)
-	    : "rm" (word));
-	return word;
-}
-#else
+/*
+ * bitmaps ops are critical. Some linux versions have __fls
+ * and the bitmap ops. Some machines have ffs
+ */
+#if !defined(_KERNEL) || defined( __FreeBSD__ )
 static inline unsigned long __fls(unsigned long word)
 {
 	return fls(word) - 1;
 }
 #endif
 
-#if !defined(__linux__)
+#if !defined(_KERNEL) || !defined(__linux__)
 #ifdef QFQ_DEBUG
 int test_bit(int ix, bitmap *p)
 {

Modified: user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dn_private.h
==============================================================================
--- user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dn_private.h	Tue Feb  2 16:17:44 2010	(r203381)
+++ user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dn_private.h	Tue Feb  2 16:18:51 2010	(r203382)
@@ -248,10 +248,11 @@ struct dn_sch_inst {
 	uint64_t idle_time;	/* start of scheduler instance idle time */
 };
 
-/* kernel-side flags */
+/* kernel-side flags. Linux has DN_DELETE in fcntl.h
+ */
 enum {
 	/* 1 and 2 are reserved for the SCAN flags */
-	DN_DELETE	= 0x0004, /* destroy */
+	DN_DESTROY	= 0x0004, /* destroy */
 	DN_DELETE_FS	= 0x0008, /* destroy flowset */
 	DN_DETACH	= 0x0010,
 	DN_ACTIVE	= 0x0020, /* object is in evheap */

Modified: user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dummynet.c
==============================================================================
--- user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dummynet.c	Tue Feb  2 16:17:44 2010	(r203381)
+++ user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dummynet.c	Tue Feb  2 16:18:51 2010	(r203382)
@@ -287,7 +287,7 @@ q_new(uintptr_t key, int flags, void *ar
 
 /*
  * Notify schedulers that a queue is going away.
- * If (flags & DN_DELETE), also free the packets.
+ * If (flags & DN_DESTROY), also free the packets.
  * The version for callbacks is called q_delete_cb().
  */
 static void
@@ -300,7 +300,7 @@ dn_delete_queue(struct dn_queue *q, int 
 	if (fs && fs->sched->fp->free_queue)
 		fs->sched->fp->free_queue(q);
 	q->_si = NULL;
-	if (flags & DN_DELETE) {
+	if (flags & DN_DESTROY) {
 		if (q->mq.head)
 			dn_free_pkts(q->mq.head);
 		bzero(q, sizeof(*q));	// safety
@@ -314,13 +314,13 @@ q_delete_cb(void *q, void *arg)
 {
 	int flags = (int)(uintptr_t)arg;
 	dn_delete_queue(q, flags);
-	return (flags & DN_DELETE) ? DNHT_SCAN_DEL : 0;
+	return (flags & DN_DESTROY) ? DNHT_SCAN_DEL : 0;
 }
 
 /*
  * calls dn_delete_queue/q_delete_cb on all queues,
  * which notifies the parent scheduler and possibly drains packets.
- * flags & DN_DELETE: drains queues and destroy qht;
+ * flags & DN_DESTROY: drains queues and destroy qht;
  */
 static void
 qht_delete(struct dn_fsk *fs, int flags)
@@ -331,13 +331,13 @@ qht_delete(struct dn_fsk *fs, int flags)
 		return;
 	if (fs->fs.flags & DN_HAVE_MASK) {
 		dn_ht_scan(fs->qht, q_delete_cb, (void *)(uintptr_t)flags);
-		if (flags & DN_DELETE) {
+		if (flags & DN_DESTROY) {
 			dn_ht_free(fs->qht, 0);
 			fs->qht = NULL;
 		}
 	} else {
 		dn_delete_queue((struct dn_queue *)(fs->qht), flags);
-		if (flags & DN_DELETE)
+		if (flags & DN_DESTROY)
 			fs->qht = NULL;
 	}
 }
@@ -553,18 +553,18 @@ fsk_new(uintptr_t key, int flags, void *
 /*
  * detach flowset from its current scheduler. Flags as follows:
  * DN_DETACH removes from the fsk_list
- * DN_DELETE deletes individual queues
+ * DN_DESTROY deletes individual queues
  * DN_DELETE_FS destroys the flowset (otherwise goes in unlinked).
  */
 static void
 fsk_detach(struct dn_fsk *fs, int flags)
 {
 	if (flags & DN_DELETE_FS)
-		flags |= DN_DELETE;
+		flags |= DN_DESTROY;
 	ND("fs %d from sched %d flags %s %s %s",
 		fs->fs.fs_nr, fs->fs.sched_nr,
 		(flags & DN_DELETE_FS) ? "DEL_FS":"",
-		(flags & DN_DELETE) ? "DEL":"",
+		(flags & DN_DESTROY) ? "DEL":"",
 		(flags & DN_DETACH) ? "DET":"");
 	if (flags & DN_DETACH) { /* detach from the list */
 		struct dn_fsk_head *h;
@@ -587,9 +587,9 @@ fsk_detach(struct dn_fsk *fs, int flags)
 /*
  * Detach or destroy all flowsets in a list.
  * flags specifies what to do:
- * DN_DELETE:	flush all queues
- * DN_DELETE_FS:	DN_DELETE + destroy flowset
- *	DN_DELETE_FS implies DN_DELETE
+ * DN_DESTROY:	flush all queues
+ * DN_DELETE_FS:	DN_DESTROY + destroy flowset
+ *	DN_DELETE_FS implies DN_DESTROY
  */
 static void
 fsk_detach_list(struct dn_fsk_head *h, int flags)
@@ -695,7 +695,7 @@ schk_new(uintptr_t key, int flags, void 
  * detach from the scheduler, destroy the internal flowset, and
  * all instances. The scheduler goes away too.
  * arg is 0 (only detach flowsets and destroy instances)
- * DN_DELETE (detach & delete queues, delete schk)
+ * DN_DESTROY (detach & delete queues, delete schk)
  * or DN_DELETE_FS (delete queues and flowsets, delete schk)
  */
 static int
@@ -706,10 +706,10 @@ schk_delete_cb(void *obj, void *arg)
 	int a = (int)arg;
 	ND("sched %d arg %s%s",
 		s->sch.sched_nr,
-		a&DN_DELETE ? "DEL ":"",
+		a&DN_DESTROY ? "DEL ":"",
 		a&DN_DELETE_FS ? "DEL_FS":"");
 #endif
-	fsk_detach_list(&s->fsk_list, arg ? DN_DELETE : 0);
+	fsk_detach_list(&s->fsk_list, arg ? DN_DESTROY : 0);
 	/* no more flowset pointing to us now */
 	if (s->sch.flags & DN_HAVE_MASK)
 		dn_ht_scan(s->siht, si_destroy, NULL);
@@ -740,7 +740,7 @@ delete_schk(int i)
 		return EINVAL;
 	delete_fs(i + DN_MAX_ID, 1); /* first delete internal fs */
 	/* then detach flowsets, delete traffic */
-	schk_delete_cb(s, (void*)(uintptr_t)DN_DELETE);
+	schk_delete_cb(s, (void*)(uintptr_t)DN_DESTROY);
 	return 0;
 }
 /*--- end of schk hashtable support ---*/
@@ -1093,8 +1093,8 @@ config_fs(struct dn_fs *nfs, struct dn_i
 		fs->fs.fs_nr,
 		fs->fs.sched_nr, fs->sched, nfs->sched_nr, s);
 	    if (fs->sched) {
-		int flags = s ? DN_DETACH : (DN_DETACH | DN_DELETE);
-		flags |= DN_DELETE; /* XXX temporary */
+		int flags = s ? DN_DETACH : (DN_DETACH | DN_DESTROY);
+		flags |= DN_DESTROY; /* XXX temporary */
 		fsk_detach(fs, flags);
 	    }
 	    fs->fs = *nfs; /* copy configuration */
@@ -1193,7 +1193,7 @@ again: /* run twice, for wfq and fifo */
 		/* Detach flowsets, preserve queues. */
 		// schk_delete_cb(s, NULL);
 		// XXX temporarily, kill queues
-		schk_delete_cb(s, (void *)DN_DELETE);
+		schk_delete_cb(s, (void *)DN_DESTROY);
 		goto again;
 	} else {
 		DX(4, "sched %d unchanged type %s", i, a.fp->name);
@@ -1217,7 +1217,7 @@ again: /* run twice, for wfq and fifo */
 			s->fs = config_fs(&fs, NULL, 1 /* locked */);
 		}
 		if (!s->fs) {
-			schk_delete_cb(s, (void *)DN_DELETE);
+			schk_delete_cb(s, (void *)DN_DESTROY);
 			D("error creating internal fs for %d", i);
 			DN_BH_WUNLOCK();
 			return ENOMEM;


More information about the svn-src-user mailing list