RFR: 8338383: Implement JEP 491: Synchronize Virtual Threads without Pinning

Fei Yang fyang at openjdk.org
Wed Nov 6 17:40:02 UTC 2024


On Mon, 4 Nov 2024 18:18:38 GMT, Patricio Chilano Mateo <pchilanomate at openjdk.org> wrote:

>> Here's my suggested C2 change:
>> 
>> diff --git a/src/hotspot/cpu/aarch64/aarch64.ad b/src/hotspot/cpu/aarch64/aarch64.ad
>> index d9c77a2f529..1e99db191ae 100644
>> --- a/src/hotspot/cpu/aarch64/aarch64.ad
>> +++ b/src/hotspot/cpu/aarch64/aarch64.ad
>> @@ -3692,14 +3692,13 @@ encode %{
>>        __ post_call_nop();
>>      } else {
>>        Label retaddr;
>> +      // Make the anchor frame walkable
>>        __ adr(rscratch2, retaddr);
>> +      __ str(rscratch2, Address(rthread, JavaThread::last_Java_pc_offset()));
>>        __ lea(rscratch1, RuntimeAddress(entry));
>> -      // Leave a breadcrumb for JavaFrameAnchor::capture_last_Java_pc()
>> -      __ stp(zr, rscratch2, Address(__ pre(sp, -2 * wordSize)));
>>        __ blr(rscratch1);
>>        __ bind(retaddr);
>>        __ post_call_nop();
>> -      __ add(sp, sp, 2 * wordSize);
>>      }
>>      if (Compile::current()->max_vector_size() > 0) {
>>        __ reinitialize_ptrue();
>
> Great, thanks Dean. I removed `possibly_adjust_frame()` and the related code.
> @RealFYang I made the equivalent change for riscv, could you verify it's okay?

@pchilano : Hi, Great to see `possibly_adjust_frame()` go away. Nice cleanup!
`hotspot_loom jdk_loom` still test good with both release and fastdebug builds on linux-riscv64 platform.

BTW: I noticed one more return miss prediction case which I think was previously missed in https://github.com/openjdk/jdk/pull/21565/commits/32840de91953a5e50c85217f2a51fc5a901682a2
Do you mind adding following small addon change to fix it? Thanks.

diff --git a/src/hotspot/cpu/riscv/templateInterpreterGenerator_riscv.cpp b/src/hotspot/cpu/riscv/templateInterpreterGenerator_riscv.cpp
index 84a292242c3..ac28f4b3514 100644
--- a/src/hotspot/cpu/riscv/templateInterpreterGenerator_riscv.cpp
+++ b/src/hotspot/cpu/riscv/templateInterpreterGenerator_riscv.cpp
@@ -1263,10 +1263,10 @@ address TemplateInterpreterGenerator::generate_native_entry(bool synchronized) {
   if (LockingMode != LM_LEGACY) {
     // Check preemption for Object.wait()
     Label not_preempted;
-    __ ld(t0, Address(xthread, JavaThread::preempt_alternate_return_offset()));
-    __ beqz(t0, not_preempted);
+    __ ld(t1, Address(xthread, JavaThread::preempt_alternate_return_offset()));
+    __ beqz(t1, not_preempted);
     __ sd(zr, Address(xthread, JavaThread::preempt_alternate_return_offset()));
-    __ jr(t0);
+    __ jr(t1);
     __ bind(native_return);
     __ restore_after_resume(true /* is_native */);
     // reload result_handler

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/21565#discussion_r1828797495


More information about the core-libs-dev mailing list