From 28bc6f2819c2f24e42375e6b0b23bfd8216decfe Mon Sep 17 00:00:00 2001 From: Carsten Bauer Date: Tue, 20 Feb 2024 12:09:20 +0100 Subject: [PATCH 01/17] add jl_getaffinity and jl_setaffinity --- src/jl_exported_funcs.inc | 2 ++ src/julia_threads.h | 3 +++ src/threading.c | 26 ++++++++++++++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/src/jl_exported_funcs.inc b/src/jl_exported_funcs.inc index e2527e3d7aeab..5e70566ab310e 100644 --- a/src/jl_exported_funcs.inc +++ b/src/jl_exported_funcs.inc @@ -194,6 +194,7 @@ XX(jl_generating_output) \ XX(jl_generic_function_def) \ XX(jl_gensym) \ + XX(jl_getaffinity) \ XX(jl_getallocationgranularity) \ XX(jl_getnameinfo) \ XX(jl_getpagesize) \ @@ -406,6 +407,7 @@ XX(jl_safepoint_suspend_thread) \ XX(jl_safepoint_resume_thread) \ XX(jl_SC_CLK_TCK) \ + XX(jl_setaffinity) \ XX(jl_set_ARGS) \ XX(jl_set_const) \ XX(jl_set_errno) \ diff --git a/src/julia_threads.h b/src/julia_threads.h index 3a4e9a66cf5a7..60f156b8fab14 100644 --- a/src/julia_threads.h +++ b/src/julia_threads.h @@ -373,6 +373,9 @@ JL_DLLEXPORT int8_t jl_gc_is_in_finalizer(void) JL_NOTSAFEPOINT; JL_DLLEXPORT void jl_wakeup_thread(int16_t tid); +JL_DLLEXPORT int jl_getaffinity(int16_t tid, char *mask, int cpumasksize); +JL_DLLEXPORT int jl_setaffinity(int16_t tid, char *mask, int cpumasksize); + #ifdef __cplusplus } #endif diff --git a/src/threading.c b/src/threading.c index eb76ac579b538..f1a9218c03861 100644 --- a/src/threading.c +++ b/src/threading.c @@ -984,6 +984,32 @@ JL_DLLEXPORT int jl_alignment(size_t sz) return jl_gc_alignment(sz); } +JL_DLLEXPORT int jl_getaffinity(int16_t tid, char *mask, int cpumasksize) { + int nthreads = jl_atomic_load_acquire(&jl_n_threads); + if (tid < 0 || tid >= nthreads) + jl_error("invalid tid"); + + // TODO: relaxed or acquire here? + jl_ptls_t *tls = jl_atomic_load_relaxed(&jl_all_tls_states); + uv_thread_t uvtid = tls[tid]->system_id; + + // returns 0 in case of success and a value != 0 otherwise + return uv_thread_getaffinity(&uvtid, mask, cpumasksize); +} + +JL_DLLEXPORT int jl_setaffinity(int16_t tid, char *mask, int cpumasksize) { + int nthreads = jl_atomic_load_acquire(&jl_n_threads); + if (tid < 0 || tid >= nthreads) + jl_error("invalid tid"); + + // TODO: relaxed or acquire here? + jl_ptls_t *tls = jl_atomic_load_relaxed(&jl_all_tls_states); + uv_thread_t uvtid = tls[tid]->system_id; + + // returns 0 in case of success and a value != 0 otherwise + return uv_thread_setaffinity(&uvtid, mask, NULL, cpumasksize); +} + #ifdef __cplusplus } #endif From 02ca6df11c9bdd32b6dc83439e7bdd1a75c18928 Mon Sep 17 00:00:00 2001 From: Carsten Bauer Date: Tue, 20 Feb 2024 18:39:13 +0100 Subject: [PATCH 02/17] Update src/threading.c Co-authored-by: Valentin Churavy --- src/threading.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/threading.c b/src/threading.c index f1a9218c03861..861edbf905875 100644 --- a/src/threading.c +++ b/src/threading.c @@ -990,8 +990,8 @@ JL_DLLEXPORT int jl_getaffinity(int16_t tid, char *mask, int cpumasksize) { jl_error("invalid tid"); // TODO: relaxed or acquire here? - jl_ptls_t *tls = jl_atomic_load_relaxed(&jl_all_tls_states); - uv_thread_t uvtid = tls[tid]->system_id; + jl_ptls_t *ptls2 = jl_atomic_load_relaxed(&jl_all_tls_states)[tid]; + uv_thread_t uvtid = ptls2->system_id; // returns 0 in case of success and a value != 0 otherwise return uv_thread_getaffinity(&uvtid, mask, cpumasksize); From 303f23e1f36a53f81564d3e18370cfd25c6cfa69 Mon Sep 17 00:00:00 2001 From: Carsten Bauer Date: Tue, 20 Feb 2024 18:45:25 +0100 Subject: [PATCH 03/17] convention --- src/threading.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/threading.c b/src/threading.c index 861edbf905875..3d964c6440bd5 100644 --- a/src/threading.c +++ b/src/threading.c @@ -989,7 +989,6 @@ JL_DLLEXPORT int jl_getaffinity(int16_t tid, char *mask, int cpumasksize) { if (tid < 0 || tid >= nthreads) jl_error("invalid tid"); - // TODO: relaxed or acquire here? jl_ptls_t *ptls2 = jl_atomic_load_relaxed(&jl_all_tls_states)[tid]; uv_thread_t uvtid = ptls2->system_id; @@ -1002,9 +1001,8 @@ JL_DLLEXPORT int jl_setaffinity(int16_t tid, char *mask, int cpumasksize) { if (tid < 0 || tid >= nthreads) jl_error("invalid tid"); - // TODO: relaxed or acquire here? - jl_ptls_t *tls = jl_atomic_load_relaxed(&jl_all_tls_states); - uv_thread_t uvtid = tls[tid]->system_id; + jl_ptls_t *ptls2 = jl_atomic_load_relaxed(&jl_all_tls_states)[tid]; + uv_thread_t uvtid = ptls2->system_id; // returns 0 in case of success and a value != 0 otherwise return uv_thread_setaffinity(&uvtid, mask, NULL, cpumasksize); From a53ea15618e0e5ff019fe709e20f379e05c05532 Mon Sep 17 00:00:00 2001 From: Carsten Bauer Date: Tue, 20 Feb 2024 18:59:48 +0100 Subject: [PATCH 04/17] fix --- src/threading.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/threading.c b/src/threading.c index 3d964c6440bd5..1230d6c8d46cc 100644 --- a/src/threading.c +++ b/src/threading.c @@ -989,7 +989,7 @@ JL_DLLEXPORT int jl_getaffinity(int16_t tid, char *mask, int cpumasksize) { if (tid < 0 || tid >= nthreads) jl_error("invalid tid"); - jl_ptls_t *ptls2 = jl_atomic_load_relaxed(&jl_all_tls_states)[tid]; + jl_ptls_t ptls2 = jl_atomic_load_relaxed(&jl_all_tls_states)[tid]; uv_thread_t uvtid = ptls2->system_id; // returns 0 in case of success and a value != 0 otherwise @@ -1001,7 +1001,7 @@ JL_DLLEXPORT int jl_setaffinity(int16_t tid, char *mask, int cpumasksize) { if (tid < 0 || tid >= nthreads) jl_error("invalid tid"); - jl_ptls_t *ptls2 = jl_atomic_load_relaxed(&jl_all_tls_states)[tid]; + jl_ptls_t ptls2 = jl_atomic_load_relaxed(&jl_all_tls_states)[tid]; uv_thread_t uvtid = ptls2->system_id; // returns 0 in case of success and a value != 0 otherwise From 64b14bfd54491050efd84c6f7f9bc72d4a428afe Mon Sep 17 00:00:00 2001 From: Carsten Bauer Date: Wed, 17 Apr 2024 11:56:49 +0200 Subject: [PATCH 05/17] rebase fix --- test/threads.jl | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/threads.jl b/test/threads.jl index 172385d1c130e..4531ffc96b384 100644 --- a/test/threads.jl +++ b/test/threads.jl @@ -354,3 +354,13 @@ end @test istaskfailed(t) end end + +@testset "jl_*affinity" begin + cpumasksize = @ccall uv_cpumask_size()::Cint + mask = zeros(Cchar, cpumasksize); + jl_getaffinity = (tid, mask, cpumasksize) -> ccall(:jl_getaffinity, Int32, (Int16, Ptr{Cchar}, Int32), tid, mask, cpumasksize) + jl_setaffinity = (tid, mask, cpumasksize) -> ccall(:jl_setaffinity, Int32, (Int16, Ptr{Cchar}, Int32), tid, mask, cpumasksize) + @test jl_getaffinity(1, mask, cpumasksize) == 0 + fill!(mask, 1) + @test jl_setaffinity(1, mask, cpumasksize) == 0 +end From 276fb23f44a4ad1e89dfa0d41e877633f7ff6cb0 Mon Sep 17 00:00:00 2001 From: Carsten Bauer Date: Tue, 20 Feb 2024 20:53:43 +0100 Subject: [PATCH 06/17] add todo regarding lock --- src/threading.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/threading.c b/src/threading.c index 1230d6c8d46cc..f99548e7670f5 100644 --- a/src/threading.c +++ b/src/threading.c @@ -989,6 +989,7 @@ JL_DLLEXPORT int jl_getaffinity(int16_t tid, char *mask, int cpumasksize) { if (tid < 0 || tid >= nthreads) jl_error("invalid tid"); + // TODO: use correct lock. system_id is only legal if the thread is alive. jl_ptls_t ptls2 = jl_atomic_load_relaxed(&jl_all_tls_states)[tid]; uv_thread_t uvtid = ptls2->system_id; @@ -1001,6 +1002,7 @@ JL_DLLEXPORT int jl_setaffinity(int16_t tid, char *mask, int cpumasksize) { if (tid < 0 || tid >= nthreads) jl_error("invalid tid"); + // TODO: use correct lock. system_id is only legal if the thread is alive. jl_ptls_t ptls2 = jl_atomic_load_relaxed(&jl_all_tls_states)[tid]; uv_thread_t uvtid = ptls2->system_id; From 6eb8c2ebed5d3ce64a0939ec0e406dbc334eac56 Mon Sep 17 00:00:00 2001 From: Carsten Bauer Date: Wed, 21 Feb 2024 08:34:24 +0100 Subject: [PATCH 07/17] error if ptls is NULL --- src/threading.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/threading.c b/src/threading.c index f99548e7670f5..8864765213d05 100644 --- a/src/threading.c +++ b/src/threading.c @@ -991,6 +991,8 @@ JL_DLLEXPORT int jl_getaffinity(int16_t tid, char *mask, int cpumasksize) { // TODO: use correct lock. system_id is only legal if the thread is alive. jl_ptls_t ptls2 = jl_atomic_load_relaxed(&jl_all_tls_states)[tid]; + if (ptls2 == NULL) + jl_error("retrieved ptls2 is NULL") uv_thread_t uvtid = ptls2->system_id; // returns 0 in case of success and a value != 0 otherwise @@ -1004,6 +1006,8 @@ JL_DLLEXPORT int jl_setaffinity(int16_t tid, char *mask, int cpumasksize) { // TODO: use correct lock. system_id is only legal if the thread is alive. jl_ptls_t ptls2 = jl_atomic_load_relaxed(&jl_all_tls_states)[tid]; + if (ptls2 == NULL) + jl_error("retrieved ptls2 is NULL") uv_thread_t uvtid = ptls2->system_id; // returns 0 in case of success and a value != 0 otherwise From 77df90255cbebec7e0e947e8d244ee2bf3803c55 Mon Sep 17 00:00:00 2001 From: Carsten Bauer Date: Wed, 28 Feb 2024 14:09:40 +0100 Subject: [PATCH 08/17] errors -> return values --- src/threading.c | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/src/threading.c b/src/threading.c index 8864765213d05..fc39455a47a6f 100644 --- a/src/threading.c +++ b/src/threading.c @@ -984,34 +984,50 @@ JL_DLLEXPORT int jl_alignment(size_t sz) return jl_gc_alignment(sz); } +// Return values: +// 0 == success +// 1 == invalid thread id provided +// 2 == ptls2 was NULL +// 3 == uv_thread_getaffinity failed with a non-zero exit code JL_DLLEXPORT int jl_getaffinity(int16_t tid, char *mask, int cpumasksize) { int nthreads = jl_atomic_load_acquire(&jl_n_threads); if (tid < 0 || tid >= nthreads) - jl_error("invalid tid"); + return 1; // TODO: use correct lock. system_id is only legal if the thread is alive. jl_ptls_t ptls2 = jl_atomic_load_relaxed(&jl_all_tls_states)[tid]; if (ptls2 == NULL) - jl_error("retrieved ptls2 is NULL") + return 2; uv_thread_t uvtid = ptls2->system_id; - // returns 0 in case of success and a value != 0 otherwise - return uv_thread_getaffinity(&uvtid, mask, cpumasksize); + ret_uv = uv_thread_getaffinity(&uvtid, mask, cpumasksize); + if (ret_uv != 0) + return 3; + + return 0; // success } +// Return values: +// 0 == success +// 1 == invalid thread id provided +// 2 == ptls2 was NULL +// 3 == uv_thread_setaffinity failed with a non-zero exit code JL_DLLEXPORT int jl_setaffinity(int16_t tid, char *mask, int cpumasksize) { int nthreads = jl_atomic_load_acquire(&jl_n_threads); if (tid < 0 || tid >= nthreads) - jl_error("invalid tid"); + return 1; // TODO: use correct lock. system_id is only legal if the thread is alive. jl_ptls_t ptls2 = jl_atomic_load_relaxed(&jl_all_tls_states)[tid]; if (ptls2 == NULL) - jl_error("retrieved ptls2 is NULL") + return 2; uv_thread_t uvtid = ptls2->system_id; - // returns 0 in case of success and a value != 0 otherwise - return uv_thread_setaffinity(&uvtid, mask, NULL, cpumasksize); + ret_uv = uv_thread_setaffinity(&uvtid, mask, NULL, cpumasksize); + if (ret_uv != 0) + return 3; + + return 0; // success } #ifdef __cplusplus From c73b9d3b221bb551fae03aaeba508bbd3ea4845c Mon Sep 17 00:00:00 2001 From: Carsten Bauer Date: Wed, 28 Feb 2024 14:13:35 +0100 Subject: [PATCH 09/17] fix --- src/threading.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/threading.c b/src/threading.c index fc39455a47a6f..5762139ecd05f 100644 --- a/src/threading.c +++ b/src/threading.c @@ -1000,7 +1000,7 @@ JL_DLLEXPORT int jl_getaffinity(int16_t tid, char *mask, int cpumasksize) { return 2; uv_thread_t uvtid = ptls2->system_id; - ret_uv = uv_thread_getaffinity(&uvtid, mask, cpumasksize); + int ret_uv = uv_thread_getaffinity(&uvtid, mask, cpumasksize); if (ret_uv != 0) return 3; @@ -1023,7 +1023,7 @@ JL_DLLEXPORT int jl_setaffinity(int16_t tid, char *mask, int cpumasksize) { return 2; uv_thread_t uvtid = ptls2->system_id; - ret_uv = uv_thread_setaffinity(&uvtid, mask, NULL, cpumasksize); + int ret_uv = uv_thread_setaffinity(&uvtid, mask, NULL, cpumasksize); if (ret_uv != 0) return 3; From e8c1316551935ed9e0b9d6f5abc312356a70f174 Mon Sep 17 00:00:00 2001 From: Carsten Bauer Date: Thu, 7 Mar 2024 21:03:45 +0100 Subject: [PATCH 10/17] return libuv exit code --- src/threading.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/threading.c b/src/threading.c index 5762139ecd05f..d6e28e3d80828 100644 --- a/src/threading.c +++ b/src/threading.c @@ -985,10 +985,10 @@ JL_DLLEXPORT int jl_alignment(size_t sz) } // Return values: -// 0 == success -// 1 == invalid thread id provided -// 2 == ptls2 was NULL -// 3 == uv_thread_getaffinity failed with a non-zero exit code +// 0 == success +// 1 == invalid thread id provided +// 2 == ptls2 was NULL +// <0 == uv_thread_getaffinity exit code JL_DLLEXPORT int jl_getaffinity(int16_t tid, char *mask, int cpumasksize) { int nthreads = jl_atomic_load_acquire(&jl_n_threads); if (tid < 0 || tid >= nthreads) @@ -1002,16 +1002,16 @@ JL_DLLEXPORT int jl_getaffinity(int16_t tid, char *mask, int cpumasksize) { int ret_uv = uv_thread_getaffinity(&uvtid, mask, cpumasksize); if (ret_uv != 0) - return 3; + return ret_uv; return 0; // success } // Return values: -// 0 == success -// 1 == invalid thread id provided -// 2 == ptls2 was NULL -// 3 == uv_thread_setaffinity failed with a non-zero exit code +// 0 == success +// 1 == invalid thread id provided +// 2 == ptls2 was NULL +// <0 == uv_thread_getaffinity exit code JL_DLLEXPORT int jl_setaffinity(int16_t tid, char *mask, int cpumasksize) { int nthreads = jl_atomic_load_acquire(&jl_n_threads); if (tid < 0 || tid >= nthreads) @@ -1025,7 +1025,7 @@ JL_DLLEXPORT int jl_setaffinity(int16_t tid, char *mask, int cpumasksize) { int ret_uv = uv_thread_setaffinity(&uvtid, mask, NULL, cpumasksize); if (ret_uv != 0) - return 3; + return ret_uv; return 0; // success } From 81bf8fe847fbdec0e886955ccef9fc5ba6c909fe Mon Sep 17 00:00:00 2001 From: Carsten Bauer Date: Wed, 28 Feb 2024 14:40:39 +0100 Subject: [PATCH 11/17] add check that affinities are supported on the platform to testset --- test/threads.jl | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/test/threads.jl b/test/threads.jl index 4531ffc96b384..73c9ac4c9c360 100644 --- a/test/threads.jl +++ b/test/threads.jl @@ -357,10 +357,12 @@ end @testset "jl_*affinity" begin cpumasksize = @ccall uv_cpumask_size()::Cint - mask = zeros(Cchar, cpumasksize); - jl_getaffinity = (tid, mask, cpumasksize) -> ccall(:jl_getaffinity, Int32, (Int16, Ptr{Cchar}, Int32), tid, mask, cpumasksize) - jl_setaffinity = (tid, mask, cpumasksize) -> ccall(:jl_setaffinity, Int32, (Int16, Ptr{Cchar}, Int32), tid, mask, cpumasksize) - @test jl_getaffinity(1, mask, cpumasksize) == 0 - fill!(mask, 1) - @test jl_setaffinity(1, mask, cpumasksize) == 0 + if cpumasksize > 0 # otherwise affinities are not supported on the platform (UV_ENOTSUP) + mask = zeros(Cchar, cpumasksize); + jl_getaffinity = (tid, mask, cpumasksize) -> ccall(:jl_getaffinity, Int32, (Int16, Ptr{Cchar}, Int32), tid, mask, cpumasksize) + jl_setaffinity = (tid, mask, cpumasksize) -> ccall(:jl_setaffinity, Int32, (Int16, Ptr{Cchar}, Int32), tid, mask, cpumasksize) + @test jl_getaffinity(1, mask, cpumasksize) == 0 + fill!(mask, 1) + @test jl_setaffinity(1, mask, cpumasksize) == 0 + end end From 0575dadf40856f1dbafc157505b7db5cf33cc421 Mon Sep 17 00:00:00 2001 From: Carsten Bauer Date: Mon, 11 Mar 2024 14:08:08 +0100 Subject: [PATCH 12/17] try something to fix windows CI --- test/threads.jl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/threads.jl b/test/threads.jl index 73c9ac4c9c360..5f5267f3620f9 100644 --- a/test/threads.jl +++ b/test/threads.jl @@ -362,7 +362,8 @@ end jl_getaffinity = (tid, mask, cpumasksize) -> ccall(:jl_getaffinity, Int32, (Int16, Ptr{Cchar}, Int32), tid, mask, cpumasksize) jl_setaffinity = (tid, mask, cpumasksize) -> ccall(:jl_setaffinity, Int32, (Int16, Ptr{Cchar}, Int32), tid, mask, cpumasksize) @test jl_getaffinity(1, mask, cpumasksize) == 0 - fill!(mask, 1) + fill!(mask, 0) + mask[1] = 1 @test jl_setaffinity(1, mask, cpumasksize) == 0 end end From 6c83f7cf5d975d2d42e19cbabc4e7be845f4caf9 Mon Sep 17 00:00:00 2001 From: Carsten Bauer Date: Mon, 11 Mar 2024 18:13:36 +0100 Subject: [PATCH 13/17] another test fix attempt --- test/threads.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/threads.jl b/test/threads.jl index 5f5267f3620f9..5ef5255d5eb8c 100644 --- a/test/threads.jl +++ b/test/threads.jl @@ -363,7 +363,7 @@ end jl_setaffinity = (tid, mask, cpumasksize) -> ccall(:jl_setaffinity, Int32, (Int16, Ptr{Cchar}, Int32), tid, mask, cpumasksize) @test jl_getaffinity(1, mask, cpumasksize) == 0 fill!(mask, 0) - mask[1] = 1 + mask[begin:min(Sys.CPU_THREADS, end)] .= 1 @test jl_setaffinity(1, mask, cpumasksize) == 0 end end From c97f6600d7c04da3019099e8b2a345a6f08356a4 Mon Sep 17 00:00:00 2001 From: Carsten Bauer Date: Thu, 21 Mar 2024 09:43:17 +0100 Subject: [PATCH 14/17] test again --- test/threads.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/threads.jl b/test/threads.jl index 5ef5255d5eb8c..f6ae5c815f286 100644 --- a/test/threads.jl +++ b/test/threads.jl @@ -363,7 +363,7 @@ end jl_setaffinity = (tid, mask, cpumasksize) -> ccall(:jl_setaffinity, Int32, (Int16, Ptr{Cchar}, Int32), tid, mask, cpumasksize) @test jl_getaffinity(1, mask, cpumasksize) == 0 fill!(mask, 0) - mask[begin:min(Sys.CPU_THREADS, end)] .= 1 + mask[begin] = 1 @test jl_setaffinity(1, mask, cpumasksize) == 0 end end From 011e3025ab65cfa37ea7705e24b0c603322b5d19 Mon Sep 17 00:00:00 2001 From: Carsten Bauer Date: Thu, 21 Mar 2024 12:12:29 +0100 Subject: [PATCH 15/17] try all-ones mask once again --- test/threads.jl | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/threads.jl b/test/threads.jl index f6ae5c815f286..73c9ac4c9c360 100644 --- a/test/threads.jl +++ b/test/threads.jl @@ -362,8 +362,7 @@ end jl_getaffinity = (tid, mask, cpumasksize) -> ccall(:jl_getaffinity, Int32, (Int16, Ptr{Cchar}, Int32), tid, mask, cpumasksize) jl_setaffinity = (tid, mask, cpumasksize) -> ccall(:jl_setaffinity, Int32, (Int16, Ptr{Cchar}, Int32), tid, mask, cpumasksize) @test jl_getaffinity(1, mask, cpumasksize) == 0 - fill!(mask, 0) - mask[begin] = 1 + fill!(mask, 1) @test jl_setaffinity(1, mask, cpumasksize) == 0 end end From 46bf57bfd329d65baff3e9f748435e2f678b82d5 Mon Sep 17 00:00:00 2001 From: Carsten Bauer Date: Fri, 22 Mar 2024 08:15:17 +0100 Subject: [PATCH 16/17] mask[begin] = 1 --- test/threads.jl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/threads.jl b/test/threads.jl index 73c9ac4c9c360..f6ae5c815f286 100644 --- a/test/threads.jl +++ b/test/threads.jl @@ -362,7 +362,8 @@ end jl_getaffinity = (tid, mask, cpumasksize) -> ccall(:jl_getaffinity, Int32, (Int16, Ptr{Cchar}, Int32), tid, mask, cpumasksize) jl_setaffinity = (tid, mask, cpumasksize) -> ccall(:jl_setaffinity, Int32, (Int16, Ptr{Cchar}, Int32), tid, mask, cpumasksize) @test jl_getaffinity(1, mask, cpumasksize) == 0 - fill!(mask, 1) + fill!(mask, 0) + mask[begin] = 1 @test jl_setaffinity(1, mask, cpumasksize) == 0 end end From ff829a94bbb095a03853cb8ffca8a647fe14a2c4 Mon Sep 17 00:00:00 2001 From: Carsten Bauer Date: Fri, 22 Mar 2024 10:19:09 +0100 Subject: [PATCH 17/17] drop windows test --- test/threads.jl | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/test/threads.jl b/test/threads.jl index f6ae5c815f286..24da56e2b89fd 100644 --- a/test/threads.jl +++ b/test/threads.jl @@ -357,13 +357,12 @@ end @testset "jl_*affinity" begin cpumasksize = @ccall uv_cpumask_size()::Cint - if cpumasksize > 0 # otherwise affinities are not supported on the platform (UV_ENOTSUP) + if !Sys.iswindows() && cpumasksize > 0 # otherwise affinities are not supported on the platform (UV_ENOTSUP) mask = zeros(Cchar, cpumasksize); jl_getaffinity = (tid, mask, cpumasksize) -> ccall(:jl_getaffinity, Int32, (Int16, Ptr{Cchar}, Int32), tid, mask, cpumasksize) jl_setaffinity = (tid, mask, cpumasksize) -> ccall(:jl_setaffinity, Int32, (Int16, Ptr{Cchar}, Int32), tid, mask, cpumasksize) @test jl_getaffinity(1, mask, cpumasksize) == 0 - fill!(mask, 0) - mask[begin] = 1 + fill!(mask, 1) @test jl_setaffinity(1, mask, cpumasksize) == 0 end end