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).

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);
}

And the compiler doesn't like

        static long randval = get_random_long();
        static long oddval = get_random_odd_long();


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?

Any tips or pointers please?

thanks,
Tobin.

_______________________________________________
Kernelnewbies mailing list
[email protected]
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

Reply via email to