Re: [PATCH] drm/amdkfd: Fix EXT_COHERENT memory allocation crash

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



[AMD Official Use Only - General]


> If there is no VRAM domain, bo_node is NULL and this causes crash. Move
> ​the EXT_COHERENT support change to VRAM domain path.

> Need another patch to support override PTE flag on APU.

> Fixes: 55d7e2001c7e ("drm/amdgpu: Add EXT_COHERENT memory allocation flags")
> Signed-off-by: Philip Yang <Philip.Yang@xxxxxxx>
> ---
>  drivers/gpu/drm/amd/amdkfd/kfd_svm.c | 14 ++++++--------
>  1 file changed, 6 insertions(+), 8 deletions(-)

> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
> index 0d88698ae33f..150a3e88691d 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
> @@ -1252,19 +1252,17 @@ svm_range_get_pte_flags(struct kfd_node *node,
>                 snoop = true;
>                 if (uncached) {
>                         mapping_flags |= AMDGPU_VM_MTYPE_UC;
> -               } else if (ext_coherent) {
> -                       /* local HBM region close to partition */
> -                       if (bo_node->adev == node->adev &&
> -                           (!bo_node->xcp || !node->xcp || bo_node->xcp->mem_id == node->xcp->mem_id))
> -                               mapping_flags |= AMDGPU_VM_MTYPE_CC;
> -                       else
> -                               mapping_flags |= AMDGPU_VM_MTYPE_UC;
>                } else if (domain == SVM_RANGE_VRAM_DOMAIN) {
>                         /* local HBM region close to partition */
>                         if (bo_node->adev == node->adev &&
>                             (!bo_node->xcp || !node->xcp || bo_node->xcp->mem_id == node->xcp->mem_id))
> -                               mapping_flags |= mtype_local;
> +                               if (ext_coherent)
> +                                       mapping_flags |= AMDGPU_VM_MTYPE_CC;
> +                               else
> +                                       mapping_flags |= mtype_local;

This if statement is more than one line long, so it should have "{}".

>                         /* local HBM region far from partition or remote XGMI GPU */
> +                       else if (ext_coherent)
> +                               mapping_flags |= AMDGPU_VM_MTYPE_UC;
>                         else if (svm_nodes_in_same_hive(bo_node, node))
>                                 mapping_flags |= AMDGPU_VM_MTYPE_NC;
>                         /* PCIe P2P */

From: amd-gfx <amd-gfx-bounces@xxxxxxxxxxxxxxxxxxxxx> on behalf of Philip Yang <Philip.Yang@xxxxxxx>
Sent: Tuesday, October 3, 2023 12:57 PM
To: amd-gfx@xxxxxxxxxxxxxxxxxxxxx <amd-gfx@xxxxxxxxxxxxxxxxxxxxx>
Cc: Yang, Philip <Philip.Yang@xxxxxxx>; Kuehling, Felix <Felix.Kuehling@xxxxxxx>
Subject: [PATCH] drm/amdkfd: Fix EXT_COHERENT memory allocation crash
 
Caution: This message originated from an External Source. Use proper caution when opening attachments, clicking links, or responding.


If there is no VRAM domain, bo_node is NULL and this causes crash. Move
the EXT_COHERENT support change to VRAM domain path.

Need another patch to support override PTE flag on APU.

Fixes: 55d7e2001c7e ("drm/amdgpu: Add EXT_COHERENT memory allocation flags")
Signed-off-by: Philip Yang <Philip.Yang@xxxxxxx>
---
 drivers/gpu/drm/amd/amdkfd/kfd_svm.c | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
index 0d88698ae33f..150a3e88691d 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
@@ -1252,19 +1252,17 @@ svm_range_get_pte_flags(struct kfd_node *node,
                snoop = true;
                if (uncached) {
                        mapping_flags |= AMDGPU_VM_MTYPE_UC;
-               } else if (ext_coherent) {
-                       /* local HBM region close to partition */
-                       if (bo_node->adev == node->adev &&
-                           (!bo_node->xcp || !node->xcp || bo_node->xcp->mem_id == node->xcp->mem_id))
-                               mapping_flags |= AMDGPU_VM_MTYPE_CC;
-                       else
-                               mapping_flags |= AMDGPU_VM_MTYPE_UC;
                } else if (domain == SVM_RANGE_VRAM_DOMAIN) {
                        /* local HBM region close to partition */
                        if (bo_node->adev == node->adev &&
                            (!bo_node->xcp || !node->xcp || bo_node->xcp->mem_id == node->xcp->mem_id))
-                               mapping_flags |= mtype_local;
+                               if (ext_coherent)
+                                       mapping_flags |= AMDGPU_VM_MTYPE_CC;
+                               else
+                                       mapping_flags |= mtype_local;
                        /* local HBM region far from partition or remote XGMI GPU */
+                       else if (ext_coherent)
+                               mapping_flags |= AMDGPU_VM_MTYPE_UC;
                        else if (svm_nodes_in_same_hive(bo_node, node))
                                mapping_flags |= AMDGPU_VM_MTYPE_NC;
                        /* PCIe P2P */
--
2.35.1


[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux