devices: virtio: wl: force cacheline flushes for uncached dmabufs

Some boards (such as guybrush) map virtio-wl-allocated dmabufs as
uncached/wc on host, while virtio-wl always maps as cached on guest.
When this happens, the second-level address translation (SLAT) used to
enable zero-copy guest writes into the dmabuf memory is wrongfully
configured as cached from the guest's perspective.

Then, when virtio-wl synchronizes with DMA_BUF_IOCTL_SYNC +
(DMA_BUF_SYNC_WRITE | DMA_BUF_SYNC_END), the host kmd elides the cache
flushes because it recognizes the memory as truly uncached (or
write-combined) and the user sees memory incoherency artifacts.

BUG=b:316402315
TEST=tools/dev_container tools/presubmit
TEST=(crostini on guybrush): gedit shows no incoherency artifacts

Change-Id: I2ad469f07e98d23ba7a7f1a9e4a698202977887b
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/5394041
Commit-Queue: Ryan Neph <ryanneph@google.com>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org>
1 file changed
tree: b6cc4ddf4aa6fab2985f28fb46c4e43fac32f176
  1. .cargo/
  2. .config/
  3. .devcontainer/
  4. .github/
  5. .vscode/
  6. aarch64/
  7. acpi_tables/
  8. arch/
  9. argh_helpers/
  10. audio_streams_conformance_test/
  11. audio_util/
  12. base/
  13. bit_field/
  14. broker_ipc/
  15. common/
  16. cros_async/
  17. cros_fdt/
  18. cros_tracing/
  19. cros_tracing_types/
  20. crosvm_cli/
  21. crosvm_control/
  22. crosvm_plugin/
  23. devices/
  24. disk/
  25. docs/
  26. e2e_tests/
  27. fuse/
  28. fuzz/
  29. gpu_display/
  30. hypervisor/
  31. infra/
  32. io_uring/
  33. jail/
  34. kernel_cmdline/
  35. kernel_loader/
  36. kvm/
  37. kvm_sys/
  38. libcras_stub/
  39. linux_input_sys/
  40. logo/
  41. media/
  42. metrics/
  43. net_sys/
  44. net_util/
  45. perfetto/
  46. power_monitor/
  47. prebuilts/
  48. proto_build_tools/
  49. protos/
  50. resources/
  51. riscv64/
  52. rutabaga_gfx/
  53. sandbox/
  54. serde_keyvalue/
  55. src/
  56. swap/
  57. system_api/
  58. tests/
  59. third_party/
  60. tools/
  61. tube_transporter/
  62. usb_sys/
  63. usb_util/
  64. vendor/
  65. vfio_sys/
  66. vhost/
  67. virtio_sys/
  68. vm_control/
  69. vm_memory/
  70. win_audio/
  71. win_util/
  72. x86_64/
  73. .dockerignore
  74. .envrc
  75. .gitattributes
  76. .gitignore
  77. .gitmodules
  78. .rustfmt.toml
  79. ARCHITECTURE.md
  80. Cargo.lock
  81. Cargo.toml
  82. CONTRIBUTING.md
  83. DIR_METADATA
  84. LICENSE
  85. mypy.ini
  86. OWNERS
  87. OWNERS_COUNCIL
  88. PRESUBMIT.cfg
  89. pyproject.toml
  90. README.chromeos.md
  91. README.md
  92. rust-toolchain
README.md

crosvm - The ChromeOS Virtual Machine Monitor

crosvm is a virtual machine monitor (VMM) based on Linux’s KVM hypervisor, with a focus on simplicity, security, and speed. crosvm is intended to run Linux guests, originally as a security boundary for running native applications on the ChromeOS platform. Compared to QEMU, crosvm doesn’t emulate architectures or real hardware, instead concentrating on paravirtualized devices, such as the virtio standard.

crosvm is currently used to run Linux/Android guests on ChromeOS devices.

Logo