From d9f86ae02b8e95feb19974f4ae6a26e093e2abdb Mon Sep 17 00:00:00 2001 From: Alex Sierra Date: Thu, 8 Dec 2022 17:31:35 -0600 Subject: [PATCH] Revert "libhsakmt: query svm info from userptrs at fault events" This reverts commit 45fad297528572deebbf4ddee2fba8251e241980. There are some openMP issues that were introduced after SVM userptr feature was added. Signed-off-by: Alex Sierra Change-Id: I6566c9f0d39d05ecb92f38159880763f432939a5 --- src/events.c | 79 +------------------------- tests/kfdtest/src/KFDExceptionTest.cpp | 48 ---------------- 2 files changed, 2 insertions(+), 125 deletions(-) diff --git a/src/events.c b/src/events.c index 1c5b03dcf2..06d3959532 100644 --- a/src/events.c +++ b/src/events.c @@ -220,80 +220,6 @@ HSAKMT_STATUS HSAKMTAPI hsaKmtWaitOnEvent(HsaEvent *Event, return hsaKmtWaitOnMultipleEvents(&Event, 1, true, Milliseconds); } -static HSAKMT_STATUS get_mem_info_svm_api(uint64_t address, uint32_t gpu_id) -{ - struct kfd_ioctl_svm_args *args; - uint32_t node_id; - HSAuint32 s_attr; - HSAuint32 i; - HSA_SVM_ATTRIBUTE attrs[] = { - {HSA_SVM_ATTR_PREFERRED_LOC, 0}, - {HSA_SVM_ATTR_PREFETCH_LOC, 0}, - {HSA_SVM_ATTR_ACCESS, gpu_id}, - {HSA_SVM_ATTR_SET_FLAGS, 0}, - }; - - CHECK_KFD_OPEN(); - CHECK_KFD_MINOR_VERSION(5); - - s_attr = sizeof(attrs); - args = alloca(sizeof(*args) + s_attr); - args->start_addr = address; - args->size = PAGE_SIZE; - args->op = KFD_IOCTL_SVM_OP_GET_ATTR; - args->nattr = s_attr / sizeof(*attrs); - memcpy(args->attrs, attrs, s_attr); - if (kmtIoctl(kfd_fd, AMDKFD_IOC_SVM + (s_attr << _IOC_SIZESHIFT), args)) { - pr_debug("op get range attrs failed %s\n", strerror(errno)); - return HSAKMT_STATUS_ERROR; - } - - pr_err("GPU address 0x%lx, is Unified memory\n", address); - for (i = 0; i < args->nattr; i++) { - if (args->attrs[i].value == KFD_IOCTL_SVM_LOCATION_SYSMEM || - args->attrs[i].value == KFD_IOCTL_SVM_LOCATION_UNDEFINED) - node_id = args->attrs[i].value; - else - gpuid_to_nodeid(args->attrs[i].value, &node_id); - switch (args->attrs[i].type) { - case KFD_IOCTL_SVM_ATTR_PREFERRED_LOC: - pr_err("Preferred location for address 0x%lx is Node id %d\n", - address, node_id); - break; - case KFD_IOCTL_SVM_ATTR_PREFETCH_LOC: - pr_err("Prefetch location for address 0x%lx is Node id %d\n", - address, node_id); - break; - case KFD_IOCTL_SVM_ATTR_ACCESS: - pr_err("Node id %d has access to address 0x%lx\n", - node_id, address); - break; - case KFD_IOCTL_SVM_ATTR_ACCESS_IN_PLACE: - pr_err("Node id %d has access in place to address 0x%lx\n", - node_id, address); - break; - case KFD_IOCTL_SVM_ATTR_NO_ACCESS: - pr_err("Node id %d has no access to address 0x%lx\n", - node_id, address); - break; - case KFD_IOCTL_SVM_ATTR_SET_FLAGS: - if (args->attrs[i].value & KFD_IOCTL_SVM_FLAG_COHERENT) - pr_err("Fine grained coherency between devices\n"); - if (args->attrs[i].value & KFD_IOCTL_SVM_FLAG_GPU_RO) - pr_err("Read only\n"); - if (args->attrs[i].value & KFD_IOCTL_SVM_FLAG_GPU_EXEC) - pr_err("GPU exec allowed\n"); - if (args->attrs[i].value & KFD_IOCTL_SVM_FLAG_GPU_ALWAYS_MAPPED) - pr_err("GPU always mapped\n"); - break; - default: - pr_debug("get invalid attr type 0x%x\n", args->attrs[i].type); - return HSAKMT_STATUS_ERROR; - } - } - - return HSAKMT_STATUS_SUCCESS; -} //Analysis memory exception data, print debug messages static void analysis_memory_exception(struct kfd_hsa_memory_exception_data * memory_exception_data) @@ -315,10 +241,9 @@ static void analysis_memory_exception(struct kfd_hsa_memory_exception_data * pr_err("Execute to none-executable page\n"); ret = fmm_get_mem_info((const void *)addr, &info); + if (ret != HSAKMT_STATUS_SUCCESS) { - ret = get_mem_info_svm_api(addr, memory_exception_data->gpu_id); - if (ret != HSAKMT_STATUS_SUCCESS) - pr_err("Address does not belong to a known buffer\n"); + pr_err("Address does not belong to a known buffer\n"); return; } diff --git a/tests/kfdtest/src/KFDExceptionTest.cpp b/tests/kfdtest/src/KFDExceptionTest.cpp index 2ca5c6777d..f7c28d8897 100644 --- a/tests/kfdtest/src/KFDExceptionTest.cpp +++ b/tests/kfdtest/src/KFDExceptionTest.cpp @@ -27,7 +27,6 @@ #include "SDMAPacket.hpp" #include "SDMAQueue.hpp" #include "Dispatch.hpp" -#include void KFDExceptionTest::SetUp() { ROUTINE_START @@ -254,53 +253,6 @@ TEST_F(KFDExceptionTest, PermissionFault) { TEST_END } -/* Allocate Read Only user pointer buffer. Test Memory Exception failure by - * attempting to write to that buffer in the child process. - */ -TEST_F(KFDExceptionTest, PermissionFaultUserPointer) { - TEST_REQUIRE_ENV_CAPABILITIES(ENVCAPS_64BITLINUX); - TEST_START(TESTPROFILE_RUNALL) - - int defaultGPUNode = m_NodeInfo.HsaDefaultGPUNode(); - ASSERT_GE(defaultGPUNode, 0) << "failed to get default GPU Node"; - - if (m_FamilyId == FAMILY_RV) { - LOG() << "Skipping test: IOMMU issues on Raven." << std::endl; - return; - } - - m_ChildPid = fork(); - if (m_ChildPid == 0) { - KFDBaseComponentTest::TearDown(); - KFDBaseComponentTest::SetUp(); - - void *pBuf = mmap(NULL, PAGE_SIZE, PROT_READ, - MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); - ASSERT_NE(pBuf, MAP_FAILED); - EXPECT_SUCCESS(hsaKmtRegisterMemory(pBuf, PAGE_SIZE)); - EXPECT_SUCCESS(hsaKmtMapMemoryToGPU(pBuf, PAGE_SIZE, NULL)); - HsaMemoryBuffer srcSysBuffer(PAGE_SIZE, defaultGPUNode, false); - - srcSysBuffer.Fill(0xAA55AA55); - - TestMemoryException(defaultGPUNode, srcSysBuffer.As(), - (HSAuint64)pBuf); - } else { - int childStatus; - - waitpid(m_ChildPid, &childStatus, 0); - if (is_dgpu()) { - EXPECT_EQ(WIFEXITED(childStatus), true); - EXPECT_EQ(WEXITSTATUS(childStatus), HSAKMT_STATUS_SUCCESS); - } else { - EXPECT_EQ(WIFSIGNALED(childStatus), true); - EXPECT_EQ(WTERMSIG(childStatus), SIGSEGV); - } - } - - TEST_END -} - /* Test VM fault storm handling by copying to/from invalid pointers * with lots of work items at the same time */