diff options
-rw-r--r-- | pkg/sentry/platform/kvm/machine.go | 6 | ||||
-rw-r--r-- | pkg/sentry/platform/ring0/kernel.go | 23 | ||||
-rw-r--r-- | pkg/sentry/platform/ring0/lib_amd64.go | 3 |
3 files changed, 10 insertions, 22 deletions
diff --git a/pkg/sentry/platform/kvm/machine.go b/pkg/sentry/platform/kvm/machine.go index 3c1e01241..ab2ccc695 100644 --- a/pkg/sentry/platform/kvm/machine.go +++ b/pkg/sentry/platform/kvm/machine.go @@ -40,7 +40,7 @@ type machine struct { nextSlot uint32 // kernel is the set of global structures. - kernel *ring0.Kernel + kernel ring0.Kernel // mappingCache is used for mapPhysical. mappingCache sync.Map @@ -135,7 +135,7 @@ func newMachine(vm int, vCPUs int) (*machine, error) { // issues when you've got > n active threads.) vCPUs = n } - m.kernel = ring0.New(ring0.KernelOpts{ + m.kernel.Init(ring0.KernelOpts{ PageTables: pagetables.New(newAllocator()), }) @@ -158,7 +158,7 @@ func newMachine(vm int, vCPUs int) (*machine, error) { fd: int(fd), machine: m, } - c.CPU.Init(m.kernel) + c.CPU.Init(&m.kernel) c.CPU.KernelSyscall = bluepillSyscall c.CPU.KernelException = bluepillException m.vCPUs[uint64(-id)] = c // See above. diff --git a/pkg/sentry/platform/ring0/kernel.go b/pkg/sentry/platform/ring0/kernel.go index b0471ab9a..62e67005e 100644 --- a/pkg/sentry/platform/ring0/kernel.go +++ b/pkg/sentry/platform/ring0/kernel.go @@ -14,27 +14,13 @@ package ring0 -// New creates a new kernel. +// Init initializes a new kernel. // // N.B. that constraints on KernelOpts must be satisfied. // -// Init must have been called. -func New(opts KernelOpts) *Kernel { - k := new(Kernel) +//go:nosplit +func (k *Kernel) Init(opts KernelOpts) { k.init(opts) - return k -} - -// NewCPU creates a new CPU associated with this Kernel. -// -// Note that execution of the new CPU must begin at Start, with constraints as -// documented. Initialization is not completed by this method alone. -// -// See also Init. -func (k *Kernel) NewCPU() *CPU { - c := new(CPU) - c.Init(k) - return c } // Halt halts execution. @@ -56,8 +42,7 @@ func defaultSyscall() { Halt() } //go:nosplit func defaultException(Vector) { Halt() } -// Init allows the initialization of a CPU from a kernel without allocation. -// The same constraints as NewCPU apply. +// Init initializes a new CPU. // // Init allows embedding in other objects. func (c *CPU) Init(k *Kernel) { diff --git a/pkg/sentry/platform/ring0/lib_amd64.go b/pkg/sentry/platform/ring0/lib_amd64.go index de2842b5a..989e3e383 100644 --- a/pkg/sentry/platform/ring0/lib_amd64.go +++ b/pkg/sentry/platform/ring0/lib_amd64.go @@ -64,6 +64,9 @@ func wrgsmsr(addr uintptr) // writeCR3 writes the CR3 value. func writeCR3(phys uintptr) +// readCR3 reads the current CR3 value. +func readCR3() uintptr + // readCR2 reads the current CR2 value. func readCR2() uintptr |