From owner-freebsd-current@FreeBSD.ORG Thu Aug 23 17:21:29 2012 Return-Path: Delivered-To: current@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 0BD49106566B; Thu, 23 Aug 2012 17:21:29 +0000 (UTC) (envelope-from luigi@onelab2.iet.unipi.it) Received: from onelab2.iet.unipi.it (onelab2.iet.unipi.it [131.114.59.238]) by mx1.freebsd.org (Postfix) with ESMTP id B9E5C8FC08; Thu, 23 Aug 2012 17:21:28 +0000 (UTC) Received: by onelab2.iet.unipi.it (Postfix, from userid 275) id 11C177300A; Thu, 23 Aug 2012 19:40:37 +0200 (CEST) Date: Thu, 23 Aug 2012 19:40:37 +0200 From: Luigi Rizzo To: Attilio Rao Message-ID: <20120823174037.GA4820@onelab2.iet.unipi.it> References: <20120823145420.GB3103@onelab2.iet.unipi.it> <20120823160543.GD3391@onelab2.iet.unipi.it> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4.2.3i Cc: current@freebsd.org Subject: Re: TUNABLE_INT vs TUNABLE_INT_FETCH X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Aug 2012 17:21:29 -0000 On Thu, Aug 23, 2012 at 04:55:05PM +0100, Attilio Rao wrote: > On Thu, Aug 23, 2012 at 5:05 PM, Luigi Rizzo wrote: > > On Thu, Aug 23, 2012 at 03:52:56PM +0100, Attilio Rao wrote: > >> On 8/23/12, Luigi Rizzo wrote: > >> > Hi, > >> > I am a bit unclear on what are the pros and cons of using > >> > TUNABLE_INT vs TUNABLE_INT_FETCH within a device driver. > >> > >> TUNABLE_INT is basically the "statically initializer" version of > >> TUNABLE_INT_FETCH. > >> In short terms, you will use TUNABLE_INT_FETCH() in normal functions, > >> while TUNABLE_INT() in data declaration. > > > > The thing is, do we need the data declaration at all ? > > What do you mean with "data declaration"? i am using your words :) > We need to mimic a "static initialization" usage, so what we do is to > use the first SYSINIT() family available (SI_SUB_TUNABLES). You also > need the env to look for and the static variable to initialize, so for > SYSINIT's sake you need to pack them up in a single argument. To explain: as i understand it, kenv variables are created and stored (presumably as strings) even if not explicitly declared as TUNABLE_*(). The role of the SYSINIT() block is presumably to copy the values of interesting entries into C variables (i suppose at boot time, and perhaps even when kenv runs). This should be the 'static initialization' you mention. I think there is only a limited number of cases where this makes sense, in most circumstances the variables passed through the environment should be read explictly via TUNABLE_INT_FETCH() to make sure that they do not change in unexpected moments. This is why in the documentation I'd probably suggest to use the TUNABLE_*_FETCH() variant unless you are really really sure that the variable can change at any time as a result of a kenv call (or make it clear that it *will not* reflect the kenv result, i am not sure how it works). Anyways, thanks for the clarificaiton, now i know what i need to use. cheers luigi