From 2c1c2cfdf87d7a480df1aca2d045b40e3334a1f6 Mon Sep 17 00:00:00 2001 From: Alex Sierra Date: Mon, 23 Nov 2020 21:00:49 -0600 Subject: [PATCH] libhsakmt: add XNACK API set/get mode XNACK API for GPUs that support this mode. This API makes calls to amdgpu driver to configure xnack mode. It supports set xnack mode and query the current mode used. Change-Id: If865fd0e3f900f008243dc49504e1a0694e1791a Signed-off-by: Alex Sierra [ROCm/ROCR-Runtime commit: 3f45f602d404c77eb0b9e1234e73144bba69c910] --- projects/rocr-runtime/src/libhsakmt.ver | 3 +- projects/rocr-runtime/src/svm.c | 39 +++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/projects/rocr-runtime/src/libhsakmt.ver b/projects/rocr-runtime/src/libhsakmt.ver index 25b3a0b725..8a695a82fd 100644 --- a/projects/rocr-runtime/src/libhsakmt.ver +++ b/projects/rocr-runtime/src/libhsakmt.ver @@ -74,7 +74,8 @@ hsaKmtSetAddressWatch; hsaKmtClearAddressWatch; hsaKmtSVMSetAttr; hsaKmtSVMGetAttr; - +hsaKmtSetXNACKMode; +hsaKmtGetXNACKMode; local: *; }; diff --git a/projects/rocr-runtime/src/svm.c b/projects/rocr-runtime/src/svm.c index d4bf896069..478217259e 100644 --- a/projects/rocr-runtime/src/svm.c +++ b/projects/rocr-runtime/src/svm.c @@ -183,3 +183,42 @@ hsaKmtSVMGetAttr(void *start_addr, HSAuint64 size, unsigned int nattr, return HSAKMT_STATUS_SUCCESS; } + +static HSAKMT_STATUS +hsaKmtSetGetXNACKMode(HSAint32 * enable) +{ + struct kfd_ioctl_set_xnack_mode_args args; + + CHECK_KFD_OPEN(); + + args.xnack_enabled = *enable; + + if (kmtIoctl(kfd_fd, AMDKFD_IOC_SET_XNACK_MODE, &args)) { + if (errno == EPERM) { + pr_debug("set mode not supported %s\n", + strerror(errno)); + return HSAKMT_STATUS_NOT_SUPPORTED; + } else if (errno == EBUSY) { + pr_debug("kmtIoctl queues not empty %s\n", + strerror(errno)); + } + return HSAKMT_STATUS_ERROR; + } + + *enable = args.xnack_enabled; + + return HSAKMT_STATUS_SUCCESS; +} + +HSAKMT_STATUS HSAKMTAPI +hsaKmtSetXNACKMode(HSAint32 enable) +{ + return hsaKmtSetGetXNACKMode(&enable); +} + +HSAKMT_STATUS HSAKMTAPI +hsaKmtGetXNACKMode(HSAint32 * enable) +{ + *enable = -1; + return hsaKmtSetGetXNACKMode(enable); +}