X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_eal%2Fcommon%2Frte_random.c;h=57ec8fb2b3dd64caa27213ad98bb264f68af501c;hb=cfe3aeb170b2f6277e6f96173599da51eab0654f;hp=3d9b9b7d834ab064ad5d4b8f2e3a626bbcee9702;hpb=5f4ed3f058493552658e914815f58e784755a1b3;p=dpdk.git diff --git a/lib/librte_eal/common/rte_random.c b/lib/librte_eal/common/rte_random.c index 3d9b9b7d83..57ec8fb2b3 100644 --- a/lib/librte_eal/common/rte_random.c +++ b/lib/librte_eal/common/rte_random.c @@ -137,7 +137,7 @@ rte_rand(void) return __rte_rand_lfsr258(state); } -uint64_t __rte_experimental +uint64_t rte_rand_max(uint64_t upper_bound) { struct rte_rand_state *state; @@ -189,14 +189,13 @@ __rte_random_initial_seed(void) return ge_seed; #endif #ifdef RTE_MACHINE_CPUFLAG_RDSEED - unsigned int rdseed_rc; - unsigned long long rdseed_seed; + unsigned int rdseed_low; + unsigned int rdseed_high; /* first fallback: rdseed instruction, if available */ - rdseed_rc = _rdseed64_step(&rdseed_seed); - - if (rdseed_rc == 1) - return (uint64_t)rdseed_seed; + if (_rdseed32_step(&rdseed_low) == 1 && + _rdseed32_step(&rdseed_high) == 1) + return (uint64_t)rdseed_low | ((uint64_t)rdseed_high << 32); #endif /* second fallback: seed using rdtsc */ return rte_get_timer_cycles();