crosvm/common
Chih-Yang Hsia 7c97b2e7d3 devices: virtio: snd: Change start_pcm_worker to be polled by streams
Improvements:
- Once a {playback, capture} stream is initiated.
  We should start write (read) audio in each callback period or
  the underlaying audio server will underrun (overrun).
  (Even in the WorkerStatus::Pause state).

- Change the polling loop logic to

  wait for next buffer
  -> check status
  -> try_next desc_chain or exit
  -> transfer data or exit

  And make start_pcm_worker act like real audio hw device, which
  consumes data in every fixed period.

- Right before leaving from WorkerStatus::Quit, we still need to
  transfer data to/from the running stream to prevent
  underrun or overrun.

Changes:
- changes in start_pcm_worker:
  - extract read_data, write_data utils
  - implement From<Result<()>, Error> for virtio_snd_pcm_status
  - poll next_{capture, playback}_buffer
  - if status == WorkerStatus::Pause, still need to transfer data to
    prevent underrun or overrun
  - split Output and Input stream logic
- use copy_from or copy_to instead to io::copy
- remove Condvar usage
- changes in audio_streams
  - add copy_from in AudioBuffer and AsyncPlaybackBuffer
  - add copy_to in AudioBuffer and AsyncCaptureBuffer

BUG=b:210197743
TEST=alsa_conformance_test and make sure there is no
     `ERR cras_server[1818]: Error reading msg from client: rc: -104` or
     `ERR cras_server[1818]: fetch err: -32 for 6490001`
     errors.

Change-Id: I004969040881cb2d46b54589e3e7e634ea67d152
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3341135
Reviewed-by: Chirantan Ekbote <chirantan@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Chih-Yang Hsia <paulhsia@chromium.org>
2021-12-15 11:28:55 +00:00
..
assertions Refactoring: Move various general purpose crates to common/ 2021-10-29 22:31:43 +00:00
audio_streams devices: virtio: snd: Change start_pcm_worker to be polled by streams 2021-12-15 11:28:55 +00:00
base Revert "vm-memory: mlock2(MLOCK_ONFAULT) guest memory for protected VMs" 2021-12-02 11:28:53 +00:00
cros-fuzz Clippy fixes in common/* crates 2021-11-15 23:08:55 +00:00
cros_async Fix cargo-doc warnings 2021-12-09 14:34:33 +00:00
cros_asyncv2 asyncv2: Split fallocate into separate functions 2021-12-09 12:33:09 +00:00
data_model Fix cargo-doc warnings 2021-12-09 14:34:33 +00:00
io_uring Clippy fixes in common/* crates 2021-11-15 23:08:55 +00:00
p9 Clippy fixes in common/* crates 2021-11-15 23:08:55 +00:00
sync Refactoring: Move various general purpose crates to common/ 2021-10-29 22:31:43 +00:00
sys_util sys_util: fix CMSG_SPACE test on arm32 2021-12-14 18:11:31 +00:00
README.md Import cros-fuzz and p9 into crosvm/common 2021-08-03 02:25:01 +00:00

Crosvm General Purpose Libraries

The crates in this folder are general purpose libraries used by other projects in ChromeOS as well.

To make them accessible independendly of crosvm, each of these crates is excluded from the crosvm workspace.

List of libraries

  • cros-fuzz: Support crate for fuzzing rust code in ChromeOS
  • p9: Server implementation of the 9p file system protocol