class Sysmem

Defined at line 55 of file ../../src/sysmem/server/sysmem.h

The fuchsia_hardware_sysmem::Sysmem protocol is used by the securemem driver and by external

heaps such as goldfish.

Public Members

thread_checker client_checker_
optional loop_checker_

Public Methods

zx::result<zx::resource> GetInfoResource ()
inspect::Node * heap_node ()

Defined at line 106 of file ../../src/sysmem/server/sysmem.h

async_dispatcher_t * loop_dispatcher ()

This is the dispatcher we run most of sysmem on (at least for now).

Defined at line 147 of file ../../src/sysmem/server/sysmem.h

async_dispatcher_t * client_dispatcher ()

Defined at line 148 of file ../../src/sysmem/server/sysmem.h

std::unordered_set<LogicalBufferCollection *> & logical_buffer_collections ()

Defined at line 150 of file ../../src/sysmem/server/sysmem.h

void AddLogicalBufferCollection (LogicalBufferCollection * collection)

Defined at line 155 of file ../../src/sysmem/server/sysmem.h

void RemoveLogicalBufferCollection (LogicalBufferCollection * collection)

Defined at line 160 of file ../../src/sysmem/server/sysmem.h

inspect::Node & collections_node ()

Defined at line 169 of file ../../src/sysmem/server/sysmem.h

void set_settings (const Settings & settings)

Defined at line 171 of file ../../src/sysmem/server/sysmem.h

const Settings & settings ()

Defined at line 173 of file ../../src/sysmem/server/sysmem.h

void ResetThreadCheckerForTesting ()

Defined at line 175 of file ../../src/sysmem/server/sysmem.h

bool protected_ranges_disable_dynamic ()

Defined at line 177 of file ../../src/sysmem/server/sysmem.h

bool is_secure_mem_expected ()

false - no secure heaps are expected to exist

true - secure heaps are expected to exist (regardless of whether any of them currently exist)

Defined at line 184 of file ../../src/sysmem/server/sysmem.h

bool is_secure_mem_ready ()

false - secure mem is expected, but is not yet ready

true - secure mem is not expected (and is therefore as ready as it will ever be / ready in the

"secure mem system is ready for allocation requests" sense), or secure mem is expected and

ready.

Defined at line 198 of file ../../src/sysmem/server/sysmem.h

void Sysmem (async_dispatcher_t * dispatcher)

Use Create() instead.

Defined at line 206 of file ../../src/sysmem/server/sysmem.cc

bool was_secure_mem_ready ()

Defined at line 208 of file ../../src/sysmem/server/sysmem.h

void ~Sysmem ()

Defined at line 217 of file ../../src/sysmem/server/sysmem.cc

template <typename F>
void PostTask (F to_run)

Defined at line 217 of file ../../src/sysmem/server/sysmem.h

zx_status_t GetContiguousGuardParameters (const std::optional<sysmem_config::Config> & config, uint64_t * guard_bytes_out, bool * unused_pages_guarded, int64_t * unused_guard_pattern_period_bytes, zx::duration * unused_page_check_cycle_period, bool * internal_guard_pages_out, bool * crash_on_fail_out)

Defined at line 223 of file ../../src/sysmem/server/sysmem.cc

template <typename F>
void PostTaskToClientDispatcher (F to_run)

Defined at line 224 of file ../../src/sysmem/server/sysmem.h

template <typename F>
void RunSyncOnLoop (F to_run)

Runs `to_run` on the sysmem `loop_` dispatcher and waits for `to_run` to finish.

Must not be called from the `loop_` dispatcher, and `to_run` must not call `RunSyncOnLoop()` or

`SyncCall()`, otherwise it will hang forever.

Defined at line 235 of file ../../src/sysmem/server/sysmem.h

template <typename F>
void RunSyncOnClientDispatcher (F to_run)

Defined at line 245 of file ../../src/sysmem/server/sysmem.h

template <typename Callable, typename... Args>
auto SyncCall (Callable && callable, Args &&... args)

Runs callable on the sysmem `loop_` dispatcher and waits for `callable` to finish, and returns

whatever callable returned.

Must not be called from the `loop_` dispatcher, and `to_run` must not call `RunSyncOnLoop()` or

`SyncCall()`, otherwise it will hang forever.

Defined at line 260 of file ../../src/sysmem/server/sysmem.h

void OnAllocationFailure ()

Defined at line 291 of file ../../src/sysmem/server/sysmem.h

fidl::ServerBindingGroup<fuchsia_sysmem::Allocator> & v1_allocators ()

Defined at line 294 of file ../../src/sysmem/server/sysmem.h

fidl::ServerBindingGroup<fuchsia_sysmem2::Allocator> & v2_allocators ()

Defined at line 295 of file ../../src/sysmem/server/sysmem.h

fidl::ServerBindingGroup<fuchsia_hardware_sysmem::Sysmem> & BindingsForTest ()

Defined at line 303 of file ../../src/sysmem/server/sysmem.h

const UsagePixelFormatCost & usage_pixel_format_cost ()

Defined at line 305 of file ../../src/sysmem/server/sysmem.h

zx::bti & mutable_bti_for_testing ()

Defined at line 314 of file ../../src/sysmem/server/sysmem.h

zx::result<std::unique_ptr<Sysmem>> Create (async_dispatcher_t * dispatcher, const CreateArgs & create_args)

