@@ -10,16 +10,13 @@ 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_memory:: GuestAddress ;
19
18
#[ cfg( target_arch = "aarch64" ) ]
20
19
use vm_superio:: Rtc ;
21
- use vm_superio:: Serial ;
22
- use vmm_sys_util:: eventfd:: EventFd ;
23
20
24
21
use crate :: arch:: { ConfigurationError , configure_system_for_boot, load_kernel} ;
25
22
#[ cfg( target_arch = "aarch64" ) ]
@@ -39,8 +36,8 @@ use crate::devices::BusDevice;
39
36
use crate :: devices:: acpi:: vmgenid:: { VmGenId , VmGenIdError } ;
40
37
#[ cfg( target_arch = "aarch64" ) ]
41
38
use crate :: devices:: legacy:: RTCDevice ;
39
+ use crate :: devices:: legacy:: SerialDevice ;
42
40
use crate :: devices:: legacy:: serial:: SerialOut ;
43
- use crate :: devices:: legacy:: { EventFdTrigger , SerialEventsWrapper , SerialWrapper } ;
44
41
use crate :: devices:: virtio:: balloon:: Balloon ;
45
42
use crate :: devices:: virtio:: block:: device:: Block ;
46
43
use crate :: devices:: virtio:: device:: VirtioDevice ;
@@ -163,7 +160,7 @@ fn create_vmm_and_vcpus(
163
160
set_stdout_nonblocking ( ) ;
164
161
165
162
// 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) ?;
167
164
168
165
// x86_64 uses the i8042 reset event as the Vmm exit event.
169
166
let reset_evt = vcpus_exit_evt. try_clone ( ) . map_err ( VmmError :: EventFd ) ?;
@@ -554,22 +551,11 @@ pub fn build_microvm_from_snapshot(
554
551
/// Sets up the serial device.
555
552
pub fn setup_serial_device (
556
553
event_manager : & mut EventManager ,
557
- input : std:: io:: Stdin ,
558
- out : std:: io:: Stdout ,
559
554
) -> 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
+ ) ) ) ;
573
559
event_manager. add_subscriber ( serial. clone ( ) ) ;
574
560
Ok ( serial)
575
561
}
@@ -629,7 +615,7 @@ fn attach_legacy_devices_aarch64(
629
615
if cmdline_contains_console {
630
616
// Make stdout non-blocking.
631
617
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) ?;
633
619
vmm. mmio_device_manager
634
620
. register_mmio_serial ( vmm. vm . fd ( ) , & mut vmm. resource_allocator , serial, None )
635
621
. map_err ( VmmError :: RegisterMMIODevice ) ?;
@@ -809,11 +795,15 @@ pub(crate) fn set_stdout_nonblocking() {
809
795
pub ( crate ) mod tests {
810
796
811
797
use linux_loader:: cmdline:: Cmdline ;
798
+ #[ cfg( target_arch = "x86_64" ) ]
799
+ use vmm_sys_util:: eventfd:: EventFd ;
812
800
use vmm_sys_util:: tempfile:: TempFile ;
813
801
814
802
use super :: * ;
815
803
use crate :: arch:: DeviceType ;
816
804
use crate :: device_manager:: resources:: ResourceAllocator ;
805
+ #[ cfg( target_arch = "x86_64" ) ]
806
+ use crate :: devices:: legacy:: serial:: SerialOut ;
817
807
use crate :: devices:: virtio:: block:: CacheType ;
818
808
use crate :: devices:: virtio:: rng:: device:: ENTROPY_DEV_ID ;
819
809
use crate :: devices:: virtio:: vsock:: { TYPE_VSOCK , VSOCK_DEV_ID } ;
@@ -890,16 +880,9 @@ pub(crate) mod tests {
890
880
let acpi_device_manager = ACPIDeviceManager :: new ( ) ;
891
881
#[ cfg( target_arch = "x86_64" ) ]
892
882
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
+ ) ) ) ,
903
886
EventFd :: new ( libc:: EFD_NONBLOCK ) . unwrap ( ) ,
904
887
)
905
888
. unwrap ( ) ;
0 commit comments