On 6/28/2019 10:01 AM, Mattias Rönnblom wrote: > Replace the use of rte_get_timer_cycles() with getentropy() for > seeding the pseudo-random number generator. getentropy() provides a > more truly random value. > > getentropy() requires glibc 2.25 and Linux kernel 3.17. In case > getentropy() is not found at compile time, or the relevant syscall > fails in runtime, the rdseed machine instruction will be used as a > fallback. > > rdseed is only available on x86 (Broadwell or later). In case it is > not present, rte_get_timer_cycles() will be used as a second fallback. > > On non-Meson builds, getentropy() will not be used. > > Suggested-by: Bruce Richardson <bruce.richard...@intel.com> > Suggested-by: Stephen Hemminger <step...@networkplumber.org> > Signed-off-by: Mattias Rönnblom <mattias.ronnb...@ericsson.com> > Acked-by: Bruce Richardson <bruce.richard...@intel.com>
<...> > +#ifdef RTE_MACHINE_CPUFLAG_RDSEED > + unsigned int rdseed_rc; > + unsigned long long rdseed_seed; > + > + /* first fallback: rdseed instruction, if available */ > + rdseed_rc = _rdseed64_step(&rdseed_seed); This is causing build error for 32-bit [1] and ICC [2], can you please check? [1] .../dpdk/lib/librte_eal/common/rte_random.c: In function ‘__rte_random_initial_seed’: .../dpdk/lib/librte_eal/common/rte_random.c:196:14: error: implicit declaration of function ‘_rdseed64_step’; did you mean ‘_rdseed32_step’? [-Werror=implicit-function-declaration] 196 | rdseed_rc = _rdseed64_step(&rdseed_seed); | ^~~~~~~~~~~~~~ | _rdseed32_step .../dpdk/lib/librte_eal/common/rte_random.c:196:14: error: nested extern declaration of ‘_rdseed64_step’ [-Werror=nested-externs] [2] Building x86_64-native-linuxapp-icc ... .../dpdk/lib/librte_eal/common/rte_random.c(196): error #167: argument of type "unsigned long long *" is incompatible with parameter of type "unsigned long *" rdseed_rc = _rdseed64_step(&rdseed_seed); ^