Defined at line 451 of file ../../src/sysmem/server/sysmem.cc

zx::result<> Initialize (const CreateArgs & create_args)

currently public only for tests

Defined at line 467 of file ../../src/sysmem/server/sysmem.cc

zx_status_t RegisterHeapInternal (fuchsia_sysmem2::Heap heap, fidl::ClientEnd<fuchsia_hardware_sysmem::Heap> heap_connection)

The rest of the methods are only valid to call after Bind().

Defined at line 732 of file ../../src/sysmem/server/sysmem.cc

zx_status_t RegisterSecureMemInternal (fidl::ClientEnd<fuchsia_sysmem2::SecureMem> secure_mem_connection)

Also called directly by a test.

Defined at line 792 of file ../../src/sysmem/server/sysmem.cc

zx_status_t UnregisterSecureMemInternal ()

Also called directly by a test.

Defined at line 1004 of file ../../src/sysmem/server/sysmem.cc

const zx::bti & bti ()

MemoryAllocator::Owner implementation.

Defined at line 1026 of file ../../src/sysmem/server/sysmem.cc

zx::result<zx::vmo> CreatePhysicalVmo (uint64_t base, uint64_t size)

Only use this in cases where we really can't use zx::vmo::create_contiguous() because we must

specify a specific physical range.

Defined at line 1030 of file ../../src/sysmem/server/sysmem.cc

void CheckForUnbind ()

Defined at line 317 of file ../../src/sysmem/server/sysmem.cc

std::optional<SnapshotAnnotationRegister> & snapshot_annotation_register ()

Defined at line 344 of file ../../src/sysmem/server/sysmem.cc

SysmemMetrics & metrics ()

Defined at line 348 of file ../../src/sysmem/server/sysmem.cc

protected_ranges::ProtectedRangesCoreControl & protected_ranges_core_control (const fuchsia_sysmem2::Heap & heap)

Defined at line 350 of file ../../src/sysmem/server/sysmem.cc

zx::result<> BeginServing ()

Defined at line 686 of file ../../src/sysmem/server/sysmem.cc

void RegisterHeap (RegisterHeapRequest & request, RegisterHeapCompleter::Sync & completer)

fuchsia_hardware_sysmem::Sysmem impl; these run on client_dispatcher_.

Defined at line 1203 of file ../../src/sysmem/server/sysmem.cc

void RegisterSecureMem (RegisterSecureMemRequest & request, RegisterSecureMemCompleter::Sync & completer)

Defined at line 1224 of file ../../src/sysmem/server/sysmem.cc

void UnregisterSecureMem (UnregisterSecureMemCompleter::Sync & completer)

Defined at line 1234 of file ../../src/sysmem/server/sysmem.cc

void TrackToken (BufferCollectionToken * token)

Track/untrack the token by the koid of the server end of its FIDL channel. TrackToken() is only

allowed after/during token->OnServerKoid(). UntrackToken() is allowed even if there was never a

token->OnServerKoid() (in which case it's a nop).

While tracked, a token can be found with FindTokenByServerChannelKoid().

Defined at line 1054 of file ../../src/sysmem/server/sysmem.cc

void UntrackToken (BufferCollectionToken * token)

Defined at line 1063 of file ../../src/sysmem/server/sysmem.cc

bool TryRemoveKoidFromUnfoundTokenList (zx_koid_t token_server_koid)

Finds and removes token_server_koid from unfound_token_koids_.

Defined at line 1076 of file ../../src/sysmem/server/sysmem.cc

BufferCollectionToken * FindTokenByServerChannelKoid (zx_koid_t token_server_koid)

Find the BufferCollectionToken (if any) by the koid of the server end of its FIDL channel.

Defined at line 1089 of file ../../src/sysmem/server/sysmem.cc

FindLogicalBufferByVmoKoidResult FindLogicalBufferByVmoKoid (zx_koid_t vmo_koid)

Defined at line 1105 of file ../../src/sysmem/server/sysmem.cc

MemoryAllocator * GetAllocator (const fuchsia_sysmem2::BufferMemorySettings & settings)

Get allocator for |settings|. Returns NULL if allocator is not registered for settings.

Defined at line 1113 of file ../../src/sysmem/server/sysmem.cc

const fuchsia_hardware_sysmem::HeapProperties * GetHeapProperties (const fuchsia_sysmem2::Heap & heap)

Get heap properties of a specific memory heap allocator.

If the heap is not valid or not registered to sysmem driver, nullptr is returned.

Defined at line 1127 of file ../../src/sysmem/server/sysmem.cc

void AddVmoKoid (zx_koid_t koid, bool is_weak, LogicalBuffer & logical_buffer)

Defined at line 1137 of file ../../src/sysmem/server/sysmem.cc

void RemoveVmoKoid (zx_koid_t koid)

Defined at line 1141 of file ../../src/sysmem/server/sysmem.cc

void LogAllBufferCollections ()

Defined at line 1146 of file ../../src/sysmem/server/sysmem.cc

void ForeachSecureHeap (fit::function<bool (const fuchsia_sysmem2::Heap &)> callback)

Iff callback returns false, stop iterating and return.

Defined at line 1173 of file ../../src/sysmem/server/sysmem.cc

zx::result<zx::bti> CreateBti ()

Defined at line 654 of file ../../src/sysmem/server/sysmem.cc

Records