Skip to content

Commit fef311e

Browse files
committed
refactor: simplify creation of I8042 device
We always create anew the keyboard interrupt event. Just create it inside `I8042Device::new()` and return an error if that fails. Signed-off-by: Babis Chalios <[email protected]>
1 parent 9274294 commit fef311e

File tree

3 files changed

+15
-32
lines changed

3 files changed

+15
-32
lines changed

src/vmm/src/device_manager/legacy.rs

+3-4
Original file line numberDiff line numberDiff line change
@@ -259,10 +259,9 @@ mod tests {
259259
),
260260
input: None,
261261
})),
262-
Arc::new(Mutex::new(I8042Device::new(
263-
EventFd::new(libc::EFD_NONBLOCK).unwrap(),
264-
EventFd::new(libc::EFD_NONBLOCK).unwrap(),
265-
))),
262+
Arc::new(Mutex::new(
263+
I8042Device::new(EventFd::new(libc::EFD_NONBLOCK).unwrap()).unwrap(),
264+
)),
266265
)
267266
.unwrap();
268267
ldm.register_devices(&io_bus, vm.fd()).unwrap();

src/vmm/src/device_manager/mod.rs

+4-8
Original file line numberDiff line numberDiff line change
@@ -159,10 +159,7 @@ impl DeviceManager {
159159
.try_clone()
160160
.map_err(DeviceManagerCreateError::EventFd)?;
161161
// Create keyboard emulator for reset event
162-
let i8042 = Arc::new(Mutex::new(I8042Device::new(
163-
reset_evt,
164-
EventFd::new(libc::EFD_NONBLOCK).map_err(DeviceManagerCreateError::EventFd)?,
165-
)));
162+
let i8042 = Arc::new(Mutex::new(I8042Device::new(reset_evt)?));
166163

167164
// create pio dev manager with legacy devices
168165
let mut legacy_devices = PortIODeviceManager::new(serial, i8042)?;
@@ -404,10 +401,9 @@ pub(crate) mod tests {
404401
Arc::new(Mutex::new(
405402
SerialDevice::new(None, SerialOut::Sink(std::io::sink())).unwrap(),
406403
)),
407-
Arc::new(Mutex::new(I8042Device::new(
408-
EventFd::new(libc::EFD_NONBLOCK).unwrap(),
409-
EventFd::new(libc::EFD_NONBLOCK).unwrap(),
410-
))),
404+
Arc::new(Mutex::new(
405+
I8042Device::new(EventFd::new(libc::EFD_NONBLOCK).unwrap()).unwrap(),
406+
)),
411407
)
412408
.unwrap();
413409

src/vmm/src/devices/legacy/i8042.rs

+8-20
Original file line numberDiff line numberDiff line change
@@ -119,18 +119,18 @@ pub struct I8042Device {
119119

120120
impl I8042Device {
121121
/// Constructs an i8042 device that will signal the given event when the guest requests it.
122-
pub fn new(reset_evt: EventFd, kbd_interrupt_evt: EventFd) -> I8042Device {
123-
I8042Device {
122+
pub fn new(reset_evt: EventFd) -> Result<I8042Device, std::io::Error> {
123+
Ok(I8042Device {
124124
reset_evt,
125-
kbd_interrupt_evt,
125+
kbd_interrupt_evt: EventFd::new(libc::EFD_NONBLOCK)?,
126126
control: CB_POST_OK | CB_KBD_INT,
127127
cmd: 0,
128128
outp: 0,
129129
status: SB_KBD_ENABLED,
130130
buf: [0; BUF_SIZE],
131131
bhead: Wrapping(0),
132132
btail: Wrapping(0),
133-
}
133+
})
134134
}
135135

136136
/// Signal a ctrl-alt-del (reset) event.
@@ -355,10 +355,7 @@ mod tests {
355355

356356
#[test]
357357
fn test_i8042_read_write_and_event() {
358-
let mut i8042 = I8042Device::new(
359-
EventFd::new(libc::EFD_NONBLOCK).unwrap(),
360-
EventFd::new(libc::EFD_NONBLOCK).unwrap(),
361-
);
358+
let mut i8042 = I8042Device::new(EventFd::new(libc::EFD_NONBLOCK).unwrap()).unwrap();
362359
let reset_evt = i8042.reset_evt.try_clone().unwrap();
363360

364361
// Check if reading in a 2-length array doesn't have side effects.
@@ -395,10 +392,7 @@ mod tests {
395392

396393
#[test]
397394
fn test_i8042_commands() {
398-
let mut i8042 = I8042Device::new(
399-
EventFd::new(libc::EFD_NONBLOCK).unwrap(),
400-
EventFd::new(libc::EFD_NONBLOCK).unwrap(),
401-
);
395+
let mut i8042 = I8042Device::new(EventFd::new(libc::EFD_NONBLOCK).unwrap()).unwrap();
402396
let mut data = [1];
403397

404398
// Test reading/writing the control register.
@@ -435,10 +429,7 @@ mod tests {
435429

436430
#[test]
437431
fn test_i8042_buffer() {
438-
let mut i8042 = I8042Device::new(
439-
EventFd::new(libc::EFD_NONBLOCK).unwrap(),
440-
EventFd::new(libc::EFD_NONBLOCK).unwrap(),
441-
);
432+
let mut i8042 = I8042Device::new(EventFd::new(libc::EFD_NONBLOCK).unwrap()).unwrap();
442433

443434
// Test push/pop.
444435
i8042.push_byte(52).unwrap();
@@ -462,10 +453,7 @@ mod tests {
462453

463454
#[test]
464455
fn test_i8042_kbd() {
465-
let mut i8042 = I8042Device::new(
466-
EventFd::new(libc::EFD_NONBLOCK).unwrap(),
467-
EventFd::new(libc::EFD_NONBLOCK).unwrap(),
468-
);
456+
let mut i8042 = I8042Device::new(EventFd::new(libc::EFD_NONBLOCK).unwrap()).unwrap();
469457

470458
fn expect_key(i8042: &mut I8042Device, key: u16) {
471459
let mut data = [1];

0 commit comments

Comments
 (0)