diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/memory_manager.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/video_core/memory_manager.cpp b/src/video_core/memory_manager.cpp index e06ce5d14..7b2cde7a7 100644 --- a/src/video_core/memory_manager.cpp +++ b/src/video_core/memory_manager.cpp | |||
| @@ -82,6 +82,7 @@ void MemoryManager::SetEntry(size_t position, MemoryManager::EntryType entry) { | |||
| 82 | } | 82 | } |
| 83 | 83 | ||
| 84 | PTEKind MemoryManager::GetPageKind(GPUVAddr gpu_addr) const { | 84 | PTEKind MemoryManager::GetPageKind(GPUVAddr gpu_addr) const { |
| 85 | std::unique_lock<std::mutex> lock(guard); | ||
| 85 | return kind_map.GetValueAt(gpu_addr); | 86 | return kind_map.GetValueAt(gpu_addr); |
| 86 | } | 87 | } |
| 87 | 88 | ||
| @@ -160,7 +161,10 @@ GPUVAddr MemoryManager::BigPageTableOp(GPUVAddr gpu_addr, [[maybe_unused]] VAddr | |||
| 160 | } | 161 | } |
| 161 | remaining_size -= big_page_size; | 162 | remaining_size -= big_page_size; |
| 162 | } | 163 | } |
| 163 | kind_map.Map(gpu_addr, gpu_addr + size, kind); | 164 | { |
| 165 | std::unique_lock<std::mutex> lock(guard); | ||
| 166 | kind_map.Map(gpu_addr, gpu_addr + size, kind); | ||
| 167 | } | ||
| 164 | return gpu_addr; | 168 | return gpu_addr; |
| 165 | } | 169 | } |
| 166 | 170 | ||
| @@ -170,7 +174,6 @@ void MemoryManager::BindRasterizer(VideoCore::RasterizerInterface* rasterizer_) | |||
| 170 | 174 | ||
| 171 | GPUVAddr MemoryManager::Map(GPUVAddr gpu_addr, VAddr cpu_addr, std::size_t size, PTEKind kind, | 175 | GPUVAddr MemoryManager::Map(GPUVAddr gpu_addr, VAddr cpu_addr, std::size_t size, PTEKind kind, |
| 172 | bool is_big_pages) { | 176 | bool is_big_pages) { |
| 173 | std::unique_lock<std::mutex> lock(guard); | ||
| 174 | if (is_big_pages) [[likely]] { | 177 | if (is_big_pages) [[likely]] { |
| 175 | return BigPageTableOp<EntryType::Mapped>(gpu_addr, cpu_addr, size, kind); | 178 | return BigPageTableOp<EntryType::Mapped>(gpu_addr, cpu_addr, size, kind); |
| 176 | } | 179 | } |
| @@ -178,7 +181,6 @@ GPUVAddr MemoryManager::Map(GPUVAddr gpu_addr, VAddr cpu_addr, std::size_t size, | |||
| 178 | } | 181 | } |
| 179 | 182 | ||
| 180 | GPUVAddr MemoryManager::MapSparse(GPUVAddr gpu_addr, std::size_t size, bool is_big_pages) { | 183 | GPUVAddr MemoryManager::MapSparse(GPUVAddr gpu_addr, std::size_t size, bool is_big_pages) { |
| 181 | std::unique_lock<std::mutex> lock(guard); | ||
| 182 | if (is_big_pages) [[likely]] { | 184 | if (is_big_pages) [[likely]] { |
| 183 | return BigPageTableOp<EntryType::Reserved>(gpu_addr, 0, size, PTEKind::INVALID); | 185 | return BigPageTableOp<EntryType::Reserved>(gpu_addr, 0, size, PTEKind::INVALID); |
| 184 | } | 186 | } |
| @@ -189,7 +191,6 @@ void MemoryManager::Unmap(GPUVAddr gpu_addr, std::size_t size) { | |||
| 189 | if (size == 0) { | 191 | if (size == 0) { |
| 190 | return; | 192 | return; |
| 191 | } | 193 | } |
| 192 | std::unique_lock<std::mutex> lock(guard); | ||
| 193 | GetSubmappedRangeImpl<false>(gpu_addr, size, page_stash); | 194 | GetSubmappedRangeImpl<false>(gpu_addr, size, page_stash); |
| 194 | 195 | ||
| 195 | for (const auto& [map_addr, map_size] : page_stash) { | 196 | for (const auto& [map_addr, map_size] : page_stash) { |