Improving OS abstraction

Signed-off-by: Jaroslaw Chodor <jaroslaw.chodor@intel.com>
This commit is contained in:
Jaroslaw Chodor
2021-05-21 01:17:57 +02:00
committed by Compute-Runtime-Automation
parent 7bec5d5d3b
commit 0e9aa45e46
127 changed files with 558 additions and 606 deletions

View File

@@ -47,8 +47,7 @@ set(NEO_CORE_OS_INTERFACE_LINUX
${CMAKE_CURRENT_SOURCE_DIR}/os_context_linux.cpp
${CMAKE_CURRENT_SOURCE_DIR}/os_context_linux.h
${CMAKE_CURRENT_SOURCE_DIR}/os_inc.h
${CMAKE_CURRENT_SOURCE_DIR}/os_interface.cpp
${CMAKE_CURRENT_SOURCE_DIR}/os_interface.h
${CMAKE_CURRENT_SOURCE_DIR}/os_interface_linux.cpp
${CMAKE_CURRENT_SOURCE_DIR}/os_library_helper.cpp
${CMAKE_CURRENT_SOURCE_DIR}/os_library_linux.cpp
${CMAKE_CURRENT_SOURCE_DIR}/os_library_linux.h

View File

@@ -8,7 +8,7 @@
#include "shared/source/os_interface/linux/device_time_drm.h"
#include "shared/source/os_interface/linux/drm_neo.h"
#include "shared/source/os_interface/linux/os_interface.h"
#include "shared/source/os_interface/os_interface.h"
#include "drm/i915_drm.h"
@@ -18,7 +18,7 @@ namespace NEO {
DeviceTimeDrm::DeviceTimeDrm(OSInterface *osInterface) {
if (osInterface) {
pDrm = osInterface->get()->getDrm();
pDrm = osInterface->getDriverModel()->as<Drm>();
}
timestampTypeDetect();
}

View File

@@ -10,17 +10,14 @@
#include "shared/source/helpers/debug_helpers.h"
#include "shared/source/helpers/hw_info.h"
#include "shared/source/os_interface/linux/drm_neo.h"
#include "shared/source/os_interface/linux/os_interface.h"
#include "shared/source/os_interface/os_interface.h"
namespace NEO {
DriverInfo *DriverInfo::create(const HardwareInfo *hwInfo, const OSInterface *osInterface) {
PhysicalDevicePciBusInfo pciBusInfo(PhysicalDevicePciBusInfo::InvalidValue, PhysicalDevicePciBusInfo::InvalidValue, PhysicalDevicePciBusInfo::InvalidValue, PhysicalDevicePciBusInfo::InvalidValue);
if (osInterface) {
auto osInterfaceImpl = osInterface->get();
UNRECOVERABLE_IF(osInterfaceImpl == nullptr);
auto drm = osInterface->get()->getDrm();
auto drm = osInterface->getDriverModel()->as<Drm>();
UNRECOVERABLE_IF(drm == nullptr);
pciBusInfo = drm->getPciBusInfo();

View File

@@ -22,7 +22,7 @@
#include "shared/source/os_interface/linux/allocator_helper.h"
#include "shared/source/os_interface/linux/drm_memory_operations_handler.h"
#include "shared/source/os_interface/linux/os_context_linux.h"
#include "shared/source/os_interface/linux/os_interface.h"
#include "shared/source/os_interface/os_interface.h"
#include "drm/i915_drm.h"
@@ -952,7 +952,7 @@ size_t DrmMemoryManager::getUserptrAlignment() {
}
Drm &DrmMemoryManager::getDrm(uint32_t rootDeviceIndex) const {
return *this->executionEnvironment.rootDeviceEnvironments[rootDeviceIndex]->osInterface->get()->getDrm();
return *this->executionEnvironment.rootDeviceEnvironments[rootDeviceIndex]->osInterface->getDriverModel()->as<Drm>();
}
uint32_t DrmMemoryManager::getRootDeviceIndex(const Drm *drm) {

View File

@@ -15,7 +15,7 @@
#include "shared/source/os_interface/linux/drm_memory_manager.h"
#include "shared/source/os_interface/linux/drm_neo.h"
#include "shared/source/os_interface/linux/os_context_linux.h"
#include "shared/source/os_interface/linux/os_interface.h"
#include "shared/source/os_interface/os_interface.h"
namespace NEO {

View File

@@ -16,9 +16,10 @@
#include "shared/source/helpers/hw_info.h"
#include "shared/source/helpers/ptr_math.h"
#include "shared/source/os_interface/driver_info.h"
#include "shared/source/os_interface/linux/drm_gem_close_worker.h"
#include "shared/source/os_interface/linux/drm_memory_manager.h"
#include "shared/source/os_interface/linux/hw_device_id.h"
#include "shared/source/os_interface/linux/os_inc.h"
#include "shared/source/os_interface/linux/os_interface.h"
#include "shared/source/os_interface/linux/pci_path.h"
#include "shared/source/os_interface/linux/sys_calls.h"
#include "shared/source/os_interface/linux/system_info.h"
@@ -62,7 +63,9 @@ constexpr const char *getIoctlParamString(int param) {
} // namespace IoctlHelper
Drm::Drm(std::unique_ptr<HwDeviceId> hwDeviceIdIn, RootDeviceEnvironment &rootDeviceEnvironment) : hwDeviceId(std::move(hwDeviceIdIn)), rootDeviceEnvironment(rootDeviceEnvironment) {
Drm::Drm(std::unique_ptr<HwDeviceId> hwDeviceIdIn, RootDeviceEnvironment &rootDeviceEnvironment)
: DriverModel(DriverModelType::DRM),
hwDeviceId(std::move(hwDeviceIdIn)), rootDeviceEnvironment(rootDeviceEnvironment) {
pagingFence.fill(0u);
fenceVal.fill(0u);
}
@@ -732,6 +735,13 @@ ADAPTER_BDF Drm::getAdapterBDF() const {
return adapterBDF;
}
void Drm::setGmmInputArgs(void *args) {
auto gmmInArgs = reinterpret_cast<GMM_INIT_IN_ARGS *>(args);
auto adapterBDF = this->getAdapterBDF();
gmmInArgs->FileDescriptor = adapterBDF.Data;
gmmInArgs->ClientType = GMM_CLIENT::GMM_OCL_VISTA;
}
const std::vector<int> &Drm::getSliceMappings(uint32_t deviceIndex) {
return topologyMap[deviceIndex].sliceIndices;
}

View File

@@ -13,6 +13,7 @@
#include "shared/source/os_interface/linux/engine_info.h"
#include "shared/source/os_interface/linux/hw_device_id.h"
#include "shared/source/os_interface/linux/memory_info.h"
#include "shared/source/os_interface/os_interface.h"
#include "shared/source/utilities/api_intercept.h"
#include "shared/source/utilities/stackvec.h"
@@ -54,10 +55,12 @@ struct DeviceDescriptor { // NOLINT(clang-analyzer-optin.performance.Padding)
extern const DeviceDescriptor deviceDescriptorTable[];
class Drm {
class Drm : public DriverModel {
friend DeviceFactory;
public:
static constexpr DriverModelType driverModelType = DriverModelType::DRM;
enum class ResourceClass : uint32_t {
Elf,
Isa,
@@ -82,6 +85,9 @@ class Drm {
virtual int ioctl(unsigned long request, void *arg);
int getDeviceID(int &devId);
unsigned int getDeviceHandle() const override {
return 0;
}
int getDeviceRevID(int &revId);
int getExecSoftPin(int &execSoftPin);
int enableTurboBoost();
@@ -157,6 +163,8 @@ class Drm {
MOCKABLE_VIRTUAL bool isDebugAttachAvailable();
void setGmmInputArgs(void *args) override;
SystemInfo *getSystemInfo() const {
return systemInfo.get();
}

View File

@@ -13,7 +13,7 @@
#include "shared/source/helpers/hw_helper.h"
#include "shared/source/helpers/hw_info.h"
#include "shared/source/os_interface/linux/drm_neo.h"
#include "shared/source/os_interface/linux/os_interface.h"
#include "shared/source/os_interface/os_interface.h"
#include "shared/source/utilities/cpu_info.h"
#include "hw_cmds.h"
@@ -69,7 +69,7 @@ int configureCacheInfo(HardwareInfo *hwInfo) {
int HwInfoConfig::configureHwInfo(const HardwareInfo *inHwInfo, HardwareInfo *outHwInfo, OSInterface *osIface) {
int ret = 0;
Drm *drm = osIface->get()->getDrm();
Drm *drm = osIface->getDriverModel()->as<Drm>();
*outHwInfo = *inHwInfo;
auto platform = &outHwInfo->platform;

View File

@@ -14,15 +14,15 @@
#include "shared/source/helpers/hw_helper.h"
#include "shared/source/helpers/hw_info.h"
#include "shared/source/os_interface/linux/drm_neo.h"
#include "shared/source/os_interface/linux/os_interface.h"
#include "shared/source/os_interface/os_context.h"
#include "shared/source/os_interface/os_interface.h"
namespace NEO {
OsContext *OsContext::create(OSInterface *osInterface, uint32_t contextId, DeviceBitfield deviceBitfield,
EngineTypeUsage typeUsage, PreemptionMode preemptionMode, bool rootDevice) {
if (osInterface) {
return new OsContextLinux(*osInterface->get()->getDrm(), contextId, deviceBitfield, typeUsage, preemptionMode, rootDevice);
return new OsContextLinux(*osInterface->getDriverModel()->as<Drm>(), contextId, deviceBitfield, typeUsage, preemptionMode, rootDevice);
}
return new OsContext(contextId, deviceBitfield, typeUsage, preemptionMode, rootDevice);
}

View File

@@ -1,33 +0,0 @@
/*
* Copyright (C) 2020-2021 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#pragma once
#include "shared/source/os_interface/os_interface.h"
#include <memory>
#include <optional>
#include <string>
namespace NEO {
class Drm;
class OSInterface::OSInterfaceImpl {
public:
OSInterfaceImpl();
~OSInterfaceImpl();
Drm *getDrm() const {
return drm.get();
}
void setDrm(Drm *drm);
bool isDebugAttachAvailable() const;
protected:
std::unique_ptr<Drm> drm;
};
} // namespace NEO

View File

@@ -5,8 +5,6 @@
*
*/
#include "shared/source/os_interface/linux/os_interface.h"
#include "shared/source/execution_environment/execution_environment.h"
#include "shared/source/execution_environment/root_device_environment.h"
#include "shared/source/gmm_helper/gmm_lib.h"
@@ -14,6 +12,7 @@
#include "shared/source/os_interface/linux/drm_memory_operations_handler.h"
#include "shared/source/os_interface/linux/drm_neo.h"
#include "shared/source/os_interface/linux/sys_calls.h"
#include "shared/source/os_interface/os_interface.h"
#include <sys/stat.h>
#include <system_error>
@@ -26,39 +25,13 @@ bool OSInterface::newResourceImplicitFlush = true;
bool OSInterface::gpuIdleImplicitFlush = true;
bool OSInterface::requiresSupportForWddmTrimNotification = false;
OSInterface::OSInterfaceImpl::OSInterfaceImpl() = default;
OSInterface::OSInterfaceImpl::~OSInterfaceImpl() = default;
void OSInterface::OSInterfaceImpl::setDrm(Drm *drm) {
this->drm.reset(drm);
}
bool OSInterface::OSInterfaceImpl::isDebugAttachAvailable() const {
if (drm) {
return drm->isDebugAttachAvailable();
bool OSInterface::isDebugAttachAvailable() const {
if (driverModel) {
return driverModel->as<Drm>()->isDebugAttachAvailable();
}
return false;
}
OSInterface::OSInterface() {
osInterfaceImpl = new OSInterfaceImpl();
}
OSInterface::~OSInterface() {
delete osInterfaceImpl;
}
bool OSInterface::are64kbPagesEnabled() {
return osEnabled64kbPages;
}
uint32_t OSInterface::getDeviceHandle() const {
return 0;
}
bool OSInterface::isDebugAttachAvailable() const {
return osInterfaceImpl->isDebugAttachAvailable();
}
bool RootDeviceEnvironment::initOsInterface(std::unique_ptr<HwDeviceId> &&hwDeviceId, uint32_t rootDeviceIndex) {
Drm *drm = Drm::create(std::move(hwDeviceId), *this);
if (!drm) {
@@ -66,7 +39,7 @@ bool RootDeviceEnvironment::initOsInterface(std::unique_ptr<HwDeviceId> &&hwDevi
}
osInterface.reset(new OSInterface());
osInterface->get()->setDrm(drm);
osInterface->setDriverModel(std::unique_ptr<DriverModel>(drm));
auto hardwareInfo = getMutableHardwareInfo();
HwInfoConfig *hwConfig = HwInfoConfig::get(hardwareInfo->platform.eProductFamily);
if (hwConfig->configureHwInfo(hardwareInfo, hardwareInfo, osInterface.get())) {