[v3] eal: fix crash when the random init

Message ID 1586972466-40703-1-git-send-email-xiangxia.m.yue@gmail.com (mailing list archive)
State Accepted, archived
Delegated to: David Marchand
Headers
Series [v3] eal: fix crash when the random init |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-nxp-Performance success Performance Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-testing fail Testing issues

Commit Message

Tonghao Zhang April 15, 2020, 5:41 p.m. UTC
  From: Tonghao Zhang <xiangxia.m.yue@gmail.com>

When rte_rand_init is invoked, and the kernel running dpdk does't
support *getentropy, at the same time, the cpu does't support rdseed,
then rte_rand_init invoked rte_get_timer_cycles.

If HPET was enabled in the DPDK build (CONFIG_RTE_LIBEAL_USE_HPET=y).
rte_get_timer_cycles will invoke rte_get_hpet_cycles while *eal_hpet
is not available.

To fix that, use rte_get_tsc_cycles instead of rte_get_timer_cycles.

Fixes: faf8fd252785 ("eal: improve entropy for initial PRNG seed")
Fixes: 3f002f069612 ("eal: replace libc-based random generation with LFSR")

Cc: stable@dpdk.org

Signed-off-by: Tonghao Zhang <xiangxia.m.yue@gmail.com>
Acked-by: Mattias Rönnblom <mattias.ronnblom@ericsson.com>
---
v3:
* add more info in commit log and fix a typo
v2:
* use rte_get_tsc_cycles instead of rte_get_timer_cycles
---
 lib/librte_eal/common/rte_random.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

David Marchand April 21, 2020, 4:17 p.m. UTC | #1
On Fri, Apr 17, 2020 at 1:37 PM <xiangxia.m.yue@gmail.com> wrote:
>
> From: Tonghao Zhang <xiangxia.m.yue@gmail.com>
>
> When rte_rand_init is invoked, and the kernel running dpdk does't
> support *getentropy, at the same time, the cpu does't support rdseed,
> then rte_rand_init invoked rte_get_timer_cycles.
>
> If HPET was enabled in the DPDK build (CONFIG_RTE_LIBEAL_USE_HPET=y).
> rte_get_timer_cycles will invoke rte_get_hpet_cycles while *eal_hpet
> is not available.
>
> To fix that, use rte_get_tsc_cycles instead of rte_get_timer_cycles.
>
> Fixes: 3f002f069612 ("eal: replace libc-based random generation with LFSR")
> Cc: stable@dpdk.org
>
> Signed-off-by: Tonghao Zhang <xiangxia.m.yue@gmail.com>
> Acked-by: Mattias Rönnblom <mattias.ronnblom@ericsson.com>

Applied, thanks.
  

Patch

diff --git a/lib/librte_eal/common/rte_random.c b/lib/librte_eal/common/rte_random.c
index 57ec8fb2b3dd..b7a089ac4fe0 100644
--- a/lib/librte_eal/common/rte_random.c
+++ b/lib/librte_eal/common/rte_random.c
@@ -198,7 +198,7 @@  struct rte_rand_state *__rte_rand_get_state(void)
 		return (uint64_t)rdseed_low | ((uint64_t)rdseed_high << 32);
 #endif
 	/* second fallback: seed using rdtsc */
-	return rte_get_timer_cycles();
+	return rte_get_tsc_cycles();
 }
 
 RTE_INIT(rte_rand_init)