From 5002fde3746906add7fb079a7db964ac7be98ada Mon Sep 17 00:00:00 2001 From: Belal Ashraf Date: Thu, 4 Apr 2024 23:43:18 +0200 Subject: [PATCH 01/10] Fix bug in ConvertToKMemoryPermission --- src/core/hle/kernel/k_memory_block.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/hle/kernel/k_memory_block.h b/src/core/hle/kernel/k_memory_block.h index d2b7e9a66e..70e1dfa3fb 100644 --- a/src/core/hle/kernel/k_memory_block.h +++ b/src/core/hle/kernel/k_memory_block.h @@ -176,7 +176,7 @@ constexpr KMemoryPermission ConvertToKMemoryPermission(Svc::MemoryPermission per (static_cast(perm) & KMemoryPermission::UserMask) | KMemoryPermission::KernelRead | ((static_cast(perm) & KMemoryPermission::UserWrite) - << KMemoryPermission::KernelShift) | + ? KMemoryPermission::KernelWrite : KMemoryPermission::None) | (perm == Svc::MemoryPermission::None ? KMemoryPermission::NotMapped : KMemoryPermission::None)); } From 96db423b410226213866c4109a9b5061c1597720 Mon Sep 17 00:00:00 2001 From: Belal Ashraf Date: Fri, 5 Apr 2024 01:07:56 +0200 Subject: [PATCH 02/10] fix formatting --- src/core/hle/kernel/k_memory_block.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/core/hle/kernel/k_memory_block.h b/src/core/hle/kernel/k_memory_block.h index 70e1dfa3fb..f98cba3984 100644 --- a/src/core/hle/kernel/k_memory_block.h +++ b/src/core/hle/kernel/k_memory_block.h @@ -176,7 +176,8 @@ constexpr KMemoryPermission ConvertToKMemoryPermission(Svc::MemoryPermission per (static_cast(perm) & KMemoryPermission::UserMask) | KMemoryPermission::KernelRead | ((static_cast(perm) & KMemoryPermission::UserWrite) - ? KMemoryPermission::KernelWrite : KMemoryPermission::None) | + ? KMemoryPermission::KernelWrite + : KMemoryPermission::None) | (perm == Svc::MemoryPermission::None ? KMemoryPermission::NotMapped : KMemoryPermission::None)); } From 5f56ba2af65eb5c461ed7cd711144a877604a301 Mon Sep 17 00:00:00 2001 From: Belal Ashraf Date: Sun, 7 Apr 2024 19:09:03 +0200 Subject: [PATCH 03/10] fix formatting again --- src/core/hle/kernel/k_memory_block.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/hle/kernel/k_memory_block.h b/src/core/hle/kernel/k_memory_block.h index f98cba3984..74f9c1128e 100644 --- a/src/core/hle/kernel/k_memory_block.h +++ b/src/core/hle/kernel/k_memory_block.h @@ -176,8 +176,8 @@ constexpr KMemoryPermission ConvertToKMemoryPermission(Svc::MemoryPermission per (static_cast(perm) & KMemoryPermission::UserMask) | KMemoryPermission::KernelRead | ((static_cast(perm) & KMemoryPermission::UserWrite) - ? KMemoryPermission::KernelWrite - : KMemoryPermission::None) | + ? KMemoryPermission::KernelWrite + : KMemoryPermission::None) | (perm == Svc::MemoryPermission::None ? KMemoryPermission::NotMapped : KMemoryPermission::None)); } From 3c9732c9d1d6bdb377cbfa3bdf9b6ea4a3d408af Mon Sep 17 00:00:00 2001 From: Belal Ashraf Date: Mon, 8 Apr 2024 16:30:25 +0200 Subject: [PATCH 04/10] fix formatting again again --- src/core/hle/kernel/k_memory_block.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/hle/kernel/k_memory_block.h b/src/core/hle/kernel/k_memory_block.h index 74f9c1128e..02b9dc9be8 100644 --- a/src/core/hle/kernel/k_memory_block.h +++ b/src/core/hle/kernel/k_memory_block.h @@ -176,8 +176,8 @@ constexpr KMemoryPermission ConvertToKMemoryPermission(Svc::MemoryPermission per (static_cast(perm) & KMemoryPermission::UserMask) | KMemoryPermission::KernelRead | ((static_cast(perm) & KMemoryPermission::UserWrite) - ? KMemoryPermission::KernelWrite - : KMemoryPermission::None) | + ? KMemoryPermission::KernelWrite + : KMemoryPermission::None) | (perm == Svc::MemoryPermission::None ? KMemoryPermission::NotMapped : KMemoryPermission::None)); } From f91107da04f3a065c0c942a1fdc60cfbaef2b4a5 Mon Sep 17 00:00:00 2001 From: Belal Ashraf Date: Mon, 8 Apr 2024 16:36:08 +0200 Subject: [PATCH 05/10] take in page properties by reference instead of by value --- src/core/hle/kernel/k_page_table_base.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/hle/kernel/k_page_table_base.h b/src/core/hle/kernel/k_page_table_base.h index 37c745d14a..a61d59c67a 100644 --- a/src/core/hle/kernel/k_page_table_base.h +++ b/src/core/hle/kernel/k_page_table_base.h @@ -441,7 +441,7 @@ private: Svc::MemoryState state) const; Result AllocateAndMapPagesImpl(PageLinkedList* page_list, KProcessAddress address, - size_t num_pages, KMemoryPermission perm); + size_t num_pages, KPageProperties &perm); Result MapPageGroupImpl(PageLinkedList* page_list, KProcessAddress address, const KPageGroup& pg, const KPageProperties properties, bool reuse_ll); From 6d13a5ea2b148af57bb1b502ea7812fe751acb88 Mon Sep 17 00:00:00 2001 From: Belal Ashraf Date: Mon, 8 Apr 2024 16:50:22 +0200 Subject: [PATCH 06/10] update definition and callsites --- src/core/hle/kernel/k_page_table_base.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/core/hle/kernel/k_page_table_base.cpp b/src/core/hle/kernel/k_page_table_base.cpp index 7714717f74..0ad0ca2595 100644 --- a/src/core/hle/kernel/k_page_table_base.cpp +++ b/src/core/hle/kernel/k_page_table_base.cpp @@ -1594,7 +1594,7 @@ size_t KPageTableBase::GetAliasCodeDataSize() const { } Result KPageTableBase::AllocateAndMapPagesImpl(PageLinkedList* page_list, KProcessAddress address, - size_t num_pages, KMemoryPermission perm) { + size_t num_pages, KPageProperties &perm) { ASSERT(this->IsLockedByCurrentThread()); // Create a page group to hold the pages we allocate. @@ -1615,7 +1615,6 @@ Result KPageTableBase::AllocateAndMapPagesImpl(PageLinkedList* page_list, KProce } // Map the pages. - const KPageProperties properties = {perm, false, false, DisableMergeAttribute::None}; R_RETURN(this->Operate(page_list, address, num_pages, pg, properties, OperationType::MapGroup, false)); } @@ -2749,12 +2748,12 @@ Result KPageTableBase::MapPages(KProcessAddress* out_addr, size_t num_pages, siz KScopedPageTableUpdater updater(this); // Perform mapping operation. + KPageProperties properties = {perm, false, false, DisableMergeAttribute::DisableHead}; if (is_pa_valid) { - const KPageProperties properties = {perm, false, false, DisableMergeAttribute::DisableHead}; R_TRY(this->Operate(updater.GetPageList(), addr, num_pages, phys_addr, true, properties, OperationType::Map, false)); } else { - R_TRY(this->AllocateAndMapPagesImpl(updater.GetPageList(), addr, num_pages, perm)); + R_TRY(this->AllocateAndMapPagesImpl(updater.GetPageList(), addr, num_pages, properties)); } // Update the blocks. @@ -2793,7 +2792,8 @@ Result KPageTableBase::MapPages(KProcessAddress address, size_t num_pages, KMemo KScopedPageTableUpdater updater(this); // Map the pages. - R_TRY(this->AllocateAndMapPagesImpl(updater.GetPageList(), address, num_pages, perm)); + KPageProperties properties = {perm, false, false, DisableMergeAttribute::DisableHead} + R_TRY(this->AllocateAndMapPagesImpl(updater.GetPageList(), address, num_pages, properties)); // Update the blocks. m_memory_block_manager.Update(std::addressof(allocator), address, num_pages, state, perm, From bd101a52a08f991f0cc04fcda38daa644bc3ce0a Mon Sep 17 00:00:00 2001 From: Belal Ashraf Date: Mon, 8 Apr 2024 16:55:05 +0200 Subject: [PATCH 07/10] fix formatting (part 1) --- src/core/hle/kernel/k_page_table_base.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/hle/kernel/k_page_table_base.cpp b/src/core/hle/kernel/k_page_table_base.cpp index 0ad0ca2595..5201e63d3c 100644 --- a/src/core/hle/kernel/k_page_table_base.cpp +++ b/src/core/hle/kernel/k_page_table_base.cpp @@ -1594,7 +1594,7 @@ size_t KPageTableBase::GetAliasCodeDataSize() const { } Result KPageTableBase::AllocateAndMapPagesImpl(PageLinkedList* page_list, KProcessAddress address, - size_t num_pages, KPageProperties &perm) { + size_t num_pages, KPageProperties& perm) { ASSERT(this->IsLockedByCurrentThread()); // Create a page group to hold the pages we allocate. From 311cfa231be11d7ecd93561a53a67a486fab9511 Mon Sep 17 00:00:00 2001 From: Belal Ashraf Date: Mon, 8 Apr 2024 16:55:42 +0200 Subject: [PATCH 08/10] fix formatting (part 2) --- src/core/hle/kernel/k_page_table_base.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/hle/kernel/k_page_table_base.h b/src/core/hle/kernel/k_page_table_base.h index a61d59c67a..d199ac6974 100644 --- a/src/core/hle/kernel/k_page_table_base.h +++ b/src/core/hle/kernel/k_page_table_base.h @@ -441,7 +441,7 @@ private: Svc::MemoryState state) const; Result AllocateAndMapPagesImpl(PageLinkedList* page_list, KProcessAddress address, - size_t num_pages, KPageProperties &perm); + size_t num_pages, KPageProperties& perm); Result MapPageGroupImpl(PageLinkedList* page_list, KProcessAddress address, const KPageGroup& pg, const KPageProperties properties, bool reuse_ll); From 6d200867422de44c505a30eb4b67691453798280 Mon Sep 17 00:00:00 2001 From: Belal Ashraf Date: Mon, 8 Apr 2024 23:57:38 +0200 Subject: [PATCH 09/10] missed a semicolon --- src/core/hle/kernel/k_page_table_base.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/hle/kernel/k_page_table_base.cpp b/src/core/hle/kernel/k_page_table_base.cpp index 5201e63d3c..6063b0e4db 100644 --- a/src/core/hle/kernel/k_page_table_base.cpp +++ b/src/core/hle/kernel/k_page_table_base.cpp @@ -2792,7 +2792,7 @@ Result KPageTableBase::MapPages(KProcessAddress address, size_t num_pages, KMemo KScopedPageTableUpdater updater(this); // Map the pages. - KPageProperties properties = {perm, false, false, DisableMergeAttribute::DisableHead} + KPageProperties properties = {perm, false, false, DisableMergeAttribute::DisableHead}; R_TRY(this->AllocateAndMapPagesImpl(updater.GetPageList(), address, num_pages, properties)); // Update the blocks. From 81959ea8e5bbd2f787c19f40770efb04d64332c3 Mon Sep 17 00:00:00 2001 From: Belal Ashraf Date: Tue, 9 Apr 2024 20:25:44 +0200 Subject: [PATCH 10/10] fix wrong memory permission --- src/core/hle/kernel/k_memory_block.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/hle/kernel/k_memory_block.h b/src/core/hle/kernel/k_memory_block.h index 02b9dc9be8..46ee7e8cb3 100644 --- a/src/core/hle/kernel/k_memory_block.h +++ b/src/core/hle/kernel/k_memory_block.h @@ -175,7 +175,7 @@ constexpr KMemoryPermission ConvertToKMemoryPermission(Svc::MemoryPermission per return static_cast( (static_cast(perm) & KMemoryPermission::UserMask) | KMemoryPermission::KernelRead | - ((static_cast(perm) & KMemoryPermission::UserWrite) + ((static_cast(perm) & Svc::MemoryPermission::UserWrite) ? KMemoryPermission::KernelWrite : KMemoryPermission::None) | (perm == Svc::MemoryPermission::None ? KMemoryPermission::NotMapped