ntdll: finish ARM64EC cooperative suspend (fixes named-pipe stalls under FEX) - #40
Open
utkarshdalal wants to merge 2 commits into
Open
ntdll: finish ARM64EC cooperative suspend (fixes named-pipe stalls under FEX)#40utkarshdalal wants to merge 2 commits into
utkarshdalal wants to merge 2 commits into
Conversation
CW-Bug-Id: #27308 This reverts commit 189b5e8.
When running simulated code, instead of suspending a thread immediately, the kernel sets a registered doorbell, expecting the jit to stop execution as soon as it reaches a consistent state that can be represented as an x86_64 context. Based on patch by Billy Laws. CW-Bug-Id: #27308 (cherry picked from commit b8d8f34)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Backports two commits from Proton 11.0-2 onto the 11.0-1 branch we ship:
The WIP handler returns early from
usr1_handlerwhenever the thread is in simulation or in a syscall callback, without a wineserver side to complete the protocol. When wineserver stops a thread to deliver a kernel APC (for example an async read completion on a named pipe) while that thread is inside its ownselectcall, the reply is never delivered and both ends of the pipe wait forever.Reproducer: two processes ping-ponging 112-byte messages over an overlapped named pipe (IOCP or event based) stall after a few hundred to a few thousand rounds on the Retroid Pocket 6 with FEX 2608. A
+servertrace showsselect()with no reply followed by*sent signal* SIGUSR1one millisecond later. This is what freezes every Chromium/CEF child process (mojo channels), e.g. the Rockstar Games Launcher Social Club UI.The finished implementation matches the doorbell semantics FEX 2604+ expects (inverted doorbell,
SELECT_COOPERATIVE_SUSPEND,STATUS_THREAD_WAS_SUSPENDED) and adds the wineserver protocol support that the WIP lacked.🤖 Generated with Claude Code