drm/amdkfd: bind cpu and hiveless gpu to a hive if xgmi connected
authorJonathan Kim <jonathan.kim@amd.com>
Thu, 2 Feb 2023 16:10:08 +0000 (11:10 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 9 Jun 2023 13:52:36 +0000 (09:52 -0400)
If a CPU and GPU are xGMI connected but the GPU is hiveless with
respect to other GPUs, create a new CPU-GPU hive using the GPU's PCI
device location ID as the new hive ID to maintain fine grain memory
access usage.

Signed-off-by: Jonathan Kim <jonathan.kim@amd.com>
Reviewed-by: Felix Kuehling <felix.kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdkfd/kfd_topology.c

index 5373a79..c7072ff 100644 (file)
@@ -1328,8 +1328,15 @@ static void kfd_fill_iolink_non_crat_info(struct kfd_topology_device *dev)
 
                /* Include the CPU peer in GPU hive if connected over xGMI. */
                if (!peer_dev->gpu &&
-                   link->iolink_type == CRAT_IOLINK_TYPE_XGMI)
+                   link->iolink_type == CRAT_IOLINK_TYPE_XGMI) {
+                       /*
+                        * If the GPU is not part of a GPU hive, use its pci
+                        * device location as the hive ID to bind with the CPU.
+                        */
+                       if (!dev->node_props.hive_id)
+                               dev->node_props.hive_id = pci_dev_id(dev->gpu->adev->pdev);
                        peer_dev->node_props.hive_id = dev->node_props.hive_id;
+               }
 
                list_for_each_entry(inbound_link, &peer_dev->io_link_props,
                                                                        list) {