diff options
| author | Amlal <amlal@nekernel.org> | 2025-04-28 09:06:35 +0200 |
|---|---|---|
| committer | Amlal <amlal@nekernel.org> | 2025-04-28 09:06:35 +0200 |
| commit | 2ead335ccc7afd8e1b2a6533e966c10f49fbdfe9 (patch) | |
| tree | ca447cda4307a2e51990d901be29a72829b2ea4c /dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc | |
| parent | 8a7396493c3effb356d2dc4484b993b4698bc422 (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.cc | 16 |
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); |
