Simplify translation DG1 specific region info into internal struct

Don't translate to upstream version

Related-To: NEO-6852
Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
Mateusz Jablonski
2022-07-15 13:12:14 +02:00
committed by Compute-Runtime-Automation
parent 5e70afac1a
commit dbdae541c1
2 changed files with 21 additions and 29 deletions

View File

@@ -1,15 +1,14 @@
/*
* Copyright (C) 2021 Intel Corporation
* Copyright (C) 2021-2022 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "shared/source/os_interface/linux/ioctl_helper.h"
#include "third_party/uapi/drm/i915_drm.h"
#include <memory>
#include <vector>
namespace NEO {
@@ -19,25 +18,4 @@ bool isQueryDrmTip(const std::vector<uint8_t> &queryInfo) {
return static_cast<uint32_t>(queryInfo.size()) == lengthOnDrmTip;
}
namespace PROD_DG1 {
#undef DRM_IOCTL_I915_GEM_CREATE_EXT
#undef __I915_EXEC_UNKNOWN_FLAGS
#include "third_party/uapi/dg1/drm/i915_drm.h"
} // namespace PROD_DG1
std::vector<uint8_t> translateToDrmTip(const uint8_t *dataQuery) {
auto dataOnProdDrm = reinterpret_cast<const PROD_DG1::drm_i915_query_memory_regions *>(dataQuery);
auto lengthTranslated = static_cast<int32_t>(sizeof(drm_i915_query_memory_regions) + dataOnProdDrm->num_regions * sizeof(drm_i915_memory_region_info));
auto dataQueryTranslated = std::vector<uint8_t>(lengthTranslated, 0u);
auto dataTranslated = reinterpret_cast<drm_i915_query_memory_regions *>(dataQueryTranslated.data());
dataTranslated->num_regions = dataOnProdDrm->num_regions;
for (uint32_t i = 0; i < dataTranslated->num_regions; i++) {
dataTranslated->regions[i].region.memory_class = dataOnProdDrm->regions[i].region.memory_class;
dataTranslated->regions[i].region.memory_instance = dataOnProdDrm->regions[i].region.memory_instance;
dataTranslated->regions[i].probed_size = dataOnProdDrm->regions[i].probed_size;
dataTranslated->regions[i].unallocated_size = dataOnProdDrm->regions[i].unallocated_size;
}
return dataQueryTranslated;
}
} // namespace NEO

View File

@@ -9,13 +9,16 @@
#include "shared/source/helpers/debug_helpers.h"
#include "shared/source/os_interface/linux/ioctl_helper.h"
#include "third_party/uapi/dg1/drm/i915_drm.h"
namespace NEO {
namespace Dg1I915 {
#include "third_party/uapi/dg1/drm/i915_drm.h"
}
using namespace Dg1I915;
constexpr static auto gfxProduct = IGFX_DG1;
extern bool isQueryDrmTip(const std::vector<uint8_t> &queryInfo);
extern std::vector<uint8_t> translateToDrmTip(const uint8_t *dataQuery);
template <>
uint32_t IoctlHelperImpl<gfxProduct>::createGemExt(const MemRegionsVec &memClassInstances, size_t allocSize, uint32_t &handle, std::optional<uint32_t> vmId) {
@@ -52,11 +55,22 @@ uint32_t IoctlHelperImpl<gfxProduct>::createGemExt(const MemRegionsVec &memClass
return ret;
}
std::vector<MemoryRegion> translateDg1RegionInfoToMemoryRegions(const std::vector<uint8_t> &regionInfo) {
auto *data = reinterpret_cast<const drm_i915_query_memory_regions *>(regionInfo.data());
auto memRegions = std::vector<MemoryRegion>(data->num_regions);
for (uint32_t i = 0; i < data->num_regions; i++) {
memRegions[i].probedSize = data->regions[i].probed_size;
memRegions[i].unallocatedSize = data->regions[i].unallocated_size;
memRegions[i].region.memoryClass = data->regions[i].region.memory_class;
memRegions[i].region.memoryInstance = data->regions[i].region.memory_instance;
}
return memRegions;
}
template <>
std::vector<MemoryRegion> IoctlHelperImpl<gfxProduct>::translateToMemoryRegions(const std::vector<uint8_t> &regionInfo) {
if (!isQueryDrmTip(regionInfo)) {
auto translated = translateToDrmTip(regionInfo.data());
return IoctlHelperUpstream::translateToMemoryRegions(translated);
return translateDg1RegionInfoToMemoryRegions(regionInfo);
}
return IoctlHelperUpstream::translateToMemoryRegions(regionInfo);
}