/* SPDX-License-Identifier: GPL-2.0 */
#ifndef __TOOLS_LINUX_PRANDOM_H
#define __TOOLS_LINUX_PRANDOM_H
#include <linux/types.h>
struct rnd_state {
__u32 s1, s2, s3, s4;
};
/*
* Handle minimum values for seeds
*/
static inline u32 __seed(u32 x, u32 m)
{
return (x < m) ? x + m : x;
}
/**
* prandom_seed_state - set seed for prandom_u32_state ( ) .
* @ state : pointer to state structure to receive the seed .
* @ seed : arbitrary 64 - bit value to use as a seed .
*/
static inline void prandom_seed_state(struct rnd_state *state, u64 seed)
{
u32 i = ((seed >> 32 ) ^ (seed << 10 ) ^ seed) & 0 xffffffffUL;
state->s1 = __seed(i, 2 U);
state->s2 = __seed(i, 8 U);
state->s3 = __seed(i, 16 U);
state->s4 = __seed(i, 128 U);
}
/**
* prandom_u32_state - seeded pseudo - random number generator .
* @ state : pointer to state structure holding seeded state .
*
* This is used for pseudo - randomness with no outside seeding .
* For more random results , use get_random_u32 ( ) .
*/
static inline u32 prandom_u32_state(struct rnd_state *state)
{
#define TAUSWORTHE(s, a, b, c, d) (((s & c) << d) ^ (((s << a) ^ s) >> b))
state->s1 = TAUSWORTHE(state->s1, 6 U, 13 U, 4294967294 U, 18 U);
state->s2 = TAUSWORTHE(state->s2, 2 U, 27 U, 4294967288 U, 2 U);
state->s3 = TAUSWORTHE(state->s3, 13 U, 21 U, 4294967280 U, 7 U);
state->s4 = TAUSWORTHE(state->s4, 3 U, 12 U, 4294967168 U, 13 U);
return (state->s1 ^ state->s2 ^ state->s3 ^ state->s4);
}
#endif // __TOOLS_LINUX_PRANDOM_H
Messung V0.5 in Prozent C=89 H=95 G=91
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-10-11)
¤
*© Formatika GbR, Deutschland