[PATCH v7 13/13] eal: add warnings about ignored options
Bruce Richardson
bruce.richardson at intel.com
Wed Jul 23 18:20:11 CEST 2025
The lcoreid-base option only applies when used with the lcores-remapped
option, so print a warning when it's used with an lcores or coremask
flag, or when no core specification is given at all.
To do this, we add some generic infrastructure to allow us to warn about
options which are ignored when either used together or not used
together.
Signed-off-by: Bruce Richardson <bruce.richardson at intel.com>
---
lib/eal/common/eal_common_options.c | 47 +++++++++++++++++++++++++++++
1 file changed, 47 insertions(+)
diff --git a/lib/eal/common/eal_common_options.c b/lib/eal/common/eal_common_options.c
index af2bd33fd4..5992f4e43b 100644
--- a/lib/eal/common/eal_common_options.c
+++ b/lib/eal/common/eal_common_options.c
@@ -201,6 +201,47 @@ conflicting_options(uintptr_t opt1, uintptr_t opt2, const char *opt1_name, const
#define CONFLICTING_OPTIONS(args, opt1, opt2) \
conflicting_options((uintptr_t)(args.opt1), (uintptr_t)(args.opt2), #opt1, #opt2)
+enum when_ignored {
+ OPT_IGNORED_WITH,
+ OPT_IGNORED_WITHOUT,
+};
+static inline bool /* return bool so we can track what warnings are printed */
+ignored_option(uintptr_t ignored, uintptr_t opt2, const char *ignored_name, const char *opt2_name,
+ enum when_ignored when)
+{
+ char name1[64]; /* should be the max length of any argument */
+ char name2[64];
+
+ if (!ignored)
+ return false;
+
+ strlcpy(name1, ignored_name, sizeof(name1));
+ strlcpy(name2, opt2_name, sizeof(name2));
+ for (int i = 0; name1[i] != '\0'; i++)
+ if (name1[i] == '_')
+ name1[i] = '-';
+ for (int i = 0; name2[i] != '\0'; i++)
+ if (name2[i] == '_')
+ name2[i] = '-';
+
+ if (when == OPT_IGNORED_WITH && opt2) {
+ EAL_LOG(WARNING, "Option '%s' ignored when used with option '%s'", name1, name2);
+ return true;
+ } else if (when == OPT_IGNORED_WITHOUT && !opt2) {
+ EAL_LOG(WARNING, "Option '%s' ignored without option '%s'", name1, name2);
+ return true;
+ }
+ return false;
+}
+/* prints a warning when option "ignored" is used *with* option "opt2" */
+#define IGNORE_OPTION_WITH(args, ignored, opt2) \
+ ignored_option((uintptr_t)(args.ignored), (uintptr_t)(args.opt2), #ignored, #opt2, \
+ OPT_IGNORED_WITH)
+/* prints a warning when option "ignored" is used *without* option "opt2" */
+#define IGNORE_OPTION_WITHOUT(args, ignored, opt2) \
+ ignored_option((uintptr_t)(args.ignored), (uintptr_t)(args.opt2), #ignored, #opt2, \
+ OPT_IGNORED_WITHOUT)
+
/* function to call into argparse library to parse the passed argc/argv parameters
* to the eal_init_args structure.
*/
@@ -249,6 +290,12 @@ eal_collate_args(int argc, char **argv)
CONFLICTING_OPTIONS(args, in_memory, huge_unlink))
return -1;
+ /* warn about some ignored options */
+ if (!IGNORE_OPTION_WITH(args, lcoreid_base, lcores) &&
+ !IGNORE_OPTION_WITH(args, lcoreid_base, coremask))
+ /* only warn about not having --lcores-remapped if we didn't already warn */
+ IGNORE_OPTION_WITHOUT(args, lcoreid_base, lcores_remapped);
+
argv[retval - 1] = argv[0];
return retval - 1;
}
--
2.48.1
More information about the dev
mailing list