Fixes (sys_memory, sys_mmapper)

DeS
This commit is contained in:
Nekotekina 2017-03-11 21:37:18 +03:00
parent 1f17109203
commit ce35554a55
2 changed files with 16 additions and 3 deletions

View File

@ -158,7 +158,20 @@ error_code sys_memory_get_page_attribute(u32 addr, vm::ptr<sys_page_attr_t> attr
attr->attribute = 0x40000ull; // SYS_MEMORY_PROT_READ_WRITE (TODO)
attr->access_right = 0xFull; // SYS_MEMORY_ACCESS_RIGHT_ANY (TODO)
attr->page_size = 4096;
if (vm::check_addr(addr, 1, vm::page_1m_size))
{
attr->page_size = 0x100000;
}
else if (vm::check_addr(addr, 1, vm::page_64k_size))
{
attr->page_size = 0x10000;
}
else
{
attr->page_size = 4096;
}
return CELL_OK;
}

View File

@ -202,7 +202,7 @@ error_code sys_mmapper_free_shared_memory(u32 mem_id)
// Conditionally remove memory ID
const auto mem = idm::withdraw<lv2_obj, lv2_memory>(mem_id, [&](lv2_memory& mem) -> CellError
{
if (mem.addr.compare_and_swap_test(0, -1))
if (!mem.addr.compare_and_swap_test(0, -1))
{
return CELL_EBUSY;
}
@ -271,7 +271,7 @@ error_code sys_mmapper_search_and_map(u32 start_addr, u32 mem_id, u64 flags, vm:
const auto area = vm::get(vm::any, start_addr);
if (!area || start_addr != area->addr || start_addr < 0x30000000 || start_addr >= 0xC0000000)
if (!area || start_addr < 0x30000000 || start_addr >= 0xC0000000)
{
return CELL_EINVAL;
}