class Sysmem
Defined at line 62 of file ../../src/sysmem/server/sysmem.h
The fuchsia_hardware_sysmem::Sysmem protocol is a privileged backend registration protocol used
ONLY by the securemem driver (RegisterSecureMem) and by external heap drivers such as goldfish
(RegisterHeap).
Normal sysmem clients (including almost all drivers) use fuchsia_sysmem2::Allocator instead.
Security model: Callers with access to fuchsia_hardware_sysmem::Sysmem are trusted. Access
control is enforced by Component Framework capability routing (only drivers that specifically and
legitimately need to register a heap or securemem may declare `use` of this protocol).
Public Members
thread_checker client_checker_
optional loop_checker_
Public Methods
inspect::Node * heap_node ()
Defined at line 114 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 155 of file ../../src/sysmem/server/sysmem.h
async_dispatcher_t * client_dispatcher ()
Defined at line 156 of file ../../src/sysmem/server/sysmem.h
std::unordered_set<LogicalBufferCollection *> & logical_buffer_collections ()
Defined at line 158 of file ../../src/sysmem/server/sysmem.h
void AddLogicalBufferCollection (LogicalBufferCollection * collection)
Defined at line 163 of file ../../src/sysmem/server/sysmem.h
void RemoveLogicalBufferCollection (LogicalBufferCollection * collection)
Defined at line 168 of file ../../src/sysmem/server/sysmem.h
inspect::Node & collections_node ()
Defined at line 177 of file ../../src/sysmem/server/sysmem.h
void set_settings (const Settings & settings)
Defined at line 179 of file ../../src/sysmem/server/sysmem.h
const Settings & settings ()
Defined at line 181 of file ../../src/sysmem/server/sysmem.h
void ResetThreadCheckerForTesting ()
Defined at line 183 of file ../../src/sysmem/server/sysmem.h
bool protected_ranges_disable_dynamic ()
Defined at line 185 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 192 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 206 of file ../../src/sysmem/server/sysmem.h
bool was_secure_mem_ready ()
Defined at line 216 of file ../../src/sysmem/server/sysmem.h
template <typename F>
void PostTask (F to_run)
Defined at line 225 of file ../../src/sysmem/server/sysmem.h
template <typename F>
void PostTaskToClientDispatcher (F to_run)
Defined at line 232 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 243 of file ../../src/sysmem/server/sysmem.h
template <typename F>
void RunSyncOnClientDispatcher (F to_run)
Defined at line 253 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 268 of file ../../src/sysmem/server/sysmem.h
void OnAllocationFailure ()
Defined at line 299 of file ../../src/sysmem/server/sysmem.h
fidl::ServerBindingGroup<fuchsia_sysmem::Allocator> & v1_allocators ()
Defined at line 302 of file ../../src/sysmem/server/sysmem.h
fidl::ServerBindingGroup<fuchsia_sysmem2::Allocator> & v2_allocators ()
Defined at line 303 of file ../../src/sysmem/server/sysmem.h
fidl::ServerBindingGroup<fuchsia_hardware_sysmem::Sysmem> & BindingsForTest ()
Defined at line 311 of file ../../src/sysmem/server/sysmem.h
bool is_allocator_present_for_testing (const fuchsia_sysmem2::Heap & heap)
Defined at line 313 of file ../../src/sysmem/server/sysmem.h
bool is_secure_allocator_present_for_testing (const fuchsia_sysmem2::Heap & heap)
Defined at line 317 of file ../../src/sysmem/server/sysmem.h
void add_secure_allocator_id_for_testing (const fuchsia_sysmem2::Heap & heap)
Defined at line 321 of file ../../src/sysmem/server/sysmem.h
const UsagePixelFormatCost & usage_pixel_format_cost ()
Defined at line 326 of file ../../src/sysmem/server/sysmem.h
zx::bti & mutable_bti_for_testing ()
Defined at line 335 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 457 of file ../../src/sysmem/server/sysmem.cc
void Sysmem (async_dispatcher_t * dispatcher)
Use Create() instead.
Defined at line 212 of file ../../src/sysmem/server/sysmem.cc
void ~Sysmem ()
Defined at line 223 of file ../../src/sysmem/server/sysmem.cc
zx::result<> Initialize (const CreateArgs & create_args)
currently public only for tests
Defined at line 473 of file ../../src/sysmem/server/sysmem.cc
zx::result<zx::resource> GetInfoResource ()
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 229 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 787 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 862 of file ../../src/sysmem/server/sysmem.cc
zx_status_t UnregisterSecureMemInternal ()
Also called directly by a test.
Defined at line 1074 of file ../../src/sysmem/server/sysmem.cc
const zx::bti & bti ()
MemoryAllocator::Owner implementation.
Defined at line 1096 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 1100 of file ../../src/sysmem/server/sysmem.cc
void CheckForUnbind ()
Defined at line 323 of file ../../src/sysmem/server/sysmem.cc
std::optional<SnapshotAnnotationRegister> & snapshot_annotation_register ()
Defined at line 350 of file ../../src/sysmem/server/sysmem.cc
SysmemMetrics & metrics ()
Defined at line 354 of file ../../src/sysmem/server/sysmem.cc
protected_ranges::ProtectedRangesCoreControl & protected_ranges_core_control (const fuchsia_sysmem2::Heap & heap)
Defined at line 356 of file ../../src/sysmem/server/sysmem.cc
zx::result<> BeginServing ()
Defined at line 741 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 1277 of file ../../src/sysmem/server/sysmem.cc
void RegisterSecureMem (RegisterSecureMemRequest & request, RegisterSecureMemCompleter::Sync & completer)
Defined at line 1298 of file ../../src/sysmem/server/sysmem.cc
void UnregisterSecureMem (UnregisterSecureMemCompleter::Sync & completer)
Defined at line 1308 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 1124 of file ../../src/sysmem/server/sysmem.cc
void UntrackToken (BufferCollectionToken * token)
Defined at line 1133 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 1146 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 1159 of file ../../src/sysmem/server/sysmem.cc
FindLogicalBufferByVmoKoidResult FindLogicalBufferByVmoKoid (zx_koid_t vmo_koid)
Defined at line 1175 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 1183 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 1197 of file ../../src/sysmem/server/sysmem.cc
void AddVmoKoid (zx_koid_tkoid,boolis_weak,LogicalBuffer &logical_buffer)
Defined at line 1207 of file ../../src/sysmem/server/sysmem.cc
void RemoveVmoKoid (zx_koid_t koid)
Defined at line 1211 of file ../../src/sysmem/server/sysmem.cc
void LogAllBufferCollections ()
Defined at line 1216 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 1243 of file ../../src/sysmem/server/sysmem.cc
zx::result<zx::bti> CreateBti ()
Defined at line 709 of file ../../src/sysmem/server/sysmem.cc