drm/amdgpu: Add memory partition id to amdgpu_vm
authorPhilip Yang <Philip.Yang@amd.com>
Fri, 24 Feb 2023 00:58:22 +0000 (19:58 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 9 Jun 2023 13:59:56 +0000 (09:59 -0400)
If xcp_mgr is initialized, add mem_id to amdgpu_vm structure to store
memory partition number when creating amdgpu_vm for the xcp. The xcp
number is decided when opening the render device, for example
/dev/dri/renderD129 is xcp_id 0, /dev/dri/renderD130 is xcp_id 1.

Signed-off-by: Philip Yang <Philip.Yang@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.c

index 879718598fa4c97633dc974642e90d550b64ac3e..815098be4c2fd3978ad221c14174235a71590df7 100644 (file)
@@ -1223,10 +1223,6 @@ int amdgpu_driver_open_kms(struct drm_device *dev, struct drm_file *file_priv)
                goto out_suspend;
        }
 
-       r = amdgpu_xcp_open_device(adev, fpriv, file_priv);
-       if (r)
-               return r;
-
        pasid = amdgpu_pasid_alloc(16);
        if (pasid < 0) {
                dev_warn(adev->dev, "No more PASIDs available!");
@@ -1237,6 +1233,10 @@ int amdgpu_driver_open_kms(struct drm_device *dev, struct drm_file *file_priv)
        if (r)
                goto error_pasid;
 
+       r = amdgpu_xcp_open_device(adev, fpriv, file_priv);
+       if (r)
+               goto error_vm;
+
        r = amdgpu_vm_set_pasid(adev, &fpriv->vm, pasid);
        if (r)
                goto error_vm;
index 8add5f5eb92a25234ad92bbe5c4938fd8f70685b..14f9a2bf3acb9a936fe3390e4ce3d196673b96be 100644 (file)
@@ -329,6 +329,9 @@ struct amdgpu_vm {
        struct ttm_lru_bulk_move lru_bulk_move;
        /* Flag to indicate if VM is used for compute */
        bool                    is_compute_context;
+
+       /* Memory partition number, -1 means any partition */
+       int8_t                  mem_id;
 };
 
 struct amdgpu_vm_manager {
index f2981d21d4e0785fc572b3140825ef8b00d98906..610c32c4f5afb9b59e44b20582730e2cc00ddb19 100644 (file)
@@ -364,6 +364,9 @@ int amdgpu_xcp_open_device(struct amdgpu_device *adev,
                        break;
                }
        }
+
+       fpriv->vm.mem_id = fpriv->xcp_id == ~0 ? -1 :
+                               adev->xcp_mgr->xcp[fpriv->xcp_id].mem_id;
        return 0;
 }