ptos/amd64: tlb: Add TLB operation helpers
Signed-off-by: Chloe M <chloe@mensia.org>
This commit is contained in:
@@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2026, Chloe M.
|
||||||
|
* Provided under the BSD-3 clause.
|
||||||
|
*
|
||||||
|
* Description: TLB related helpers
|
||||||
|
* Author: Chloe M.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _MACHINE_TLB_H_
|
||||||
|
#define _MACHINE_TLB_H_ 1
|
||||||
|
|
||||||
|
#include <ptdef.h>
|
||||||
|
#include <hal/page.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Flush a single virtual address from the translation
|
||||||
|
* lookaside buffer.
|
||||||
|
*
|
||||||
|
* @VirtualBase: Virtual address to flush
|
||||||
|
*/
|
||||||
|
ALWAYS_INLINE static inline VOID
|
||||||
|
MdTlbFlushSingle(UPTR VirtualBase)
|
||||||
|
{
|
||||||
|
VirtualBase = ALIGN_DOWN(VirtualBase, PAGESIZE);
|
||||||
|
ASMV(
|
||||||
|
"invlpg %0"
|
||||||
|
:
|
||||||
|
: "m" (VirtualBase)
|
||||||
|
: "memory"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Flush all entries from the translation lookaside buffer.
|
||||||
|
*
|
||||||
|
* XXX: This should be used quite judiciously due to the
|
||||||
|
* collateral damage caused by this operation which
|
||||||
|
* incurs a large performance penalty.
|
||||||
|
*/
|
||||||
|
ALWAYS_INLINE static inline VOID
|
||||||
|
MdTlbFlushAll(VOID)
|
||||||
|
{
|
||||||
|
ASMV(
|
||||||
|
"mov %%cr3, %%rax\n"
|
||||||
|
"mov %%rax, %%cr3"
|
||||||
|
:
|
||||||
|
:
|
||||||
|
: "memory", "rax"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* !_MACHINE_TLB_H_ */
|
||||||
Reference in New Issue
Block a user