On Thu, Aug 23, 2012 at 03:52:56PM +0100, Attilio Rao wrote: > On 8/23/12, Luigi Rizzo <ri...@iet.unipi.it> 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 ? Using getenv_*() to read the value of a tunable (which is what TUNABLE_INT_FETCH() translates into) has the additional making sure that the variable does not change under your feet e.g. as a result of a kenv. FWIW, the reason i do not particularly like the non-fetch version is the way they are defined: #define TUNABLE_INT(path, var) \ static struct tunable_int __CONCAT(__tunable_int_, __LINE__) = { \ (path), \ (var), \ }; \ SYSINIT(__CONCAT(__Tunable_init_, __LINE__), \ SI_SUB_TUNABLES, SI_ORDER_MIDDLE, tunable_int_init, \ &__CONCAT(__tunable_int_, __LINE__)) note how the identifier uses __LINE__ to make it unique, which means that you cannot have more than one TUNABLE_INT() within the body of another macro (this just hit me yesterday). cheers luigi _______________________________________________ freebsd-current@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-current To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"