[roll] Roll fuchsia [kernel] Implement SpscBuffer reads and writes

This CL finishes up the implementation of the SpscBuffer by adding
support for reads and writes.

The Read function is relatively straightforward in its behavior, but
notably requires the caller to pass in a CopyOutFn. This argument
allows the usage of different copy functions in different environments.
Concretely, this allows use memcpy in the tests, and will allow us to
use usercopy in the kernel.

The Write operation is a little more complex, since it must be
transactional in nature. To support this, logical Writes are split into
three separate methods:
1. A Reserve method, which verifies that a slot of the requested
   size exists in the ring buffer and returns that slot as a
   Reservation object.
2. A Write method, called on the Reservation object, which actually
   writes data into the pre-reserved slot.
3. A Commit method, called on the Reservation object, which moves the
   write pointer forward and thus makes the write visible to reads.

Original-Bug: 404539312
Original-Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/1235160
Original-Revision: 4d890f51ebe9eb4157cb04f7a30172555233239e
GitOrigin-RevId: 8eb7723b5bb596a25adef5b6ef864aba9860611e
Change-Id: Iba0a26b374b2d143f287b0deb3a3a826b3985ade
1 file changed
tree: 4546fb8d9e8dbb80d25d706df4adb572c9af88bc
  1. ctf/
  2. git-hooks/
  3. infra/
  4. third_party/
  5. cts
  6. firmware
  7. flower
  8. jiri.lock
  9. MILESTONE
  10. minimal
  11. prebuilts
  12. README.md
  13. stem
  14. test_durations
  15. toolchain
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 in one of the communication channels documented at get involved.

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.