From: David Marchand Date: Mon, 6 Jul 2020 20:52:34 +0000 (+0200) Subject: eal: add multiprocess disable API X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=d2fd16c8b0032c70fcbeea7c25e900d64d4826b6;p=dpdk.git eal: add multiprocess disable API The multiprocess feature has been implicitly enabled so far. Applications might want to explicitly disable like when using the non-EAL threads registration API. Signed-off-by: David Marchand Acked-by: Konstantin Ananyev --- diff --git a/app/test/test_mp_secondary.c b/app/test/test_mp_secondary.c index ac15ddbf20..3a655c3400 100644 --- a/app/test/test_mp_secondary.c +++ b/app/test/test_mp_secondary.c @@ -97,6 +97,13 @@ run_secondary_instances(void) (1 << rte_get_master_lcore())); ret |= launch_proc(argv1); + printf("### Testing rte_mp_disable() reject:\n"); + if (rte_mp_disable()) { + printf("Error: rte_mp_disable() has been accepted\n"); + ret |= -1; + } else { + printf("# Checked rte_mp_disable() is refused\n"); + } ret |= launch_proc(argv2); ret |= !(launch_proc(argv3)); diff --git a/lib/librte_eal/common/eal_common_proc.c b/lib/librte_eal/common/eal_common_proc.c index 7e115650ca..8ba4a29dc4 100644 --- a/lib/librte_eal/common/eal_common_proc.c +++ b/lib/librte_eal/common/eal_common_proc.c @@ -1236,9 +1236,9 @@ rte_mp_reply(struct rte_mp_msg *msg, const char *peer) /* Internally, the status of the mp feature is represented as a three-state: * - "unknown" as long as no secondary process attached to a primary process - * and there was no call to __rte_mp_disable yet, + * and there was no call to rte_mp_disable yet, * - "enabled" as soon as a secondary process attaches to a primary process, - * - "disabled" when a primary process successfully called __rte_mp_disable, + * - "disabled" when a primary process successfully called rte_mp_disable, */ enum mp_status { MP_STATUS_UNKNOWN, @@ -1263,7 +1263,7 @@ set_mp_status(enum mp_status status) } bool -__rte_mp_disable(void) +rte_mp_disable(void) { return set_mp_status(MP_STATUS_DISABLED); } diff --git a/lib/librte_eal/common/eal_common_thread.c b/lib/librte_eal/common/eal_common_thread.c index 04c2b37528..73a055902a 100644 --- a/lib/librte_eal/common/eal_common_thread.c +++ b/lib/librte_eal/common/eal_common_thread.c @@ -261,7 +261,7 @@ rte_thread_register(void) rte_errno = EINVAL; return -1; } - if (!__rte_mp_disable()) { + if (!rte_mp_disable()) { RTE_LOG(ERR, EAL, "Multiprocess in use, registering non-EAL threads is not supported.\n"); rte_errno = EINVAL; return -1; diff --git a/lib/librte_eal/common/eal_private.h b/lib/librte_eal/common/eal_private.h index 7a89f2d59b..a6a6381567 100644 --- a/lib/librte_eal/common/eal_private.h +++ b/lib/librte_eal/common/eal_private.h @@ -718,11 +718,6 @@ eal_get_internal_configuration(void); rte_usage_hook_t eal_get_application_usage_hook(void); -/** - * Mark primary process as not supporting multi-process. - */ -bool __rte_mp_disable(void); - /** * Instruct primary process that a secondary process wants to attach. */ diff --git a/lib/librte_eal/include/rte_eal.h b/lib/librte_eal/include/rte_eal.h index 0292a2cf8f..ddcf6a2e7a 100644 --- a/lib/librte_eal/include/rte_eal.h +++ b/lib/librte_eal/include/rte_eal.h @@ -152,6 +152,20 @@ int rte_eal_cleanup(void); */ int rte_eal_primary_proc_alive(const char *config_file_path); +/** + * Disable multiprocess. + * + * This function can be called to indicate that multiprocess won't be used for + * the rest of the application life. + * + * @return + * - true if called from a primary process that had no secondary processes + * attached, + * - false, otherwise. + */ +__rte_experimental +bool rte_mp_disable(void); + #define RTE_MP_MAX_FD_NUM 8 /* The max amount of fds */ #define RTE_MP_MAX_NAME_LEN 64 /* The max length of action name */ #define RTE_MP_MAX_PARAM_LEN 256 /* The max length of param */ diff --git a/lib/librte_eal/rte_eal_version.map b/lib/librte_eal/rte_eal_version.map index bdbe26c401..bf0c17c233 100644 --- a/lib/librte_eal/rte_eal_version.map +++ b/lib/librte_eal/rte_eal_version.map @@ -400,6 +400,7 @@ EXPERIMENTAL { rte_lcore_callback_unregister; rte_lcore_dump; rte_lcore_iterate; + rte_mp_disable; rte_thread_register; rte_thread_unregister; }; diff --git a/lib/librte_eal/windows/eal.c b/lib/librte_eal/windows/eal.c index 099c729f37..e50601dd36 100644 --- a/lib/librte_eal/windows/eal.c +++ b/lib/librte_eal/windows/eal.c @@ -67,7 +67,7 @@ eal_proc_type_detect(void) } bool -__rte_mp_disable(void) +rte_mp_disable(void) { return true; }