Fix NV2080_CTRL_CMD_GPU_GET_PID_INFO don't work correctly in container

When call nvmlDeviceGetComputeRunningProcesses_v3() in container,
the pid returned is convert by _gpuConvertPid, and will get the
pid which is inside the namespace, but not
the globle one. When user use the pid to call
NV2080_CTRL_CMD_GPU_GET_PID_INFO, we do not do that fasion
translation, just compare it with ProcID, this leads users
get NULL data inside container.

To fix this issue, just keep the same, do the translation,
so that apps could get the pid data.

Signed-off-by: Michael Qiu <qdy220091330@gmail.com>
This commit is contained in:
Michael Qiu 2024-03-22 13:50:55 +08:00
parent 3bf16b890c
commit 2593e72fc9

View File

@ -966,6 +966,7 @@ gpuFindClientInfoWithPidIterator_IMPL
Heap *pHeap = GPU_GET_HEAP(pGpu); Heap *pHeap = GPU_GET_HEAP(pGpu);
NvU32 computeInstanceId = PARTITIONID_INVALID; NvU32 computeInstanceId = PARTITIONID_INVALID;
NvU32 gpuInstanceId = PARTITIONID_INVALID; NvU32 gpuInstanceId = PARTITIONID_INVALID;
NvU32 nspid;
NV_ASSERT_OR_RETURN(RMCFG_FEATURE_KERNEL_RM, NV_ERR_NOT_SUPPORTED); NV_ASSERT_OR_RETURN(RMCFG_FEATURE_KERNEL_RM, NV_ERR_NOT_SUPPORTED);
NV_ASSERT_OR_RETURN((pid != 0), NV_ERR_INVALID_ARGUMENT); NV_ASSERT_OR_RETURN((pid != 0), NV_ERR_INVALID_ARGUMENT);
@ -979,8 +980,11 @@ gpuFindClientInfoWithPidIterator_IMPL
pClient = *ppClient; pClient = *ppClient;
pRsClient = staticCast(pClient, RsClient); pRsClient = staticCast(pClient, RsClient);
if (((subPid == 0) && (pClient->ProcID == pid)) || if(_gpuConvertPid(pClient, &nspid) != NV_OK)
((subPid != 0) && (pClient->ProcID == pid) && (pClient->SubProcessID == subPid))) nspid = pClient->ProcID;
if (((subPid == 0) && (nspid == pid)) ||
((subPid != 0) && (nspid == pid) && (pClient->SubProcessID == subPid)))
{ {
RS_PRIV_LEVEL privLevel = rmclientGetCachedPrivilege(pClient); RS_PRIV_LEVEL privLevel = rmclientGetCachedPrivilege(pClient);
RS_ITERATOR it; RS_ITERATOR it;