[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