devices/virtio/vhost_user_frontend/
error.rs1use remain::sorted;
6use thiserror::Error as ThisError;
7use vm_memory::GuestMemoryError;
8use vmm_vhost::message::VhostUserProtocolFeatures;
9use vmm_vhost::Error as VhostError;
10
11#[sorted]
12#[derive(ThisError, Debug)]
13pub enum Error {
14 #[error("failed to copy config to a buffer: {0}")]
16 CopyConfig(std::io::Error),
17 #[error("could not create backend req handler: {0}")]
19 CreateBackendReqHandler(VhostError),
20 #[error("failed to create Event: {0}")]
22 CreateEvent(base::Error),
23 #[error("failed to get config: {0}")]
25 GetConfig(VhostError),
26 #[error("failed to get features: {0}")]
28 GetFeatures(VhostError),
29 #[error("failed to get host address: {0}")]
31 GetHostAddress(GuestMemoryError),
32 #[error("failed to get protocol features: {0}")]
34 GetProtocolFeatures(VhostError),
35 #[error("failed to get number of queues: {0}")]
37 GetQueueNum(VhostError),
38 #[error("failed to get vring base offset: {0}")]
40 GetVringBase(VhostError),
41 #[error("MSI-X config is unavailable")]
43 MsixConfigUnavailable,
44 #[error("MSI-X irqfd is unavailable")]
46 MsixIrqfdUnavailable,
47 #[error("protocol feature is not negotiated: {0:?}")]
48 ProtocolFeatureNotNegoiated(VhostUserProtocolFeatures),
49 #[error("failed to reset owner: {0}")]
51 ResetOwner(VhostError),
52 #[error("failed to restore: {0}")]
54 Restore(VhostError),
55 #[error("failed to convert a serde Value to slice {0}")]
57 SerdeValueToSlice(anyhow::Error),
58 #[error("failed to set config: {0}")]
60 SetConfig(VhostError),
61 #[error("failed to set device request channel: {0}")]
63 SetDeviceRequestChannel(VhostError),
64 #[error("failed to set features: {0}")]
66 SetFeatures(VhostError),
67 #[error("failed to set memory map regions: {0}")]
69 SetMemTable(VhostError),
70 #[error("failed to set owner: {0}")]
72 SetOwner(VhostError),
73 #[error("failed to set protocol features: {0}")]
75 SetProtocolFeatures(VhostError),
76 #[error("failed to set vring address: {0}")]
78 SetVringAddr(VhostError),
79 #[error("failed to set vring base offset: {0}")]
81 SetVringBase(VhostError),
82 #[error("failed to set eventfd to signal used vring buffers: {0}")]
84 SetVringCall(VhostError),
85 #[error("failed to enable or disable vring: {0}")]
87 SetVringEnable(VhostError),
88 #[error("failed to set eventfd for adding buffers to vring: {0}")]
90 SetVringKick(VhostError),
91 #[error("failed to set the size of the queue: {0}")]
93 SetVringNum(VhostError),
94 #[error("failed to enumerate shmem regions {0}")]
96 ShmemRegions(VhostError),
97 #[error("failed to sleep the device {0}")]
99 Sleep(VhostError),
100 #[error("Failed to convert a slice to a serde Value: {0}")]
102 SliceToSerdeValue(anyhow::Error),
103 #[error("failed to snapshot: {0}")]
105 Snapshot(VhostError),
106 #[error("failed to connect socket: {0}")]
108 SocketConnect(std::io::Error),
109 #[error("failed to spawn worker: {0}")]
111 SpawnWorker(std::io::Error),
112 #[error("tag is too long: {len} > {max}")]
114 TagTooLong { len: usize, max: usize },
115 #[error("too many shmem regions: {0} > 1")]
117 TooManyShmemRegions(usize),
118 #[error("vring base returned by vhost-user backend is too big: {0}")]
120 VringBaseTooBig(u32),
121 #[error("failed to wake the vhost user device.")]
123 Wake(VhostError),
124 #[error("failed to wake the worker.")]
126 WakeWorker,
127}
128
129pub type Result<T> = std::result::Result<T, Error>;