mirror of
https://github.com/taigrr/gopher-os
synced 2025-01-18 04:43:13 -08:00
Move TLB-handling code to the cpu pkg
This commit is contained in:
parent
3923e09aac
commit
d793300279
11
kernel/cpu/cpu_amd64.go
Normal file
11
kernel/cpu/cpu_amd64.go
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
package cpu
|
||||||
|
|
||||||
|
// FlushTLBEntry flushes a TLB entry for a particular virtual address.
|
||||||
|
func FlushTLBEntry(virtAddr uintptr)
|
||||||
|
|
||||||
|
// SwitchPDT sets the root page table directory to point to the specified
|
||||||
|
// physical address and flushes the TLB.
|
||||||
|
func SwitchPDT(pdtPhysAddr uintptr)
|
||||||
|
|
||||||
|
// ActivePDT returns the physical address of the currently active page table.
|
||||||
|
func ActivePDT() uintptr
|
@ -1,15 +1,16 @@
|
|||||||
#include "textflag.h"
|
#include "textflag.h"
|
||||||
|
|
||||||
TEXT ·flushTLBEntry(SB),NOSPLIT,$0
|
TEXT ·FlushTLBEntry(SB),NOSPLIT,$0
|
||||||
INVLPG virtAddr+0(FP)
|
INVLPG virtAddr+0(FP)
|
||||||
RET
|
RET
|
||||||
|
|
||||||
TEXT ·switchPDT(SB),NOSPLIT,$0
|
TEXT ·SwitchPDT(SB),NOSPLIT,$0
|
||||||
// loading CR3 also triggers a TLB flush
|
// loading CR3 also triggers a TLB flush
|
||||||
MOVQ pdtPhysAddr+0(FP), CR3
|
MOVQ pdtPhysAddr+0(FP), CR3
|
||||||
RET
|
RET
|
||||||
|
|
||||||
TEXT ·activePDT(SB),NOSPLIT,$0
|
TEXT ·ActivePDT(SB),NOSPLIT,$0
|
||||||
MOVQ CR3, AX
|
MOVQ CR3, AX
|
||||||
MOVQ AX, ret+0(FP)
|
MOVQ AX, ret+0(FP)
|
||||||
RET
|
RET
|
||||||
|
|
@ -4,6 +4,7 @@ import (
|
|||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
"github.com/achilleasa/gopher-os/kernel"
|
"github.com/achilleasa/gopher-os/kernel"
|
||||||
|
"github.com/achilleasa/gopher-os/kernel/cpu"
|
||||||
"github.com/achilleasa/gopher-os/kernel/mem"
|
"github.com/achilleasa/gopher-os/kernel/mem"
|
||||||
"github.com/achilleasa/gopher-os/kernel/mem/pmm"
|
"github.com/achilleasa/gopher-os/kernel/mem/pmm"
|
||||||
)
|
)
|
||||||
@ -18,7 +19,7 @@ var (
|
|||||||
|
|
||||||
// flushTLBEntryFn is used by tests to override calls to flushTLBEntry
|
// flushTLBEntryFn is used by tests to override calls to flushTLBEntry
|
||||||
// which will cause a fault if called in user-mode.
|
// which will cause a fault if called in user-mode.
|
||||||
flushTLBEntryFn = flushTLBEntry
|
flushTLBEntryFn = cpu.FlushTLBEntry
|
||||||
|
|
||||||
errNoHugePageSupport = &kernel.Error{Module: "vmm", Message: "huge pages are not supported"}
|
errNoHugePageSupport = &kernel.Error{Module: "vmm", Message: "huge pages are not supported"}
|
||||||
)
|
)
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
"github.com/achilleasa/gopher-os/kernel"
|
"github.com/achilleasa/gopher-os/kernel"
|
||||||
|
"github.com/achilleasa/gopher-os/kernel/cpu"
|
||||||
"github.com/achilleasa/gopher-os/kernel/mem"
|
"github.com/achilleasa/gopher-os/kernel/mem"
|
||||||
"github.com/achilleasa/gopher-os/kernel/mem/pmm"
|
"github.com/achilleasa/gopher-os/kernel/mem/pmm"
|
||||||
)
|
)
|
||||||
@ -11,11 +12,11 @@ import (
|
|||||||
var (
|
var (
|
||||||
// activePDTFn is used by tests to override calls to activePDT which
|
// activePDTFn is used by tests to override calls to activePDT which
|
||||||
// will cause a fault if called in user-mode.
|
// will cause a fault if called in user-mode.
|
||||||
activePDTFn = activePDT
|
activePDTFn = cpu.ActivePDT
|
||||||
|
|
||||||
// switchPDTFn is used by tests to override calls to switchPDT which
|
// switchPDTFn is used by tests to override calls to switchPDT which
|
||||||
// will cause a fault if called in user-mode.
|
// will cause a fault if called in user-mode.
|
||||||
switchPDTFn = switchPDT
|
switchPDTFn = cpu.SwitchPDT
|
||||||
|
|
||||||
// mapFn is used by tests and is automatically inlined by the compiler.
|
// mapFn is used by tests and is automatically inlined by the compiler.
|
||||||
mapFn = Map
|
mapFn = Map
|
||||||
|
@ -1,11 +0,0 @@
|
|||||||
package vmm
|
|
||||||
|
|
||||||
// flushTLBEntry flushes a TLB entry for a particular virtual address.
|
|
||||||
func flushTLBEntry(virtAddr uintptr)
|
|
||||||
|
|
||||||
// switchPDT sets the root page table directory to point to the specified
|
|
||||||
// physical address and flushes the TLB.
|
|
||||||
func switchPDT(pdtPhysAddr uintptr)
|
|
||||||
|
|
||||||
// activePDT returns the physical address of the currently active page table.
|
|
||||||
func activePDT() uintptr
|
|
Loading…
x
Reference in New Issue
Block a user