From 45c27541c7cffbd320a3e71ab1c935b49c456e78 Mon Sep 17 00:00:00 2001 From: TheNumbat Date: Tue, 29 Apr 2025 17:12:51 -0400 Subject: [PATCH 1/5] add options --- .github/workflows/build.yml | 12 ++++++++++++ configure.ac | 16 +++++++++++++++- runtime/caml/domain.h | 6 +++++- 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8b558ffb472..8d2d395008f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -20,6 +20,18 @@ jobs: config: --enable-middle-end=flambda2 --enable-runtime5 os: ubuntu-latest + - name: flambda2_stack_checks + config: --enable-middle-end=flambda2 --enable-runtime5 --enable-stack-checks + os: ubuntu-latest + + - name: flambda2_poll_insertion + config: --enable-middle-end=flambda2 --enable-runtime5 --enable-poll-insertion + os: ubuntu-latest + + - name: flambda2_multidomain + config: --enable-middle-end=flambda2 --enable-runtime5 --enable-stack-checks --enable-poll-insertion --enable-multidomain + os: ubuntu-latest + - name: flambda2_dev config: --enable-middle-end=flambda2 --enable-dev os: ubuntu-latest diff --git a/configure.ac b/configure.ac index cb3326672bf..2eef6e05c5f 100644 --- a/configure.ac +++ b/configure.ac @@ -189,7 +189,7 @@ AS_IF([test x"$enable_runtime5" = xyes], [runtime_suffix=4]) AC_ARG_ENABLE([stack_checks], - [AS_HELP_STRING([--enable-stack_checks], + [AS_HELP_STRING([--enable-stack-checks], [Enable stack checks])]) ## Output variables @@ -361,6 +361,7 @@ AC_SUBST([compute_deps]) AC_SUBST([intel_jcc_bug_cflags]) AC_SUBST([stack_allocation]) AC_SUBST([poll_insertion]) +AC_SUBST([multidomain]) AC_SUBST([dune]) AC_SUBST([ocaml_bindir]) AC_SUBST([ocaml_libdir]) @@ -701,6 +702,10 @@ AC_ARG_ENABLE([poll-insertion], [AS_HELP_STRING([--enable-poll-insertion], [enable insertion of poll points])]) +AC_ARG_ENABLE([multidomain], + [AS_HELP_STRING([--enable-multidomain], + [enable insertion of poll points])]) + AC_ARG_WITH([flexdll], [AS_HELP_STRING([--with-flexdll], [bootstrap FlexDLL from the given sources])], @@ -2835,6 +2840,15 @@ AS_IF([test x"$enable_poll_insertion" = "xyes"], poll_insertion=true], [poll_insertion=false]) +AS_IF([test x"$enable_multidomain" = "xno"], + [multidomain=false], + [AS_IF([test x"$enable_stack_checks" = "xyes" && + test x"$enable_poll_insertion" = "xyes"], + [AC_DEFINE([MULTIDOMAIN]) + multidomain=true], + [AC_MSG_ERROR([Creating multiple domains is only supported when stack checks \ +and poll insertion are enabled.])])]) + oc_cflags="$common_cflags $internal_cflags" oc_cppflags="$common_cppflags $internal_cppflags" ocamlc_cflags="$ocamlc_cflags $common_cflags $sharedlib_cflags $CFLAGS" diff --git a/runtime/caml/domain.h b/runtime/caml/domain.h index 5468fb085f0..5d66f14ed6a 100644 --- a/runtime/caml/domain.h +++ b/runtime/caml/domain.h @@ -28,15 +28,19 @@ extern "C" { #include "mlvalues.h" #include "domain_state.h" +#ifdef MULTIDOMAIN #ifdef ARCH_SIXTYFOUR #define Max_domains_def 128 #else #define Max_domains_def 16 #endif - /* Upper limit for the number of domains. Chosen to be arbitrarily large. Used * for sanity checking [max_domains] value in OCAMLRUNPARAM. */ #define Max_domains_max 4096 +#else +#define Max_domains_def 1 +#define Max_domains_max 1 +#endif /* is the minor heap full or an external interrupt has been triggered */ Caml_inline int caml_check_gc_interrupt(caml_domain_state * dom_st) From df1a5c3c8ff5762613df7bec4cb770d11ead9d2d Mon Sep 17 00:00:00 2001 From: TheNumbat Date: Tue, 29 Apr 2025 17:34:19 -0400 Subject: [PATCH 2/5] disable domain tests --- ocamltest/ocaml_actions.ml | 9 +++++++++ testsuite/tests/capsule-api/condition.ml | 1 + testsuite/tests/compaction/test_compact_manydomains.ml | 1 + testsuite/tests/compaction/test_compact_multi.ml | 1 + testsuite/tests/effects-api/portable.ml | 1 + testsuite/tests/effects/test_lazy.ml | 1 + testsuite/tests/lazy/lazy2.ml | 1 + testsuite/tests/lazy/lazy3.ml | 1 + testsuite/tests/lazy/lazy5.ml | 1 + testsuite/tests/lazy/lazy6.ml | 1 + testsuite/tests/lazy/lazy7.ml | 1 + testsuite/tests/lazy/lazy8.ml | 1 + testsuite/tests/lf_skiplist/test_parallel.ml | 1 + testsuite/tests/lib-atomic/test_atomic_domain.ml | 1 + testsuite/tests/lib-channels/refcounting.ml | 1 + testsuite/tests/lib-dynlink-domains/main.ml | 1 + testsuite/tests/lib-format/domains.ml | 1 + testsuite/tests/lib-format/mc_pr586_par.ml | 1 + testsuite/tests/lib-format/mc_pr586_par2.ml | 1 + testsuite/tests/lib-marshal/intext_par.ml | 1 + testsuite/tests/lib-random/parallel.ml | 1 + testsuite/tests/lib-runtime-events/test_caml_parallel.ml | 1 + .../tests/lib-runtime-events/test_caml_slot_reuse.ml | 1 + .../tests/lib-runtime-events/test_dropped_events.ml | 1 + testsuite/tests/lib-str/parallel.ml | 1 + testsuite/tests/lib-sync/prodcons.ml | 1 + testsuite/tests/lib-systhreads/multicore_lifecycle.ml | 1 + .../tests/lib-unix/common/multicore_fork_domain_alone.ml | 1 + .../lib-unix/common/multicore_fork_domain_alone2.ml | 1 + testsuite/tests/memory-model/forbidden.ml | 1 + testsuite/tests/memory-model/publish.ml | 1 + testsuite/tests/parallel/atomics.ml | 1 + testsuite/tests/parallel/backup_thread.ml | 1 + testsuite/tests/parallel/backup_thread_pipe.ml | 1 + testsuite/tests/parallel/catch_break.ml | 1 + testsuite/tests/parallel/churn.ml | 1 + testsuite/tests/parallel/constpromote.ml | 1 + testsuite/tests/parallel/domain_dls.ml | 1 + testsuite/tests/parallel/domain_dls2.ml | 1 + testsuite/tests/parallel/domain_id.ml | 1 + testsuite/tests/parallel/fib_threads.ml | 1 + testsuite/tests/parallel/join.ml | 1 + testsuite/tests/parallel/major_gc_wait_backup.ml | 1 + testsuite/tests/parallel/max_domains2.ml | 1 + testsuite/tests/parallel/multicore_systhreads.ml | 1 + testsuite/tests/parallel/pingpong.ml | 1 + testsuite/tests/parallel/poll.ml | 1 + testsuite/tests/parallel/prodcons_domains.ml | 1 + testsuite/tests/parallel/tak.ml | 1 + testsuite/tests/parallel/test_c_thread_register.ml | 1 + testsuite/tests/parallel/test_issue_11094.ml | 5 ++--- testsuite/tests/parallel/unsafe_alert.ml | 1 + testsuite/tests/weak-ephe-final/finaliser2.ml | 1 + testsuite/tests/weak-ephe-final/finaliser_handover.ml | 1 + testsuite/tests/weak-ephe-final/weak_array_par.ml | 1 + testsuite/tests/weak-ephe-final/weaktest_par_load.ml | 1 + utils/config.generated.ml.in | 2 ++ utils/config.mli | 4 ++++ 58 files changed, 71 insertions(+), 3 deletions(-) diff --git a/ocamltest/ocaml_actions.ml b/ocamltest/ocaml_actions.ml index fadbe5f0504..38f7064c730 100644 --- a/ocamltest/ocaml_actions.ml +++ b/ocamltest/ocaml_actions.ml @@ -1360,6 +1360,14 @@ let no_poll_insertion = Actions.make "Poll insertion disabled" "Poll insertion enabled") +let multidomain = Actions.make + ~name:"multidomain" + ~description:"Passes if multiple domains is enabled" + ~does_something:false + (Actions_helpers.predicate Config.multidomain + "Multidomain disabled" + "Multidomain enabled") + let runtime4 = Actions.make ~name:"runtime4" ~description:"Passes if the OCaml 4.x runtime is being used" @@ -1591,6 +1599,7 @@ let init () = codegen; cc; ocamlobjinfo; + multidomain; runtime4; runtime5 ] diff --git a/testsuite/tests/capsule-api/condition.ml b/testsuite/tests/capsule-api/condition.ml index 6aa07cd383d..e262493ae1c 100644 --- a/testsuite/tests/capsule-api/condition.ml +++ b/testsuite/tests/capsule-api/condition.ml @@ -2,6 +2,7 @@ include stdlib_alpha; flags = "-extension-universe alpha -alert -unsafe_multidomain"; runtime5; + multidomain; { bytecode; } { native; } *) diff --git a/testsuite/tests/compaction/test_compact_manydomains.ml b/testsuite/tests/compaction/test_compact_manydomains.ml index 9f0623fd8c9..8b701127750 100644 --- a/testsuite/tests/compaction/test_compact_manydomains.ml +++ b/testsuite/tests/compaction/test_compact_manydomains.ml @@ -1,6 +1,7 @@ (* TEST flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; runtime5; + multidomain; { bytecode; } { native; } *) diff --git a/testsuite/tests/compaction/test_compact_multi.ml b/testsuite/tests/compaction/test_compact_multi.ml index 9713027c50a..5f4da13d570 100644 --- a/testsuite/tests/compaction/test_compact_multi.ml +++ b/testsuite/tests/compaction/test_compact_multi.ml @@ -5,6 +5,7 @@ skip; }{ runtime5; + multidomain; { bytecode; } { native; } } diff --git a/testsuite/tests/effects-api/portable.ml b/testsuite/tests/effects-api/portable.ml index a0a077899d7..ede40042491 100644 --- a/testsuite/tests/effects-api/portable.ml +++ b/testsuite/tests/effects-api/portable.ml @@ -1,6 +1,7 @@ (* TEST include stdlib_alpha; runtime5; + multidomain; { bytecode; } { native; } *) diff --git a/testsuite/tests/effects/test_lazy.ml b/testsuite/tests/effects/test_lazy.ml index f0b1bf3054c..9b1770523e4 100644 --- a/testsuite/tests/effects/test_lazy.ml +++ b/testsuite/tests/effects/test_lazy.ml @@ -1,5 +1,6 @@ (* TEST runtime5; + multidomain; { bytecode; } { native; } *) diff --git a/testsuite/tests/lazy/lazy2.ml b/testsuite/tests/lazy/lazy2.ml index 9c230d9ff4a..7c69767472b 100644 --- a/testsuite/tests/lazy/lazy2.ml +++ b/testsuite/tests/lazy/lazy2.ml @@ -2,6 +2,7 @@ flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; ocamlopt_flags += " -O3 "; runtime5; + multidomain; { bytecode; } { native; } *) diff --git a/testsuite/tests/lazy/lazy3.ml b/testsuite/tests/lazy/lazy3.ml index c5da9fef299..0f5668d8f21 100644 --- a/testsuite/tests/lazy/lazy3.ml +++ b/testsuite/tests/lazy/lazy3.ml @@ -2,6 +2,7 @@ flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; ocamlopt_flags += " -O3 "; runtime5; + multidomain; { bytecode; } { native; } *) diff --git a/testsuite/tests/lazy/lazy5.ml b/testsuite/tests/lazy/lazy5.ml index 7f4b646c202..4244554e715 100644 --- a/testsuite/tests/lazy/lazy5.ml +++ b/testsuite/tests/lazy/lazy5.ml @@ -2,6 +2,7 @@ flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; ocamlopt_flags += " -O3 "; runtime5; + multidomain; { bytecode; } { native; } *) diff --git a/testsuite/tests/lazy/lazy6.ml b/testsuite/tests/lazy/lazy6.ml index 309aacc03ac..55aa121d923 100644 --- a/testsuite/tests/lazy/lazy6.ml +++ b/testsuite/tests/lazy/lazy6.ml @@ -2,6 +2,7 @@ flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; ocamlopt_flags += " -O3 "; runtime5; + multidomain; { bytecode; } { native; } *) diff --git a/testsuite/tests/lazy/lazy7.ml b/testsuite/tests/lazy/lazy7.ml index 25f4d02d1b5..2d2dba6fbe4 100644 --- a/testsuite/tests/lazy/lazy7.ml +++ b/testsuite/tests/lazy/lazy7.ml @@ -2,6 +2,7 @@ flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; ocamlopt_flags += " -O3 "; runtime5; + multidomain; { bytecode; } { native; } *) diff --git a/testsuite/tests/lazy/lazy8.ml b/testsuite/tests/lazy/lazy8.ml index 3051fc3d08b..f9daa4ea46c 100644 --- a/testsuite/tests/lazy/lazy8.ml +++ b/testsuite/tests/lazy/lazy8.ml @@ -2,6 +2,7 @@ flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; ocamlopt_flags += " -O3 "; runtime5; + multidomain; { bytecode; } { native; } *) diff --git a/testsuite/tests/lf_skiplist/test_parallel.ml b/testsuite/tests/lf_skiplist/test_parallel.ml index 25ba58e4feb..0b20b9e40a2 100644 --- a/testsuite/tests/lf_skiplist/test_parallel.ml +++ b/testsuite/tests/lf_skiplist/test_parallel.ml @@ -3,6 +3,7 @@ modules = "stubs.c"; no-tsan; runtime5; + multidomain; { bytecode; } { native; } *) diff --git a/testsuite/tests/lib-atomic/test_atomic_domain.ml b/testsuite/tests/lib-atomic/test_atomic_domain.ml index e50d139bd4d..3988e12670a 100644 --- a/testsuite/tests/lib-atomic/test_atomic_domain.ml +++ b/testsuite/tests/lib-atomic/test_atomic_domain.ml @@ -1,6 +1,7 @@ (* TEST flags = "-alert -unsafe_multidomain"; runtime5; + multidomain; native; bytecode; *) diff --git a/testsuite/tests/lib-channels/refcounting.ml b/testsuite/tests/lib-channels/refcounting.ml index 63353685de9..b374cc7f4cd 100644 --- a/testsuite/tests/lib-channels/refcounting.ml +++ b/testsuite/tests/lib-channels/refcounting.ml @@ -1,6 +1,7 @@ (* TEST flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; runtime5; + multidomain; expect; *) diff --git a/testsuite/tests/lib-dynlink-domains/main.ml b/testsuite/tests/lib-dynlink-domains/main.ml index b7e83c64e4c..7a003ef8b7d 100644 --- a/testsuite/tests/lib-dynlink-domains/main.ml +++ b/testsuite/tests/lib-dynlink-domains/main.ml @@ -1,5 +1,6 @@ (* TEST runtime5; + multidomain; include dynlink; libraries = ""; readonly_files = "store.ml main.ml Plugin_0.ml Plugin_0_0.ml Plugin_0_0_0.ml Plugin_0_0_0_0.ml Plugin_0_0_0_1.ml Plugin_0_0_0_2.ml Plugin_1.ml Plugin_1_0.ml Plugin_1_0_0.ml Plugin_1_0_0_0.ml Plugin_1_1.ml Plugin_1_2.ml Plugin_1_2_0.ml Plugin_1_2_0_0.ml Plugin_1_2_1.ml Plugin_1_2_2.ml Plugin_1_2_2_0.ml Plugin_1_2_3.ml Plugin_1_2_3_0.ml"; diff --git a/testsuite/tests/lib-format/domains.ml b/testsuite/tests/lib-format/domains.ml index b74ee808269..87a811881fb 100644 --- a/testsuite/tests/lib-format/domains.ml +++ b/testsuite/tests/lib-format/domains.ml @@ -1,6 +1,7 @@ (* TEST flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; runtime5; + multidomain; { bytecode; } { native; } *) diff --git a/testsuite/tests/lib-format/mc_pr586_par.ml b/testsuite/tests/lib-format/mc_pr586_par.ml index c5ce2a51a1c..eb107296605 100644 --- a/testsuite/tests/lib-format/mc_pr586_par.ml +++ b/testsuite/tests/lib-format/mc_pr586_par.ml @@ -1,6 +1,7 @@ (* TEST flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; runtime5; + multidomain; { bytecode; } { native; } *) diff --git a/testsuite/tests/lib-format/mc_pr586_par2.ml b/testsuite/tests/lib-format/mc_pr586_par2.ml index 2fb4aae79c3..0675d0ca58d 100644 --- a/testsuite/tests/lib-format/mc_pr586_par2.ml +++ b/testsuite/tests/lib-format/mc_pr586_par2.ml @@ -1,6 +1,7 @@ (* TEST flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; runtime5; + multidomain; { bytecode; } { native; } *) diff --git a/testsuite/tests/lib-marshal/intext_par.ml b/testsuite/tests/lib-marshal/intext_par.ml index 8a446cf6d79..baf5ba82e12 100644 --- a/testsuite/tests/lib-marshal/intext_par.ml +++ b/testsuite/tests/lib-marshal/intext_par.ml @@ -3,6 +3,7 @@ modules = "intextaux_par.c"; no-tsan; runtime5; + multidomain; { bytecode; } { native; } *) diff --git a/testsuite/tests/lib-random/parallel.ml b/testsuite/tests/lib-random/parallel.ml index f3ec016a919..a4c05395154 100644 --- a/testsuite/tests/lib-random/parallel.ml +++ b/testsuite/tests/lib-random/parallel.ml @@ -2,6 +2,7 @@ flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; include unix; runtime5; + multidomain; libunix; { bytecode; diff --git a/testsuite/tests/lib-runtime-events/test_caml_parallel.ml b/testsuite/tests/lib-runtime-events/test_caml_parallel.ml index c5b952c19cf..22a8f19b87d 100644 --- a/testsuite/tests/lib-runtime-events/test_caml_parallel.ml +++ b/testsuite/tests/lib-runtime-events/test_caml_parallel.ml @@ -5,6 +5,7 @@ }{ include runtime_events; runtime5; + multidomain; flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; { bytecode; } { native; } diff --git a/testsuite/tests/lib-runtime-events/test_caml_slot_reuse.ml b/testsuite/tests/lib-runtime-events/test_caml_slot_reuse.ml index 5d121997963..b3ed79899e4 100644 --- a/testsuite/tests/lib-runtime-events/test_caml_slot_reuse.ml +++ b/testsuite/tests/lib-runtime-events/test_caml_slot_reuse.ml @@ -5,6 +5,7 @@ }{ include runtime_events; runtime5; + multidomain; flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; { bytecode; } { native; } diff --git a/testsuite/tests/lib-runtime-events/test_dropped_events.ml b/testsuite/tests/lib-runtime-events/test_dropped_events.ml index 81a974afe0b..dcb633fa0ca 100644 --- a/testsuite/tests/lib-runtime-events/test_dropped_events.ml +++ b/testsuite/tests/lib-runtime-events/test_dropped_events.ml @@ -5,6 +5,7 @@ }{ include runtime_events; runtime5; + multidomain; flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; include unix; set OCAMLRUNPARAM = "e=6"; diff --git a/testsuite/tests/lib-str/parallel.ml b/testsuite/tests/lib-str/parallel.ml index 0a2b2e1529e..90f90f68892 100644 --- a/testsuite/tests/lib-str/parallel.ml +++ b/testsuite/tests/lib-str/parallel.ml @@ -1,6 +1,7 @@ (* TEST flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; runtime5; + multidomain; include str; hasstr; { diff --git a/testsuite/tests/lib-sync/prodcons.ml b/testsuite/tests/lib-sync/prodcons.ml index 7c3291de4a0..5dd0bf67ed7 100644 --- a/testsuite/tests/lib-sync/prodcons.ml +++ b/testsuite/tests/lib-sync/prodcons.ml @@ -1,6 +1,7 @@ (* TEST flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; runtime5; + multidomain; { bytecode; } { native; } *) diff --git a/testsuite/tests/lib-systhreads/multicore_lifecycle.ml b/testsuite/tests/lib-systhreads/multicore_lifecycle.ml index 035d604e90d..b77203245b0 100644 --- a/testsuite/tests/lib-systhreads/multicore_lifecycle.ml +++ b/testsuite/tests/lib-systhreads/multicore_lifecycle.ml @@ -3,6 +3,7 @@ include systhreads; hassysthreads; runtime5; + multidomain; { bytecode; }{ diff --git a/testsuite/tests/lib-unix/common/multicore_fork_domain_alone.ml b/testsuite/tests/lib-unix/common/multicore_fork_domain_alone.ml index b82a6532d56..3f92c24d392 100644 --- a/testsuite/tests/lib-unix/common/multicore_fork_domain_alone.ml +++ b/testsuite/tests/lib-unix/common/multicore_fork_domain_alone.ml @@ -1,6 +1,7 @@ (* TEST flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; runtime5; + multidomain; include unix; hasunix; not-windows; diff --git a/testsuite/tests/lib-unix/common/multicore_fork_domain_alone2.ml b/testsuite/tests/lib-unix/common/multicore_fork_domain_alone2.ml index 88219e93a6e..4af889be83e 100644 --- a/testsuite/tests/lib-unix/common/multicore_fork_domain_alone2.ml +++ b/testsuite/tests/lib-unix/common/multicore_fork_domain_alone2.ml @@ -1,6 +1,7 @@ (* TEST flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; runtime5; + multidomain; include unix; hasunix; not-windows; diff --git a/testsuite/tests/memory-model/forbidden.ml b/testsuite/tests/memory-model/forbidden.ml index bb758b40941..19364acdf7b 100644 --- a/testsuite/tests/memory-model/forbidden.ml +++ b/testsuite/tests/memory-model/forbidden.ml @@ -4,6 +4,7 @@ not-bsd; no-tsan; (* tsan detects the intentional data races and fails *) runtime5; + multidomain; { bytecode; }{ diff --git a/testsuite/tests/memory-model/publish.ml b/testsuite/tests/memory-model/publish.ml index 90c5a68de5c..69e49723cab 100644 --- a/testsuite/tests/memory-model/publish.ml +++ b/testsuite/tests/memory-model/publish.ml @@ -4,6 +4,7 @@ not-bsd; no-tsan; (* tsan detects data races and fails *) runtime5; + multidomain; { not-windows; bytecode; diff --git a/testsuite/tests/parallel/atomics.ml b/testsuite/tests/parallel/atomics.ml index ed0073044ef..ff45f108f52 100644 --- a/testsuite/tests/parallel/atomics.ml +++ b/testsuite/tests/parallel/atomics.ml @@ -1,6 +1,7 @@ (* TEST flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; runtime5; + multidomain; { bytecode; } { native; } *) diff --git a/testsuite/tests/parallel/backup_thread.ml b/testsuite/tests/parallel/backup_thread.ml index 21a87917c83..b3e10c81c18 100644 --- a/testsuite/tests/parallel/backup_thread.ml +++ b/testsuite/tests/parallel/backup_thread.ml @@ -1,6 +1,7 @@ (* TEST flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; runtime5; + multidomain; include unix; hasunix; { diff --git a/testsuite/tests/parallel/backup_thread_pipe.ml b/testsuite/tests/parallel/backup_thread_pipe.ml index 39088f49820..dba41cc0829 100644 --- a/testsuite/tests/parallel/backup_thread_pipe.ml +++ b/testsuite/tests/parallel/backup_thread_pipe.ml @@ -1,6 +1,7 @@ (* TEST flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; runtime5; + multidomain; include unix; hasunix; { diff --git a/testsuite/tests/parallel/catch_break.ml b/testsuite/tests/parallel/catch_break.ml index 9b1c674bad6..931d4b5929f 100644 --- a/testsuite/tests/parallel/catch_break.ml +++ b/testsuite/tests/parallel/catch_break.ml @@ -6,6 +6,7 @@ not-windows; poll-insertion; no-tsan; runtime5; +multidomain; { bytecode; }{ diff --git a/testsuite/tests/parallel/churn.ml b/testsuite/tests/parallel/churn.ml index 4d299bf5b75..4af8c7a0714 100644 --- a/testsuite/tests/parallel/churn.ml +++ b/testsuite/tests/parallel/churn.ml @@ -1,6 +1,7 @@ (* TEST flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; runtime5; + multidomain; { bytecode; } { native; } *) diff --git a/testsuite/tests/parallel/constpromote.ml b/testsuite/tests/parallel/constpromote.ml index 3f354848585..a532bd819b5 100644 --- a/testsuite/tests/parallel/constpromote.ml +++ b/testsuite/tests/parallel/constpromote.ml @@ -1,6 +1,7 @@ (* TEST flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; runtime5; + multidomain; { bytecode; } { native; } *) diff --git a/testsuite/tests/parallel/domain_dls.ml b/testsuite/tests/parallel/domain_dls.ml index 3788508e26a..b61930e56c1 100644 --- a/testsuite/tests/parallel/domain_dls.ml +++ b/testsuite/tests/parallel/domain_dls.ml @@ -1,6 +1,7 @@ (* TEST flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; runtime5; + multidomain; { bytecode; } { native; } *) diff --git a/testsuite/tests/parallel/domain_dls2.ml b/testsuite/tests/parallel/domain_dls2.ml index fea49defaf8..c3f830b1f3b 100644 --- a/testsuite/tests/parallel/domain_dls2.ml +++ b/testsuite/tests/parallel/domain_dls2.ml @@ -1,6 +1,7 @@ (* TEST flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; runtime5; + multidomain; { bytecode; } { native; } *) diff --git a/testsuite/tests/parallel/domain_id.ml b/testsuite/tests/parallel/domain_id.ml index d32a294d903..94dbff26096 100644 --- a/testsuite/tests/parallel/domain_id.ml +++ b/testsuite/tests/parallel/domain_id.ml @@ -1,6 +1,7 @@ (* TEST flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; runtime5; + multidomain; { bytecode; } { native; } *) diff --git a/testsuite/tests/parallel/fib_threads.ml b/testsuite/tests/parallel/fib_threads.ml index f963e2da5b7..a71f2900e5f 100644 --- a/testsuite/tests/parallel/fib_threads.ml +++ b/testsuite/tests/parallel/fib_threads.ml @@ -1,6 +1,7 @@ (* TEST flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; runtime5; + multidomain; include systhreads; hassysthreads; { diff --git a/testsuite/tests/parallel/join.ml b/testsuite/tests/parallel/join.ml index a8686cedd15..d2257184480 100644 --- a/testsuite/tests/parallel/join.ml +++ b/testsuite/tests/parallel/join.ml @@ -1,6 +1,7 @@ (* TEST flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; runtime5; + multidomain; { bytecode; } { native; } *) diff --git a/testsuite/tests/parallel/major_gc_wait_backup.ml b/testsuite/tests/parallel/major_gc_wait_backup.ml index 842f7cd2577..d6cd2482cf3 100644 --- a/testsuite/tests/parallel/major_gc_wait_backup.ml +++ b/testsuite/tests/parallel/major_gc_wait_backup.ml @@ -1,6 +1,7 @@ (* TEST flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; runtime5; + multidomain; include unix; hasunix; { diff --git a/testsuite/tests/parallel/max_domains2.ml b/testsuite/tests/parallel/max_domains2.ml index 451168cd0fa..a67dedfcaa7 100644 --- a/testsuite/tests/parallel/max_domains2.ml +++ b/testsuite/tests/parallel/max_domains2.ml @@ -2,6 +2,7 @@ flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; ocamlrunparam += ",d=129"; runtime5; + multidomain; { native; } *) diff --git a/testsuite/tests/parallel/multicore_systhreads.ml b/testsuite/tests/parallel/multicore_systhreads.ml index 1e22a40764f..bf779cd6224 100644 --- a/testsuite/tests/parallel/multicore_systhreads.ml +++ b/testsuite/tests/parallel/multicore_systhreads.ml @@ -1,6 +1,7 @@ (* TEST flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; runtime5; + multidomain; include systhreads; hassysthreads; { diff --git a/testsuite/tests/parallel/pingpong.ml b/testsuite/tests/parallel/pingpong.ml index 88c790507c3..27fd5a49a55 100644 --- a/testsuite/tests/parallel/pingpong.ml +++ b/testsuite/tests/parallel/pingpong.ml @@ -2,6 +2,7 @@ flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; no-tsan; (* TSan detects the intentional data race *) runtime5; + multidomain; { bytecode; } { native; } *) diff --git a/testsuite/tests/parallel/poll.ml b/testsuite/tests/parallel/poll.ml index eb58a9eea8b..907969e34bf 100644 --- a/testsuite/tests/parallel/poll.ml +++ b/testsuite/tests/parallel/poll.ml @@ -4,6 +4,7 @@ include unix; hasunix; runtime5; + multidomain; { bytecode; }{ diff --git a/testsuite/tests/parallel/prodcons_domains.ml b/testsuite/tests/parallel/prodcons_domains.ml index 7c3291de4a0..5dd0bf67ed7 100644 --- a/testsuite/tests/parallel/prodcons_domains.ml +++ b/testsuite/tests/parallel/prodcons_domains.ml @@ -1,6 +1,7 @@ (* TEST flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; runtime5; + multidomain; { bytecode; } { native; } *) diff --git a/testsuite/tests/parallel/tak.ml b/testsuite/tests/parallel/tak.ml index 5993c3c5eb9..0327377d2ba 100644 --- a/testsuite/tests/parallel/tak.ml +++ b/testsuite/tests/parallel/tak.ml @@ -1,6 +1,7 @@ (* TEST flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; runtime5; + multidomain; { bytecode; } { native; } *) diff --git a/testsuite/tests/parallel/test_c_thread_register.ml b/testsuite/tests/parallel/test_c_thread_register.ml index d804aa9cc8f..7a733d4aeda 100644 --- a/testsuite/tests/parallel/test_c_thread_register.ml +++ b/testsuite/tests/parallel/test_c_thread_register.ml @@ -2,6 +2,7 @@ flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; modules = "test_c_thread_register_cstubs.c"; runtime5; + multidomain; include systhreads; hassysthreads; { diff --git a/testsuite/tests/parallel/test_issue_11094.ml b/testsuite/tests/parallel/test_issue_11094.ml index c172852b014..2a129feaf78 100644 --- a/testsuite/tests/parallel/test_issue_11094.ml +++ b/testsuite/tests/parallel/test_issue_11094.ml @@ -1,5 +1,6 @@ (* TEST runtime5; + multidomain; set OCAMLRUNPARAM = "Xmain_stack_size=1000"; { bytecode; @@ -57,9 +58,7 @@ let run = in let domains = Array.init num_domains (fun _ -> - (* With mmaped stacks, the minimum size is a few pages, so we can only create - on the order of 10k fibers at once without ooming in CI. *) - Domain.spawn (fun () -> spawn (work 10000))) + Domain.spawn (fun () -> spawn (work 100000))) in Array.iter Domain.join domains; print_endline "OK" diff --git a/testsuite/tests/parallel/unsafe_alert.ml b/testsuite/tests/parallel/unsafe_alert.ml index 8db1a0468dc..9b1cdbdb5c1 100644 --- a/testsuite/tests/parallel/unsafe_alert.ml +++ b/testsuite/tests/parallel/unsafe_alert.ml @@ -1,5 +1,6 @@ (* TEST runtime5; + multidomain; { bytecode; } { native; } *) diff --git a/testsuite/tests/weak-ephe-final/finaliser2.ml b/testsuite/tests/weak-ephe-final/finaliser2.ml index 7acf07c12c1..bc5afcac778 100644 --- a/testsuite/tests/weak-ephe-final/finaliser2.ml +++ b/testsuite/tests/weak-ephe-final/finaliser2.ml @@ -1,6 +1,7 @@ (* TEST flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; runtime5; + multidomain; { bytecode; } { native; } *) diff --git a/testsuite/tests/weak-ephe-final/finaliser_handover.ml b/testsuite/tests/weak-ephe-final/finaliser_handover.ml index 26bd7a373b2..441601d7871 100644 --- a/testsuite/tests/weak-ephe-final/finaliser_handover.ml +++ b/testsuite/tests/weak-ephe-final/finaliser_handover.ml @@ -1,6 +1,7 @@ (* TEST flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; runtime5; + multidomain; { bytecode; } { native; } *) diff --git a/testsuite/tests/weak-ephe-final/weak_array_par.ml b/testsuite/tests/weak-ephe-final/weak_array_par.ml index 316c36db71c..56d9d45869c 100644 --- a/testsuite/tests/weak-ephe-final/weak_array_par.ml +++ b/testsuite/tests/weak-ephe-final/weak_array_par.ml @@ -1,5 +1,6 @@ (* TEST runtime5; + multidomain; { bytecode; } { native; } *) diff --git a/testsuite/tests/weak-ephe-final/weaktest_par_load.ml b/testsuite/tests/weak-ephe-final/weaktest_par_load.ml index 97edbc503d5..f5aac12c899 100644 --- a/testsuite/tests/weak-ephe-final/weaktest_par_load.ml +++ b/testsuite/tests/weak-ephe-final/weaktest_par_load.ml @@ -1,6 +1,7 @@ (* TEST flags += "-alert -unsafe_parallelism -alert -unsafe_multidomain"; runtime5; + multidomain; { bytecode; } { native; } *) diff --git a/utils/config.generated.ml.in b/utils/config.generated.ml.in index 661b9e5069e..01341e0fa15 100644 --- a/utils/config.generated.ml.in +++ b/utils/config.generated.ml.in @@ -105,4 +105,6 @@ let reserved_header_bits = let no_stack_checks = "@enable_stack_checks@" <> "yes" +let multidomain = "@enable_multidomain" = "yes" + let tsan = @tsan@ diff --git a/utils/config.mli b/utils/config.mli index 29475ba2e04..c9e89afe915 100644 --- a/utils/config.mli +++ b/utils/config.mli @@ -300,6 +300,10 @@ val runtime5 : bool val no_stack_checks : bool (** [true] if stack checks are disabled; used only if [runtime5] is [true]. *) +val multidomain : bool +(** Whether creating multiple domains is allowed. + Requires stack checks and poll insertion. *) + val tsan : bool (** Whether ThreadSanitizer instrumentation is enabled *) From 28efbf6187bf170b938da810a7a2293c0058d8a9 Mon Sep 17 00:00:00 2001 From: TheNumbat Date: Tue, 29 Apr 2025 17:50:09 -0400 Subject: [PATCH 3/5] fix config --- configure.ac | 16 +++++++--------- runtime/caml/m.h.in | 2 ++ utils/config.generated.ml.in | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/configure.ac b/configure.ac index 2eef6e05c5f..2542816c9cd 100644 --- a/configure.ac +++ b/configure.ac @@ -361,7 +361,7 @@ AC_SUBST([compute_deps]) AC_SUBST([intel_jcc_bug_cflags]) AC_SUBST([stack_allocation]) AC_SUBST([poll_insertion]) -AC_SUBST([multidomain]) +AC_SUBST([enable_multidomain]) AC_SUBST([dune]) AC_SUBST([ocaml_bindir]) AC_SUBST([ocaml_libdir]) @@ -2840,14 +2840,12 @@ AS_IF([test x"$enable_poll_insertion" = "xyes"], poll_insertion=true], [poll_insertion=false]) -AS_IF([test x"$enable_multidomain" = "xno"], - [multidomain=false], - [AS_IF([test x"$enable_stack_checks" = "xyes" && - test x"$enable_poll_insertion" = "xyes"], - [AC_DEFINE([MULTIDOMAIN]) - multidomain=true], - [AC_MSG_ERROR([Creating multiple domains is only supported when stack checks \ -and poll insertion are enabled.])])]) +AS_IF([$multidomain && $runtime5 && + test x"$enable_stack_checks" = "xyes" && + test x"$enable_poll_insertion" = "xyes"], + [AC_DEFINE([MULTIDOMAIN]), enable_multidomain=true], + [AC_MSG_ERROR([Creating multiple domains is only supported on runtime5 with \ +stack checks and poll insertion enabled.])]) oc_cflags="$common_cflags $internal_cflags" oc_cppflags="$common_cppflags $internal_cppflags" diff --git a/runtime/caml/m.h.in b/runtime/caml/m.h.in index 05568e216f1..550a12ecd48 100644 --- a/runtime/caml/m.h.in +++ b/runtime/caml/m.h.in @@ -105,3 +105,5 @@ #undef STACK_ALLOCATION #undef STACK_CHECKS_ENABLED + +#undef MULTIDOMAIN diff --git a/utils/config.generated.ml.in b/utils/config.generated.ml.in index 01341e0fa15..effb059ade1 100644 --- a/utils/config.generated.ml.in +++ b/utils/config.generated.ml.in @@ -105,6 +105,6 @@ let reserved_header_bits = let no_stack_checks = "@enable_stack_checks@" <> "yes" -let multidomain = "@enable_multidomain" = "yes" +let multidomain = "@enable_multidomain@" = "yes" let tsan = @tsan@ From 57b78099218d44ff92ff57a171fd9f2358773a29 Mon Sep 17 00:00:00 2001 From: TheNumbat Date: Tue, 29 Apr 2025 17:54:27 -0400 Subject: [PATCH 4/5] fix --- configure.ac | 13 +++++++------ .../tests/parallel/unsafe_alert.compilers.reference | 8 ++++---- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/configure.ac b/configure.ac index 2542816c9cd..040cccaba3a 100644 --- a/configure.ac +++ b/configure.ac @@ -2840,12 +2840,13 @@ AS_IF([test x"$enable_poll_insertion" = "xyes"], poll_insertion=true], [poll_insertion=false]) -AS_IF([$multidomain && $runtime5 && - test x"$enable_stack_checks" = "xyes" && - test x"$enable_poll_insertion" = "xyes"], - [AC_DEFINE([MULTIDOMAIN]), enable_multidomain=true], - [AC_MSG_ERROR([Creating multiple domains is only supported on runtime5 with \ -stack checks and poll insertion enabled.])]) +AS_IF([$multidomain], + [AS_IF([$runtime5 && + test x"$enable_stack_checks" = "xyes" && + test x"$enable_poll_insertion" = "xyes"], + [AC_DEFINE([MULTIDOMAIN]), enable_multidomain=true], + [AC_MSG_ERROR([Creating multiple domains is only supported on runtime5 with \ +stack checks and poll insertion enabled.])])], []) oc_cflags="$common_cflags $internal_cflags" oc_cppflags="$common_cppflags $internal_cppflags" diff --git a/testsuite/tests/parallel/unsafe_alert.compilers.reference b/testsuite/tests/parallel/unsafe_alert.compilers.reference index 9cd07064d17..1ab7d652c9e 100644 --- a/testsuite/tests/parallel/unsafe_alert.compilers.reference +++ b/testsuite/tests/parallel/unsafe_alert.compilers.reference @@ -1,11 +1,11 @@ -File "unsafe_alert.ml", line 7, characters 8-20: -7 | let _ = Domain.spawn (fun () -> ()) +File "unsafe_alert.ml", line 8, characters 8-20: +8 | let _ = Domain.spawn (fun () -> ()) ^^^^^^^^^^^^ Alert unsafe_multidomain: Stdlib.Domain.spawn Use [Domain.Safe.spawn]. -File "unsafe_alert.ml", line 7, characters 8-20: -7 | let _ = Domain.spawn (fun () -> ()) +File "unsafe_alert.ml", line 8, characters 8-20: +8 | let _ = Domain.spawn (fun () -> ()) ^^^^^^^^^^^^ Alert unsafe_parallelism: Stdlib.Domain.spawn This function is unsafe and should not be used in production code. From e33e8f4aae38f6f92630790d46f4125ba9a43461 Mon Sep 17 00:00:00 2001 From: TheNumbat Date: Tue, 29 Apr 2025 17:57:31 -0400 Subject: [PATCH 5/5] fix --- configure.ac | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index 040cccaba3a..d9fd08dae53 100644 --- a/configure.ac +++ b/configure.ac @@ -704,7 +704,7 @@ AC_ARG_ENABLE([poll-insertion], AC_ARG_ENABLE([multidomain], [AS_HELP_STRING([--enable-multidomain], - [enable insertion of poll points])]) + [allow the creation of multiple domains])]) AC_ARG_WITH([flexdll], [AS_HELP_STRING([--with-flexdll], @@ -2840,10 +2840,10 @@ AS_IF([test x"$enable_poll_insertion" = "xyes"], poll_insertion=true], [poll_insertion=false]) -AS_IF([$multidomain], - [AS_IF([$runtime5 && - test x"$enable_stack_checks" = "xyes" && - test x"$enable_poll_insertion" = "xyes"], +AS_IF([test x"$enable_multidomain" = "xyes"], + [AS_IF([test x"$enable_runtime5" = "xyes" && + test x"$enable_stack_checks" = "xyes" && + test x"$enable_poll_insertion" = "xyes"], [AC_DEFINE([MULTIDOMAIN]), enable_multidomain=true], [AC_MSG_ERROR([Creating multiple domains is only supported on runtime5 with \ stack checks and poll insertion enabled.])])], [])