drm/amdgpu: find partition ID when open device
Find partition ID when open device from render device minor. Signed-off-by: Christian König <christian.koenig@amd.com> Signed-off-by: James Zhu <James.Zhu@amd.com> Reviewed-and-tested-by: Philip Yang<Philip.Yang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
2c1c7ba457
commit
be3800f57c
|
@ -467,6 +467,8 @@ struct amdgpu_fpriv {
|
|||
struct mutex bo_list_lock;
|
||||
struct idr bo_list_handles;
|
||||
struct amdgpu_ctx_mgr ctx_mgr;
|
||||
/** GPU partition selection */
|
||||
uint32_t xcp_id;
|
||||
};
|
||||
|
||||
int amdgpu_file_to_fpriv(struct file *filp, struct amdgpu_fpriv **fpriv);
|
||||
|
|
|
@ -1223,6 +1223,10 @@ 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!");
|
||||
|
|
|
@ -335,3 +335,32 @@ void amdgpu_xcp_dev_unplug(struct amdgpu_device *adev)
|
|||
drm_dev_unplug(adev->xcp_mgr->xcp[i].ddev);
|
||||
}
|
||||
|
||||
int amdgpu_xcp_open_device(struct amdgpu_device *adev,
|
||||
struct amdgpu_fpriv *fpriv,
|
||||
struct drm_file *file_priv)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!adev->xcp_mgr)
|
||||
return 0;
|
||||
|
||||
fpriv->xcp_id = ~0;
|
||||
for (i = 0; i < MAX_XCP; ++i) {
|
||||
if (!adev->xcp_mgr->xcp[i].ddev)
|
||||
break;
|
||||
|
||||
if (file_priv->minor == adev->xcp_mgr->xcp[i].ddev->render) {
|
||||
if (adev->xcp_mgr->xcp[i].valid == FALSE) {
|
||||
dev_err(adev->dev, "renderD%d partition %d not valid!",
|
||||
file_priv->minor->index, i);
|
||||
return -ENOENT;
|
||||
}
|
||||
dev_dbg(adev->dev, "renderD%d partition %d openned!",
|
||||
file_priv->minor->index, i);
|
||||
fpriv->xcp_id = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -119,6 +119,9 @@ int amdgpu_xcp_get_inst_details(struct amdgpu_xcp *xcp,
|
|||
int amdgpu_xcp_dev_register(struct amdgpu_device *adev,
|
||||
const struct pci_device_id *ent);
|
||||
void amdgpu_xcp_dev_unplug(struct amdgpu_device *adev);
|
||||
int amdgpu_xcp_open_device(struct amdgpu_device *adev,
|
||||
struct amdgpu_fpriv *fpriv,
|
||||
struct drm_file *file_priv);
|
||||
|
||||
static inline int amdgpu_xcp_get_num_xcp(struct amdgpu_xcp_mgr *xcp_mgr)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue