Re: [PATCH v6 1/3] x86/boot: Add acpitb.c to parse acpi tables

From: kbuild test robot
Date: Wed Sep 12 2018 - 03:09:37 EST


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, &param, &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