devices: event_loop: delete hung-up events

When a file descriptor is returned from the poll context that has the
hungup flag set, it should no longer be polled. Remove it from both the
poll context and the map of handlers when hangup occurs.

Additionally, instead of stopping the whole event loop when an event
handler error occurs, just remove the failing event handler from the
watched set and continue. This should improve robustness of the USB
controller emulation.

BUG=chromium:1278424
TEST=Share USB device with Crostini via vmc, then physically unplug

Change-Id: Iccaae0ea24b43d0b5e593ca2fe4418eb3892300a
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3335302
Reviewed-by: Dmitry Torokhov <dtor@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Chirantan Ekbote <chirantan@chromium.org>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
1 file changed
tree: a9d2d6695cbffe6f651f5b09e0a135a28df0cb28
  1. .cargo/
  2. .devcontainer/
  3. .github/
  4. aarch64/
  5. acpi_tables/
  6. arch/
  7. bin/
  8. bit_field/
  9. ci/
  10. common/
  11. crosvm-fuzz/
  12. crosvm_control/
  13. crosvm_plugin/
  14. devices/
  15. disk/
  16. docs/
  17. fuse/
  18. gpu_display/
  19. hypervisor/
  20. integration_tests/
  21. kernel_cmdline/
  22. kernel_loader/
  23. kvm/
  24. kvm_sys/
  25. libcras_stub/
  26. libvda/
  27. linux_input_sys/
  28. logo/
  29. net_sys/
  30. net_util/
  31. power_monitor/
  32. protos/
  33. qcow_utils/
  34. resources/
  35. rutabaga_gfx/
  36. seccomp/
  37. src/
  38. system_api_stub/
  39. tests/
  40. third_party/
  41. tools/
  42. tpm2/
  43. tpm2-sys/
  44. usb_sys/
  45. usb_util/
  46. vfio_sys/
  47. vhost/
  48. virtio_sys/
  49. vm_control/
  50. vm_memory/
  51. x86_64/
  52. .dockerignore
  53. .gitignore
  54. .gitmodules
  55. .rustfmt.toml
  56. ARCHITECTURE.md
  57. Cargo.toml
  58. CONTRIBUTING.md
  59. LICENSE
  60. navbar.md
  61. OWNERS
  62. README.chromeos
  63. README.md
  64. run_tests
  65. rust-toolchain
  66. setup_cros_cargo.sh
  67. test_all
  68. unblocked_terms.txt
README.md

crosvm - The Chrome OS 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 Chrome OS 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 Chrome OS devices.

Logo