+ if (launch_proc(argv4) == 0) {
+ printf("Error - process run ok with empty --syslog flag\n");
+ return -1;
+ }
+ if (launch_proc(argv5) == 0) {
+ printf("Error - process run ok with invalid --syslog flag\n");
+ return -1;
+ }
+ if (launch_proc(argv7) != 0) {
+ printf("Error - process did not run ok with --huge-dir flag\n");
+ return -1;
+ }
+ if (launch_proc(argv8) == 0) {
+ printf("Error - process run ok with empty --huge-dir flag\n");
+ return -1;
+ }
+ if (launch_proc(argv9) == 0) {
+ printf("Error - process run ok with invalid --huge-dir flag\n");
+ return -1;
+ }
+ if (launch_proc(argv10) != 0) {
+ printf("Error - secondary process did not run ok with invalid --huge-dir flag\n");
+ return -1;
+ }
+ if (launch_proc(argv11) != 0) {
+ printf("Error - process did not run ok with --base-virtaddr parameter\n");
+ return -1;
+ }
+ if (launch_proc(argv12) != 0) {
+ printf("Error - process did not run ok with "
+ "--vfio-intr INTx parameter\n");
+ return -1;
+ }
+ if (launch_proc(argv13) != 0) {
+ printf("Error - process did not run ok with "
+ "--vfio-intr MSI parameter\n");
+ return -1;
+ }
+ if (launch_proc(argv14) != 0) {
+ printf("Error - process did not run ok with "
+ "--vfio-intr MSI-X parameter\n");
+ return -1;
+ }
+ if (launch_proc(argv15) == 0) {
+ printf("Error - process run ok with "
+ "--vfio-intr invalid parameter\n");
+ return -1;
+ }
+ if (launch_proc(argv16) != 0) {
+ printf("Error - process did not run ok with "
+ "--proc-type as auto parameter\n");
+ return -1;
+ }
+ if (launch_proc(argv17) != 0) {
+ printf("Error - process did not run ok with "
+ "--proc-type and --no-shconf parameter\n");
+ return -1;
+ }
+ if (launch_proc(argv18) != 0) {
+ printf("Error - process did not run ok with "
+ "--create-uio-dev parameter\n");
+ return -1;
+ }
+
+ return 0;
+}
+
+static int
+test_file_prefix(void)
+{
+ /*
+ * 1. check if current process hugefiles are locked
+ * 2. try to run secondary process without a corresponding primary process
+ * (while failing to run, it will also remove any unused hugepage files)
+ * 3. check if current process hugefiles are still in place and are locked
+ * 4. run a primary process with memtest1 prefix in default and legacy
+ * mem mode
+ * 5. check if memtest1 hugefiles are created in case of legacy mem
+ * mode, and deleted in case of default mem mode
+ * 6. run a primary process with memtest2 prefix in default and legacy
+ * mem modes
+ * 7. check that memtest2 hugefiles are present in the hugedir after a
+ * run in legacy mode, and not present at all after run in default
+ * mem mode
+ */
+ char prefix[PATH_MAX] = "";
+
+#ifdef RTE_EXEC_ENV_FREEBSD
+ return 0;
+#else
+ if (get_current_prefix(prefix, sizeof(prefix)) == NULL) {
+ printf("Error - unable to get current prefix!\n");
+ return -1;
+ }
+#endif
+
+ /* this should fail unless the test itself is run with "memtest" prefix */
+ const char *argv0[] = {prgname, mp_flag, "-m",
+ DEFAULT_MEM_SIZE, "--file-prefix=" memtest };
+
+ /* primary process with memtest1 and default mem mode */
+ const char *argv1[] = {prgname, "-m",
+ DEFAULT_MEM_SIZE, "--file-prefix=" memtest1 };
+
+ /* primary process with memtest1 and legacy mem mode */
+ const char *argv2[] = {prgname, "-m",
+ DEFAULT_MEM_SIZE, "--file-prefix=" memtest1,
+ "--legacy-mem" };
+
+ /* primary process with memtest2 and legacy mem mode */
+ const char *argv3[] = {prgname, "-m",
+ DEFAULT_MEM_SIZE, "--file-prefix=" memtest2,
+ "--legacy-mem" };
+
+ /* primary process with memtest2 and default mem mode */
+ const char *argv4[] = {prgname, "-m",
+ DEFAULT_MEM_SIZE, "--file-prefix=" memtest2 };
+
+ /* primary process with --in-memory mode */
+ const char * const argv5[] = {prgname, "-m",
+ DEFAULT_MEM_SIZE, "--in-memory" };
+
+ /* primary process with memtest1 and --in-memory mode */
+ const char * const argv6[] = {prgname, "-m",
+ DEFAULT_MEM_SIZE, "--in-memory",
+ "--file-prefix=" memtest1 };
+
+ /* primary process with parent file-prefix and --in-memory mode */
+ const char * const argv7[] = {prgname, "-m",
+ DEFAULT_MEM_SIZE, "--in-memory", "--file-prefix", prefix };
+
+ /* primary process with memtest1 and --single-file-segments mode */
+ const char * const argv8[] = {prgname, "-m",
+ DEFAULT_MEM_SIZE, "--single-file-segments",
+ "--file-prefix=" memtest1 };
+
+ /* check if files for current prefix are present */
+ if (process_hugefiles(prefix, HUGEPAGE_CHECK_EXISTS) != 1) {
+ printf("Error - hugepage files for %s were not created!\n", prefix);
+ return -1;
+ }
+
+ /* checks if files for current prefix are locked */
+ if (process_hugefiles(prefix, HUGEPAGE_CHECK_LOCKED) != 1) {
+ printf("Error - hugepages for current process aren't locked!\n");
+ return -1;
+ }
+
+ /* check if files for secondary process are present */
+ if (process_hugefiles(memtest, HUGEPAGE_CHECK_EXISTS) == 1) {
+ /* check if they are not locked */
+ if (process_hugefiles(memtest, HUGEPAGE_CHECK_LOCKED) == 1) {
+ printf("Error - hugepages for current process are locked!\n");
+ return -1;
+ }
+ /* they aren't locked, delete them */
+ else {
+ if (process_hugefiles(memtest, HUGEPAGE_DELETE) != 1) {
+ printf("Error - deleting hugepages failed!\n");
+ return -1;
+ }
+ }
+ }
+
+ if (launch_proc(argv0) == 0) {
+ printf("Error - secondary process ran ok without primary process\n");
+ return -1;
+ }
+
+ /* check if files for current prefix are present */
+ if (process_hugefiles(prefix, HUGEPAGE_CHECK_EXISTS) != 1) {
+ printf("Error - hugepage files for %s were not created!\n", prefix);
+ return -1;
+ }
+
+ /* checks if files for current prefix are locked */
+ if (process_hugefiles(prefix, HUGEPAGE_CHECK_LOCKED) != 1) {
+ printf("Error - hugepages for current process aren't locked!\n");
+ return -1;
+ }
+
+ /* we're running this process in default memory mode, which means it
+ * should clean up after itself on exit and leave no hugepages behind.
+ */
+ if (launch_proc(argv1) != 0) {
+ printf("Error - failed to run with --file-prefix=%s\n",
+ memtest1);
+ return -1;
+ }
+
+ /* check if memtest1_map0 is present */
+ if (process_hugefiles(memtest1, HUGEPAGE_CHECK_EXISTS) != 0) {
+ printf("Error - hugepage files for %s were not deleted!\n",
+ memtest1);
+ return -1;
+ }
+
+ /* now, we're running a process under the same prefix, but with legacy
+ * mem mode - this should leave behind hugepage files.
+ */
+ if (launch_proc(argv2) != 0) {
+ printf("Error - failed to run with --file-prefix=%s\n",
+ memtest1);
+ return -1;
+ }
+
+ /* check if memtest1_map0 is present */
+ if (process_hugefiles(memtest1, HUGEPAGE_CHECK_EXISTS) != 1) {
+ printf("Error - hugepage files for %s were not created!\n",
+ memtest1);
+ return -1;
+ }
+
+ if (launch_proc(argv3) != 0) {
+ printf("Error - failed to run with --file-prefix=%s\n",
+ memtest2);
+ return -1;
+ }
+
+ /* check if hugefiles for memtest2 are present */
+ if (process_hugefiles(memtest2, HUGEPAGE_CHECK_EXISTS) != 1) {
+ printf("Error - hugepage files for %s were not created!\n",
+ memtest2);
+ return -1;
+ }
+
+ /* check if hugefiles for memtest1 are present */
+ if (process_hugefiles(memtest1, HUGEPAGE_CHECK_EXISTS) != 0) {
+ printf("Error - hugepage files for %s were not deleted!\n",
+ memtest1);
+ return -1;
+ }
+
+ /* this process will run in default mem mode, so it should not leave any
+ * hugepage files behind.
+ */
+ if (launch_proc(argv4) != 0) {
+ printf("Error - failed to run with --file-prefix=%s\n",
+ memtest2);
+ return -1;
+ }
+
+ /* check if hugefiles for memtest2 are present */
+ if (process_hugefiles(memtest2, HUGEPAGE_CHECK_EXISTS) != 0) {
+ printf("Error - hugepage files for %s were not deleted!\n",
+ memtest2);
+ return -1;
+ }
+
+ /* check if hugefiles for memtest1 are present */
+ if (process_hugefiles(memtest1, HUGEPAGE_CHECK_EXISTS) != 0) {
+ printf("Error - hugepage files for %s were not deleted!\n",
+ memtest1);
+ return -1;
+ }
+
+ /* this process will run in --in-memory mode, so it should not leave any
+ * hugepage files behind.
+ */
+
+ /* test case to check eal-options with --in-memory mode */
+ if (launch_proc(argv5) != 0) {
+ printf("Error - failed to run with --in-memory mode\n");
+ return -1;
+ }
+
+ /*test case to check eal-options with --in-memory mode with
+ * custom file-prefix.
+ */
+ if (launch_proc(argv6) != 0) {
+ printf("Error - failed to run with --in-memory mode\n");
+ return -1;
+ }
+
+ /* check if hugefiles for memtest1 are present */
+ if (process_hugefiles(memtest1, HUGEPAGE_CHECK_EXISTS) != 0) {
+ printf("Error - hugepage files for %s were created and not deleted!\n",
+ memtest1);
+ return -1;
+ }
+
+ /* test case to check eal-options with --in-memory mode with
+ * parent file-prefix.
+ */
+ if (launch_proc(argv7) != 0) {
+ printf("Error - failed to run with --file-prefix=%s\n", prefix);
+ return -1;
+ }
+
+ /* this process will run in --single-file-segments mode,
+ * so it should not leave any hugepage files behind.
+ */
+ if (launch_proc(argv8) != 0) {
+ printf("Error - failed to run with --single-file-segments mode\n");
+ return -1;
+ }
+
+ /* check if hugefiles for memtest1 are present */
+ if (process_hugefiles(memtest1, HUGEPAGE_CHECK_EXISTS) != 0) {
+ printf("Error - hugepage files for %s were not deleted!\n",
+ memtest1);
+ return -1;
+ }
+