Re: [PATCH 00/95] Add UALink instrastructure series 1

Philip Yang <[email protected]>
Newsgroups org.freedesktop.lists.amd-gfx
Message-ID <[email protected]>
Two nitpicks below.

Regards,
Philip

On 2026-08-21 15:33, Alex Deucher wrote:
> This adds the core infrastructure for supporting UALink (Ultra Accelerator Link)
> connected scale up pods. I've split this into two series, one to add the core
> infrastructure, and one to expose the new IOCTL interface and add the
> documentation to avoid spamming the larger audience with the implemenation
> defails.  This is the first series.
>
> This implements UALoE (UALink over Ethernet). An overview of the complete
> solution can be found here:
> https://www.amd.com/en/products/rackscale-solutions/helios.html
>
> Overview
>
> Connected GPUs in a pod can directly access the remove memory on another
s/remove/remote/
> GPU over UALink.  Unlike RMDA, there is no copy involved; it is direct
> loads/stores over the fabric.  Shared memory can only be accessed by
> a remote GPU if the memory was exported and the importer has been authorized.
> For the memory to be shared, it must be part of a unified physical
> address space shared between nodes.  This address space is called NPA (Nework
> Physical Address) space.  This address space is partitioned between
> the GPUs so that each GPU has it's own segment of the address space in which
> to export its memory.  Each GPU maintains a dedicated set of page tables
> for their NPA space similar to GPUVM.
>
> Exported memory is not pinned.  The exporter may need to move memory
> or make it unavailable to the importers.  This is handled via remote
> TLB shootdowns on the exporter in the case of TTM evictions or MMU notifiers and
> remote presense checks with retry on the importer.
>
> To access remote memory, the driver can map NPA addresses into its per
> process GPUVM page tables just like local memory.  Applications use
> opaque handles to represent remote memory.  GPUs in a pod communicate
> with eachother directly to exchange NPA addresses between importers
s/eachother/each other/
> and exporters.  If a node goes offline or is reset, their peers will
> clean up any remaining refrences that are lost when that happens.
>
> User interface
>
> Export Memory
>
> To export memory, a handle must be created for an allocation
> that can be shared with another node in the pod.  To do this
> the exporter calls the GEM UALink IOCTL with the GEM handle
> to the buffer it wants to export.  The IOCTL returns a
> unique handle which can be shared with the remote host.
>
> Import Memory
>
> To import the memory, the handle from the remote node must be converted
> from a unique handle to a local GEM object which represents the local reference
> to the NPA space on the importer.  If the memory has already been
> imported, it just returns a new reference to the existing object.  If not,
> the importer queries the exporter to get the NPA address.  Once it has that
> the importer can create a dma-buf to represent the NPA space used by the
> allocation and that is returned to the application.
>
> Alex Sierra (1):
>    drm/amdgpu: log remote memory MTYPE for GC 12.1.0
>
> Felix Kuehling (17):
>    drm/amdgpu: Add sysfs API for UALink information
>    drm/amdgpu: Add sysfs API for UALink physical pod setup
>    drm/amdgpu: Add sysfs API for UALink virtual pod config
>    drm/amdgpu: Add sysfs API for UALink station configuration
>    drm/amdgpu: Implement PSP cmd UAL_GET_CONFIG
>    drm/amdgpu: Query initial UALink config from PSP
>    drm/amdgpu: Implement PSP cmd UAL_SET_PPOD_CONFIG
>    drm/amdgpu: Set physical pod configuration to PSP
>    drm/amdgpu: Implement PSP cmd UAL_SET_VPOD_CONFIG
>    drm/amdgpu: Set virtual pod configuration to PSP
>    drm/amdgpu: Implement PSP cmd UAL_SET_STATION_CONFIG
>    drm/amdgpu: Set UALink station config to PSP
>    drm/amdgpu: Implement PSP cmd UAL_SET_NPA_CONFIG
>    drm/amdgpu: Enable/disable NPA address translation using PSP
>    drm/amdgpu: Prevent double-free of drm_exec
>    drm/amdgpu: Pin page tables in NPA VMs
>    drm/amdgpu: Initialize NPA PT/PDs to noretry
>
> Gangliang Xie (1):
>    drm/amdgpu: add handler for nHT error
>
> Harish Kasiviswanathan (2):
>    drm/amdgpu: Add helper function to check psp xgmi ta
>    drm/amdgpu: Add ual_config_state to ual_get_config
>
> Jinzhou Su (1):
>    drm/amdgpu: Fix NULL pointer issue during ualink init
>
> Le Ma (1):
>    drm/amdgpu: extend PSP command polling sleep range
>
> Lijo Lazar (15):
>    drm/amdgpu: Add psp ualink command interfaces
>    drm/amdgpu: Fetch asp ualink interface version
>    drm/amdgpu: Separate out ualink init sequences
>    drm/amdgpu: Add ualink as separate ip block
>    drm/admgpu: Seggregate ualink nht messaging
>    drm/amdgpu: Assign accel state based on ASP config
>    drm/amdgpu: Drop duplicate vpod check functions
>    drm/amdgpu: Add support to send ASP completion
>    drm/amdgpu: Add handlers for ualink notifications
>    drm/amdgpu: Improve ualink state transitions
>    drm/amdgpu: Use uniform logic for inband/sideband
>    drm/amdgpu: Add name for ualink ip block
>    drm/amdgpu: Move ualink ip version related changes
>    drm/amdgpu: Add hw_fini for ualink
>    drm/amdgpu: Expose ualink info under each xcp
>
> Mukul Joshi (42):
>    drm/amdgpu: Add UALink manager core infrastructure
>    drm/amdgpu: Add a new NPA Address space
>    drm/amdgpu: Add address allocator for NPA addresses
>    drm/amdgpu: Initialize VM for NPA addr management
>    drm/amdgpu: Rework VMID reservation logic
>    drm/amdgpu: Reserve VMID for NPA VM
>    drm/amdgpu: Use reserved VMID for NPA VM
>    drm/amdgpu: Enable UALink Manager when pod becomes active
>    drm/amdgpu: Create a drm client for UALink NPA BOs
>    drm/amdgpu: Control NPA DMA-buf importing
>    drm/amdgpu: Add ualink handle to BOs
>    drm/amdgpu: Implement UALink handle export
>    drm/amdgpu: Add connection state management
>    drm/amdgpu: Implement UALink handle import ioctl
>    drm/amdgpu: Implement mechanism to revoke exported memory
>    drm/amdgpu: lock UALink import invalidation via drm_exec
>    drm/amdgpu: Cleanup exported UALink handles
>    drm/amdgpu: Cleanup imported UALink handles
>    drm/amdgpu: Handle connection reset
>    drm/amdgpu: Setup PTE mappings for NPA addresses
>    drm/amdgpu: Add handling for remote interrupts
>    drm/amdgpu: Send TLB shootdown on exported memory unmap
>    drm/amdgpu: Handle local GPUs in UALink import
>    drm/amdgpu: Add debugfs to drop UALink protocol messages
>    drm/amdgpu: Temporarily disable sending remote TLB shootdowns
>    drm/amdgpu: Temporarily Flush TLB on NPA mapping always
>    drm/amdgpu: fix NPA-RELEASE race in UALink exporter cleanup
>    drm/amdgpu: initialize UALink importer node list head
>    drm/amdgpu: Fix initialization flags for UALink XAs
>    drm/amdgpu: fix dma_buf leak in UALink exporter cleanup
>    drm/amdgpu: Fix uninitialized fence in UALink NPA unmap
>    drm/amdgpu: Use vm->last_update fence in UALink NPA unmap paths
>    drm/amdgpu: always use MTYPE_UC for remote memory on GFX 12.1
>    drm/amdkfd: program compute MQD coherent_aql_mtype on GFX 12.1
>    drm/amdgpu: Fix GART and SDMA entity leak on vPod reconfiguration
>    drm/amdgpu: Add UALink diagnostic logging for vpod commit/activation
>    drm/amdgpu: Handle UALink vPod reconfiguration while ACTIVE
>    drm/amdgpu: Cleanup UALink XA entries on manager stop
>    drm/amdgpu: Handle concurrent UALINK handle import race
>    drm/amdgpu: create UALink NPA import BO directly in the NPA domain
>    drm/amdgpu: add mtype_remote module parameter
>    drm/amdgpu: Honor mtype overrides for NPA remote memory
>
> Philip Yang (15):
>    drm/amdgpu: Fix UALink vPod double-activation
>    drm/amdgpu: Add UALink remote state structures and API declarations
>    drm/amdgpu: Add UALink NPA address layout helpers
>    drm/amdgpu: Add UALink NPA address computation for ring buffers
>    drm/amdgpu: Add UALink NPA VM mapping for ring buffers
>    drm/amdgpu: Add UALink SDMA scheduler entities
>    drm/amdgpu: Add UALink GART helpers for NPA address access
>    drm/amdgpu: Add UALink ring buffer allocation and firmware init
>    drm/amdgpu: Add UALink remote command packets and SDMA dispatch
>    drm/amdgpu: Add UALink firmware writeback address configuration
>    drm/amdgpu: Add UALink cross-GPU TLB shootdown and remote interrupt
>    drm/amdgpu: Add UALink software init, teardown, and reset
>    drm/amdgpu: Add UALink IH ring and enable interrupt
>    drm/amdgpu: UALink use LSDMA to send remote interrupt command
>    drm/amdgpu: Increase UALink soft ring size
>
>   drivers/gpu/drm/amd/amdgpu/Makefile           |    3 +
>   drivers/gpu/drm/amd/amdgpu/amdgpu.h           |    5 +
>   drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c   |   14 +
>   drivers/gpu/drm/amd/amdgpu/amdgpu_device.c    |    2 +
>   drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c |   21 +
>   drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c   |    5 +
>   drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c       |    7 +
>   drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h       |    1 +
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c       |   33 +-
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ids.h       |   27 +-
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ih.h        |    1 +
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ip.c        |    1 +
>   drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c       |   17 +
>   drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h       |    7 +-
>   drivers/gpu/drm/amd/amdgpu/amdgpu_object.c    |   11 +
>   drivers/gpu/drm/amd/amdgpu/amdgpu_object.h    |    5 +
>   drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c       |  280 +-
>   drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h       |   27 +
>   .../gpu/drm/amd/amdgpu/amdgpu_res_cursor.h    |    1 +
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c       |   17 +-
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h       |    4 +-
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.c    | 6174 +++++++++++++++++
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.h    |  421 ++
>   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c        |   44 +-
>   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h        |    4 +
>   drivers/gpu/drm/amd/amdgpu/amdgpu_vm_pt.c     |   29 +-
>   drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.c       |    6 +
>   drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.h       |    7 +
>   drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c        |    2 +-
>   drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c        |    2 +-
>   drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c        |    2 +-
>   drivers/gpu/drm/amd/amdgpu/gfx_v12_1.c        |   51 +-
>   drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c         |    2 +-
>   drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c         |    2 +-
>   drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c         |    2 +-
>   drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c       |    2 +-
>   drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c        |    4 +
>   drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c        |    5 +
>   drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c        |   26 +-
>   drivers/gpu/drm/amd/amdgpu/gmc_v12_1.c        |   98 +-
>   drivers/gpu/drm/amd/amdgpu/gmc_v12_1.h        |    1 +
>   drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c         |    6 +
>   drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c         |    6 +
>   drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c         |    6 +
>   drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c         |    6 +
>   drivers/gpu/drm/amd/amdgpu/ih_v7_0.c          |    8 +
>   drivers/gpu/drm/amd/amdgpu/psp_gfx_if.h       |  162 +
>   drivers/gpu/drm/amd/amdgpu/psp_v15_0_8.c      |   48 +-
>   drivers/gpu/drm/amd/amdgpu/soc_v1_0.c         |    6 -
>   drivers/gpu/drm/amd/amdgpu/ualink_v1_0.c      |  143 +
>   drivers/gpu/drm/amd/amdgpu/ualink_v1_0.h      |   30 +
>   .../drm/amd/amdkfd/kfd_mqd_manager_v12_1.c    |    7 +
>   drivers/gpu/drm/amd/amdkfd/kfd_svm.c          |    8 +-
>   drivers/gpu/drm/amd/include/amd_shared.h      |    2 +
>   .../ivsrcid/mpnht/irqsrcs_mpnht_15_0.h        |   30 +
>   drivers/gpu/drm/amd/include/v12_structs.h     |    2 +-
>   include/drm/ttm/ttm_resource.h                |    2 +-
>   include/uapi/drm/amdgpu_drm.h                 |    6 +
>   58 files changed, 7782 insertions(+), 69 deletions(-)
>   create mode 100644 drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.c
>   create mode 100644 drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.h
>   create mode 100644 drivers/gpu/drm/amd/amdgpu/ualink_v1_0.c
>   create mode 100644 drivers/gpu/drm/amd/amdgpu/ualink_v1_0.h
>   create mode 100644 drivers/gpu/drm/amd/include/ivsrcid/mpnht/irqsrcs_mpnht_15_0.h
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.