When seeding the pseudo-random number generator, replace the 64-bit
RDSEED with two 32-bit RDSEED instructions to allow building and
running on 32-bit x86.

Fixes: faf8fd252785 ("eal: improve entropy for initial PRNG seed")

Reported-by: Ferruh Yigit <ferruh.yi...@intel.com>
Signed-off-by: Mattias Rönnblom <mattias.ronnb...@ericsson.com>
---
 lib/librte_eal/common/rte_random.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/lib/librte_eal/common/rte_random.c 
b/lib/librte_eal/common/rte_random.c
index 3d9b9b7d8..f51708b30 100644
--- a/lib/librte_eal/common/rte_random.c
+++ b/lib/librte_eal/common/rte_random.c
@@ -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();
-- 
2.17.1

Reply via email to