summaryrefslogtreecommitdiff
path: root/src/core/memory.cpp
diff options
context:
space:
mode:
authorGravatar Weiyi Wang2019-02-08 10:43:06 -0500
committerGravatar fearlessTobi2019-03-02 15:20:05 +0100
commit5159f4eee882027928098962cdcd71a0b56bfd38 (patch)
tree3f4898bdaeb0a06ee5c6f93f387423b5e933d572 /src/core/memory.cpp
parentMerge pull request #2182 from bunnei/my-wasted-friday (diff)
downloadyuzu-5159f4eee882027928098962cdcd71a0b56bfd38.tar.gz
yuzu-5159f4eee882027928098962cdcd71a0b56bfd38.tar.xz
yuzu-5159f4eee882027928098962cdcd71a0b56bfd38.zip
Memory: don't lock hle mutex in memory read/write
The comment already invalidates itself: neither MMIO nor rasterizer cache belongsHLE kernel state. This mutex has a too large scope if MMIO or cache is included, which is prone to dead lock when multiple thread acquires these resource at the same time. If necessary, each MMIO component or rasterizer should have their own lock.
Diffstat (limited to 'src/core/memory.cpp')
-rw-r--r--src/core/memory.cpp6
1 files changed, 0 insertions, 6 deletions
diff --git a/src/core/memory.cpp b/src/core/memory.cpp
index f809567b6..ec279cef8 100644
--- a/src/core/memory.cpp
+++ b/src/core/memory.cpp
@@ -171,9 +171,6 @@ T Read(const VAddr vaddr) {
171 return value; 171 return value;
172 } 172 }
173 173
174 // The memory access might do an MMIO or cached access, so we have to lock the HLE kernel state
175 std::lock_guard<std::recursive_mutex> lock(HLE::g_hle_lock);
176
177 PageType type = current_page_table->attributes[vaddr >> PAGE_BITS]; 174 PageType type = current_page_table->attributes[vaddr >> PAGE_BITS];
178 switch (type) { 175 switch (type) {
179 case PageType::Unmapped: 176 case PageType::Unmapped:
@@ -204,9 +201,6 @@ void Write(const VAddr vaddr, const T data) {
204 return; 201 return;
205 } 202 }
206 203
207 // The memory access might do an MMIO or cached access, so we have to lock the HLE kernel state
208 std::lock_guard<std::recursive_mutex> lock(HLE::g_hle_lock);
209
210 PageType type = current_page_table->attributes[vaddr >> PAGE_BITS]; 204 PageType type = current_page_table->attributes[vaddr >> PAGE_BITS];
211 switch (type) { 205 switch (type) {
212 case PageType::Unmapped: 206 case PageType::Unmapped: