diff options
author | bunnei <bunneidev@gmail.com> | 2022-11-04 05:05:57 +0100 |
---|---|---|
committer | bunnei <bunneidev@gmail.com> | 2022-11-04 05:17:08 +0100 |
commit | 05ae0cab0e61e4859ba20b468d103ca13a6a79eb (patch) | |
tree | dc6f0f9a731cb1295cc96c2ada07b84f1c3c2c44 /src/core/hle/kernel | |
parent | core: hle: kernel: k_page_table: Manually open/close pages for IPC methods. (diff) | |
download | yuzu-05ae0cab0e61e4859ba20b468d103ca13a6a79eb.tar yuzu-05ae0cab0e61e4859ba20b468d103ca13a6a79eb.tar.gz yuzu-05ae0cab0e61e4859ba20b468d103ca13a6a79eb.tar.bz2 yuzu-05ae0cab0e61e4859ba20b468d103ca13a6a79eb.tar.lz yuzu-05ae0cab0e61e4859ba20b468d103ca13a6a79eb.tar.xz yuzu-05ae0cab0e61e4859ba20b468d103ca13a6a79eb.tar.zst yuzu-05ae0cab0e61e4859ba20b468d103ca13a6a79eb.zip |
Diffstat (limited to 'src/core/hle/kernel')
-rw-r--r-- | src/core/hle/kernel/k_page_table.cpp | 25 |
1 files changed, 8 insertions, 17 deletions
diff --git a/src/core/hle/kernel/k_page_table.cpp b/src/core/hle/kernel/k_page_table.cpp index 73d96de42..fab55a057 100644 --- a/src/core/hle/kernel/k_page_table.cpp +++ b/src/core/hle/kernel/k_page_table.cpp @@ -79,10 +79,6 @@ public: } }; -} // namespace - -namespace { - using namespace Common::Literals; constexpr size_t GetAddressSpaceWidthFromType(FileSys::ProgramAddressSpaceType as_type) { @@ -784,10 +780,9 @@ Result KPageTable::SetupForIpcClient(PageLinkedList* page_list, size_t* out_bloc R_UNLESS(this->Contains(address, size), ResultInvalidCurrentMemory); // Get the source permission. - const auto src_perm = static_cast<KMemoryPermission>( - (test_perm == KMemoryPermission::UserReadWrite) - ? KMemoryPermission::KernelReadWrite | KMemoryPermission::NotMapped - : KMemoryPermission::UserRead); + const auto src_perm = (test_perm == KMemoryPermission::UserReadWrite) + ? KMemoryPermission::KernelReadWrite | KMemoryPermission::NotMapped + : KMemoryPermission::UserRead; // Get aligned extents. const VAddr aligned_src_start = Common::AlignDown((address), PageSize); @@ -1162,10 +1157,9 @@ Result KPageTable::SetupForIpc(VAddr* out_dst_addr, size_t size, VAddr src_addr, const size_t src_map_size = src_map_end - src_map_start; // Ensure that we clean up appropriately if we fail after this. - const auto src_perm = static_cast<KMemoryPermission>( - (test_perm == KMemoryPermission::UserReadWrite) - ? KMemoryPermission::KernelReadWrite | KMemoryPermission::NotMapped - : KMemoryPermission::UserRead); + const auto src_perm = (test_perm == KMemoryPermission::UserReadWrite) + ? KMemoryPermission::KernelReadWrite | KMemoryPermission::NotMapped + : KMemoryPermission::UserRead; ON_RESULT_FAILURE { if (src_map_end > src_map_start) { src_page_table.CleanupForIpcClientOnServerSetupFailure( @@ -2735,8 +2729,7 @@ Result KPageTable::LockForIpcUserBuffer(PAddr* out, VAddr address, size_t size) nullptr, out, address, size, KMemoryState::FlagCanIpcUserBuffer, KMemoryState::FlagCanIpcUserBuffer, KMemoryPermission::All, KMemoryPermission::UserReadWrite, KMemoryAttribute::All, KMemoryAttribute::None, - static_cast<KMemoryPermission>(KMemoryPermission::NotMapped | - KMemoryPermission::KernelReadWrite), + KMemoryPermission::NotMapped | KMemoryPermission::KernelReadWrite, KMemoryAttribute::Locked)); } @@ -2752,9 +2745,7 @@ Result KPageTable::LockForCodeMemory(KPageGroup* out, VAddr addr, size_t size) { R_RETURN(this->LockMemoryAndOpen( out, nullptr, addr, size, KMemoryState::FlagCanCodeMemory, KMemoryState::FlagCanCodeMemory, KMemoryPermission::All, KMemoryPermission::UserReadWrite, KMemoryAttribute::All, - KMemoryAttribute::None, - static_cast<KMemoryPermission>(KMemoryPermission::NotMapped | - KMemoryPermission::KernelReadWrite), + KMemoryAttribute::None, KMemoryPermission::NotMapped | KMemoryPermission::KernelReadWrite, KMemoryAttribute::Locked)); } |