On 2019-06-28 21:01, Ferruh Yigit wrote:
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]



My suggestion would be to just replace _rdseed64_step() with two _rdseed32_step() calls on both 32-bit and 64-bit x86. I'll submit a patch.


[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);
                                    ^

I'll fix this as well.

Thanks.

Reply via email to