summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/hle/kernel/k_page_table.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/core/hle/kernel/k_page_table.cpp b/src/core/hle/kernel/k_page_table.cpp
index 2635d8148..73d96de42 100644
--- a/src/core/hle/kernel/k_page_table.cpp
+++ b/src/core/hle/kernel/k_page_table.cpp
@@ -947,6 +947,9 @@ Result KPageTable::SetupForIpcServer(VAddr* out_addr, size_t size, VAddr src_add
947 947
948 ON_RESULT_FAILURE { 948 ON_RESULT_FAILURE {
949 if (cur_mapped_addr != dst_addr) { 949 if (cur_mapped_addr != dst_addr) {
950 // HACK: Manually close the pages.
951 HACK_ClosePages(dst_addr, (cur_mapped_addr - dst_addr) / PageSize);
952
950 ASSERT(Operate(dst_addr, (cur_mapped_addr - dst_addr) / PageSize, 953 ASSERT(Operate(dst_addr, (cur_mapped_addr - dst_addr) / PageSize,
951 KMemoryPermission::None, OperationType::Unmap) 954 KMemoryPermission::None, OperationType::Unmap)
952 .IsSuccess()); 955 .IsSuccess());
@@ -1022,6 +1025,9 @@ Result KPageTable::SetupForIpcServer(VAddr* out_addr, size_t size, VAddr src_add
1022 // Map the page. 1025 // Map the page.
1023 R_TRY(Operate(cur_mapped_addr, 1, test_perm, OperationType::Map, start_partial_page)); 1026 R_TRY(Operate(cur_mapped_addr, 1, test_perm, OperationType::Map, start_partial_page));
1024 1027
1028 // HACK: Manually open the pages.
1029 HACK_OpenPages(start_partial_page, 1);
1030
1025 // Update tracking extents. 1031 // Update tracking extents.
1026 cur_mapped_addr += PageSize; 1032 cur_mapped_addr += PageSize;
1027 cur_block_addr += PageSize; 1033 cur_block_addr += PageSize;
@@ -1050,6 +1056,9 @@ Result KPageTable::SetupForIpcServer(VAddr* out_addr, size_t size, VAddr src_add
1050 R_TRY(Operate(cur_mapped_addr, cur_block_size / PageSize, test_perm, OperationType::Map, 1056 R_TRY(Operate(cur_mapped_addr, cur_block_size / PageSize, test_perm, OperationType::Map,
1051 cur_block_addr)); 1057 cur_block_addr));
1052 1058
1059 // HACK: Manually open the pages.
1060 HACK_OpenPages(cur_block_addr, cur_block_size / PageSize);
1061
1053 // Update tracking extents. 1062 // Update tracking extents.
1054 cur_mapped_addr += cur_block_size; 1063 cur_mapped_addr += cur_block_size;
1055 cur_block_addr = next_entry.phys_addr; 1064 cur_block_addr = next_entry.phys_addr;
@@ -1069,6 +1078,9 @@ Result KPageTable::SetupForIpcServer(VAddr* out_addr, size_t size, VAddr src_add
1069 R_TRY(Operate(cur_mapped_addr, last_block_size / PageSize, test_perm, OperationType::Map, 1078 R_TRY(Operate(cur_mapped_addr, last_block_size / PageSize, test_perm, OperationType::Map,
1070 cur_block_addr)); 1079 cur_block_addr));
1071 1080
1081 // HACK: Manually open the pages.
1082 HACK_OpenPages(cur_block_addr, last_block_size / PageSize);
1083
1072 // Update tracking extents. 1084 // Update tracking extents.
1073 cur_mapped_addr += last_block_size; 1085 cur_mapped_addr += last_block_size;
1074 cur_block_addr += last_block_size; 1086 cur_block_addr += last_block_size;
@@ -1100,6 +1112,9 @@ Result KPageTable::SetupForIpcServer(VAddr* out_addr, size_t size, VAddr src_add
1100 1112
1101 // Map the page. 1113 // Map the page.
1102 R_TRY(Operate(cur_mapped_addr, 1, test_perm, OperationType::Map, end_partial_page)); 1114 R_TRY(Operate(cur_mapped_addr, 1, test_perm, OperationType::Map, end_partial_page));
1115
1116 // HACK: Manually open the pages.
1117 HACK_OpenPages(end_partial_page, 1);
1103 } 1118 }
1104 1119
1105 // Update memory blocks to reflect our changes 1120 // Update memory blocks to reflect our changes
@@ -1202,6 +1217,9 @@ Result KPageTable::CleanupForIpcServer(VAddr address, size_t size, KMemoryState
1202 const size_t aligned_size = aligned_end - aligned_start; 1217 const size_t aligned_size = aligned_end - aligned_start;
1203 const size_t aligned_num_pages = aligned_size / PageSize; 1218 const size_t aligned_num_pages = aligned_size / PageSize;
1204 1219
1220 // HACK: Manually close the pages.
1221 HACK_ClosePages(aligned_start, aligned_num_pages);
1222
1205 // Unmap the pages. 1223 // Unmap the pages.
1206 R_TRY(Operate(aligned_start, aligned_num_pages, KMemoryPermission::None, OperationType::Unmap)); 1224 R_TRY(Operate(aligned_start, aligned_num_pages, KMemoryPermission::None, OperationType::Unmap));
1207 1225