From owner-svn-src-all@FreeBSD.ORG Fri Jul 9 03:03:16 2010 Return-Path: Delivered-To: svn-src-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 72AAC106566B; Fri, 9 Jul 2010 03:03:16 +0000 (UTC) (envelope-from lstewart@freebsd.org) Received: from lauren.room52.net (lauren.room52.net [210.50.193.198]) by mx1.freebsd.org (Postfix) with ESMTP id 288C58FC13; Fri, 9 Jul 2010 03:03:15 +0000 (UTC) Received: from lawrence1.loshell.room52.net (ppp59-167-184-191.static.internode.on.net [59.167.184.191]) by lauren.room52.net (Postfix) with ESMTPSA id 7F6B97E853; Fri, 9 Jul 2010 13:03:14 +1000 (EST) Message-ID: <4C369172.4020700@freebsd.org> Date: Fri, 09 Jul 2010 13:03:14 +1000 From: Lawrence Stewart User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-AU; rv:1.9.1.10) Gecko/20100704 Thunderbird/3.0.5 MIME-Version: 1.0 To: Kostik Belousov References: <201006130239.o5D2du3m086332@svn.freebsd.org> <20100613101025.GD1320@garage.freebsd.pl> <4C158B71.205@freebsd.org> <20100614085205.GD13238@deviant.kiev.zoral.com.ua> <4C1605A7.2000202@freebsd.org> <20100614104349.GF13238@deviant.kiev.zoral.com.ua> <4C198A90.3060905@freebsd.org> <20100617071300.GX13238@deviant.kiev.zoral.com.ua> <4C1AD292.5070508@freebsd.org> In-Reply-To: <4C1AD292.5070508@freebsd.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: Matthew Fleming , src-committers@FreeBSD.org, Pawel Jakub Dawidek , John Baldwin , svn-src-all@FreeBSD.org, brde@optusnet.com.au, svn-src-head@FreeBSD.org Subject: Re: svn commit: r209119 - head/sys/sys X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 09 Jul 2010 03:03:16 -0000 On 06/18/10 11:57, Lawrence Stewart wrote: > On 06/17/10 17:13, Kostik Belousov wrote: >> On Thu, Jun 17, 2010 at 12:38:08PM +1000, Lawrence Stewart wrote: >>> On 06/14/10 20:43, Kostik Belousov wrote: > [snip] >>>> Or, you could ditch the sum at all, indeed using ({}) and returning the >>>> result. __typeof is your friend to select proper type of accumulator. >>> >>> So, something like this? >>> >>> #define DPCPU_SUM(n, var) __extension__ \ >>> ({ \ >>> u_int >>> _i; \ >>> __typeof((DPCPU_PTR(n))->var) >>> sum; \ >>> >>> \ >>> sum = >>> 0; \ >>> CPU_FOREACH(_i) >>> { \ >>> sum += (DPCPU_ID_PTR(_i, >>> n))->var; \ >>> >>> } \ >>> >>> sum; \ >>> }) >>> >>> Which can be used like this: >>> >>> totalss.n_in = DPCPU_SUM(ss, n_in); [snip] > I'll commit the above version of the macro this evening (GMT+10) unless > I hear any objections. Thanks to all of you for your input. Any objections to the following patch going in as a follow up to the above discussion? http://people.freebsd.org/~lstewart/patches/tcp_ffcaia2008/dpcpu_zeromember_9.x.r209745.patch Turns out I need DPCPU_ZERO to fix a bug in SIFTR and it occurred to me that providing variants of the macros which work on the DPCPU variable itself or a member of a DPCPU struct makes good sense. The new patch therefore renames my original DPCPU_SUM to DPCPU_MEMBERSUM and includes DPCPU_MEMBERZERO(). Also open to suggestions on a sensible shortening of MEMBER or other appropriate and descriptive indicator to reduce the macro name lengths. MBR implies some sort of memory barrier... any other ideas? Cheers, Lawrence