summaryrefslogtreecommitdiffhomepage
path: root/pkg/sentry/platform/platform.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/sentry/platform/platform.go')
-rw-r--r--pkg/sentry/platform/platform.go90
1 files changed, 2 insertions, 88 deletions
diff --git a/pkg/sentry/platform/platform.go b/pkg/sentry/platform/platform.go
index b2ce851da..d1c9458ea 100644
--- a/pkg/sentry/platform/platform.go
+++ b/pkg/sentry/platform/platform.go
@@ -19,17 +19,15 @@ package platform
import (
"fmt"
- "io"
"gvisor.googlesource.com/gvisor/pkg/abi/linux"
"gvisor.googlesource.com/gvisor/pkg/sentry/arch"
"gvisor.googlesource.com/gvisor/pkg/sentry/safemem"
- "gvisor.googlesource.com/gvisor/pkg/sentry/usage"
"gvisor.googlesource.com/gvisor/pkg/sentry/usermem"
)
-// Platform provides abstractions for execution contexts (Context) and memory
-// management (Memory, AddressSpace).
+// Platform provides abstractions for execution contexts (Context,
+// AddressSpace).
type Platform interface {
// SupportsAddressSpaceIO returns true if AddressSpaces returned by this
// Platform support AddressSpaceIO methods.
@@ -87,9 +85,6 @@ type Platform interface {
// NewContext returns a new execution context.
NewContext() Context
- // Memory returns memory for allocations.
- Memory() Memory
-
// PreemptAllCPUs causes all concurrent calls to Context.Switch(), as well
// as the first following call to Context.Switch() for each Context, to
// return ErrContextCPUPreempted.
@@ -352,84 +347,3 @@ type File interface {
func (fr FileRange) String() string {
return fmt.Sprintf("[%#x, %#x)", fr.Start, fr.End)
}
-
-// Memory represents an allocatable File that may be mapped into any
-// AddressSpace associated with the same Platform.
-type Memory interface {
- File
-
- // Allocate returns a range of initially-zeroed pages of the given length
- // with the given accounting kind and a single reference held by the
- // caller. When the last reference on an allocated page is released,
- // ownership of the page is returned to the Memory, allowing it to be
- // returned by a future call to Allocate.
- //
- // Preconditions: length must be page-aligned and non-zero.
- Allocate(length uint64, kind usage.MemoryKind) (FileRange, error)
-
- // Decommit releases resources associated with maintaining the contents of
- // the given frames. If Decommit succeeds, future accesses of the
- // decommitted frames will read zeroes.
- //
- // Preconditions: fr.Length() > 0.
- Decommit(fr FileRange) error
-
- // UpdateUsage updates the memory usage statistics. This must be called
- // before the relevant memory statistics in usage.MemoryAccounting can
- // be considered accurate.
- UpdateUsage() error
-
- // TotalUsage returns an aggregate usage for all memory statistics
- // except Mapped (which is external to the Memory implementation). This
- // is generally much cheaper than UpdateUsage, but will not provide a
- // fine-grained breakdown.
- TotalUsage() (uint64, error)
-
- // TotalSize returns the current maximum size of the Memory in bytes. The
- // value returned by TotalSize is permitted to change.
- TotalSize() uint64
-
- // Destroy releases all resources associated with the Memory.
- //
- // Preconditions: There are no remaining uses of any of the freed memory's
- // frames.
- //
- // Postconditions: None of the Memory's methods may be called after Destroy.
- Destroy()
-
- // SaveTo saves the memory state to the given stream, which will
- // generally be a statefile.
- SaveTo(w io.Writer) error
-
- // LoadFrom loads the memory state from the given stream, which will
- // generally be a statefile.
- LoadFrom(r io.Reader) error
-}
-
-// AllocateAndFill allocates memory of the given kind from mem and fills it by
-// calling r.ReadToBlocks() repeatedly until either length bytes are read or a
-// non-nil error is returned. It returns the memory filled by r, truncated down
-// to the nearest page. If this is shorter than length bytes due to an error
-// returned by r.ReadToBlocks(), it returns that error.
-//
-// Preconditions: length > 0. length must be page-aligned.
-func AllocateAndFill(mem Memory, length uint64, kind usage.MemoryKind, r safemem.Reader) (FileRange, error) {
- fr, err := mem.Allocate(length, kind)
- if err != nil {
- return FileRange{}, err
- }
- dsts, err := mem.MapInternal(fr, usermem.Write)
- if err != nil {
- mem.DecRef(fr)
- return FileRange{}, err
- }
- n, err := safemem.ReadFullToBlocks(r, dsts)
- un := uint64(usermem.Addr(n).RoundDown())
- if un < length {
- // Free unused memory and update fr to contain only the memory that is
- // still allocated.
- mem.DecRef(FileRange{fr.Start + un, fr.End})
- fr.End = fr.Start + un
- }
- return fr, err
-}