Fuchsia F21 release notes

Date: July 26, 2024

Version: F21

The following changes have been implemented:

Bluetooth

The following updates have been made for Bluetooth:

  • Significant progress was made toward migrating the Bluetooth stack to DFv2 and modernizing its APIs:
    • The bt-hci-intel, bt-fct-hci, and bt-hci-passthrough drivers were migrated to DFv2 and the new HciTransport protocol.
    • The fuchsia.hardware.bluetooth.VirtualController, fuchsia.hardware.bluetooth.Peer, and fuchsia.hardware.bluetooth.Emulator APIs were modernized.
    • Modernized the fuchsia.bluetooth.snoop FIDL API.
  • Improved Bluetooth functionality and reliability:
    • Implemented the AudioOffloadController.Stop method and the bredr.Connection protocol.
    • Added support for setting the LE connection role in the fake controller and fixed a crash in BrEdrDynamicChannel.
    • Implemented IsoStreamServer.
  • Enhanced Bluetooth testing and development:
    • All bt-host Bazel unit tests were combined into one package to speed up Fuchsia Bazel builds.
    • Implemented the HciTransport API in EmulatorDevice.

Developer

The following updates have been made for Developer:

ffx

Component Framework

The following updates have been made for Component Framework:

  • Stability enhancements:

Connectivity Drivers

The following updates have been made for Connectivity Drivers:

  • Improved the stability of the SDIO driver by addressing a crash that could occur during startup.

Diagnostics

The following updates have been made for Diagnostics:

  • Optimized LogTracer to prevent unnecessary log record creation when using the log crate in Rust.
  • Prevent blocking on interest listening in exceptions which caused issues during shutdown.
  • Power broker includes lease history in Inspect.
  • Various improvements to the C++ syslog API.

Display

The following updates have been made for Display:

Driver Framework

The following updates have been made for Driver Framework:

  • Syslog dependency removal: Removed the syslog dependency from the driver runtime shared library. This also solves link errors at runtime when Bazel drivers request an otherwise absent libsyslog.so in some cases.

FIDL

The following updates have been made for FIDL:

  • Improved FIDL performance and tooling:
    • Optimized the FIDL Rust client waker and added handle counts to assertion checks in C++.
  • Implemented RFC-0232 for multi-API level FIDL bindings:
  • Improved FIDL API design and documentation:
  • Enforced ABI checks in FIDL for both platform and external components.
  • API level reference standardization: The HEAD keyword is now supported in ZX_*_SINCE() macros, enabling consistent API level referencing and future-proofing API changes.

I18n

The following updates have been made for I18n:

  • Cleaned up the build system by removing empty migration groups.

IOT

The following updates have been made for IOT:

  • Improved the reliability of the IOT stack by fixing an issue with the discovery proxy workaround and preventing incorrect IPv4 address additions.

Kernel

The following updates have been made for Kernel:

  • Improved timer functionality: The platform_set_oneshot_timer function now uses raw ticks as input, and support for the Sstc feature allows directly setting the timer compare value in supervisor mode.
  • Enhanced system call logging and debugging: System calls are now logged by name in LTRACE, and kernel logging for suspend failures has been improved.
  • Addressed race conditions and stability issues: Fixed race conditions related to CPU idle state after suspend and thread scheduling during hotplug, and reverted changes to page allocation and dirty page handling for stability.
  • Introduced new VMO system calls: Added zx_vmo_get_stream_size and zx_vmo_set_stream_size, which will eventually replace using properties for VMO content size.
  • Miscellaneous bug fixes: Addressed assertion failures in std::find and improved page cache behavior.

Platform Drivers

The following updates have been made for Plaform Drivers:

  • Enhanced GPIO utility: The GPIO util tool now supports setting pin functions and includes interrupt functionality.
  • Improved USB functionality and stability: USB connection detection now works correctly, and the fusb302 driver update prevents duplicate GoodCRC messages, resolving a VIM3 power-cycling issue.
  • Driver runtime optimization: The driver runtime shared library no longer depends on the syslog library, addressing runtime link errors.
  • Amlogic display enhancement: The Amlogic display encoder color turns green when SetDisplayPower(false) is called for easier debugging.
  • Node topology verification: The sherlock and astro device-enumeration-test have been migrated to verify node topology using monikers from the driver development service.
  • ElementControl channel provisioning: Topology.AddElement now lets clients provide their own ElementControl channel. While clients can still use the returned channel for now, this behavior will be deprecated.

