Hi Chao, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on tip/x86/core] [also build test WARNING on v4.19-rc3 next-20180911] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Chao-Fan/x86-boot-KASLR-Parse-ACPI-table-and-limit-kaslr-in-immovable-memory/20180911-043350 config: i386-randconfig-x0-09121328 (attached as .config) compiler: gcc-5 (Debian 5.5.0-3) 5.4.1 20171010 reproduce: # save the attached .config to linux build tree make ARCH=i386 All warnings (new ones prefixed by >>): arch/x86/boot/compressed/acpitb.c: In function 'bios_get_rsdp_addr': >> arch/x86/boot/compressed/acpitb.c:181:14: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] table_ptr = (u8 *)(acpi_physical_address)address; ^ arch/x86/boot/compressed/acpitb.c: In function 'get_acpi_rsdp': arch/x86/boot/compressed/acpitb.c:225:3: warning: implicit declaration of function 'error' [-Wimplicit-function-declaration] error("Failed to allocate space for tmp_cmdline"); ^ >> arch/x86/boot/compressed/acpitb.c:237:4: warning: implicit declaration of function 'warn' [-Wimplicit-function-declaration] warn("Only '--' specified in cmdline"); ^ arch/x86/boot/compressed/acpitb.c: In function 'get_acpi_srat_table': arch/x86/boot/compressed/acpitb.c:296:9: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] rsdp = (struct acpi_table_rsdp *)get_rsdp_addr(); ^ arch/x86/boot/compressed/acpitb.c:311:11: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] header = (struct acpi_table_header *)root_table; ^ arch/x86/boot/compressed/acpitb.c:328:13: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] header = (struct acpi_table_header *)acpi_table; ^ vim +181 arch/x86/boot/compressed/acpitb.c 164 165 /* 166 * Used to search RSDP physical address. 167 * Based on acpi_find_root_pointer(). Since only use physical address 168 * in this period, so there is no need to do the memory map jobs. 169 */ 170 static void bios_get_rsdp_addr(acpi_physical_address *rsdp_addr) 171 { 172 struct acpi_table_rsdp *rsdp; 173 u8 *table_ptr; 174 u8 *mem_rover; 175 u32 address; 176 177 /* Get the location of the Extended BIOS Data Area (EBDA) */ 178 table_ptr = (u8 *)ACPI_EBDA_PTR_LOCATION; 179 *(u32 *)(void *)&address = *(u16 *)(void *)table_ptr; 180 address <<= 4; > 181 table_ptr = (u8 *)(acpi_physical_address)address; 182 183 /* 184 * Search EBDA paragraphs (EBDA is required to be a minimum of 185 * 1K length) 186 */ 187 if (address > 0x400) { 188 mem_rover = scan_mem_for_rsdp(table_ptr, ACPI_EBDA_WINDOW_SIZE); 189 190 if (mem_rover) { 191 address += (u32)ACPI_PTR_DIFF(mem_rover, table_ptr); 192 *rsdp_addr = (acpi_physical_address)address; 193 return; 194 } 195 } 196 197 table_ptr = (u8 *)ACPI_HI_RSDP_WINDOW_BASE; 198 mem_rover = scan_mem_for_rsdp(table_ptr, ACPI_HI_RSDP_WINDOW_SIZE); 199 200 /* 201 * Search upper memory: 16-byte boundaries in E0000h-FFFFFh 202 */ 203 if (mem_rover) { 204 address = (u32)(ACPI_HI_RSDP_WINDOW_BASE + 205 ACPI_PTR_DIFF(mem_rover, table_ptr)); 206 *rsdp_addr = (acpi_physical_address)address; 207 return; 208 } 209 } 210 211 #ifdef CONFIG_KEXEC 212 static bool get_acpi_rsdp(acpi_physical_address *rsdp_addr) 213 { 214 char *args = (char *)get_cmd_line_ptr(); 215 size_t len = strlen((char *)args); 216 char *tmp_cmdline, *param, *val; 217 unsigned long long addr = 0; 218 char *endptr; 219 220 if (!strstr(args, "acpi_rsdp=")) 221 return false; 222 223 tmp_cmdline = malloc(len+1); 224 if (!tmp_cmdline) 225 error("Failed to allocate space for tmp_cmdline"); 226 227 memcpy(tmp_cmdline, args, len); 228 tmp_cmdline[len] = 0; 229 args = tmp_cmdline; 230 231 args = skip_spaces(args); 232 233 while (*args) { 234 args = next_arg(args, ¶m, &val); 235 236 if (!val && strcmp(param, "--") == 0) { > 237 warn("Only '--' specified in cmdline"); 238 free(tmp_cmdline); 239 return false; 240 } 241 242 if (!strcmp(param, "acpi_rsdp")) { 243 addr = simple_strtoull(val, &endptr, 0); 244 245 if (addr == 0) 246 return false; 247 248 *rsdp_addr = (acpi_physical_address)addr; 249 return true; 250 } 251 } 252 return false; 253 } 254 #else 255 static bool get_acpi_rsdp(acpi_physical_address *rsdp_addr) 256 { 257 return false; 258 } 259 #endif 260 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Attachment:
.config.gz
Description: application/gzip