diff --git a/hipamd/include/hip/nvcc_detail/hip_runtime_api.h b/hipamd/include/hip/nvcc_detail/hip_runtime_api.h index ae4d99d787..502d205ac4 100644 --- a/hipamd/include/hip/nvcc_detail/hip_runtime_api.h +++ b/hipamd/include/hip/nvcc_detail/hip_runtime_api.h @@ -876,9 +876,9 @@ inline static hipError_t hipDeviceGetPCIBusId(char* pciBusId,int len,hipDevice_t return hipCUDAErrorTohipError(cudaDeviceGetPCIBusId(pciBusId,len,device)); } -inline static hipError_t hipDeviceGetByPCIBusId(int* device, const int *pciBusId) +inline static hipError_t hipDeviceGetByPCIBusId(int* device, const char *pciBusId) { - return hipCUDAErrorTohipError(cudaDeviceGetByPCIBusId(device,(char*)pciBusId)); + return hipCUDAErrorTohipError(cudaDeviceGetByPCIBusId(device, pciBusId)); } inline static hipError_t hipDeviceGetLimit(size_t *pValue, hipLimit_t limit) diff --git a/hipamd/src/hip_device.cpp b/hipamd/src/hip_device.cpp index 62518a1ba7..66c6c7db5f 100644 --- a/hipamd/src/hip_device.cpp +++ b/hipamd/src/hip_device.cpp @@ -399,17 +399,25 @@ hipError_t hipDeviceGetByPCIBusId (int* device, const int* pciBusId ) { HIP_INIT_API(device,pciBusId); hipDeviceProp_t tempProp; - int deviceCount; + int deviceCount = 0 ; hipError_t e = hipErrorInvalidValue; - ihipGetDeviceCount( &deviceCount ); - *device = 0; - for (int i = 0; i< deviceCount; i++) { - ihipGetDeviceProperties( &tempProp, i ); - if(tempProp.pciBusID == *pciBusId) { - *device =i; - e = hipSuccess; - break; - } + if((device != nullptr) && (pciBusId != nullptr)) { + int pciBusID = -1; + int pciDeviceID = -1; + int pciDomainID = -1; + int len = 0; + len = sscanf (pciBusId,"%04x:%02x:%02x",&pciDomainID,&pciBusID,&pciDeviceID); + if(len == 3) { + ihipGetDeviceCount( &deviceCount ); + for (int i = 0; i< deviceCount; i++) { + ihipGetDeviceProperties( &tempProp, i ); + if(tempProp.pciBusID == pciBusID) { + *device = i; + e = hipSuccess; + break; + } + } + } } return ihipLogStatus(e); }