@@ -144,11 +144,12 @@ fn create_vmm_and_vcpus(
144
144
event_manager : & mut EventManager ,
145
145
vcpu_count : u8 ,
146
146
kvm_capabilities : Vec < KvmCapability > ,
147
+ secret_free : bool ,
147
148
) -> Result < ( Vmm , Vec < Vcpu > ) , VmmError > {
148
149
let kvm = Kvm :: new ( kvm_capabilities) ?;
149
150
// Set up Kvm Vm and register memory regions.
150
151
// Build custom CPU config if a custom template is provided.
151
- let mut vm = Vm :: new ( & kvm) ?;
152
+ let mut vm = Vm :: new ( & kvm, secret_free ) ?;
152
153
153
154
let resource_allocator = ResourceAllocator :: new ( ) ?;
154
155
@@ -239,6 +240,7 @@ pub fn build_microvm_for_boot(
239
240
event_manager,
240
241
vm_resources. machine_config . vcpu_count ,
241
242
cpu_template. kvm_capabilities . clone ( ) ,
243
+ vm_resources. machine_config . secret_free ,
242
244
) ?;
243
245
244
246
vmm. vm
@@ -248,7 +250,7 @@ pub fn build_microvm_for_boot(
248
250
let entry_point = load_kernel (
249
251
MaybeBounce :: new (
250
252
boot_config. kernel_file . try_clone ( ) . unwrap ( ) ,
251
- vm_resources . machine_config . secret_free ,
253
+ vmm . vm . secret_free ( ) ,
252
254
) ,
253
255
vmm. vm . guest_memory ( ) ,
254
256
) ?;
@@ -261,7 +263,7 @@ pub fn build_microvm_for_boot(
261
263
262
264
Some ( InitrdConfig :: from_reader (
263
265
vmm. vm . guest_memory ( ) ,
264
- MaybeBounce :: new ( initrd_file. as_fd ( ) , vm_resources . machine_config . secret_free ) ,
266
+ MaybeBounce :: new ( initrd_file. as_fd ( ) , vmm . vm . secret_free ( ) ) ,
265
267
u64_to_usize ( size) ,
266
268
) ?)
267
269
}
@@ -296,24 +298,16 @@ pub fn build_microvm_for_boot(
296
298
& mut boot_cmdline,
297
299
vm_resources. block . devices . iter ( ) ,
298
300
event_manager,
299
- vm_resources. machine_config . secret_free ,
300
301
) ?;
301
302
attach_net_devices (
302
303
& mut vmm,
303
304
& mut boot_cmdline,
304
305
vm_resources. net_builder . iter ( ) ,
305
306
event_manager,
306
- vm_resources. machine_config . secret_free ,
307
307
) ?;
308
308
309
309
if let Some ( unix_vsock) = vm_resources. vsock . get ( ) {
310
- attach_unixsock_vsock_device (
311
- & mut vmm,
312
- & mut boot_cmdline,
313
- unix_vsock,
314
- event_manager,
315
- vm_resources. machine_config . secret_free ,
316
- ) ?;
310
+ attach_unixsock_vsock_device ( & mut vmm, & mut boot_cmdline, unix_vsock, event_manager) ?;
317
311
}
318
312
319
313
if let Some ( entropy) = vm_resources. entropy . get ( ) {
@@ -469,6 +463,7 @@ pub fn build_microvm_from_snapshot(
469
463
event_manager,
470
464
vm_resources. machine_config . vcpu_count ,
471
465
microvm_state. kvm_state . kvm_cap_modifiers . clone ( ) ,
466
+ false ,
472
467
)
473
468
. map_err ( StartMicrovmError :: Internal ) ?;
474
469
@@ -685,11 +680,10 @@ fn attach_virtio_device<T: 'static + VirtioDevice + MutEventSubscriber + Debug>(
685
680
device : Arc < Mutex < T > > ,
686
681
cmdline : & mut LoaderKernelCmdline ,
687
682
is_vhost_user : bool ,
688
- secret_free : bool ,
689
683
) -> Result < ( ) , MmioError > {
690
684
event_manager. add_subscriber ( device. clone ( ) ) ;
691
685
692
- if secret_free {
686
+ if vmm . vm . secret_free ( ) {
693
687
device. lock ( ) . unwrap ( ) . force_userspace_bounce_buffers ( ) ;
694
688
}
695
689
@@ -748,7 +742,6 @@ fn attach_entropy_device(
748
742
entropy_device. clone ( ) ,
749
743
cmdline,
750
744
false ,
751
- false ,
752
745
)
753
746
}
754
747
@@ -757,7 +750,6 @@ fn attach_block_devices<'a, I: Iterator<Item = &'a Arc<Mutex<Block>>> + Debug>(
757
750
cmdline : & mut LoaderKernelCmdline ,
758
751
blocks : I ,
759
752
event_manager : & mut EventManager ,
760
- secret_free : bool ,
761
753
) -> Result < ( ) , StartMicrovmError > {
762
754
for block in blocks {
763
755
let ( id, is_vhost_user) = {
@@ -782,7 +774,6 @@ fn attach_block_devices<'a, I: Iterator<Item = &'a Arc<Mutex<Block>>> + Debug>(
782
774
block. clone ( ) ,
783
775
cmdline,
784
776
is_vhost_user,
785
- secret_free,
786
777
) ?;
787
778
}
788
779
Ok ( ( ) )
@@ -793,20 +784,11 @@ fn attach_net_devices<'a, I: Iterator<Item = &'a Arc<Mutex<Net>>> + Debug>(
793
784
cmdline : & mut LoaderKernelCmdline ,
794
785
net_devices : I ,
795
786
event_manager : & mut EventManager ,
796
- secret_free : bool ,
797
787
) -> Result < ( ) , StartMicrovmError > {
798
788
for net_device in net_devices {
799
789
let id = net_device. lock ( ) . expect ( "Poisoned lock" ) . id ( ) . clone ( ) ;
800
790
// The device mutex mustn't be locked here otherwise it will deadlock.
801
- attach_virtio_device (
802
- event_manager,
803
- vmm,
804
- id,
805
- net_device. clone ( ) ,
806
- cmdline,
807
- false ,
808
- secret_free,
809
- ) ?;
791
+ attach_virtio_device ( event_manager, vmm, id, net_device. clone ( ) , cmdline, false ) ?;
810
792
}
811
793
Ok ( ( ) )
812
794
}
@@ -816,19 +798,10 @@ fn attach_unixsock_vsock_device(
816
798
cmdline : & mut LoaderKernelCmdline ,
817
799
unix_vsock : & Arc < Mutex < Vsock < VsockUnixBackend > > > ,
818
800
event_manager : & mut EventManager ,
819
- secret_free : bool ,
820
801
) -> Result < ( ) , MmioError > {
821
802
let id = String :: from ( unix_vsock. lock ( ) . expect ( "Poisoned lock" ) . id ( ) ) ;
822
803
// The device mutex mustn't be locked here otherwise it will deadlock.
823
- attach_virtio_device (
824
- event_manager,
825
- vmm,
826
- id,
827
- unix_vsock. clone ( ) ,
828
- cmdline,
829
- false ,
830
- secret_free,
831
- )
804
+ attach_virtio_device ( event_manager, vmm, id, unix_vsock. clone ( ) , cmdline, false )
832
805
}
833
806
834
807
fn attach_balloon_device (
@@ -839,15 +812,7 @@ fn attach_balloon_device(
839
812
) -> Result < ( ) , MmioError > {
840
813
let id = String :: from ( balloon. lock ( ) . expect ( "Poisoned lock" ) . id ( ) ) ;
841
814
// The device mutex mustn't be locked here otherwise it will deadlock.
842
- attach_virtio_device (
843
- event_manager,
844
- vmm,
845
- id,
846
- balloon. clone ( ) ,
847
- cmdline,
848
- false ,
849
- false ,
850
- )
815
+ attach_virtio_device ( event_manager, vmm, id, balloon. clone ( ) , cmdline, false )
851
816
}
852
817
853
818
// Adds `O_NONBLOCK` to the stdout flags.
@@ -1023,7 +988,6 @@ pub(crate) mod tests {
1023
988
cmdline,
1024
989
block_dev_configs. devices . iter ( ) ,
1025
990
event_manager,
1026
- false ,
1027
991
)
1028
992
. unwrap ( ) ;
1029
993
block_files
@@ -1038,7 +1002,7 @@ pub(crate) mod tests {
1038
1002
let mut net_builder = NetBuilder :: new ( ) ;
1039
1003
net_builder. build ( net_config) . unwrap ( ) ;
1040
1004
1041
- let res = attach_net_devices ( vmm, cmdline, net_builder. iter ( ) , event_manager, false ) ;
1005
+ let res = attach_net_devices ( vmm, cmdline, net_builder. iter ( ) , event_manager) ;
1042
1006
res. unwrap ( ) ;
1043
1007
}
1044
1008
@@ -1059,7 +1023,7 @@ pub(crate) mod tests {
1059
1023
Arc :: new ( Mutex :: new ( mmds) ) ,
1060
1024
) ;
1061
1025
1062
- attach_net_devices ( vmm, cmdline, net_builder. iter ( ) , event_manager, false ) . unwrap ( ) ;
1026
+ attach_net_devices ( vmm, cmdline, net_builder. iter ( ) , event_manager) . unwrap ( ) ;
1063
1027
}
1064
1028
1065
1029
pub ( crate ) fn insert_vsock_device (
@@ -1072,7 +1036,7 @@ pub(crate) mod tests {
1072
1036
let vsock = VsockBuilder :: create_unixsock_vsock ( vsock_config) . unwrap ( ) ;
1073
1037
let vsock = Arc :: new ( Mutex :: new ( vsock) ) ;
1074
1038
1075
- attach_unixsock_vsock_device ( vmm, cmdline, & vsock, event_manager, false ) . unwrap ( ) ;
1039
+ attach_unixsock_vsock_device ( vmm, cmdline, & vsock, event_manager) . unwrap ( ) ;
1076
1040
1077
1041
assert ! (
1078
1042
vmm. mmio_device_manager
0 commit comments