aboutsummaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/memory
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2020-11-13 23:20:32 -0800
committerbunnei <bunneidev@gmail.com>2020-11-29 01:31:52 -0800
commit63fd1bb50302867b233325f253b1e2abbc379875 (patch)
tree65204a55cc87b2b4ef7260744ff96fabc813c9f6 /src/core/hle/kernel/memory
parentc0870315fd89dfeabdbe5833d52e753a5d8417ea (diff)
core: arm: Implement InvalidateCacheRange for CPU cache invalidation.
Diffstat (limited to 'src/core/hle/kernel/memory')
-rw-r--r--src/core/hle/kernel/memory/page_table.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/core/hle/kernel/memory/page_table.cpp b/src/core/hle/kernel/memory/page_table.cpp
index a3fadb533..f53a7be82 100644
--- a/src/core/hle/kernel/memory/page_table.cpp
+++ b/src/core/hle/kernel/memory/page_table.cpp
@@ -670,6 +670,11 @@ ResultCode PageTable::SetCodeMemoryPermission(VAddr addr, std::size_t size, Memo
return RESULT_SUCCESS;
}
+ if ((prev_perm & MemoryPermission::Execute) != (perm & MemoryPermission::Execute)) {
+ // Memory execution state is changing, invalidate CPU cache range
+ system.InvalidateCpuInstructionCacheRange(addr, size);
+ }
+
const std::size_t num_pages{size / PageSize};
const OperationType operation{(perm & MemoryPermission::Execute) != MemoryPermission::None
? OperationType::ChangePermissionsAndRefresh