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 <david.marchand@redhat.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
This commit is contained in:
David Marchand 2020-07-06 22:52:34 +02:00
parent 70d4d5f1ac
commit d2fd16c8b0
7 changed files with 27 additions and 10 deletions

View File

@ -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));

View File

@ -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);
}

View File

@ -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;

View File

@ -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.
*/

View File

@ -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 */

View File

@ -400,6 +400,7 @@ EXPERIMENTAL {
rte_lcore_callback_unregister;
rte_lcore_dump;
rte_lcore_iterate;
rte_mp_disable;
rte_thread_register;
rte_thread_unregister;
};

View File

@ -67,7 +67,7 @@ eal_proc_type_detect(void)
}
bool
__rte_mp_disable(void)
rte_mp_disable(void)
{
return true;
}