mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2026-08-05 02:19:16 +00:00
virtio-devices: balloon: Handle reporting queue errors gracefully
Address translation or memory release errors on the free page reporting queue propagated up and killed the balloon device thread. Log a warning and skip the offending descriptor so the device continues operating. Signed-off-by: Rob Bradford <rbradford@meta.com> Assisted-by: Claude:claude-opus-4-6
This commit is contained in:
@@ -357,11 +357,21 @@ impl BalloonEpollHandler {
|
|||||||
let mut descs_len = 0;
|
let mut descs_len = 0;
|
||||||
while let Some(desc) = desc_chain.next() {
|
while let Some(desc) = desc_chain.next() {
|
||||||
descs_len += desc.len();
|
descs_len += desc.len();
|
||||||
let addr = desc
|
let addr = match desc
|
||||||
.addr()
|
.addr()
|
||||||
.translate_gva(self.access_platform.as_deref(), desc.len() as usize)
|
.translate_gva(self.access_platform.as_deref(), desc.len() as usize)
|
||||||
.map_err(|e| Error::GuestMemory(GuestMemoryError::IOError(e)))?;
|
{
|
||||||
Self::release_memory_range(desc_chain.memory(), addr, desc.len() as usize)?;
|
Ok(a) => a,
|
||||||
|
Err(e) => {
|
||||||
|
warn!("Failed to translate reporting descriptor address: {e}");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
if let Err(e) =
|
||||||
|
Self::release_memory_range(desc_chain.memory(), addr, desc.len() as usize)
|
||||||
|
{
|
||||||
|
warn!("Failed to release reported memory range: {e}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self.queues[queue_index]
|
self.queues[queue_index]
|
||||||
|
|||||||
Reference in New Issue
Block a user