From owner-svn-src-user@FreeBSD.ORG  Sun Jan 31 11:34:45 2010
Return-Path: <owner-svn-src-user@FreeBSD.ORG>
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 51F541065672;
	Sun, 31 Jan 2010 11:34:45 +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 4199B8FC16;
	Sun, 31 Jan 2010 11:34:45 +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 o0VBYjtY011427;
	Sun, 31 Jan 2010 11:34:45 GMT (envelope-from luigi@svn.freebsd.org)
Received: (from luigi@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id o0VBYjvn011425;
	Sun, 31 Jan 2010 11:34:45 GMT (envelope-from luigi@svn.freebsd.org)
Message-Id: <201001311134.o0VBYjvn011425@svn.freebsd.org>
From: Luigi Rizzo <luigi@FreeBSD.org>
Date: Sun, 31 Jan 2010 11:34:45 +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: r203275 - 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 &quot; user&quot;
	src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 31 Jan 2010 11:34:45 -0000

Author: luigi
Date: Sun Jan 31 11:34:44 2010
New Revision: 203275
URL: http://svn.freebsd.org/changeset/base/203275

Log:
  round heap size to powers of 2, so we save an expensive modulo op.

Modified:
  user/luigi/ipfw3-head/sys/netinet/ipfw/dn_heap.c

Modified: user/luigi/ipfw3-head/sys/netinet/ipfw/dn_heap.c
==============================================================================
--- user/luigi/ipfw3-head/sys/netinet/ipfw/dn_heap.c	Sun Jan 31 11:30:28 2010	(r203274)
+++ user/luigi/ipfw3-head/sys/netinet/ipfw/dn_heap.c	Sun Jan 31 11:34:44 2010	(r203275)
@@ -78,7 +78,15 @@ heap_resize(struct dn_heap *h, int new_s
 
 	if (h->size >= new_size )	/* have enough room */
 		return 0;
+#if 1  /* round to the next power of 2 */
+	new_size |= new_size >> 1;
+	new_size |= new_size >> 2;
+	new_size |= new_size >> 4;
+	new_size |= new_size >> 8;
+	new_size |= new_size >> 16;
+#else
 	new_size = (new_size + HEAP_INCREMENT ) & ~HEAP_INCREMENT;
+#endif
 	p = malloc(new_size * sizeof(*p), M_DN_HEAP, M_NOWAIT);
 	if (p == NULL) {
 		printf("--- %s, resize %d failed\n", __func__, new_size );