eal: use 32-bit RDSEED to allow 32-bit x86 usage
authorMattias Rönnblom <mattias.ronnblom@ericsson.com>
Fri, 28 Jun 2019 21:08:46 +0000 (23:08 +0200)
committerThomas Monjalon <thomas@monjalon.net>
Sat, 29 Jun 2019 12:25:14 +0000 (14:25 +0200)
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.yigit@intel.com>
Signed-off-by: Mattias Rönnblom <mattias.ronnblom@ericsson.com>
lib/librte_eal/common/rte_random.c

index 3d9b9b7..f51708b 100644 (file)
@@ -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();