nvhost_nvdec_common: Remove BufferMap
This was mainly used to keep track of mapped buffers for later unmapping. Since unmap is no longer implemented, this no longer seves a valuable purpose.
This commit is contained in:
parent
e3688f0627
commit
156ea746a3
|
@ -166,8 +166,6 @@ NvResult nvhost_nvdec_common::MapBuffer(const std::vector<u8>& input, std::vecto
|
||||||
LOG_ERROR(Service_NVDRV, "failed to map size={}", object->size);
|
LOG_ERROR(Service_NVDRV, "failed to map size={}", object->size);
|
||||||
} else {
|
} else {
|
||||||
cmd_buffer.map_address = object->dma_map_addr;
|
cmd_buffer.map_address = object->dma_map_addr;
|
||||||
AddBufferMap(object->dma_map_addr, object->size, object->addr,
|
|
||||||
object->status == nvmap::Object::Status::Allocated);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
std::memcpy(output.data(), ¶ms, sizeof(IoctlMapBuffer));
|
std::memcpy(output.data(), ¶ms, sizeof(IoctlMapBuffer));
|
||||||
|
@ -193,33 +191,4 @@ NvResult nvhost_nvdec_common::SetSubmitTimeout(const std::vector<u8>& input,
|
||||||
return NvResult::Success;
|
return NvResult::Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<nvhost_nvdec_common::BufferMap> nvhost_nvdec_common::FindBufferMap(
|
|
||||||
GPUVAddr gpu_addr) const {
|
|
||||||
const auto it = std::find_if(
|
|
||||||
buffer_mappings.begin(), buffer_mappings.upper_bound(gpu_addr), [&](const auto& entry) {
|
|
||||||
return (gpu_addr >= entry.second.StartAddr() && gpu_addr < entry.second.EndAddr());
|
|
||||||
});
|
|
||||||
|
|
||||||
ASSERT(it != buffer_mappings.end());
|
|
||||||
return it->second;
|
|
||||||
}
|
|
||||||
|
|
||||||
void nvhost_nvdec_common::AddBufferMap(GPUVAddr gpu_addr, std::size_t size, VAddr cpu_addr,
|
|
||||||
bool is_allocated) {
|
|
||||||
buffer_mappings.insert_or_assign(gpu_addr, BufferMap{gpu_addr, size, cpu_addr, is_allocated});
|
|
||||||
}
|
|
||||||
|
|
||||||
std::optional<std::size_t> nvhost_nvdec_common::RemoveBufferMap(GPUVAddr gpu_addr) {
|
|
||||||
const auto iter{buffer_mappings.find(gpu_addr)};
|
|
||||||
if (iter == buffer_mappings.end()) {
|
|
||||||
return std::nullopt;
|
|
||||||
}
|
|
||||||
std::size_t size = 0;
|
|
||||||
if (iter->second.IsAllocated()) {
|
|
||||||
size = iter->second.Size();
|
|
||||||
}
|
|
||||||
buffer_mappings.erase(iter);
|
|
||||||
return size;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace Service::Nvidia::Devices
|
} // namespace Service::Nvidia::Devices
|
||||||
|
|
|
@ -23,45 +23,6 @@ public:
|
||||||
~nvhost_nvdec_common() override;
|
~nvhost_nvdec_common() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
class BufferMap final {
|
|
||||||
public:
|
|
||||||
constexpr BufferMap() = default;
|
|
||||||
|
|
||||||
constexpr BufferMap(GPUVAddr start_addr_, std::size_t size_)
|
|
||||||
: start_addr{start_addr_}, end_addr{start_addr_ + size_} {}
|
|
||||||
|
|
||||||
constexpr BufferMap(GPUVAddr start_addr_, std::size_t size_, VAddr cpu_addr_,
|
|
||||||
bool is_allocated_)
|
|
||||||
: start_addr{start_addr_}, end_addr{start_addr_ + size_}, cpu_addr{cpu_addr_},
|
|
||||||
is_allocated{is_allocated_} {}
|
|
||||||
|
|
||||||
constexpr VAddr StartAddr() const {
|
|
||||||
return start_addr;
|
|
||||||
}
|
|
||||||
|
|
||||||
constexpr VAddr EndAddr() const {
|
|
||||||
return end_addr;
|
|
||||||
}
|
|
||||||
|
|
||||||
constexpr std::size_t Size() const {
|
|
||||||
return end_addr - start_addr;
|
|
||||||
}
|
|
||||||
|
|
||||||
constexpr VAddr CpuAddr() const {
|
|
||||||
return cpu_addr;
|
|
||||||
}
|
|
||||||
|
|
||||||
constexpr bool IsAllocated() const {
|
|
||||||
return is_allocated;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
GPUVAddr start_addr{};
|
|
||||||
GPUVAddr end_addr{};
|
|
||||||
VAddr cpu_addr{};
|
|
||||||
bool is_allocated{};
|
|
||||||
};
|
|
||||||
|
|
||||||
struct IoctlSetNvmapFD {
|
struct IoctlSetNvmapFD {
|
||||||
s32_le nvmap_fd{};
|
s32_le nvmap_fd{};
|
||||||
};
|
};
|
||||||
|
@ -154,17 +115,11 @@ protected:
|
||||||
NvResult UnmapBuffer(const std::vector<u8>& input, std::vector<u8>& output);
|
NvResult UnmapBuffer(const std::vector<u8>& input, std::vector<u8>& output);
|
||||||
NvResult SetSubmitTimeout(const std::vector<u8>& input, std::vector<u8>& output);
|
NvResult SetSubmitTimeout(const std::vector<u8>& input, std::vector<u8>& output);
|
||||||
|
|
||||||
std::optional<BufferMap> FindBufferMap(GPUVAddr gpu_addr) const;
|
|
||||||
void AddBufferMap(GPUVAddr gpu_addr, std::size_t size, VAddr cpu_addr, bool is_allocated);
|
|
||||||
std::optional<std::size_t> RemoveBufferMap(GPUVAddr gpu_addr);
|
|
||||||
|
|
||||||
s32_le nvmap_fd{};
|
s32_le nvmap_fd{};
|
||||||
u32_le submit_timeout{};
|
u32_le submit_timeout{};
|
||||||
std::shared_ptr<nvmap> nvmap_dev;
|
std::shared_ptr<nvmap> nvmap_dev;
|
||||||
SyncpointManager& syncpoint_manager;
|
SyncpointManager& syncpoint_manager;
|
||||||
std::array<u32, MaxSyncPoints> device_syncpoints{};
|
std::array<u32, MaxSyncPoints> device_syncpoints{};
|
||||||
// This is expected to be ordered, therefore we must use a map, not unordered_map
|
|
||||||
std::map<GPUVAddr, BufferMap> buffer_mappings;
|
|
||||||
};
|
};
|
||||||
}; // namespace Devices
|
}; // namespace Devices
|
||||||
} // namespace Service::Nvidia
|
} // namespace Service::Nvidia
|
||||||
|
|
Reference in New Issue