@@ -29,6 +29,7 @@ def uvm_booted_memhp(
2929 huge_pages ,
3030 _uffd_handler ,
3131 snapshot_type ,
32+ secret_free ,
3233):
3334 """Boots a VM with the given memory hotplugging config"""
3435
@@ -39,6 +40,7 @@ def uvm_booted_memhp(
3940 "huge_pages" : huge_pages ,
4041 # we need enough memory to be able to hotplug up to 16GB
4142 "mem_size_mib" : 512 ,
43+ "secret_free" : secret_free ,
4244 }
4345 if vhost_user :
4446 # We need to setup ssh keys manually because we did not specify rootfs
@@ -73,6 +75,7 @@ def uvm_resumed_memhp(
7375 huge_pages ,
7476 uffd_handler ,
7577 snapshot_type ,
78+ secret_free ,
7679):
7780 """Restores a VM with the given memory hotplugging config after booting and snapshotting"""
7881 if vhost_user :
@@ -88,54 +91,92 @@ def uvm_resumed_memhp(
8891 huge_pages ,
8992 None ,
9093 snapshot_type ,
94+ secret_free ,
9195 )
9296 snapshot = uvm .make_snapshot (snapshot_type )
9397 return microvm_factory .build_from_snapshot (snapshot , uffd_handler_name = uffd_handler )
9498
9599
96100@pytest .fixture (
97101 params = [
98- (uvm_booted_memhp , False , HugePagesConfig .NONE , None , None ),
99- (uvm_booted_memhp , False , HugePagesConfig .HUGETLBFS_2MB , None , None ),
100- (uvm_booted_memhp , True , HugePagesConfig .NONE , None , None ),
101- (uvm_resumed_memhp , False , HugePagesConfig .NONE , None , SnapshotType .FULL ),
102- (uvm_resumed_memhp , False , HugePagesConfig .NONE , None , SnapshotType .DIFF ),
102+ (uvm_booted_memhp , False , HugePagesConfig .NONE , None , None , False ),
103+ (uvm_booted_memhp , False , HugePagesConfig .HUGETLBFS_2MB , None , None , False ),
104+ (uvm_booted_memhp , True , HugePagesConfig .NONE , None , None , False ),
105+ (uvm_booted_memhp , False , HugePagesConfig .NONE , None , None , True ),
106+ (
107+ uvm_resumed_memhp ,
108+ False ,
109+ HugePagesConfig .NONE ,
110+ None ,
111+ SnapshotType .FULL ,
112+ False ,
113+ ),
114+ (
115+ uvm_resumed_memhp ,
116+ False ,
117+ HugePagesConfig .NONE ,
118+ None ,
119+ SnapshotType .DIFF ,
120+ False ,
121+ ),
103122 (
104123 uvm_resumed_memhp ,
105124 False ,
106125 HugePagesConfig .NONE ,
107126 None ,
108127 SnapshotType .DIFF_MINCORE ,
128+ False ,
109129 ),
110130 (
111131 uvm_resumed_memhp ,
112132 False ,
113133 HugePagesConfig .NONE ,
114134 "on_demand" ,
115135 SnapshotType .FULL ,
136+ False ,
116137 ),
117138 (
118139 uvm_resumed_memhp ,
119140 False ,
120141 HugePagesConfig .HUGETLBFS_2MB ,
121142 "on_demand" ,
122143 SnapshotType .FULL ,
144+ False ,
145+ ),
146+ (
147+ uvm_resumed_memhp ,
148+ False ,
149+ HugePagesConfig .NONE ,
150+ "on_demand" ,
151+ SnapshotType .FULL ,
152+ True ,
123153 ),
124154 ],
125155 ids = [
126156 "booted" ,
127157 "booted-huge-pages" ,
128158 "booted-vhost-user" ,
159+ "booted-secret-free" ,
129160 "resumed" ,
130161 "resumed-diff" ,
131162 "resumed-mincore" ,
132163 "resumed-uffd" ,
133164 "resumed-uffd-huge-pages" ,
165+ "resumed-uffd-secret-free" ,
134166 ],
135167)
136168def uvm_any_memhp (request , uvm_plain_6_1 , rootfs , microvm_factory ):
137169 """Fixture that yields a booted or resumed VM with memory hotplugging"""
138- ctor , vhost_user , huge_pages , uffd_handler , snapshot_type = request .param
170+ ctor , vhost_user , huge_pages , uffd_handler , snapshot_type , secret_free = (
171+ request .param
172+ )
173+
174+ if secret_free is True and global_props .host_linux_version_metrics != "next" :
175+ pytest .skip ("Secret Freedom isn't supported by this host kernel" )
176+
177+ if secret_free is True and global_props .instance == "m6g.metal" :
178+ pytest .skip ("Secret Freedom isn't supported on Graviton2" )
179+
139180 yield ctor (
140181 uvm_plain_6_1 ,
141182 rootfs ,
@@ -145,6 +186,7 @@ def uvm_any_memhp(request, uvm_plain_6_1, rootfs, microvm_factory):
145186 huge_pages ,
146187 uffd_handler ,
147188 snapshot_type ,
189+ secret_free ,
148190 )
149191
150192
@@ -251,6 +293,7 @@ def test_virtio_mem_hotplug_hotunplug(uvm_any_memhp):
251293 Check that memory can be hotplugged into the VM.
252294 """
253295 uvm = uvm_any_memhp
296+
254297 check_device_detected (uvm )
255298
256299 check_hotplug (uvm , 1024 )
@@ -275,12 +318,12 @@ def test_virtio_mem_hotplug_hotunplug(uvm_any_memhp):
275318 ],
276319 ids = ["all_different" , "slot_sized_block" , "single_slot" , "single_block" ],
277320)
278- def test_virtio_mem_configs (uvm_plain_6_1 , memhp_config ):
321+ def test_virtio_mem_configs (uvm_plain_6_1 , memhp_config , secret_free ):
279322 """
280323 Check that the virtio mem device is working as expected for different configs
281324 """
282325 uvm = uvm_booted_memhp (
283- uvm_plain_6_1 , None , None , False , memhp_config , None , None , None
326+ uvm_plain_6_1 , None , None , False , memhp_config , None , None , None , secret_free
284327 )
285328 if not uvm .pci_enabled :
286329 pytest .skip (
@@ -323,6 +366,7 @@ def test_snapshot_restore_persistence(uvm_plain_6_1, microvm_factory, snapshot_t
323366 None ,
324367 None ,
325368 snapshot_type ,
369+ False ,
326370 )
327371
328372 uvm .hotplug_memory (1024 )
@@ -356,7 +400,15 @@ def test_snapshot_restore_incremental(uvm_plain_6_1, microvm_factory):
356400 )
357401
358402 uvm = uvm_booted_memhp (
359- uvm_plain_6_1 , None , microvm_factory , False , DEFAULT_CONFIG , None , None , None
403+ uvm_plain_6_1 ,
404+ None ,
405+ microvm_factory ,
406+ False ,
407+ DEFAULT_CONFIG ,
408+ None ,
409+ None ,
410+ None ,
411+ False ,
360412 )
361413
362414 snapshot = uvm .snapshot_full ()
@@ -442,7 +494,13 @@ def timed_memory_hotplug(uvm, size, metrics, metric_prefix, fc_metric_name):
442494 [HugePagesConfig .NONE , HugePagesConfig .HUGETLBFS_2MB ],
443495)
444496def test_memory_hotplug_latency (
445- microvm_factory , guest_kernel_linux_6_1 , rootfs , hotplug_size , huge_pages , metrics
497+ microvm_factory ,
498+ guest_kernel_linux_6_1 ,
499+ rootfs ,
500+ hotplug_size ,
501+ huge_pages ,
502+ metrics ,
503+ secret_free ,
446504):
447505 """Test the latency of hotplugging memory"""
448506
@@ -454,7 +512,7 @@ def test_memory_hotplug_latency(
454512 }
455513 uvm_plain_6_1 = microvm_factory .build (guest_kernel_linux_6_1 , rootfs , pci = True )
456514 uvm = uvm_booted_memhp (
457- uvm_plain_6_1 , None , None , False , config , None , None , None
515+ uvm_plain_6_1 , None , None , False , config , None , None , None , secret_free
458516 )
459517
460518 if i == 0 :
0 commit comments