@@ -69,6 +69,7 @@ pub fn arch_memory_regions(
69
69
size : usize ,
70
70
kernel_load_addr : Option < u64 > ,
71
71
kernel_size : usize ,
72
+ initrd_size : u64 ,
72
73
) -> ( ArchMemoryInfo , Vec < ( GuestAddress , usize ) > ) {
73
74
let page_size: usize = unsafe { libc:: sysconf ( libc:: _SC_PAGESIZE) . try_into ( ) . unwrap ( ) } ;
74
75
@@ -136,6 +137,7 @@ pub fn arch_memory_regions(
136
137
ram_last_addr,
137
138
shm_start_addr,
138
139
page_size,
140
+ initrd_addr : ram_last_addr - initrd_size,
139
141
} ;
140
142
( info, regions)
141
143
}
@@ -150,6 +152,7 @@ pub fn arch_memory_regions(
150
152
size : usize ,
151
153
kernel_load_addr : Option < u64 > ,
152
154
kernel_size : usize ,
155
+ _initrd_size : u64 ,
153
156
) -> ( ArchMemoryInfo , Vec < ( GuestAddress , usize ) > ) {
154
157
let page_size: usize = unsafe { libc:: sysconf ( libc:: _SC_PAGESIZE) . try_into ( ) . unwrap ( ) } ;
155
158
@@ -195,6 +198,7 @@ pub fn arch_memory_regions(
195
198
ram_last_addr,
196
199
shm_start_addr,
197
200
page_size,
201
+ initrd_addr : layout:: INITRD_SEV_START ,
198
202
} ;
199
203
( info, regions)
200
204
}
@@ -342,7 +346,8 @@ mod tests {
342
346
343
347
#[ test]
344
348
fn regions_lt_4gb ( ) {
345
- let ( _info, regions) = arch_memory_regions ( 1usize << 29 , KERNEL_LOAD_ADDR , KERNEL_SIZE ) ;
349
+ let ( _info, regions) =
350
+ arch_memory_regions ( 1usize << 29 , Some ( KERNEL_LOAD_ADDR ) , KERNEL_SIZE , 0 ) ;
346
351
assert_eq ! ( 2 , regions. len( ) ) ;
347
352
assert_eq ! ( GuestAddress ( 0 ) , regions[ 0 ] . 0 ) ;
348
353
assert_eq ! ( KERNEL_LOAD_ADDR as usize , regions[ 0 ] . 1 ) ;
@@ -355,8 +360,12 @@ mod tests {
355
360
356
361
#[ test]
357
362
fn regions_gt_4gb ( ) {
358
- let ( _info, regions) =
359
- arch_memory_regions ( ( 1usize << 32 ) + 0x8000 , KERNEL_LOAD_ADDR , KERNEL_SIZE ) ;
363
+ let ( _info, regions) = arch_memory_regions (
364
+ ( 1usize << 32 ) + 0x8000 ,
365
+ Some ( KERNEL_LOAD_ADDR ) ,
366
+ KERNEL_SIZE ,
367
+ 0 ,
368
+ ) ;
360
369
assert_eq ! ( 3 , regions. len( ) ) ;
361
370
assert_eq ! ( GuestAddress ( 0 ) , regions[ 0 ] . 0 ) ;
362
371
assert_eq ! ( KERNEL_LOAD_ADDR as usize , regions[ 0 ] . 1 ) ;
@@ -383,21 +392,21 @@ mod tests {
383
392
// Now assigning some memory that falls before the 32bit memory hole.
384
393
let mem_size = 128 << 20 ;
385
394
let ( arch_mem_info, arch_mem_regions) =
386
- arch_memory_regions ( mem_size, KERNEL_LOAD_ADDR , KERNEL_SIZE ) ;
395
+ arch_memory_regions ( mem_size, Some ( KERNEL_LOAD_ADDR ) , KERNEL_SIZE , 0 ) ;
387
396
let gm = GuestMemoryMmap :: from_ranges ( & arch_mem_regions) . unwrap ( ) ;
388
397
configure_system ( & gm, & arch_mem_info, GuestAddress ( 0 ) , 0 , & None , no_vcpus) . unwrap ( ) ;
389
398
390
399
// Now assigning some memory that is equal to the start of the 32bit memory hole.
391
400
let mem_size = 3328 << 20 ;
392
401
let ( arch_mem_info, arch_mem_regions) =
393
- arch_memory_regions ( mem_size, KERNEL_LOAD_ADDR , KERNEL_SIZE ) ;
402
+ arch_memory_regions ( mem_size, Some ( KERNEL_LOAD_ADDR ) , KERNEL_SIZE , 0 ) ;
394
403
let gm = GuestMemoryMmap :: from_ranges ( & arch_mem_regions) . unwrap ( ) ;
395
404
configure_system ( & gm, & arch_mem_info, GuestAddress ( 0 ) , 0 , & None , no_vcpus) . unwrap ( ) ;
396
405
397
406
// Now assigning some memory that falls after the 32bit memory hole.
398
407
let mem_size = 3330 << 20 ;
399
408
let ( arch_mem_info, arch_mem_regions) =
400
- arch_memory_regions ( mem_size, KERNEL_LOAD_ADDR , KERNEL_SIZE ) ;
409
+ arch_memory_regions ( mem_size, Some ( KERNEL_LOAD_ADDR ) , KERNEL_SIZE , 0 ) ;
401
410
let gm = GuestMemoryMmap :: from_ranges ( & arch_mem_regions) . unwrap ( ) ;
402
411
configure_system ( & gm, & arch_mem_info, GuestAddress ( 0 ) , 0 , & None , no_vcpus) . unwrap ( ) ;
403
412
}
0 commit comments