rocr: Make Open() and Close() virtual in Driver

Change-Id: Iac054c08383b080ca2b2ec6d65019bf2f083b763
Этот коммит содержится в:
Tony Gutierrez
2024-11-08 16:40:21 -08:00
коммит произвёл David Yat Sin
родитель 8bbc44d51b
Коммит 77fa5af618
7 изменённых файлов: 40 добавлений и 32 удалений
-25
Просмотреть файл
@@ -42,9 +42,6 @@
#include "core/inc/driver.h"
#include <fcntl.h>
#include <unistd.h>
#include "inc/hsa.h"
namespace rocr {
@@ -54,27 +51,5 @@ Driver::Driver(DriverType kernel_driver_type, std::string devnode_name)
: kernel_driver_type_(std::move(kernel_driver_type)),
devnode_name_(std::move(devnode_name)) {}
hsa_status_t Driver::Open()
{
fd_ = open(devnode_name_.c_str(), O_RDWR | O_CLOEXEC);
if (fd_ < 0) {
return HSA_STATUS_ERROR_OUT_OF_RESOURCES;
}
return HSA_STATUS_SUCCESS;
}
hsa_status_t Driver::Close()
{
int ret(0);
if (fd_ > 0) {
ret = close(fd_);
fd_ = -1;
}
if (ret) {
return HSA_STATUS_ERROR;
}
return HSA_STATUS_SUCCESS;
}
} // namespace core
} // namespace rocr
+13 -2
Просмотреть файл
@@ -64,8 +64,9 @@ KfdDriver::KfdDriver(std::string devnode_name)
hsa_status_t KfdDriver::Init() { return HSA_STATUS_SUCCESS; }
hsa_status_t KfdDriver::DiscoverDriver() {
if (hsaKmtOpenKFD() == HSAKMT_STATUS_SUCCESS) {
std::unique_ptr<Driver> kfd_drv(new KfdDriver("/dev/kfd"));
std::unique_ptr<Driver> kfd_drv(new KfdDriver("/dev/kfd"));
if (kfd_drv->Open() == HSA_STATUS_SUCCESS) {
core::Runtime::runtime_singleton_->RegisterDriver(kfd_drv);
return HSA_STATUS_SUCCESS;
}
@@ -76,6 +77,16 @@ hsa_status_t KfdDriver::QueryKernelModeDriver(core::DriverQuery query) {
return HSA_STATUS_SUCCESS;
}
hsa_status_t KfdDriver::Open() {
return hsaKmtOpenKFD() == HSAKMT_STATUS_SUCCESS ? HSA_STATUS_SUCCESS
: HSA_STATUS_ERROR;
}
hsa_status_t KfdDriver::Close() {
return hsaKmtCloseKFD() == HSAKMT_STATUS_SUCCESS ? HSA_STATUS_SUCCESS
: HSA_STATUS_ERROR;
}
hsa_status_t KfdDriver::GetAgentProperties(core::Agent &agent) const {
return HSA_STATUS_SUCCESS;
}
+21
Просмотреть файл
@@ -42,6 +42,7 @@
#include "core/inc/amd_xdna_driver.h"
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
@@ -100,6 +101,26 @@ hsa_status_t XdnaDriver::QueryKernelModeDriver(core::DriverQuery query) {
return HSA_STATUS_SUCCESS;
}
hsa_status_t XdnaDriver::Open() {
fd_ = open(devnode_name_.c_str(), O_RDWR | O_CLOEXEC);
if (fd_ < 0) {
return HSA_STATUS_ERROR_OUT_OF_RESOURCES;
}
return HSA_STATUS_SUCCESS;
}
hsa_status_t XdnaDriver::Close() {
int ret(0);
if (fd_ > 0) {
ret = close(fd_);
fd_ = -1;
}
if (ret) {
return HSA_STATUS_ERROR;
}
return HSA_STATUS_SUCCESS;
}
hsa_status_t XdnaDriver::GetAgentProperties(core::Agent &agent) const {
if (agent.device_type() != core::Agent::DeviceType::kAmdAieDevice) {
return HSA_STATUS_ERROR_INVALID_AGENT;
+2
Просмотреть файл
@@ -68,6 +68,8 @@ public:
hsa_status_t Init() override;
hsa_status_t QueryKernelModeDriver(core::DriverQuery query) override;
hsa_status_t Open() override;
hsa_status_t Close() override;
hsa_status_t GetAgentProperties(core::Agent &agent) const override;
hsa_status_t
GetMemoryProperties(uint32_t node_id,
+2
Просмотреть файл
@@ -142,6 +142,8 @@ public:
std::unordered_map<uint32_t, void*>& GetHandleMappings();
std::unordered_map<void*, uint32_t>& GetAddrMappings();
hsa_status_t Open() override;
hsa_status_t Close() override;
hsa_status_t GetAgentProperties(core::Agent &agent) const override;
hsa_status_t
GetMemoryProperties(uint32_t node_id,
+2 -2
Просмотреть файл
@@ -84,11 +84,11 @@ class Driver {
/// @brief Open a connection to the driver using name_.
/// @retval HSA_STATUS_SUCCESS if the driver was opened successfully.
hsa_status_t Open();
virtual hsa_status_t Open() = 0;
/// @brief Close a connection to the open driver using fd_.
/// @retval HSA_STATUS_SUCCESS if the driver was opened successfully.
hsa_status_t Close();
virtual hsa_status_t Close() = 0;
/// @brief Get driver version information.
/// @retval DriverVersionInfo containing the driver's version information.
-3
Просмотреть файл
@@ -458,9 +458,6 @@ bool Unload() {
hsaKmtReleaseSystemProperties();
// Close connection to kernel driver.
hsaKmtCloseKFD();
return true;
}
} // namespace amd