Skip to content

Commit dc41d9e

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 a53f112 commit dc41d9e

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
@@ -553,7 +553,7 @@ mod tests {
553553
cmdline: &mut kernel_cmdline::Cmdline,
554554
dev_id: &str,
555555
) -> Result<u64, MmioError> {
556-
let interrupt = Arc::new(IrqTrigger::new().unwrap());
556+
let interrupt = Arc::new(IrqTrigger::new());
557557
let mmio_device = MmioTransport::new(guest_mem, interrupt, device, false);
558558
let device_info = self.register_mmio_virtio_for_boot(
559559
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
fn trigger_irq(&self, irq_type: IrqType) -> Result<(), std::io::Error> {
@@ -572,7 +579,7 @@ pub(crate) mod tests {
572579
#[test]
573580
fn test_new() {
574581
let m = single_region_mem(0x1000);
575-
let interrupt = Arc::new(IrqTrigger::new().unwrap());
582+
let interrupt = Arc::new(IrqTrigger::new());
576583
let mut dummy = DummyDevice::new();
577584
// Validate reset is no-op.
578585
assert!(dummy.reset().is_none());
@@ -605,7 +612,7 @@ pub(crate) mod tests {
605612
#[test]
606613
fn test_bus_device_read() {
607614
let m = single_region_mem(0x1000);
608-
let interrupt = Arc::new(IrqTrigger::new().unwrap());
615+
let interrupt = Arc::new(IrqTrigger::new());
609616
let mut d = MmioTransport::new(
610617
m,
611618
interrupt,
@@ -701,7 +708,7 @@ pub(crate) mod tests {
701708
#[allow(clippy::cognitive_complexity)]
702709
fn test_bus_device_write() {
703710
let m = single_region_mem(0x1000);
704-
let interrupt = Arc::new(IrqTrigger::new().unwrap());
711+
let interrupt = Arc::new(IrqTrigger::new());
705712
let dummy_dev = Arc::new(Mutex::new(DummyDevice::new()));
706713
let mut d = MmioTransport::new(m, interrupt, dummy_dev.clone(), false);
707714
let mut buf = vec![0; 5];
@@ -864,7 +871,7 @@ pub(crate) mod tests {
864871
#[test]
865872
fn test_bus_device_activate() {
866873
let m = single_region_mem(0x1000);
867-
let interrupt = Arc::new(IrqTrigger::new().unwrap());
874+
let interrupt = Arc::new(IrqTrigger::new());
868875
let mut d = MmioTransport::new(
869876
m,
870877
interrupt,
@@ -949,7 +956,7 @@ pub(crate) mod tests {
949956
#[test]
950957
fn test_bus_device_activate_failure() {
951958
let m = single_region_mem(0x1000);
952-
let interrupt = Arc::new(IrqTrigger::new().unwrap());
959+
let interrupt = Arc::new(IrqTrigger::new());
953960
let device = DummyDevice {
954961
activate_should_error: true,
955962
..DummyDevice::new()
@@ -1062,7 +1069,7 @@ pub(crate) mod tests {
10621069
#[test]
10631070
fn test_bus_device_reset() {
10641071
let m = single_region_mem(0x1000);
1065-
let interrupt = Arc::new(IrqTrigger::new().unwrap());
1072+
let interrupt = Arc::new(IrqTrigger::new());
10661073
let mut d = MmioTransport::new(
10671074
m,
10681075
interrupt,
@@ -1121,7 +1128,7 @@ pub(crate) mod tests {
11211128

11221129
#[test]
11231130
fn irq_trigger() {
1124-
let irq_trigger = IrqTrigger::new().unwrap();
1131+
let irq_trigger = IrqTrigger::new();
11251132
assert_eq!(irq_trigger.irq_status.load(Ordering::SeqCst), 0);
11261133

11271134
// Check that there are no pending irqs.

0 commit comments

Comments
 (0)