summaryrefslogtreecommitdiff
path: root/tools/lib/python/kdoc/python_version.py
diff options
context:
space:
mode:
authorPhilip Yang <Philip.Yang@amd.com>2026-06-08 22:48:21 -0400
committerAlex Deucher <alexander.deucher@amd.com>2026-09-23 13:03:13 -0400
commit61c057105de5f4f47f1142a836facc9237f99606 (patch)
tree5dcd8bd066e05675bd3598de9b8594086f5c15ed /tools/lib/python/kdoc/python_version.py
parentc73391c5898f206abc4ba8ccd2d1f4437c42aec3 (diff)
drm/amdgpu: Resync UALink ring wptr after reboot
When one side of UALink nodes reboots, its ring wptr resets to 0 while the peer keeps a stale value. Read the remote wptr and adopt it as the local wptr and rptr to resync, before the first message is sent. Either side can notice first, so do this both when setting up the connection and when receiving the HELLO from the peer. On the sdma path, read the wptr in a fence callback because the IB buffer holding the result is recycled once the fence signals, so reading it after dma_fence_wait_timeout() is too late. The lsdma path copies synchronously, so it reads the wptr directly. Take peer->lock in the callers (amdgpu_ualink_remote_interrupt and amdgpu_ualink_remote_shootdown) instead of in amdgpu_ualink_send_command, so the ring->ready check and the send are atomic against a concurrent ring reset. Move the rptr refresh and ring-full check out of amdgpu_ualink_send_command() into amdgpu_ualink_ring_check_space(), so it runs under the caller's peer->lock before the job is allocated. On a failed NPA-REQ send, reset the connection like the NPA-RSP timeout path already does, so the next attempt resyncs the ring wptr. On connection reset, amdgpu_ualink_reset_peer_rings() only clears ring->ready, so the writeback address is re-registered on the next send. v10: - Fix the resync missed on the receiving side: after a reboot the peer may send HELLO before we set up the connection, so resync the ring wptr in amdgpu_ualink_process_hello_msg() too. v9: - Fix the unnecessary connection reset after an app exits: the peer is idle here but still busy handling NPA revokes on the remote, so the HELLO reset a healthy connection. Only send it if the wptr changed. - Resync both rings together under peer->lock, read both remote wptr before updating either so a failed read changes nothing. v8: - Fix regression with concurrent import ioctls: do the idle check and ring reset in amdgpu_ualink_setup_connection() under conn_state->lock, and return -EAGAIN for IN_PROGRESS/PENDING first. - Reset the peer rings only, the imp/exp xarray cleanup is not needed to resync wptr. v7: - With v6 reboot one node of vPOD test passed on minirack. - Use the per-remote imported and exported handle lists for the idle check instead of walking the xarrays. - Rename amdgpu_ualink_resync_peer_rings() to amdgpu_ualink_reset_peer_rings(), it only clears ring->ready. v6: - Check idleness per remote accelerator instead of globally, and reset the stale connection at the import ioctl so the peer re-runs the HELLO handshake after a reboot. v5: - Resync the ring pointers at the import ioctl when the connection is completely idle (no exported or imported BOs), so the first command from a new application after a remote reboot/reset succeeds. - Put the sdma wptr read fence callback on the stack instead of allocating it; it is cancelled on timeout so it never outlives the call. v4: - Cancel the sdma fence callback on the wait timeout/failure path so it cannot write into the caller's stack after the function returns, and free the callback state in one place. v3: - Resync both rings at connection setup instead of on the send path. - Set the writeback rptr too, the stale value disagrees with the resynced wptr until the remote FW writes it back. v2: - Match the FW change: resync wptr only on the first send or after a timeout, instead of checking the remote periodically. Suggested-by: Felix Kuehling <felix.kuehling@amd.com> Signed-off-by: Philip Yang <Philip.Yang@amd.com> Reviewed-by: Felix Kuehling <felix.kuehling@amd.com> Reviewed-by: Mukul Joshi <mukul.joshi@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'tools/lib/python/kdoc/python_version.py')
0 files changed, 0 insertions, 0 deletions