[PATCH] drm/amdgpu: Update latest xgmi topology info after each device is enumulated

Quan, Evan Evan.Quan at amd.com
Tue Apr 30 02:15:35 UTC 2019


Acked-by: Evan Quan <evan.quan at amd.com>

> -----Original Message-----
> From: amd-gfx <amd-gfx-bounces at lists.freedesktop.org> On Behalf Of Liu,
> Shaoyun
> Sent: 2019年4月30日 3:20
> To: amd-gfx at lists.freedesktop.org
> Cc: Liu, Shaoyun <Shaoyun.Liu at amd.com>
> Subject: [PATCH] drm/amdgpu: Update latest xgmi topology info after each
> device is enumulated
> 
> [CAUTION: External Email]
> 
> Adjust the sequence of set/get xgmi topology, so driver can have the latest
> XGMI topology info for future usage
> 
> Change-Id: I627814f82459a6c9c3d72469f81309488b2a9133
> Signed-off-by: shaoyunl <shaoyun.liu at amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c | 32
> ++++++++++++++++++++------------
>  1 file changed, 20 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c
> index 04dfc8b..e48e939 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c
> @@ -301,30 +301,41 @@ int amdgpu_xgmi_add_device(struct
> amdgpu_device *adev)
>         list_add_tail(&adev->gmc.xgmi.head, &hive->device_list);
>         list_for_each_entry(entry, &hive->device_list, head)
>                 top_info->nodes[count++].node_id = entry->node_id;
> +       top_info->num_nodes = count;
>         hive->number_devices = count;
> 
> -       /* Each psp need to get the latest topology */
>         list_for_each_entry(tmp_adev, &hive->device_list, gmc.xgmi.head) {
> -               ret = psp_xgmi_get_topology_info(&tmp_adev->psp, count,
> top_info);
> +               /* update node list for other device in the hive */
> +               if (tmp_adev != adev) {
> +                       top_info = &tmp_adev->psp.xgmi_context.top_info;
> +                       top_info->nodes[count - 1].node_id = adev->gmc.xgmi.node_id;
> +                       top_info->num_nodes = count;
> +               }
> +               ret = amdgpu_xgmi_update_topology(hive, tmp_adev);
> +               if (ret)
> +                       goto exit;
> +       }
> +
> +       /* get latest topology info for each device from psp */
> +       list_for_each_entry(tmp_adev, &hive->device_list, gmc.xgmi.head) {
> +               ret = psp_xgmi_get_topology_info(&tmp_adev->psp, count,
> +                               &tmp_adev->psp.xgmi_context.top_info);
>                 if (ret) {
>                         dev_err(tmp_adev->dev,
>                                 "XGMI: Get topology failure on device %llx, hive %llx, ret %d",
>                                 tmp_adev->gmc.xgmi.node_id,
>                                 tmp_adev->gmc.xgmi.hive_id, ret);
>                         /* To do : continue with some node failed or disable the whole
> hive */
> -                       break;
> +                       goto exit;
>                 }
>         }
> 
> -       list_for_each_entry(tmp_adev, &hive->device_list, gmc.xgmi.head) {
> -               ret = amdgpu_xgmi_update_topology(hive, tmp_adev);
> -               if (ret)
> -                       break;
> -       }
> -
>         if (!ret)
>                 ret = amdgpu_xgmi_sysfs_add_dev_info(adev, hive);
> 
> +
> +       mutex_unlock(&hive->hive_lock);
> +exit:
>         if (!ret)
>                 dev_info(adev->dev, "XGMI: Add node %d, hive 0x%llx.\n",
>                          adev->gmc.xgmi.physical_node_id, adev->gmc.xgmi.hive_id);
> @@ -333,9 +344,6 @@ int amdgpu_xgmi_add_device(struct amdgpu_device
> *adev)
>                         adev->gmc.xgmi.physical_node_id, adev->gmc.xgmi.hive_id,
>                         ret);
> 
> -
> -       mutex_unlock(&hive->hive_lock);
> -exit:
>         return ret;
>  }
> 
> --
> 2.7.4
> 
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


More information about the amd-gfx mailing list