On Tue, Oct 10, 2017 at 09:08:30AM +0200, Greg KH wrote: > On Tue, Oct 10, 2017 at 10:17:09AM +1100, Tobin C. Harding wrote: > > Hi, > > > > I would like to create a boot time variable i.e a variable that is set once at boot time. Variable > > does not need to be globally accessible. (actually I am using two variables). > > static foo = 42; > > should be all you need, right? > > If not, what exactly do you mean by "boot time variable"? > > > Could any one point me to examples of this already intree please? > > > > I have tried the following but it has a race condition on the zero check and assignment of randval/oddval. > > > > /* Maps a pointer to a unique identifier. */ > > static char *ptr_to_id(char *buf, char *end, void *ptr, struct printf_spec spec) > > { > > long hashval; > > static long randval = 0; > > static long oddval = 0; > > > > if (oddval == 0 && randval == 0) { > > randval = get_random_long(); > > oddval = get_random_odd_long(); > > } > > > > hashval = ptr_obfuscate((unsigned long)ptr, randval, oddval); > > spec.base = 16; > > > > return number(buf, end, hashval, spec); > > } > > What's wrong with this code? Maybe I just have race conditions on the brain. > > And the compiler doesn't like > > > > static long randval = get_random_long(); > > static long oddval = get_random_odd_long(); > > Yeah, that will not work, static initializers are at link/load time, not > runtime. > > > I thought of wrapping oddval/randval in a struct and protecting it with a lock but I don't know > > how/where to initialize the lock in a race free manner? > > Put a local lock in the function when testing if the variables are == 0, > if you are worried that two different callers will enter it at the same > time. Okay. > hope this helps, > > greg k-h Cheers Greg _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies