@@ -139,11 +139,12 @@ fn create_vmm_and_vcpus(
139
139
event_manager : & mut EventManager ,
140
140
vcpu_count : u8 ,
141
141
kvm_capabilities : Vec < KvmCapability > ,
142
+ secret_free : bool ,
142
143
) -> Result < ( Vmm , Vec < Vcpu > ) , VmmError > {
143
144
let kvm = Kvm :: new ( kvm_capabilities) ?;
144
145
// Set up Kvm Vm and register memory regions.
145
146
// Build custom CPU config if a custom template is provided.
146
- let mut vm = Vm :: new ( & kvm) ?;
147
+ let mut vm = Vm :: new ( & kvm, secret_free ) ?;
147
148
148
149
let resource_allocator = ResourceAllocator :: new ( ) ?;
149
150
@@ -234,6 +235,7 @@ pub fn build_microvm_for_boot(
234
235
event_manager,
235
236
vm_resources. machine_config . vcpu_count ,
236
237
cpu_template. kvm_capabilities . clone ( ) ,
238
+ vm_resources. machine_config . secret_free ,
237
239
) ?;
238
240
239
241
vmm. vm
@@ -243,7 +245,7 @@ pub fn build_microvm_for_boot(
243
245
let entry_point = load_kernel (
244
246
MaybeBounce :: new (
245
247
boot_config. kernel_file . try_clone ( ) . unwrap ( ) ,
246
- vm_resources . machine_config . secret_free ,
248
+ vmm . vm . secret_free ( ) ,
247
249
) ,
248
250
vmm. vm . guest_memory ( ) ,
249
251
) ?;
@@ -256,7 +258,7 @@ pub fn build_microvm_for_boot(
256
258
257
259
Some ( InitrdConfig :: from_reader (
258
260
vmm. vm . guest_memory ( ) ,
259
- MaybeBounce :: new ( initrd_file. as_fd ( ) , vm_resources . machine_config . secret_free ) ,
261
+ MaybeBounce :: new ( initrd_file. as_fd ( ) , vmm . vm . secret_free ( ) ) ,
260
262
u64_to_usize ( size) ,
261
263
) ?)
262
264
}
@@ -291,24 +293,16 @@ pub fn build_microvm_for_boot(
291
293
& mut boot_cmdline,
292
294
vm_resources. block . devices . iter ( ) ,
293
295
event_manager,
294
- vm_resources. machine_config . secret_free ,
295
296
) ?;
296
297
attach_net_devices (
297
298
& mut vmm,
298
299
& mut boot_cmdline,
299
300
vm_resources. net_builder . iter ( ) ,
300
301
event_manager,
301
- vm_resources. machine_config . secret_free ,
302
302
) ?;
303
303
304
304
if let Some ( unix_vsock) = vm_resources. vsock . get ( ) {
305
- attach_unixsock_vsock_device (
306
- & mut vmm,
307
- & mut boot_cmdline,
308
- unix_vsock,
309
- event_manager,
310
- vm_resources. machine_config . secret_free ,
311
- ) ?;
305
+ attach_unixsock_vsock_device ( & mut vmm, & mut boot_cmdline, unix_vsock, event_manager) ?;
312
306
}
313
307
314
308
if let Some ( entropy) = vm_resources. entropy . get ( ) {
@@ -457,6 +451,7 @@ pub fn build_microvm_from_snapshot(
457
451
event_manager,
458
452
vm_resources. machine_config . vcpu_count ,
459
453
microvm_state. kvm_state . kvm_cap_modifiers . clone ( ) ,
454
+ false ,
460
455
)
461
456
. map_err ( StartMicrovmError :: Internal ) ?;
462
457
@@ -625,11 +620,10 @@ fn attach_virtio_device<T: 'static + VirtioDevice + MutEventSubscriber + Debug>(
625
620
device : Arc < Mutex < T > > ,
626
621
cmdline : & mut LoaderKernelCmdline ,
627
622
is_vhost_user : bool ,
628
- secret_free : bool ,
629
623
) -> Result < ( ) , MmioError > {
630
624
event_manager. add_subscriber ( device. clone ( ) ) ;
631
625
632
- if secret_free {
626
+ if vmm . vm . secret_free ( ) {
633
627
device. lock ( ) . unwrap ( ) . force_userspace_bounce_buffers ( ) ;
634
628
}
635
629
@@ -688,7 +682,6 @@ fn attach_entropy_device(
688
682
entropy_device. clone ( ) ,
689
683
cmdline,
690
684
false ,
691
- false ,
692
685
)
693
686
}
694
687
@@ -697,7 +690,6 @@ fn attach_block_devices<'a, I: Iterator<Item = &'a Arc<Mutex<Block>>> + Debug>(
697
690
cmdline : & mut LoaderKernelCmdline ,
698
691
blocks : I ,
699
692
event_manager : & mut EventManager ,
700
- secret_free : bool ,
701
693
) -> Result < ( ) , StartMicrovmError > {
702
694
for block in blocks {
703
695
let ( id, is_vhost_user) = {
@@ -722,7 +714,6 @@ fn attach_block_devices<'a, I: Iterator<Item = &'a Arc<Mutex<Block>>> + Debug>(
722
714
block. clone ( ) ,
723
715
cmdline,
724
716
is_vhost_user,
725
- secret_free,
726
717
) ?;
727
718
}
728
719
Ok ( ( ) )
@@ -733,20 +724,11 @@ fn attach_net_devices<'a, I: Iterator<Item = &'a Arc<Mutex<Net>>> + Debug>(
733
724
cmdline : & mut LoaderKernelCmdline ,
734
725
net_devices : I ,
735
726
event_manager : & mut EventManager ,
736
- secret_free : bool ,
737
727
) -> Result < ( ) , StartMicrovmError > {
738
728
for net_device in net_devices {
739
729
let id = net_device. lock ( ) . expect ( "Poisoned lock" ) . id ( ) . clone ( ) ;
740
730
// The device mutex mustn't be locked here otherwise it will deadlock.
741
- attach_virtio_device (
742
- event_manager,
743
- vmm,
744
- id,
745
- net_device. clone ( ) ,
746
- cmdline,
747
- false ,
748
- secret_free,
749
- ) ?;
731
+ attach_virtio_device ( event_manager, vmm, id, net_device. clone ( ) , cmdline, false ) ?;
750
732
}
751
733
Ok ( ( ) )
752
734
}
@@ -756,19 +738,10 @@ fn attach_unixsock_vsock_device(
756
738
cmdline : & mut LoaderKernelCmdline ,
757
739
unix_vsock : & Arc < Mutex < Vsock < VsockUnixBackend > > > ,
758
740
event_manager : & mut EventManager ,
759
- secret_free : bool ,
760
741
) -> Result < ( ) , MmioError > {
761
742
let id = String :: from ( unix_vsock. lock ( ) . expect ( "Poisoned lock" ) . id ( ) ) ;
762
743
// The device mutex mustn't be locked here otherwise it will deadlock.
763
- attach_virtio_device (
764
- event_manager,
765
- vmm,
766
- id,
767
- unix_vsock. clone ( ) ,
768
- cmdline,
769
- false ,
770
- secret_free,
771
- )
744
+ attach_virtio_device ( event_manager, vmm, id, unix_vsock. clone ( ) , cmdline, false )
772
745
}
773
746
774
747
fn attach_balloon_device (
@@ -779,15 +752,7 @@ fn attach_balloon_device(
779
752
) -> Result < ( ) , MmioError > {
780
753
let id = String :: from ( balloon. lock ( ) . expect ( "Poisoned lock" ) . id ( ) ) ;
781
754
// The device mutex mustn't be locked here otherwise it will deadlock.
782
- attach_virtio_device (
783
- event_manager,
784
- vmm,
785
- id,
786
- balloon. clone ( ) ,
787
- cmdline,
788
- false ,
789
- false ,
790
- )
755
+ attach_virtio_device ( event_manager, vmm, id, balloon. clone ( ) , cmdline, false )
791
756
}
792
757
793
758
// Adds `O_NONBLOCK` to the stdout flags.
@@ -963,7 +928,6 @@ pub(crate) mod tests {
963
928
cmdline,
964
929
block_dev_configs. devices . iter ( ) ,
965
930
event_manager,
966
- false ,
967
931
)
968
932
. unwrap ( ) ;
969
933
block_files
@@ -978,7 +942,7 @@ pub(crate) mod tests {
978
942
let mut net_builder = NetBuilder :: new ( ) ;
979
943
net_builder. build ( net_config) . unwrap ( ) ;
980
944
981
- let res = attach_net_devices ( vmm, cmdline, net_builder. iter ( ) , event_manager, false ) ;
945
+ let res = attach_net_devices ( vmm, cmdline, net_builder. iter ( ) , event_manager) ;
982
946
res. unwrap ( ) ;
983
947
}
984
948
@@ -999,7 +963,7 @@ pub(crate) mod tests {
999
963
Arc :: new ( Mutex :: new ( mmds) ) ,
1000
964
) ;
1001
965
1002
- attach_net_devices ( vmm, cmdline, net_builder. iter ( ) , event_manager, false ) . unwrap ( ) ;
966
+ attach_net_devices ( vmm, cmdline, net_builder. iter ( ) , event_manager) . unwrap ( ) ;
1003
967
}
1004
968
1005
969
pub ( crate ) fn insert_vsock_device (
@@ -1012,7 +976,7 @@ pub(crate) mod tests {
1012
976
let vsock = VsockBuilder :: create_unixsock_vsock ( vsock_config) . unwrap ( ) ;
1013
977
let vsock = Arc :: new ( Mutex :: new ( vsock) ) ;
1014
978
1015
- attach_unixsock_vsock_device ( vmm, cmdline, & vsock, event_manager, false ) . unwrap ( ) ;
979
+ attach_unixsock_vsock_device ( vmm, cmdline, & vsock, event_manager) . unwrap ( ) ;
1016
980
1017
981
assert ! (
1018
982
vmm. mmio_device_manager
0 commit comments