@@ -28,9 +28,9 @@ static void parse_other_modules(struct vm *vm,
28
28
29
29
for (i = 0 ; i < mods_count ; i ++ ) {
30
30
int type_len = 0 ;
31
- const char * start = ( const char * ) (uint64_t )mods [i ].mm_string ;
31
+ const char * start = HPA2HVA ( (uint64_t )mods [i ].mm_string ) ;
32
32
const char * end ;
33
- void * mod_addr = ( void * ) (uint64_t )mods [i ].mm_mod_start ;
33
+ void * mod_addr = HPA2HVA ( (uint64_t )mods [i ].mm_mod_start ) ;
34
34
uint32_t mod_size = mods [i ].mm_mod_end - mods [i ].mm_mod_start ;
35
35
36
36
dev_dbg (ACRN_DBG_BOOT , "other mod-%d start=0x%x, end=0x%x" ,
@@ -48,7 +48,8 @@ static void parse_other_modules(struct vm *vm,
48
48
type_len = end - start ;
49
49
if (strncmp ("FIRMWARE" , start , type_len ) == 0 ) {
50
50
char dyn_bootargs [100 ] = {0 };
51
- void * load_addr = vm -> sw .linux_info .bootargs_load_addr ;
51
+ void * load_addr = GPA2HVA (vm ,
52
+ (uint64_t )vm -> sw .linux_info .bootargs_load_addr );
52
53
uint32_t args_size = vm -> sw .linux_info .bootargs_size ;
53
54
static int copy_once = 1 ;
54
55
@@ -72,7 +73,8 @@ static void parse_other_modules(struct vm *vm,
72
73
73
74
} else if (strncmp ("RAMDISK" , start , type_len ) == 0 ) {
74
75
vm -> sw .linux_info .ramdisk_src_addr = mod_addr ;
75
- vm -> sw .linux_info .ramdisk_load_addr = mod_addr ;
76
+ vm -> sw .linux_info .ramdisk_load_addr =
77
+ mods [i ].mm_mod_start ;
76
78
vm -> sw .linux_info .ramdisk_size = mod_size ;
77
79
} else if (strncmp ("SeedList" , start , type_len ) == 0 ) {
78
80
parse_seed_list (mod_addr );
@@ -116,7 +118,7 @@ int init_vm0_boot_info(struct vm *vm)
116
118
return - EINVAL ;
117
119
}
118
120
119
- mbi = ( struct multiboot_info * ) ((uint64_t )boot_regs [1 ]);
121
+ mbi = HPA2HVA ((uint64_t )boot_regs [1 ]);
120
122
121
123
dev_dbg (ACRN_DBG_BOOT , "Multiboot detected, flag=0x%x" , mbi -> mi_flags );
122
124
if ((mbi -> mi_flags & MULTIBOOT_INFO_HAS_MODS ) == 0U ) {
@@ -127,7 +129,7 @@ int init_vm0_boot_info(struct vm *vm)
127
129
dev_dbg (ACRN_DBG_BOOT , "mod counts=%d\n" , mbi -> mi_mods_count );
128
130
129
131
/* mod[0] is for kernel&cmdline, other mod for ramdisk/firmware info*/
130
- mods = (struct multiboot_module * )( uint64_t )mbi -> mi_mods_addr ;
132
+ mods = (struct multiboot_module * )HPA2HVA (( uint64_t )mbi -> mi_mods_addr ) ;
131
133
132
134
dev_dbg (ACRN_DBG_BOOT , "mod0 start=0x%x, end=0x%x" ,
133
135
mods [0 ].mm_mod_start , mods [0 ].mm_mod_end );
@@ -136,11 +138,11 @@ int init_vm0_boot_info(struct vm *vm)
136
138
137
139
vm -> sw .kernel_type = VM_LINUX_GUEST ;
138
140
vm -> sw .kernel_info .kernel_src_addr =
139
- ( void * ) (uint64_t )mods [0 ].mm_mod_start ;
141
+ HPA2HVA ( (uint64_t )mods [0 ].mm_mod_start ) ;
140
142
vm -> sw .kernel_info .kernel_size =
141
143
mods [0 ].mm_mod_end - mods [0 ].mm_mod_start ;
142
- vm -> sw .kernel_info .kernel_load_addr =
143
- get_kernel_load_addr (vm -> sw .kernel_info .kernel_src_addr );
144
+ vm -> sw .kernel_info .kernel_load_addr = ( void * ) HVA2GPA ( vm ,
145
+ get_kernel_load_addr (vm -> sw .kernel_info .kernel_src_addr )) ;
144
146
145
147
146
148
/*
@@ -153,7 +155,8 @@ int init_vm0_boot_info(struct vm *vm)
153
155
154
156
cmd_dst = kernel_cmdline ;
155
157
cmd_src = HPA2HVA ((uint64_t )mbi -> mi_cmdline );
156
- strncpy_s (cmd_dst , MEM_2K , cmd_src , strnlen_s (cmd_src , MEM_2K ));
158
+ strncpy_s (cmd_dst , MEM_2K , cmd_src ,
159
+ strnlen_s (cmd_src , MEM_2K ));
157
160
off = strnlen_s (cmd_dst , MEM_2K );
158
161
cmd_dst [off ] = ' ' ; /* insert space */
159
162
off += 1 ;
@@ -168,9 +171,10 @@ int init_vm0_boot_info(struct vm *vm)
168
171
strnlen_s (kernel_cmdline , MEM_2K );
169
172
} else {
170
173
vm -> sw .linux_info .bootargs_src_addr =
171
- ( void * ) (uint64_t )mods [0 ].mm_string ;
174
+ HPA2HVA ( (uint64_t )mods [0 ].mm_string ) ;
172
175
vm -> sw .linux_info .bootargs_size =
173
- strnlen_s ((char * )(uint64_t ) mods [0 ].mm_string , MEM_2K );
176
+ strnlen_s (HPA2HVA ((uint64_t )mods [0 ].mm_string ),
177
+ MEM_2K );
174
178
}
175
179
176
180
vm -> sw .linux_info .bootargs_load_addr = (void * )BOOT_ARGS_LOAD_ADDR ;
0 commit comments