Rust

The following updates have been made for Rust:

Power Management

The following updates have been made for Power Management:

  • Power Dependency Management and Terminology: When an element is removed, its dependencies are also removed. "Active" dependencies are renamed to "assertive", and "passive" to "opportunistic".
  • Fake Suspend Initialization: fake-suspend is now blocked until initialized.

SDK

The following updates have been made for SDK:

  • Improved IDK atom generation: The Fuchsia Bazel SDK now uses //sdk:final_fuchsia_sdk, moving IDK atom generation to the Bazel graph, and an empty *.api_summary.json file indicates an unsupported FIDL library at a specific API level.
  • Enhanced functionality and testing: fbl/fzl has been removed from the SDK, _walk_json is more resilient, and tests were added for structured_config.
  • Added bin_name support: The fuchsia_cc_binary rule now supports the bin_name attribute.

Software Delivery

The following updates have been made for Software Delivery:

  • Package directory and cache optimization: Package directory is optimized for fxblob, significantly improving blob reading speed, and the package cache no longer needs a storage lifetime workaround.
  • Improved logging and error messages: Added a log message for the system image package hash and enhanced error messages related to packages.

Starnix

The following updates have been made for Starnix:

  • Improved resource management and attribution: Starnix programs are now reported as child principals for better memory attribution.
  • Enhanced signal handling and suspend/resume functionality: Process-directed signals are optimized to interrupt only one task, and a suspend waiter issue is resolved, preventing unresponsiveness after resuming with an active shell.
  • Filesystem and data storage improvements: Added routing for the data storage capability in tests, enabling xts tests on real filesystems, and added support for propagating extended attributes from tarballs to filesystems.
  • Graphics and input enhancements: Added a Gfxstream-based Rutabaga instance to the GPU device and a device for touch_standby state communication with the input pipeline.
  • Improved policy handling, stats, and address space management: Refined policy index and permission checking, ensured stats refresh after suspend, and fixed an issue with user_new_limit reading from the wrong address space.
  • Miscellaneous bug fixes and updates: Addressed various issues including bpf file descriptor handling, wake lease renaming, ebpf help function stubs, and FsNode.append_lock modification.

Testing

The following updates have been made for Testing:

Timekeeping

The following updates have been made for Timekeeping:

  • Improved TTRF documentation and testing: Implemented persistent testing async commands for Timekeeper behavior modification (not yet enabled), added a README with example code for TTRF, and removed outdated CFv1 references.
  • Removed unused dependencies: Removed unused power topology dependency tokens.

Toolchain

The following updates have been made for Toolchain:

  • Paravirtualization Support: PlatformParavirtualizationConfig now defaults to allowing virtualization if supported. Paravirtualization support, including the vsock service, was added to the 'generic emulated arm64' board configuration.

Tools

The following updates have been made for Tools:

  • Bluetooth controller enhancements: The fake Bluetooth controller now supports setting the LE connection role.
  • Testing and tooling updates: Realm integration tests were added to CTF. Tests for the Bazel SDK's structured_config have been added. The bt-fct-hci tool was migrated to HciTransport. The testrunner now reconnects on timeout for target connection errors.
  • Test Phys VMO cleanliness and logging: Test phys VMOs are now cleaned before being returned to ensure a known state. A warning is issued when records_dropped exceeds 0 for skipped ContextSwitch records.
  • Package information source: The list-packages tool now sources package information from all_package_manifests.list. The visual design of the pkgstats package page has been improved.

UI

The following updates have been made for UI:

  • Debugging Enhancements: Hit regions and display power status are now dumped to Inspect for easier debugging.

WLAN

The following updates have been made for WLAN:

  • Testing enhancements: Support was added for deleting fullmac drivers during startup for testing. A potential flake in hw-sim autoconnect has been addressed. An improvement was made to the Honeydew test harness for detecting abnormal startup.
  • Network configuration migration: The format and storage of saved network configurations were updated, including migration from old stash data. A new metric tracks network configuration migration results.
  • Roaming improvements: The RoamManager's serve function was separated for future conversion to a service loop-based service. Internal roaming library types are updated for clarity, removing unnecessary fields. Roaming disconnect handling has been improved, distinguishing ignorable disconnects from roam attempt failures.
  • Inspect optimization: The InspectBoundedSetNode struct optimizes event metadata handling in Inspect. Logging now includes disconnect information in Inspect.