mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-30 01:35:20 +08:00
Improving OS abstraction
Signed-off-by: Jaroslaw Chodor <jaroslaw.chodor@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
7bec5d5d3b
commit
0e9aa45e46
@@ -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
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
@@ -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())) {
|
||||
Reference in New Issue
Block a user