Allow overlapping direct memory mappings (#3648)

Real hardware allows this, and it worked fine in the past, so allow it here.
This commit is contained in:
Stephen Miller
2025-09-24 11:22:48 -05:00
committed by GitHub
parent eeee6ad0ee
commit 98ceb6e43e

View File

@@ -350,7 +350,7 @@ s32 MemoryManager::MapMemory(void** out_addr, VAddr virtual_addr, u64 size, Memo
do { do {
auto dmem_area = FindDmemArea(phys_addr + validated_size)->second; auto dmem_area = FindDmemArea(phys_addr + validated_size)->second;
// If any requested dmem area is not allocated, return an error. // If any requested dmem area is not allocated, return an error.
if (dmem_area.dma_type != DMAType::Allocated) { if (dmem_area.dma_type != DMAType::Allocated && dmem_area.dma_type != DMAType::Mapped) {
LOG_ERROR(Kernel_Vmm, "Unable to map {:#x} bytes at physical address {:#x}", size, LOG_ERROR(Kernel_Vmm, "Unable to map {:#x} bytes at physical address {:#x}", size,
phys_addr); phys_addr);
return ORBIS_KERNEL_ERROR_ENOMEM; return ORBIS_KERNEL_ERROR_ENOMEM;