summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/video_core/memory_manager.cpp9
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
84PTEKind MemoryManager::GetPageKind(GPUVAddr gpu_addr) const { 84PTEKind 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
171GPUVAddr MemoryManager::Map(GPUVAddr gpu_addr, VAddr cpu_addr, std::size_t size, PTEKind kind, 175GPUVAddr 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
180GPUVAddr MemoryManager::MapSparse(GPUVAddr gpu_addr, std::size_t size, bool is_big_pages) { 183GPUVAddr 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) {