Skip to content

Commit e21d2f7

Browse files
committed
chore: avoid IrqTrigger::new().unwrap()
`IrqTrigger::new()` returns a `Result` because creating an `EventFd` might fail with an `std::io::Error` error. All users of `IrqTrigger` create the object and directly unwrap the error. To avoid unwraps all over the place, change `IrqTrigger::new()` to unwrap a potential error while creating the EventFd internally and just return `Self`. Signed-off-by: Babis Chalios <bchalios@amazon.es>
1 parent c8b3d70 commit e21d2f7

File tree

6 files changed

+29
-27
lines changed

6 files changed

+29
-27
lines changed

src/vmm/src/builder.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -597,7 +597,7 @@ fn attach_virtio_device<T: 'static + VirtioDevice + MutEventSubscriber + Debug>(
597597
) -> Result<(), MmioError> {
598598
event_manager.add_subscriber(device.clone());
599599

600-
let interrupt = Arc::new(IrqTrigger::new()?);
600+
let interrupt = Arc::new(IrqTrigger::new());
601601
// The device mutex mustn't be locked here otherwise it will deadlock.
602602
let device = MmioTransport::new(
603603
vmm.vm.guest_memory().clone(),

src/vmm/src/device_manager/mmio.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -552,7 +552,7 @@ mod tests {
552552
cmdline: &mut kernel_cmdline::Cmdline,
553553
dev_id: &str,
554554
) -> Result<u64, MmioError> {
555-
let interrupt = Arc::new(IrqTrigger::new().unwrap());
555+
let interrupt = Arc::new(IrqTrigger::new());
556556
let mmio_device = MmioTransport::new(guest_mem, interrupt, device, false);
557557
let device_info = self.register_mmio_virtio_for_boot(
558558
vm,

src/vmm/src/device_manager/persist.rs

+5-10
Original file line numberDiff line numberDiff line change
@@ -514,8 +514,7 @@ impl<'a> Persist<'a> for MMIODeviceManager {
514514
};
515515

516516
if let Some(balloon_state) = &state.balloon_device {
517-
let interrupt =
518-
Arc::new(IrqTrigger::new().expect("Could not create interrupt for MMIO device"));
517+
let interrupt = Arc::new(IrqTrigger::new());
519518
let device = Arc::new(Mutex::new(Balloon::restore(
520519
BalloonConstructorArgs {
521520
mem: mem.clone(),
@@ -542,8 +541,7 @@ impl<'a> Persist<'a> for MMIODeviceManager {
542541
}
543542

544543
for block_state in &state.block_devices {
545-
let interrupt =
546-
Arc::new(IrqTrigger::new().expect("Could not create interrupt for MMIO device"));
544+
let interrupt = Arc::new(IrqTrigger::new());
547545
let device = Arc::new(Mutex::new(Block::restore(
548546
BlockConstructorArgs {
549547
mem: mem.clone(),
@@ -585,8 +583,7 @@ impl<'a> Persist<'a> for MMIODeviceManager {
585583
}
586584

587585
for net_state in &state.net_devices {
588-
let interrupt =
589-
Arc::new(IrqTrigger::new().expect("Could not create interrupt for MMIO device"));
586+
let interrupt = Arc::new(IrqTrigger::new());
590587
let device = Arc::new(Mutex::new(Net::restore(
591588
NetConstructorArgs {
592589
mem: mem.clone(),
@@ -622,8 +619,7 @@ impl<'a> Persist<'a> for MMIODeviceManager {
622619
cid: vsock_state.device_state.frontend.cid,
623620
};
624621
let backend = VsockUnixBackend::restore(ctor_args, &vsock_state.device_state.backend)?;
625-
let interrupt =
626-
Arc::new(IrqTrigger::new().expect("Could not create interrupt for MMIO device"));
622+
let interrupt = Arc::new(IrqTrigger::new());
627623
let device = Arc::new(Mutex::new(Vsock::restore(
628624
VsockConstructorArgs {
629625
mem: mem.clone(),
@@ -650,8 +646,7 @@ impl<'a> Persist<'a> for MMIODeviceManager {
650646
}
651647

652648
if let Some(entropy_state) = &state.entropy_device {
653-
let interrupt =
654-
Arc::new(IrqTrigger::new().expect("Could not create interrupt for MMIO device"));
649+
let interrupt = Arc::new(IrqTrigger::new());
655650
let ctor_args = EntropyConstructorArgs::new(mem.clone(), interrupt.clone());
656651

657652
let device = Arc::new(Mutex::new(Entropy::restore(

src/vmm/src/devices/virtio/persist.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,7 @@ mod tests {
431431
Arc<Mutex<VirtioBlock>>,
432432
) {
433433
let mem = default_mem();
434-
let interrupt = Arc::new(IrqTrigger::new().unwrap());
434+
let interrupt = Arc::new(IrqTrigger::new());
435435

436436
// Create backing file.
437437
let f = TempFile::new().unwrap();
@@ -454,7 +454,7 @@ mod tests {
454454
Arc<Mutex<Net>>,
455455
) {
456456
let mem = default_mem();
457-
let interrupt = Arc::new(IrqTrigger::new().unwrap());
457+
let interrupt = Arc::new(IrqTrigger::new());
458458
let net = Arc::new(Mutex::new(default_net()));
459459
let mmio_transport = MmioTransport::new(mem.clone(), interrupt.clone(), net.clone(), false);
460460

@@ -468,7 +468,7 @@ mod tests {
468468
Arc<Mutex<Vsock<VsockUnixBackend>>>,
469469
) {
470470
let mem = default_mem();
471-
let interrupt = Arc::new(IrqTrigger::new().unwrap());
471+
let interrupt = Arc::new(IrqTrigger::new());
472472

473473
let guest_cid = 52;
474474
let mut temp_uds_path = TempFile::new().unwrap();

src/vmm/src/devices/virtio/test_utils.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ pub fn default_mem() -> GuestMemoryMmap {
3333

3434
/// Creates a default ['IrqTrigger'] interrupt for a VirtIO device.
3535
pub fn default_interrupt() -> Arc<dyn VirtioInterrupt> {
36-
Arc::new(IrqTrigger::new().unwrap())
36+
Arc::new(IrqTrigger::new())
3737
}
3838

3939
#[derive(Debug)]

src/vmm/src/devices/virtio/transport/mmio.rs

+18-11
Original file line numberDiff line numberDiff line change
@@ -426,12 +426,19 @@ impl VirtioInterrupt for IrqTrigger {
426426
}
427427
}
428428

429+
impl Default for IrqTrigger {
430+
fn default() -> Self {
431+
Self::new()
432+
}
433+
}
434+
429435
impl IrqTrigger {
430-
pub fn new() -> std::io::Result<Self> {
431-
Ok(Self {
436+
pub fn new() -> Self {
437+
Self {
432438
irq_status: Arc::new(AtomicU32::new(0)),
433-
irq_evt: EventFd::new(libc::EFD_NONBLOCK)?,
434-
})
439+
irq_evt: EventFd::new(libc::EFD_NONBLOCK)
440+
.expect("Could not create EventFd for IrqTrigger"),
441+
}
435442
}
436443

437444
pub fn trigger_irq(&self, irq_type: IrqType) -> Result<(), std::io::Error> {
@@ -570,7 +577,7 @@ pub(crate) mod tests {
570577
#[test]
571578
fn test_new() {
572579
let m = single_region_mem(0x1000);
573-
let interrupt = Arc::new(IrqTrigger::new().unwrap());
580+
let interrupt = Arc::new(IrqTrigger::new());
574581
let mut dummy = DummyDevice::new();
575582
// Validate reset is no-op.
576583
assert!(dummy.reset().is_none());
@@ -603,7 +610,7 @@ pub(crate) mod tests {
603610
#[test]
604611
fn test_bus_device_read() {
605612
let m = single_region_mem(0x1000);
606-
let interrupt = Arc::new(IrqTrigger::new().unwrap());
613+
let interrupt = Arc::new(IrqTrigger::new());
607614
let mut d = MmioTransport::new(
608615
m,
609616
interrupt,
@@ -699,7 +706,7 @@ pub(crate) mod tests {
699706
#[allow(clippy::cognitive_complexity)]
700707
fn test_bus_device_write() {
701708
let m = single_region_mem(0x1000);
702-
let interrupt = Arc::new(IrqTrigger::new().unwrap());
709+
let interrupt = Arc::new(IrqTrigger::new());
703710
let dummy_dev = Arc::new(Mutex::new(DummyDevice::new()));
704711
let mut d = MmioTransport::new(m, interrupt, dummy_dev.clone(), false);
705712
let mut buf = vec![0; 5];
@@ -862,7 +869,7 @@ pub(crate) mod tests {
862869
#[test]
863870
fn test_bus_device_activate() {
864871
let m = single_region_mem(0x1000);
865-
let interrupt = Arc::new(IrqTrigger::new().unwrap());
872+
let interrupt = Arc::new(IrqTrigger::new());
866873
let mut d = MmioTransport::new(
867874
m,
868875
interrupt,
@@ -947,7 +954,7 @@ pub(crate) mod tests {
947954
#[test]
948955
fn test_bus_device_activate_failure() {
949956
let m = single_region_mem(0x1000);
950-
let interrupt = Arc::new(IrqTrigger::new().unwrap());
957+
let interrupt = Arc::new(IrqTrigger::new());
951958
let device = DummyDevice {
952959
activate_should_error: true,
953960
..DummyDevice::new()
@@ -1060,7 +1067,7 @@ pub(crate) mod tests {
10601067
#[test]
10611068
fn test_bus_device_reset() {
10621069
let m = single_region_mem(0x1000);
1063-
let interrupt = Arc::new(IrqTrigger::new().unwrap());
1070+
let interrupt = Arc::new(IrqTrigger::new());
10641071
let mut d = MmioTransport::new(
10651072
m,
10661073
interrupt,
@@ -1119,7 +1126,7 @@ pub(crate) mod tests {
11191126

11201127
#[test]
11211128
fn irq_trigger() {
1122-
let irq_trigger = IrqTrigger::new().unwrap();
1129+
let irq_trigger = IrqTrigger::new();
11231130
assert_eq!(irq_trigger.irq_status.load(Ordering::SeqCst), 0);
11241131

11251132
// Check that there are no pending irqs.

0 commit comments

Comments
 (0)