@@ -10,14 +10,11 @@ use std::sync::mpsc;
10
10
use std:: sync:: { Arc , Mutex } ;
11
11
12
12
use event_manager:: { MutEventSubscriber , SubscriberOps } ;
13
- use libc:: EFD_NONBLOCK ;
14
13
use linux_loader:: cmdline:: Cmdline as LoaderKernelCmdline ;
15
14
use userfaultfd:: Uffd ;
16
15
use utils:: time:: TimestampUs ;
17
16
#[ cfg( target_arch = "aarch64" ) ]
18
17
use vm_superio:: Rtc ;
19
- use vm_superio:: Serial ;
20
- use vmm_sys_util:: eventfd:: EventFd ;
21
18
22
19
use crate :: arch:: { ConfigurationError , configure_system_for_boot, load_kernel} ;
23
20
#[ cfg( target_arch = "aarch64" ) ]
@@ -37,8 +34,8 @@ use crate::devices::BusDevice;
37
34
use crate :: devices:: acpi:: vmgenid:: { VmGenId , VmGenIdError } ;
38
35
#[ cfg( target_arch = "aarch64" ) ]
39
36
use crate :: devices:: legacy:: RTCDevice ;
37
+ use crate :: devices:: legacy:: SerialDevice ;
40
38
use crate :: devices:: legacy:: serial:: SerialOut ;
41
- use crate :: devices:: legacy:: { EventFdTrigger , SerialEventsWrapper , SerialWrapper } ;
42
39
use crate :: devices:: virtio:: balloon:: Balloon ;
43
40
use crate :: devices:: virtio:: block:: device:: Block ;
44
41
use crate :: devices:: virtio:: device:: VirtioDevice ;
@@ -158,7 +155,7 @@ fn create_vmm_and_vcpus(
158
155
set_stdout_nonblocking ( ) ;
159
156
160
157
// Serial device setup.
161
- let serial_device = setup_serial_device ( event_manager, std :: io :: stdin ( ) , io :: stdout ( ) ) ?;
158
+ let serial_device = setup_serial_device ( event_manager) ?;
162
159
163
160
// x86_64 uses the i8042 reset event as the Vmm exit event.
164
161
let reset_evt = vcpus_exit_evt. try_clone ( ) . map_err ( VmmError :: EventFd ) ?;
@@ -532,22 +529,11 @@ pub fn build_microvm_from_snapshot(
532
529
/// Sets up the serial device.
533
530
pub fn setup_serial_device (
534
531
event_manager : & mut EventManager ,
535
- input : std:: io:: Stdin ,
536
- out : std:: io:: Stdout ,
537
532
) -> Result < Arc < Mutex < BusDevice > > , VmmError > {
538
- let interrupt_evt = EventFdTrigger :: new ( EventFd :: new ( EFD_NONBLOCK ) . map_err ( VmmError :: EventFd ) ?) ;
539
- let kick_stdin_read_evt =
540
- EventFdTrigger :: new ( EventFd :: new ( EFD_NONBLOCK ) . map_err ( VmmError :: EventFd ) ?) ;
541
- let serial = Arc :: new ( Mutex :: new ( BusDevice :: Serial ( SerialWrapper {
542
- serial : Serial :: with_events (
543
- interrupt_evt,
544
- SerialEventsWrapper {
545
- buffer_ready_event_fd : Some ( kick_stdin_read_evt) ,
546
- } ,
547
- SerialOut :: Stdout ( out) ,
548
- ) ,
549
- input : Some ( input) ,
550
- } ) ) ) ;
533
+ let serial = Arc :: new ( Mutex :: new ( BusDevice :: Serial (
534
+ SerialDevice :: new ( Some ( std:: io:: stdin ( ) ) , SerialOut :: Stdout ( std:: io:: stdout ( ) ) )
535
+ . map_err ( VmmError :: EventFd ) ?,
536
+ ) ) ) ;
551
537
event_manager. add_subscriber ( serial. clone ( ) ) ;
552
538
Ok ( serial)
553
539
}
@@ -569,7 +555,7 @@ fn attach_legacy_devices_aarch64(
569
555
if cmdline_contains_console {
570
556
// Make stdout non-blocking.
571
557
set_stdout_nonblocking ( ) ;
572
- let serial = setup_serial_device ( event_manager, std :: io :: stdin ( ) , std :: io :: stdout ( ) ) ?;
558
+ let serial = setup_serial_device ( event_manager) ?;
573
559
vmm. mmio_device_manager
574
560
. register_mmio_serial ( vmm. vm . fd ( ) , & mut vmm. resource_allocator , serial, None )
575
561
. map_err ( VmmError :: RegisterMMIODevice ) ?;
@@ -749,11 +735,15 @@ pub(crate) fn set_stdout_nonblocking() {
749
735
pub ( crate ) mod tests {
750
736
751
737
use linux_loader:: cmdline:: Cmdline ;
738
+ #[ cfg( target_arch = "x86_64" ) ]
739
+ use vmm_sys_util:: eventfd:: EventFd ;
752
740
use vmm_sys_util:: tempfile:: TempFile ;
753
741
754
742
use super :: * ;
755
743
use crate :: arch:: DeviceType ;
756
744
use crate :: device_manager:: resources:: ResourceAllocator ;
745
+ #[ cfg( target_arch = "x86_64" ) ]
746
+ use crate :: devices:: legacy:: serial:: SerialOut ;
757
747
use crate :: devices:: virtio:: block:: CacheType ;
758
748
use crate :: devices:: virtio:: rng:: device:: ENTROPY_DEV_ID ;
759
749
use crate :: devices:: virtio:: vsock:: { TYPE_VSOCK , VSOCK_DEV_ID } ;
@@ -830,16 +820,9 @@ pub(crate) mod tests {
830
820
let acpi_device_manager = ACPIDeviceManager :: new ( ) ;
831
821
#[ cfg( target_arch = "x86_64" ) ]
832
822
let pio_device_manager = PortIODeviceManager :: new (
833
- Arc :: new ( Mutex :: new ( BusDevice :: Serial ( SerialWrapper {
834
- serial : Serial :: with_events (
835
- EventFdTrigger :: new ( EventFd :: new ( EFD_NONBLOCK ) . unwrap ( ) ) ,
836
- SerialEventsWrapper {
837
- buffer_ready_event_fd : None ,
838
- } ,
839
- SerialOut :: Sink ( std:: io:: sink ( ) ) ,
840
- ) ,
841
- input : None ,
842
- } ) ) ) ,
823
+ Arc :: new ( Mutex :: new ( BusDevice :: Serial (
824
+ SerialDevice :: new ( None , SerialOut :: Sink ( std:: io:: sink ( ) ) ) . unwrap ( ) ,
825
+ ) ) ) ,
843
826
EventFd :: new ( libc:: EFD_NONBLOCK ) . unwrap ( ) ,
844
827
)
845
828
. unwrap ( ) ;
0 commit comments