From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755076AbZEYK2i (ORCPT ); Mon, 25 May 2009 06:28:38 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1753485AbZEYK2R (ORCPT ); Mon, 25 May 2009 06:28:17 -0400 Received: from ozlabs.org ([203.10.76.45]:43820 "EHLO ozlabs.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753141AbZEYK2Q (ORCPT ); Mon, 25 May 2009 06:28:16 -0400 From: Rusty Russell To: Joe Perches Subject: Re: [PATCH 1/3] kernel.h: Add DO_ONCE statement expression macro Date: Mon, 25 May 2009 16:15:07 +0930 User-Agent: KMail/1.11.2 (Linux/2.6.28-11-generic; KDE/4.2.2; i686; ; ) Cc: linux-kernel@vger.kernel.org, cpufreq@vger.kernel.org, Dave Jones , "Greg Kroah-Hartman" , "H. Peter Anvin" , Ingo Molnar , x86@vger.kernel.org, Len Brown , Mike Travis , Thomas Gleixner , Venkatesh Pallipadi References: <7b063fda0675875d51a5da49f59e89520d025eee.1242943463.git.joe@perches.com> In-Reply-To: <7b063fda0675875d51a5da49f59e89520d025eee.1242943463.git.joe@perches.com> MIME-Version: 1.0 Content-Type: Text/Plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200905251615.08414.rusty@rustcorp.com.au> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, 22 May 2009 08:30:22 am Joe Perches wrote: > Add a DO_ONCE statement expression analogous to printk_once > that executes any arbitrary statement exactly once. > > This will take the place of printk_once so that > DO_ONCE(pr_) or any other statement performed > a single time may be easily written. If you're going to use a statement expression, was the intent to make it usable for a test? If so, you want something vaguely like: #define DO_ONCE(x...) ({ \ static bool __done = false; \ bool did = !__done; \ if (!__done) { \ x; \ __done = true; \ } \ did; \ }) Otherwise, why not just use a normal do {} while (0) ? Anyway, statements in macros leave me uncomfortable. I prefer explicit ONCE() macro which can be tested. Cheers, Rusty.