From 14f6875df2a03402be0c5eb520cefb19efe258c1 Mon Sep 17 00:00:00 2001 From: David Yat Sin Date: Thu, 16 May 2024 18:50:46 +0000 Subject: [PATCH] Revert "Use pthread_setaffinity_np" This reverts commit 1df7a44112e45b7fb447926778490f741601219a. Change-Id: Ib386c8f944b6da0ef68ddd2be3f26013cd36ef5b Signed-off-by: Chris Freehill [ROCm/ROCR-Runtime commit: 2f05c2a27374412d2f606c61716d40e7dc15ce1a] --- .../hsa-runtime/core/util/lnx/os_linux.cpp | 47 +++++++++---------- 1 file changed, 21 insertions(+), 26 deletions(-) diff --git a/projects/rocr-runtime/runtime/hsa-runtime/core/util/lnx/os_linux.cpp b/projects/rocr-runtime/runtime/hsa-runtime/core/util/lnx/os_linux.cpp index fb70b81171..d36dc0d5d7 100644 --- a/projects/rocr-runtime/runtime/hsa-runtime/core/util/lnx/os_linux.cpp +++ b/projects/rocr-runtime/runtime/hsa-runtime/core/util/lnx/os_linux.cpp @@ -111,32 +111,8 @@ class os_thread { err = pthread_attr_destroy(&attrib); if (err != 0) { fprintf(stderr, "pthread_attr_destroy failed: %s\n", strerror(err)); - } - return; - } - } - - int create_err = pthread_create(&thread, &attrib, ThreadTrampoline, args.get()); - - // Probably a stack size error since system limits can be different from PTHREAD_STACK_MIN - // Attempt to grow the stack within reason. - if ((create_err == EINVAL) && stackSize != 0) { - while (stackSize < 20 * 1024 * 1024) { - stackSize *= 2; - err = pthread_attr_setstacksize(&attrib, stackSize); - if (err != 0) { - fprintf(stderr, "pthread_attr_setstacksize failed: %s\n", strerror(err)); - err = pthread_attr_destroy(&attrib); - if (err != 0) { - fprintf(stderr, "pthread_attr_destroy failed: %s\n", strerror(err)); - } - return; } - - create_err = pthread_create(&thread, &attrib, ThreadTrampoline, args.get()); - if (create_err != EINVAL) break; - debug_print("pthread_create returned EINVAL, doubling stack size\n"); } } @@ -154,14 +130,33 @@ class os_thread { for (int i = 0; i < cores; i++) { CPU_SET_S(i, CPU_ALLOC_SIZE(cores), cpuset); } - err = pthread_setaffinity_np(thread, CPU_ALLOC_SIZE(cores), cpuset); + err = pthread_attr_setaffinity_np(&attrib, CPU_ALLOC_SIZE(cores), cpuset); CPU_FREE(cpuset); if (err != 0) { fprintf(stderr, "pthread_setaffinity_np failed: %s\n", strerror(err)); return; } } - if (create_err == 0) + + err = pthread_create(&thread, &attrib, ThreadTrampoline, args.get()); + + // Probably a stack size error since system limits can be different from PTHREAD_STACK_MIN + // Attempt to grow the stack within reason. + if ((err == EINVAL) && stackSize != 0) { + while (stackSize < 20 * 1024 * 1024) { + stackSize *= 2; + err = pthread_attr_setstacksize(&attrib, stackSize); + if (err != 0) { + fprintf(stderr, "pthread_attr_setstacksize failed: %s\n", strerror(err)); + return; + } + err = pthread_create(&thread, &attrib, ThreadTrampoline, args.get()); + if (err != EINVAL) break; + debug_print("pthread_create returned EINVAL, doubling stack size\n"); + } + } + + if (err == 0) args.release(); else thread = 0;