From owner-svn-src-user@FreeBSD.ORG Tue Feb 2 16:18:51 2010 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A4462106566C; Tue, 2 Feb 2010 16:18:51 +0000 (UTC) (envelope-from luigi@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 93DBD8FC17; Tue, 2 Feb 2010 16:18:51 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o12GIppB008855; Tue, 2 Feb 2010 16:18:51 GMT (envelope-from luigi@svn.freebsd.org) Received: (from luigi@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o12GIp7U008850; Tue, 2 Feb 2010 16:18:51 GMT (envelope-from luigi@svn.freebsd.org) Message-Id: <201002021618.o12GIp7U008850@svn.freebsd.org> From: Luigi Rizzo Date: Tue, 2 Feb 2010 16:18:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r203382 - user/luigi/ipfw3-head/sys/netinet/ipfw X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Feb 2010 16:18:51 -0000 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 +#include #include #include @@ -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;