summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar liamwhite2024-02-08 10:59:52 -0500
committerGravatar GitHub2024-02-08 10:59:52 -0500
commitbc9711cb1e921ce9764169aa6eff1ee1e9dde9ca (patch)
treee191f5ca2ddc770c026a8cb771d751cdbd88700a /src
parentMerge pull request #12939 from german77/wonder (diff)
parentSMMU: Ensure the backing address range matches the current (diff)
downloadyuzu-bc9711cb1e921ce9764169aa6eff1ee1e9dde9ca.tar.gz
yuzu-bc9711cb1e921ce9764169aa6eff1ee1e9dde9ca.tar.xz
yuzu-bc9711cb1e921ce9764169aa6eff1ee1e9dde9ca.zip
Merge pull request #12953 from FernandoS27/zero-fps-mah-ass
SMMU: Ensure the backing address range matches the current
Diffstat (limited to '')
-rw-r--r--src/core/device_memory_manager.inc7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/core/device_memory_manager.inc b/src/core/device_memory_manager.inc
index b026f4220..6dfee806c 100644
--- a/src/core/device_memory_manager.inc
+++ b/src/core/device_memory_manager.inc
@@ -532,6 +532,7 @@ void DeviceMemoryManager<Traits>::UpdatePagesCachedCount(DAddr addr, size_t size
532 cache_bytes = 0; 532 cache_bytes = 0;
533 } 533 }
534 }; 534 };
535 size_t old_vpage = (base_vaddress >> Memory::YUZU_PAGEBITS) - 1;
535 for (; page != page_end; ++page) { 536 for (; page != page_end; ++page) {
536 CounterAtomicType& count = cached_pages->at(page >> subentries_shift).Count(page); 537 CounterAtomicType& count = cached_pages->at(page >> subentries_shift).Count(page);
537 auto [asid_2, vpage] = ExtractCPUBacking(page); 538 auto [asid_2, vpage] = ExtractCPUBacking(page);
@@ -547,6 +548,12 @@ void DeviceMemoryManager<Traits>::UpdatePagesCachedCount(DAddr addr, size_t size
547 memory_device_inter = registered_processes[asid_2.id]; 548 memory_device_inter = registered_processes[asid_2.id];
548 } 549 }
549 550
551 if (vpage != old_vpage + 1) [[unlikely]] {
552 release_pending();
553 }
554
555 old_vpage = vpage;
556
550 // Adds or subtracts 1, as count is a unsigned 8-bit value 557 // Adds or subtracts 1, as count is a unsigned 8-bit value
551 count.fetch_add(static_cast<CounterType>(delta), std::memory_order_release); 558 count.fetch_add(static_cast<CounterType>(delta), std::memory_order_release);
552 559