[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