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