Skip to content

Commit c2f76d8

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 <[email protected]>
1 parent b93c390 commit c2f76d8

File tree

6 files changed

+23
-27
lines changed

6 files changed

+23
-27
lines changed

src/vmm/src/builder.rs

Lines changed: 1 addition & 1 deletion
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 5 additions & 10 deletions
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

Lines changed: 3 additions & 3 deletions
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -427,11 +427,12 @@ impl VirtioInterrupt for IrqTrigger {
427427
}
428428

429429
impl IrqTrigger {
430-
pub fn new() -> std::io::Result<Self> {
431-
Ok(Self {
430+
pub fn new() -> Self {
431+
Self {
432432
irq_status: Arc::new(AtomicU32::new(0)),
433-
irq_evt: EventFd::new(libc::EFD_NONBLOCK)?,
434-
})
433+
irq_evt: EventFd::new(libc::EFD_NONBLOCK)
434+
.expect("Could not create EventFd for IrqTrigger"),
435+
}
435436
}
436437

437438
pub fn trigger_irq(&self, irq_type: IrqType) -> Result<(), std::io::Error> {
@@ -570,7 +571,7 @@ pub(crate) mod tests {
570571
#[test]
571572
fn test_new() {
572573
let m = single_region_mem(0x1000);
573-
let interrupt = Arc::new(IrqTrigger::new().unwrap());
574+
let interrupt = Arc::new(IrqTrigger::new());
574575
let mut dummy = DummyDevice::new();
575576
// Validate reset is no-op.
576577
assert!(dummy.reset().is_none());
@@ -603,7 +604,7 @@ pub(crate) mod tests {
603604
#[test]
604605
fn test_bus_device_read() {
605606
let m = single_region_mem(0x1000);
606-
let interrupt = Arc::new(IrqTrigger::new().unwrap());
607+
let interrupt = Arc::new(IrqTrigger::new());
607608
let mut d = MmioTransport::new(
608609
m,
609610
interrupt,
@@ -699,7 +700,7 @@ pub(crate) mod tests {
699700
#[allow(clippy::cognitive_complexity)]
700701
fn test_bus_device_write() {
701702
let m = single_region_mem(0x1000);
702-
let interrupt = Arc::new(IrqTrigger::new().unwrap());
703+
let interrupt = Arc::new(IrqTrigger::new());
703704
let dummy_dev = Arc::new(Mutex::new(DummyDevice::new()));
704705
let mut d = MmioTransport::new(m, interrupt, dummy_dev.clone(), false);
705706
let mut buf = vec![0; 5];
@@ -862,7 +863,7 @@ pub(crate) mod tests {
862863
#[test]
863864
fn test_bus_device_activate() {
864865
let m = single_region_mem(0x1000);
865-
let interrupt = Arc::new(IrqTrigger::new().unwrap());
866+
let interrupt = Arc::new(IrqTrigger::new());
866867
let mut d = MmioTransport::new(
867868
m,
868869
interrupt,
@@ -947,7 +948,7 @@ pub(crate) mod tests {
947948
#[test]
948949
fn test_bus_device_activate_failure() {
949950
let m = single_region_mem(0x1000);
950-
let interrupt = Arc::new(IrqTrigger::new().unwrap());
951+
let interrupt = Arc::new(IrqTrigger::new());
951952
let device = DummyDevice {
952953
activate_should_error: true,
953954
..DummyDevice::new()
@@ -1060,7 +1061,7 @@ pub(crate) mod tests {
10601061
#[test]
10611062
fn test_bus_device_reset() {
10621063
let m = single_region_mem(0x1000);
1063-
let interrupt = Arc::new(IrqTrigger::new().unwrap());
1064+
let interrupt = Arc::new(IrqTrigger::new());
10641065
let mut d = MmioTransport::new(
10651066
m,
10661067
interrupt,
@@ -1119,7 +1120,7 @@ pub(crate) mod tests {
11191120

11201121
#[test]
11211122
fn irq_trigger() {
1122-
let irq_trigger = IrqTrigger::new().unwrap();
1123+
let irq_trigger = IrqTrigger::new();
11231124
assert_eq!(irq_trigger.irq_status.load(Ordering::SeqCst), 0);
11241125

11251126
// Check that there are no pending irqs.

0 commit comments

Comments
 (0)