From 010297f11aeb914b5cfe8449057b3d2e1a0ab9a6 Mon Sep 17 00:00:00 2001 From: Sai Sunku Date: Tue, 11 Feb 2025 17:40:51 +0000 Subject: [PATCH] prov/efa: Call efa_fork_support_enable_if_requested earlier efa_hmem_info_initialize calls ibv_reg_mr to test for p2p support. On older kernels (without support for IBV_FORK_UNNEEDED), efa_fork_support_enable_if_requested calls ibv_fork_init, when fork support is requested. If ibv_fork_init is called, it must be called before any ibv_reg_mr calls. Otherwise, ibv_fork_init will return EINVAL. Therefore, efa_fork_support_enable_if_requested must be called before efa_hmem_info_initialize. Signed-off-by: Sai Sunku --- prov/efa/src/efa_prov.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/prov/efa/src/efa_prov.c b/prov/efa/src/efa_prov.c index 7177f173a24..6eb45f0e574 100644 --- a/prov/efa/src/efa_prov.c +++ b/prov/efa/src/efa_prov.c @@ -201,6 +201,23 @@ EFA_INI */ efa_env_initialize(); + /* + * efa_fork_support_enable_if_requested must be called before + * efa_hmem_info_initialize. + * + * efa_hmem_info_initialize calls ibv_reg_mr to test for p2p support. + * + * On older kernels (without support for IBV_FORK_UNNEEDED), + * efa_fork_support_enable_if_requested calls ibv_fork_init, + * when fork support is requested. + * + * If ibv_fork_init is called, it must be called before any + * ibv_reg_mr calls. Otherwise, ibv_fork_init will return EINVAL. + */ + err = efa_fork_support_enable_if_requested(); + if (err) + goto err_free; + err = efa_hmem_info_initialize(); if (err) goto err_free; @@ -213,11 +230,6 @@ EFA_INI if (err) goto err_free; - err = efa_fork_support_enable_if_requested(); - if (err) { - goto err_free; - } - dlist_init(&g_efa_domain_list); return &efa_prov;