Messages in this thread | | | Date | Wed, 27 Mar 2019 09:48:52 +0800 | From | "" <> | Subject | Re: [PATCH v2] x86/boot: Use EFI setup data if provided |
| |
Hi Junichi,
On 03/26/19 at 02:57pm, Borislav Petkov wrote: > On Mon, Mar 25, 2019 at 11:10:01PM +0000, Junichi Nomura wrote: > > efi_get_rsdp_addr() and kexec_get_rsdp_addr() could be implemented > > like this (sorry about the pseudo code): > > This doesn't look like what I suggested: > > > So efi_get_rsdp_addr() needs to be refactored in such a way so that at > > least the loop towards the end gets carved out into a separate function > > - __efi_get_rsdp_addr() or so - which gets config_tables, nr_tables and > > size as arguments and finds the RSDP address in the kexec-ed kernel. > > You need to carve out the loop at the end and make it into a separate > __efi_get_rsdp_addr() function which gets the physical or the virtual > address.
I guess Boris is suggesting code like below. Please correct me if I am wrong.
static acpi_physical_address _efi_get_rsdp_addr(efi_config_table tbl, ...) { /* Get EFI tables from systab. */ for (i = 0; i < nr_tables; i++) { ... } return rsdp_addr; }
static acpi_physical_address efi_get_rsdp_addr(void) { ... /* Get systab from boot params. */ ... /* Handle EFI bitness properly */ ... return _efi_get_rsdp_addr(); }
static acpi_physical_address kexec_get_rsdp_addr(void) { if (!is_kexec_booted) return 0;
efi_get_setup_data_addr(); ... /* Handle EFI bitness properly */ ... return _efi_get_rsdp_addr(); }
acpi_physical_address get_rsdp_addr(void) { acpi_physical_address pa;
pa = get_acpi_rsdp();
if (!pa) pa = boot_params->acpi_rsdp_addr;
/** /*I think here we should check if it's kexec booted firstly. * Skip it if not kexec. this can avoid the wrong kexec virt * addr parsing./ if (!pa) pa = kexec_get_rdsp_addr(); <--- new function
if (!pa) pa = efi_get_rsdp_addr();
if (!pa) pa = bios_get_rsdp_addr();
return pa; }
| |