summaryrefslogtreecommitdiffstats
path: root/src/core/device_memory_manager.inc
diff options
context:
space:
mode:
authorLiam <byteslice@airmail.cc>2024-01-16 03:47:59 +0100
committerLiam <byteslice@airmail.cc>2024-01-19 03:12:30 +0100
commitbeb438bb0bede8b8906a41f7a1ad7b010ec3ec60 (patch)
tree5a52c54369a0b1b553800ec915fb4c34b0c1f472 /src/core/device_memory_manager.inc
parentCore: Invert guest memory depandancy (diff)
downloadyuzu-beb438bb0bede8b8906a41f7a1ad7b010ec3ec60.tar
yuzu-beb438bb0bede8b8906a41f7a1ad7b010ec3ec60.tar.gz
yuzu-beb438bb0bede8b8906a41f7a1ad7b010ec3ec60.tar.bz2
yuzu-beb438bb0bede8b8906a41f7a1ad7b010ec3ec60.tar.lz
yuzu-beb438bb0bede8b8906a41f7a1ad7b010ec3ec60.tar.xz
yuzu-beb438bb0bede8b8906a41f7a1ad7b010ec3ec60.tar.zst
yuzu-beb438bb0bede8b8906a41f7a1ad7b010ec3ec60.zip
Diffstat (limited to 'src/core/device_memory_manager.inc')
-rw-r--r--src/core/device_memory_manager.inc28
1 files changed, 14 insertions, 14 deletions
diff --git a/src/core/device_memory_manager.inc b/src/core/device_memory_manager.inc
index d7b4abacc..f6e4ad874 100644
--- a/src/core/device_memory_manager.inc
+++ b/src/core/device_memory_manager.inc
@@ -215,8 +215,8 @@ void DeviceMemoryManager<Traits>::Free(DAddr start, size_t size) {
template <typename Traits>
void DeviceMemoryManager<Traits>::Map(DAddr address, VAddr virtual_address, size_t size,
- size_t process_id, bool track) {
- Core::Memory::Memory* process_memory = registered_processes[process_id];
+ Asid asid, bool track) {
+ Core::Memory::Memory* process_memory = registered_processes[asid.id];
size_t start_page_d = address >> Memory::YUZU_PAGEBITS;
size_t num_pages = Common::AlignUp(size, Memory::YUZU_PAGESIZE) >> Memory::YUZU_PAGEBITS;
std::scoped_lock lk(mapping_guard);
@@ -229,7 +229,7 @@ void DeviceMemoryManager<Traits>::Map(DAddr address, VAddr virtual_address, size
}
auto phys_addr = static_cast<u32>(GetRawPhysicalAddr(ptr) >> Memory::YUZU_PAGEBITS) + 1U;
compressed_physical_ptr[start_page_d + i] = phys_addr;
- InsertCPUBacking(start_page_d + i, new_vaddress, process_id);
+ InsertCPUBacking(start_page_d + i, new_vaddress, asid);
const u32 base_dev = compressed_device_addr[phys_addr - 1U];
const u32 new_dev = static_cast<u32>(start_page_d + i);
if (base_dev == 0) [[likely]] {
@@ -244,7 +244,7 @@ void DeviceMemoryManager<Traits>::Map(DAddr address, VAddr virtual_address, size
impl->multi_dev_address.Register(new_dev, start_id);
}
if (track) {
- TrackContinuityImpl(address, virtual_address, size, process_id);
+ TrackContinuityImpl(address, virtual_address, size, asid);
}
}
@@ -277,8 +277,8 @@ void DeviceMemoryManager<Traits>::Unmap(DAddr address, size_t size) {
}
template <typename Traits>
void DeviceMemoryManager<Traits>::TrackContinuityImpl(DAddr address, VAddr virtual_address,
- size_t size, size_t process_id) {
- Core::Memory::Memory* process_memory = registered_processes[process_id];
+ size_t size, Asid asid) {
+ Core::Memory::Memory* process_memory = registered_processes[asid.id];
size_t start_page_d = address >> Memory::YUZU_PAGEBITS;
size_t num_pages = Common::AlignUp(size, Memory::YUZU_PAGESIZE) >> Memory::YUZU_PAGEBITS;
uintptr_t last_ptr = 0;
@@ -488,8 +488,8 @@ void DeviceMemoryManager<Traits>::WriteBlockUnsafe(DAddr address, const void* sr
}
template <typename Traits>
-size_t DeviceMemoryManager<Traits>::RegisterProcess(Memory::Memory* memory_device_inter) {
- size_t new_id;
+Asid DeviceMemoryManager<Traits>::RegisterProcess(Memory::Memory* memory_device_inter) {
+ size_t new_id{};
if (!id_pool.empty()) {
new_id = id_pool.front();
id_pool.pop_front();
@@ -498,13 +498,13 @@ size_t DeviceMemoryManager<Traits>::RegisterProcess(Memory::Memory* memory_devic
registered_processes.emplace_back(memory_device_inter);
new_id = registered_processes.size() - 1U;
}
- return new_id;
+ return Asid{new_id};
}
template <typename Traits>
-void DeviceMemoryManager<Traits>::UnregisterProcess(size_t id) {
- registered_processes[id] = nullptr;
- id_pool.push_front(id);
+void DeviceMemoryManager<Traits>::UnregisterProcess(Asid asid) {
+ registered_processes[asid.id] = nullptr;
+ id_pool.push_front(asid.id);
}
template <typename Traits>
@@ -530,9 +530,9 @@ void DeviceMemoryManager<Traits>::UpdatePagesCachedCount(DAddr addr, size_t size
std::atomic_thread_fence(std::memory_order_acquire);
const size_t page_end = Common::DivCeil(addr + size, Memory::YUZU_PAGESIZE);
size_t page = addr >> Memory::YUZU_PAGEBITS;
- auto [process_id, base_vaddress] = ExtractCPUBacking(page);
+ auto [asid, base_vaddress] = ExtractCPUBacking(page);
size_t vpage = base_vaddress >> Memory::YUZU_PAGEBITS;
- auto* memory_device_inter = registered_processes[process_id];
+ auto* memory_device_inter = registered_processes[asid.id];
for (; page != page_end; ++page) {
std::atomic_uint8_t& count = cached_pages->at(page >> 3).Count(page);