(&mut self, vm: &dyn hypervisor::Vm)
| 89 | } |
| 90 | |
| 91 | fn disable(&mut self, vm: &dyn hypervisor::Vm) -> Result<()> { |
| 92 | let gsi = match self.gsi { |
| 93 | Some(gsi) => gsi, |
| 94 | // Do nothing if no GSI was ever allocated for this route, which means the interrupt is still masked. |
| 95 | None => return Ok(()), |
| 96 | }; |
| 97 | |
| 98 | if self.registered { |
| 99 | if let Some(ref irq_fd) = self.irq_fd { |
| 100 | vm.unregister_irqfd(irq_fd, gsi) |
| 101 | .map_err(|e| io::Error::other(format!("Failed unregistering irq_fd: {e}")))?; |
| 102 | } |
| 103 | |
| 104 | // Update internals to track the irq_fd as "unregistered". |
| 105 | self.registered = false; |
| 106 | } |
| 107 | |
| 108 | Ok(()) |
| 109 | } |
| 110 | |
| 111 | fn trigger(&mut self) -> Result<()> { |
| 112 | match self.irq_fd { |
no test coverage detected