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
[email protected]
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

Reply via email to