Skip to content

Commit b70a1ed

Browse files
InviuzNekotekina
authored andcommitted
Mmapper with Neko's review fixes (#2503)
1 parent 14e5aa5 commit b70a1ed

File tree

3 files changed

+17
-7
lines changed

3 files changed

+17
-7
lines changed

rpcs3/Emu/Cell/lv2/sys_mmapper.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ error_code sys_mmapper_allocate_fixed_address()
5353
{
5454
sys_mmapper.error("sys_mmapper_allocate_fixed_address()");
5555

56-
if (!vm::map(0xB0000000, 0x10000000)) // TODO: set correct flags (they aren't used currently though)
56+
if (!vm::map(0xB0000000, 0x10000000, SYS_MEMORY_PAGE_SIZE_1M))
5757
{
5858
return CELL_EEXIST;
5959
}
@@ -228,7 +228,7 @@ error_code sys_mmapper_free_shared_memory(u32 mem_id)
228228

229229
error_code sys_mmapper_map_shared_memory(u32 addr, u32 mem_id, u64 flags)
230230
{
231-
sys_mmapper.error("sys_mmapper_map_shared_memory(addr=0x%x, mem_id=0x%x, flags=0x%llx)", addr, mem_id, flags);
231+
sys_mmapper.warning("sys_mmapper_map_shared_memory(addr=0x%x, mem_id=0x%x, flags=0x%llx)", addr, mem_id, flags);
232232

233233
const auto area = vm::get(vm::any, addr);
234234

@@ -267,7 +267,7 @@ error_code sys_mmapper_map_shared_memory(u32 addr, u32 mem_id, u64 flags)
267267

268268
error_code sys_mmapper_search_and_map(u32 start_addr, u32 mem_id, u64 flags, vm::ptr<u32> alloc_addr)
269269
{
270-
sys_mmapper.error("sys_mmapper_search_and_map(start_addr=0x%x, mem_id=0x%x, flags=0x%llx, alloc_addr=*0x%x)", start_addr, mem_id, flags, alloc_addr);
270+
sys_mmapper.warning("sys_mmapper_search_and_map(start_addr=0x%x, mem_id=0x%x, flags=0x%llx, alloc_addr=*0x%x)", start_addr, mem_id, flags, alloc_addr);
271271

272272
const auto area = vm::get(vm::any, start_addr);
273273

@@ -303,11 +303,11 @@ error_code sys_mmapper_search_and_map(u32 start_addr, u32 mem_id, u64 flags, vm:
303303

304304
error_code sys_mmapper_unmap_shared_memory(u32 addr, vm::ptr<u32> mem_id)
305305
{
306-
sys_mmapper.error("sys_mmapper_unmap_shared_memory(addr=0x%x, mem_id=*0x%x)", addr, mem_id);
306+
sys_mmapper.warning("sys_mmapper_unmap_shared_memory(addr=0x%x, mem_id=*0x%x)", addr, mem_id);
307307

308308
const auto area = vm::get(vm::any, addr);
309309

310-
if (!area || addr != area->addr || addr < 0x30000000 || addr >= 0xC0000000)
310+
if (!area || addr < 0x30000000 || addr >= 0xC0000000)
311311
{
312312
return CELL_EINVAL;
313313
}

rpcs3/Emu/Cell/lv2/sys_vm.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ error_code sys_vm_memory_map(u32 vsize, u32 psize, u32 cid, u64 flag, u64 policy
1010
{
1111
sys_vm.error("sys_vm_memory_map(vsize=0x%x, psize=0x%x, cid=0x%x, flags=0x%llx, policy=0x%llx, addr=*0x%x)", vsize, psize, cid, flag, policy, addr);
1212

13-
if (!vsize || !psize || vsize & 0x2000000 || vsize > 0x10000000 || psize > 0x10000000 || policy != SYS_VM_POLICY_AUTO_RECOMMENDED)
13+
if (!vsize || !psize || vsize % 0x2000000 || vsize > 0x10000000 || psize > 0x10000000 || policy != SYS_VM_POLICY_AUTO_RECOMMENDED)
1414
{
1515
return CELL_EINVAL;
1616
}

rpcs3/Emu/Memory/vm.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include "Utilities/Thread.h"
66
#include "Utilities/VirtualMemory.h"
77
#include "Emu/CPU/CPUThread.h"
8+
#include "Emu/Cell/lv2/sys_memory.h"
89

910
#ifdef _WIN32
1011
#include <Windows.h>
@@ -599,8 +600,17 @@ namespace vm
599600
{
600601
return 0;
601602
}
603+
u8 pflags = page_readable | page_writable;
604+
if ((flags & SYS_MEMORY_PAGE_SIZE_1M) == SYS_MEMORY_PAGE_SIZE_1M)
605+
{
606+
pflags |= page_1m_size;
607+
}
608+
else if ((flags & SYS_MEMORY_PAGE_SIZE_64K) == SYS_MEMORY_PAGE_SIZE_64K)
609+
{
610+
pflags |= page_64k_size;
611+
}
602612

603-
if (!try_alloc(addr, size, page_readable | page_writable, sup))
613+
if (!try_alloc(addr, size, pflags, sup))
604614
{
605615
return 0;
606616
}

0 commit comments

Comments
 (0)