wsl/libhsakmt: extract is_ipc_sysmemfd()

Signed-off-by: Flora Cui <flora.cui@amd.com>
Reviewed-by: Tianci Yin <tianci.yin@amd.com>
Part-of: <http://10.67.69.192/wsl/rocr-runtime/-/merge_requests/85>
This commit is contained in:
Flora Cui
2025-06-30 14:14:10 +08:00
کامیت شده توسط Frank Min
والد 5a89405bf8
کامیت 77093f8f85
2فایلهای تغییر یافته به همراه19 افزوده شده و 7 حذف شده
+17 -7
مشاهده پرونده
@@ -427,6 +427,16 @@ HSAKMT_STATUS HSAKMTAPI hsaKmtRegisterMemoryWithFlags(
return HSAKMT_STATUS_SUCCESS;
}
bool is_ipc_sysmemfd(int fd) {
std::string fdPath = "/proc/self/fd/" + std::to_string(fd);
char linkTarget[256];
ssize_t bytes = readlink(fdPath.c_str(), linkTarget, sizeof(linkTarget) - 1);
if (bytes == -1)
return false;
linkTarget[bytes] = '\0';
return strstr(linkTarget, "rocr4wsl_gtt") != nullptr;
}
HSAKMT_STATUS HSAKMTAPI hsaKmtRegisterGraphicsHandleToNodes(HSAuint64 GraphicsResourceHandle,
HsaGraphicsResourceInfo *GraphicsResourceInfo,
HSAuint64 NumberOfNodes,
@@ -457,6 +467,12 @@ HSAKMT_STATUS HSAKMTAPI hsaKmtRegisterGraphicsHandleToNodesExt(HSAuint64 Graphic
NodeArray = (HSAuint32*)&(dxg_runtime->default_node);
}
if (is_ipc_sysmemfd(GraphicsResourceHandle)) {
GraphicsResourceInfo->NodeId = dxg_runtime->default_node;
pr_info("skip register sysmemfd. It would be released in next step\n");
return HSAKMT_STATUS_SUCCESS;
}
GraphicsResourceInfo->NodeId = NodeArray[0];
return hsaKmtImportDMABufHandle(GraphicsResourceHandle,
GraphicsResourceInfo,
@@ -501,13 +517,7 @@ HSAKMT_STATUS hsaKmtImportDMABufHandle(int DMABufFd,
create_info.dmabuf_fd = DMABufFd;
create_info.flags.imported_vram_alloc_va = RegisterFlags.ui32.requiresVAddr;
std::string fdPath = "/proc/self/fd/" + std::to_string(DMABufFd);
char linkTarget[256];
ssize_t bytes = readlink(fdPath.c_str(), linkTarget, sizeof(linkTarget) - 1);
if (bytes == -1)
pr_err("Error reading link\n");
linkTarget[bytes] = '\0';
if (strstr(linkTarget, "rocr4wsl_gtt") != nullptr) {
if (is_ipc_sysmemfd(DMABufFd)) {
struct stat st;
fstat(DMABufFd, &st);
uint64_t sz = st.st_size;