From a86f860e68c934d28b945a82b2417db54fc4a03e Mon Sep 17 00:00:00 2001 From: Samuel Williams Date: Fri, 8 Sep 2023 00:56:30 +1200 Subject: [PATCH 1/2] Revert "Extract `do_mutex_lock_check_interrupts` to try and fix `ppc64le`. (#8393)" This reverts commit 5184b40dd4dc446660cd35c3e53896324e95b317. --- thread_sync.c | 32 +++++++++----------------------- 1 file changed, 9 insertions(+), 23 deletions(-) diff --git a/thread_sync.c b/thread_sync.c index 63f0228d9d1a7b..85ebec4d8cfc3d 100644 --- a/thread_sync.c +++ b/thread_sync.c @@ -290,28 +290,6 @@ delete_from_waitq(VALUE value) return Qnil; } -static void -do_mutex_lock_check_interrupts(int interruptible_p, rb_fiber_t *fiber, rb_mutex_t *mutex, rb_thread_t *thread) -{ - // We extracted this function because we suspect there can be a codegen bug - // on ppc64le and moving this code to a separate function seems to fix the - // problem, at least in my tests. - if (interruptible_p) { - /* release mutex before checking for interrupts...as interrupt checking - * code might call rb_raise() */ - if (mutex->fiber == fiber) { - mutex->fiber = 0; - } - - RUBY_VM_CHECK_INTS_BLOCKING(thread->ec); /* may release mutex */ - - if (!mutex->fiber) { - mutex->fiber = fiber; - } - } -} - - static VALUE do_mutex_lock(VALUE self, int interruptible_p) { @@ -400,7 +378,15 @@ do_mutex_lock(VALUE self, int interruptible_p) rb_ractor_sleeper_threads_dec(th->ractor); } - do_mutex_lock_check_interrupts(interruptible_p, fiber, mutex, th); + if (interruptible_p) { + /* release mutex before checking for interrupts...as interrupt checking + * code might call rb_raise() */ + if (mutex->fiber == fiber) mutex->fiber = 0; + RUBY_VM_CHECK_INTS_BLOCKING(th->ec); /* may release mutex */ + if (!mutex->fiber) { + mutex->fiber = fiber; + } + } } if (mutex->fiber == fiber) mutex_locked(th, self); From f3f70f470f19582388678b39a8500d5c006dbb75 Mon Sep 17 00:00:00 2001 From: Samuel Williams Date: Fri, 8 Sep 2023 00:58:27 +1200 Subject: [PATCH 2/2] .travis.yml: Try default gcc 9.4.0 instead of gcc-10 in ppc64le and s390x. Use gcc 9.4.0 instead of gcc-10 to avoid the current failures by a possible GCC 10 compiler bug in the Travis ppc64le and s390x cases. And it also aligns with RubyCI Ubuntu ppc64le and s390x where the default gcc is used. Co-authored-by: Jun Aruga --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index c6054ae6723a46..11ae8a9b4567f7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -82,12 +82,12 @@ env: - &ppc64le-linux name: ppc64le-linux arch: ppc64le - <<: *gcc-10 + compiler: gcc - &s390x-linux name: s390x-linux arch: s390x - <<: *gcc-10 + compiler: gcc - &arm32-linux name: arm32-linux