[PATCH] drm/amdkfd: simplify cpu hive assignment
Felix Kuehling
felix.kuehling at amd.com
Mon May 16 19:35:15 UTC 2022
Am 2022-05-16 um 10:43 schrieb Jonathan Kim:
> CPU hive assignment currently assumes when a GPU hive is connected_to_cpu,
> there is only one hive in the system.
>
> Only assign CPUs to the hive if they are explicitly directly connected to
> the GPU hive to get rid of the need for this assumption.
>
> It's more efficient to do this when querying IO links since other non-CRAT
> info has to be filled in anyways. Also, stop re-assigning the
> same CPU to the same GPU hive if it has already been done before.
>
> Signed-off-by: Jonathan Kim <jonathan.kim at amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling at amd.com>
> ---
> drivers/gpu/drm/amd/amdkfd/kfd_topology.c | 22 ++++++----------------
> 1 file changed, 6 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
> index 2e20f54bb147..8d50d207cf66 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
> @@ -1271,6 +1271,12 @@ static void kfd_fill_iolink_non_crat_info(struct kfd_topology_device *dev)
> if (!peer_dev)
> continue;
>
> + /* Include the CPU peer in GPU hive if connected over xGMI. */
> + if (!peer_dev->gpu && !peer_dev->node_props.hive_id &&
> + dev->node_props.hive_id &&
> + dev->gpu->adev->gmc.xgmi.connected_to_cpu)
> + peer_dev->node_props.hive_id = dev->node_props.hive_id;
> +
> list_for_each_entry(inbound_link, &peer_dev->io_link_props,
> list) {
> if (inbound_link->node_to != link->node_from)
> @@ -1302,22 +1308,6 @@ int kfd_topology_add_device(struct kfd_dev *gpu)
>
> pr_debug("Adding new GPU (ID: 0x%x) to topology\n", gpu_id);
>
> - /* Include the CPU in xGMI hive if xGMI connected by assigning it the hive ID. */
> - if (gpu->hive_id && gpu->adev->gmc.xgmi.connected_to_cpu) {
> - struct kfd_topology_device *top_dev;
> -
> - down_read(&topology_lock);
> -
> - list_for_each_entry(top_dev, &topology_device_list, list) {
> - if (top_dev->gpu)
> - break;
> -
> - top_dev->node_props.hive_id = gpu->hive_id;
> - }
> -
> - up_read(&topology_lock);
> - }
> -
> /* Check to see if this gpu device exists in the topology_device_list.
> * If so, assign the gpu to that device,
> * else create a Virtual CRAT for this gpu device and then parse that
More information about the amd-gfx
mailing list