[roll] Roll fuchsia [driver_runtime] Add fdf_channel implementation.

Also adds a barebones dispatcher implementation so the
channel tests can work. It just calls the callback
immediately without using an async loop or doing
any reentrancy checking. The future dispatcher CL
will add tests that exercise use of a global async loop.

-----------------------
Channel API updates
-----------------------
* For now we allow writing and reading empty messages
(i.e. arena, data, and handles are all NULL). This is to
match the zircon channel implementation which allows both
data and handles to be NULL. We do require an arena
when data / handles are not NULL.

* Closing a handle also closes any handles in unread
messages.

* If a channel has a registered callback, and the channel
is closed:
 - if the dispatcher is synchronized - cancels the callback
 - if the dispatcher is unsynchronized - callback will be called

-----------------------
Channel implementation
-----------------------
A channel is represented by a 2 fdf_channel objects which
share a lock (stored in FdfChannelSharedState).

When the client writes to a channel, we create a MessagePacket,
which is queued to the opposite end's message queue. Reading
will return the front of this message queue.

The client may register a wait async, to be notified of when
a message is available. Once we have pending messages and a
pending wait async, we will register a callback request with
the dispatcher, which will call the callback once ready

Since we only allow one wait async at a time, and allow
multiple reads per callback, we only ever have one callback
request queued with the dispatcher at a time.

When we get the callback from the dispatcher, we clear the
channel's stored wait async registration before calling the
client's callback, so the client's re-registration of wait
async will succeed.

Original-Bug: 85577
Original-Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/595645
Original-Revision: 84729121083bf7aa263dfef70c2b769b119e07ca
GitOrigin-RevId: bbaffce142a0bf8e99f6b4dce43ffe1a4cd9b46e
Change-Id: Iaca8d841386e59e1f4aab6ae0f31930924990413
1 file changed
tree: 8b1f232692be5feb2d9b130222a65c81b5f532b7
  1. infra/
  2. third_party/
  3. firmware
  4. flower
  5. jiri.lock
  6. minimal
  7. prebuilts
  8. README.md
  9. stem
  10. test_durations
README.md

Integration

This repository contains Fuchsia's Global Integration manifest files.

Making changes

All changes should be made to the internal version of this repository. Our infrastructure automatically updates this version when the internal one changes.

Currently all changes must be made by a Google employee. Non-Google employees wishing to make a change can ask for assistance via the IRC channel #fuchsia on Freenode.

Obtaining the source

First install Jiri.

Next run:

$ jiri init
$ jiri import minimal https://fuchsia.googlesource.com/integration
$ jiri update

Third party

Third party projects should have their own subdirectory in ./third_party.