MCPcopy Create free account
hub / github.com/cloud-hypervisor/cloud-hypervisor / set_notifier

Method set_notifier

vmm/src/interrupt.rs:131–151  ·  view source on GitHub ↗
(&mut self, eventfd: Option<EventFd>, vm: &dyn hypervisor::Vm)

Source from the content-addressed store, hash-verified

129 // warning.
130 #[allow(dead_code)]
131 fn set_notifier(&mut self, eventfd: Option<EventFd>, vm: &dyn hypervisor::Vm) -> Result<()> {
132 let old_irqfd = core::mem::replace(&mut self.irq_fd, eventfd);
133 if self.registered {
134 // A registered route must have a GSI allocated, since enable()
135 // only sets registered=true after using a valid GSI.
136 let gsi = self.gsi.expect("registered route has no GSI allocated");
137 if let Some(ref irq_fd) = self.irq_fd {
138 vm.register_irqfd(irq_fd, gsi)
139 .map_err(|e| io::Error::other(format!("Failed registering irq_fd: {e}")))?;
140 }
141 // If the irqfd cannot be unregistered, what to do? Spin?
142 // Returning an error isn't helpful as the new irqfd is already registered.
143 if let Some(old_irq_fd) = old_irqfd {
144 match vm.unregister_irqfd(&old_irq_fd, gsi) {
145 Ok(()) => {}
146 Err(e) => log::warn!("Failed unregistering old irqfd: {e}"),
147 }
148 }
149 }
150 Ok(())
151 }
152}
153
154impl Drop for InterruptRoute {

Callers

nothing calls this directly

Calls 3

register_irqfdMethod · 0.45
unregister_irqfdMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected