eal: add multiprocess disable API
authorDavid Marchand <david.marchand@redhat.com>
Mon, 6 Jul 2020 20:52:34 +0000 (22:52 +0200)
committerDavid Marchand <david.marchand@redhat.com>
Wed, 8 Jul 2020 12:41:06 +0000 (14:41 +0200)
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>
app/test/test_mp_secondary.c
lib/librte_eal/common/eal_common_proc.c
lib/librte_eal/common/eal_common_thread.c
lib/librte_eal/common/eal_private.h
lib/librte_eal/include/rte_eal.h
lib/librte_eal/rte_eal_version.map
lib/librte_eal/windows/eal.c

index ac15ddb..3a655c3 100644 (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));
index 7e11565..8ba4a29 100644 (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);
 }
index 04c2b37..73a0559 100644 (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;
index 7a89f2d..a6a6381 100644 (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.
  */
index 0292a2c..ddcf6a2 100644 (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 */
index bdbe26c..bf0c17c 100644 (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;
 };
index 099c729..e50601d 100644 (file)
@@ -67,7 +67,7 @@ eal_proc_type_detect(void)
 }
 
 bool
-__rte_mp_disable(void)
+rte_mp_disable(void)
 {
        return true;
 }