|
@@ -508,12 +508,7 @@ void DeviceMemoryManager<Traits>::UnregisterProcess(Asid asid) {
|
|
|
|
|
|
|
|
template <typename Traits>
|
|
template <typename Traits>
|
|
|
void DeviceMemoryManager<Traits>::UpdatePagesCachedCount(DAddr addr, size_t size, s32 delta) {
|
|
void DeviceMemoryManager<Traits>::UpdatePagesCachedCount(DAddr addr, size_t size, s32 delta) {
|
|
|
- std::unique_lock<std::mutex> lk(counter_guard, std::defer_lock);
|
|
|
|
|
- const auto Lock = [&] {
|
|
|
|
|
- if (!lk) {
|
|
|
|
|
- lk.lock();
|
|
|
|
|
- }
|
|
|
|
|
- };
|
|
|
|
|
|
|
+ Common::ScopedRangeLock lk(counter_guard, addr, size);
|
|
|
u64 uncache_begin = 0;
|
|
u64 uncache_begin = 0;
|
|
|
u64 cache_begin = 0;
|
|
u64 cache_begin = 0;
|
|
|
u64 uncache_bytes = 0;
|
|
u64 uncache_bytes = 0;
|
|
@@ -548,7 +543,6 @@ void DeviceMemoryManager<Traits>::UpdatePagesCachedCount(DAddr addr, size_t size
|
|
|
}
|
|
}
|
|
|
uncache_bytes += Memory::YUZU_PAGESIZE;
|
|
uncache_bytes += Memory::YUZU_PAGESIZE;
|
|
|
} else if (uncache_bytes > 0) {
|
|
} else if (uncache_bytes > 0) {
|
|
|
- Lock();
|
|
|
|
|
MarkRegionCaching(memory_device_inter, uncache_begin << Memory::YUZU_PAGEBITS,
|
|
MarkRegionCaching(memory_device_inter, uncache_begin << Memory::YUZU_PAGEBITS,
|
|
|
uncache_bytes, false);
|
|
uncache_bytes, false);
|
|
|
uncache_bytes = 0;
|
|
uncache_bytes = 0;
|
|
@@ -559,7 +553,6 @@ void DeviceMemoryManager<Traits>::UpdatePagesCachedCount(DAddr addr, size_t size
|
|
|
}
|
|
}
|
|
|
cache_bytes += Memory::YUZU_PAGESIZE;
|
|
cache_bytes += Memory::YUZU_PAGESIZE;
|
|
|
} else if (cache_bytes > 0) {
|
|
} else if (cache_bytes > 0) {
|
|
|
- Lock();
|
|
|
|
|
MarkRegionCaching(memory_device_inter, cache_begin << Memory::YUZU_PAGEBITS, cache_bytes,
|
|
MarkRegionCaching(memory_device_inter, cache_begin << Memory::YUZU_PAGEBITS, cache_bytes,
|
|
|
true);
|
|
true);
|
|
|
cache_bytes = 0;
|
|
cache_bytes = 0;
|
|
@@ -567,12 +560,10 @@ void DeviceMemoryManager<Traits>::UpdatePagesCachedCount(DAddr addr, size_t size
|
|
|
vpage++;
|
|
vpage++;
|
|
|
}
|
|
}
|
|
|
if (uncache_bytes > 0) {
|
|
if (uncache_bytes > 0) {
|
|
|
- Lock();
|
|
|
|
|
MarkRegionCaching(memory_device_inter, uncache_begin << Memory::YUZU_PAGEBITS, uncache_bytes,
|
|
MarkRegionCaching(memory_device_inter, uncache_begin << Memory::YUZU_PAGEBITS, uncache_bytes,
|
|
|
false);
|
|
false);
|
|
|
}
|
|
}
|
|
|
if (cache_bytes > 0) {
|
|
if (cache_bytes > 0) {
|
|
|
- Lock();
|
|
|
|
|
MarkRegionCaching(memory_device_inter, cache_begin << Memory::YUZU_PAGEBITS, cache_bytes,
|
|
MarkRegionCaching(memory_device_inter, cache_begin << Memory::YUZU_PAGEBITS, cache_bytes,
|
|
|
true);
|
|
true);
|
|
|
}
|
|
}
|