summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc
diff options
context:
space:
mode:
authorAmlal <amlal@nekernel.org>2025-04-28 09:06:35 +0200
committerAmlal <amlal@nekernel.org>2025-04-28 09:06:35 +0200
commit2ead335ccc7afd8e1b2a6533e966c10f49fbdfe9 (patch)
treeca447cda4307a2e51990d901be29a72829b2ea4c /dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc
parent8a7396493c3effb356d2dc4484b993b4698bc422 (diff)
dev, kernel: HeFS, Tooling: reworked the mkfs.hefs tool for the new filesystem.
other/related: - Add new KPC codes. - Final refactors for HeFS's Format method. - Dma pool improvements. - Better standard disk I/O names. - Add mm_memory_fence function inside HalPagingMgrAMD64.cc Signed-off-by: Amlal <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc')
-rw-r--r--dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc16
1 files changed, 13 insertions, 3 deletions
diff --git a/dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc b/dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc
index d7a8baf6..b6176e39 100644
--- a/dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc
+++ b/dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc
@@ -94,6 +94,18 @@ UIntPtr hal_get_phys_address(VoidPtr virt) {
}
/***********************************************************************************/
+/// @brief clflush+mfence helper function.
+/***********************************************************************************/
+EXTERN_C Int32 mm_memory_fence(VoidPtr virtual_address) {
+ if (!virtual_address || !hal_get_phys_address(virtual_address)) return kErrorInvalidData;
+
+ asm volatile("clflush (%0)" : : "r"(virtual_address) : "memory");
+ asm volatile("mfence" ::: "memory");
+
+ return kErrorSuccess;
+}
+
+/***********************************************************************************/
/// @brief Maps or allocates a page from virtual_address.
/// @param virtual_address a valid virtual address.
/// @param phys_addr point to physical address.
@@ -136,9 +148,7 @@ EXTERN_C Int32 mm_map_page(VoidPtr virtual_address, VoidPtr physical_address, UI
hal_invl_tlb(virtual_address);
- asm volatile("clflush (%0)" : : "r"(virtual_address) : "memory");
-
- asm volatile("mfence" ::: "memory");
+ mm_memory_fence(virtual_address);
mmi_page_status(pte);