summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--pkg/sentry/platform/kvm/machine.go6
-rw-r--r--pkg/sentry/platform/ring0/kernel.go23
-rw-r--r--pkg/sentry/platform/ring0/lib_amd64.go3
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