@@ -10,16 +10,13 @@ use std::sync::mpsc;
1010use std:: sync:: { Arc , Mutex } ;
1111
1212use event_manager:: { MutEventSubscriber , SubscriberOps } ;
13- use libc:: EFD_NONBLOCK ;
1413use linux_loader:: cmdline:: Cmdline as LoaderKernelCmdline ;
1514use userfaultfd:: Uffd ;
1615use utils:: time:: TimestampUs ;
1716#[ cfg( target_arch = "aarch64" ) ]
1817use vm_memory:: GuestAddress ;
1918#[ cfg( target_arch = "aarch64" ) ]
2019use vm_superio:: Rtc ;
21- use vm_superio:: Serial ;
22- use vmm_sys_util:: eventfd:: EventFd ;
2320
2421use crate :: arch:: { ConfigurationError , configure_system_for_boot, load_kernel} ;
2522#[ cfg( target_arch = "aarch64" ) ]
@@ -39,8 +36,8 @@ use crate::devices::BusDevice;
3936use crate :: devices:: acpi:: vmgenid:: { VmGenId , VmGenIdError } ;
4037#[ cfg( target_arch = "aarch64" ) ]
4138use crate :: devices:: legacy:: RTCDevice ;
39+ use crate :: devices:: legacy:: SerialDevice ;
4240use crate :: devices:: legacy:: serial:: SerialOut ;
43- use crate :: devices:: legacy:: { EventFdTrigger , SerialEventsWrapper , SerialWrapper } ;
4441use crate :: devices:: virtio:: balloon:: Balloon ;
4542use crate :: devices:: virtio:: block:: device:: Block ;
4643use crate :: devices:: virtio:: device:: VirtioDevice ;
@@ -163,7 +160,7 @@ fn create_vmm_and_vcpus(
163160 set_stdout_nonblocking ( ) ;
164161
165162 // Serial device setup.
166- let serial_device = setup_serial_device ( event_manager, std :: io :: stdin ( ) , io :: stdout ( ) ) ?;
163+ let serial_device = setup_serial_device ( event_manager) ?;
167164
168165 // x86_64 uses the i8042 reset event as the Vmm exit event.
169166 let reset_evt = vcpus_exit_evt. try_clone ( ) . map_err ( VmmError :: EventFd ) ?;
@@ -554,22 +551,11 @@ pub fn build_microvm_from_snapshot(
554551/// Sets up the serial device.
555552pub fn setup_serial_device (
556553 event_manager : & mut EventManager ,
557- input : std:: io:: Stdin ,
558- out : std:: io:: Stdout ,
559554) -> Result < Arc < Mutex < BusDevice > > , VmmError > {
560- let interrupt_evt = EventFdTrigger :: new ( EventFd :: new ( EFD_NONBLOCK ) . map_err ( VmmError :: EventFd ) ?) ;
561- let kick_stdin_read_evt =
562- EventFdTrigger :: new ( EventFd :: new ( EFD_NONBLOCK ) . map_err ( VmmError :: EventFd ) ?) ;
563- let serial = Arc :: new ( Mutex :: new ( BusDevice :: Serial ( SerialWrapper {
564- serial : Serial :: with_events (
565- interrupt_evt,
566- SerialEventsWrapper {
567- buffer_ready_event_fd : Some ( kick_stdin_read_evt) ,
568- } ,
569- SerialOut :: Stdout ( out) ,
570- ) ,
571- input : Some ( input) ,
572- } ) ) ) ;
555+ let serial = Arc :: new ( Mutex :: new ( BusDevice :: Serial (
556+ SerialDevice :: new ( Some ( std:: io:: stdin ( ) ) , SerialOut :: Stdout ( std:: io:: stdout ( ) ) )
557+ . map_err ( VmmError :: EventFd ) ?,
558+ ) ) ) ;
573559 event_manager. add_subscriber ( serial. clone ( ) ) ;
574560 Ok ( serial)
575561}
@@ -629,7 +615,7 @@ fn attach_legacy_devices_aarch64(
629615 if cmdline_contains_console {
630616 // Make stdout non-blocking.
631617 set_stdout_nonblocking ( ) ;
632- let serial = setup_serial_device ( event_manager, std :: io :: stdin ( ) , std :: io :: stdout ( ) ) ?;
618+ let serial = setup_serial_device ( event_manager) ?;
633619 vmm. mmio_device_manager
634620 . register_mmio_serial ( vmm. vm . fd ( ) , & mut vmm. resource_allocator , serial, None )
635621 . map_err ( VmmError :: RegisterMMIODevice ) ?;
@@ -809,11 +795,15 @@ pub(crate) fn set_stdout_nonblocking() {
809795pub ( crate ) mod tests {
810796
811797 use linux_loader:: cmdline:: Cmdline ;
798+ #[ cfg( target_arch = "x86_64" ) ]
799+ use vmm_sys_util:: eventfd:: EventFd ;
812800 use vmm_sys_util:: tempfile:: TempFile ;
813801
814802 use super :: * ;
815803 use crate :: arch:: DeviceType ;
816804 use crate :: device_manager:: resources:: ResourceAllocator ;
805+ #[ cfg( target_arch = "x86_64" ) ]
806+ use crate :: devices:: legacy:: serial:: SerialOut ;
817807 use crate :: devices:: virtio:: block:: CacheType ;
818808 use crate :: devices:: virtio:: rng:: device:: ENTROPY_DEV_ID ;
819809 use crate :: devices:: virtio:: vsock:: { TYPE_VSOCK , VSOCK_DEV_ID } ;
@@ -890,16 +880,9 @@ pub(crate) mod tests {
890880 let acpi_device_manager = ACPIDeviceManager :: new ( ) ;
891881 #[ cfg( target_arch = "x86_64" ) ]
892882 let pio_device_manager = PortIODeviceManager :: new (
893- Arc :: new ( Mutex :: new ( BusDevice :: Serial ( SerialWrapper {
894- serial : Serial :: with_events (
895- EventFdTrigger :: new ( EventFd :: new ( EFD_NONBLOCK ) . unwrap ( ) ) ,
896- SerialEventsWrapper {
897- buffer_ready_event_fd : None ,
898- } ,
899- SerialOut :: Sink ( std:: io:: sink ( ) ) ,
900- ) ,
901- input : None ,
902- } ) ) ) ,
883+ Arc :: new ( Mutex :: new ( BusDevice :: Serial (
884+ SerialDevice :: new ( None , SerialOut :: Sink ( std:: io:: sink ( ) ) ) . unwrap ( ) ,
885+ ) ) ) ,
903886 EventFd :: new ( libc:: EFD_NONBLOCK ) . unwrap ( ) ,
904887 )
905888 . unwrap ( ) ;
0 commit comments