From owner-svn-src-user@FreeBSD.ORG Sun Jan 31 11:34:45 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 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 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 " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 );