Re: [PATCH v15 5/6] x86/boot: Parse SRAT address from RSDP and store immovable memory

Chao Fan
2019-01-21T09:43:25Z

On Mon, Jan 21, 2019 at 05:33:48PM +0800, Chao Fan wrote:
>On Wed, Jan 16, 2019 at 12:01:58PM +0100, Borislav Petkov wrote:
>>On Mon, Jan 07, 2019 at 11:22:42AM +0800, Chao Fan wrote:
>[...]
>>> +
>>> +/* Determine RSDP, based on acpi_os_get_root_pointer(). */
>>> +static acpi_physical_address get_rsdp_addr(void)
>>> +{
>>> + acpi_physical_address pa;
>>> +
>>> + pa = get_acpi_rsdp();
>>> +
>>> + if (!pa)
>>> + pa = efi_get_rsdp_addr();
>>> +
>>> + if (!pa)
>>> + pa = bios_get_rsdp_addr();
>>> +
>>> + return pa;
>>> +}
>
>Hi Boris,
>
>Talking in Kairui's thread may mislead you, let me clarify:
>I mean I am going to change get_rsdp_addr(). Since I see ACPI code:
>
>>acpi_physical_address __init acpi_os_get_root_pointer(void)
>>{
>> acpi_physical_address pa;
>>
>>#ifdef CONFIG_KEXEC
>> if (acpi_rsdp)
>> return acpi_rsdp;
>>#endif
>> pa = acpi_arch_get_root_pointer();
>> if (pa)
>> return pa;
>
>So we need to parse boot_params->acpi_rsdp_addr also between KEXEC and
>EFI:
>
>static acpi_physical_address get_rsdp_addr(void)
>{
> acpi_physical_address pa;
>
> pa = get_acpi_rsdp();
>
> if (!pa)
>/* This line will be added in next version.*/
> pa = boot_params->acpi_rsdp_addr;
>
> if (!pa)
> pa = efi_get_rsdp_addr();
>
> if (!pa)
> pa = bios_get_rsdp_addr();
>
>/* If no acpi_rsdp_addr found in boot_params, fill in it here. */
>
> return pa;
>}

Or I clear this function as:
static acpi_physical_address get_rsdp_addr(void)
{
acpi_physical_address pa;

pa = get_acpi_rsdp();

if (!pa)
pa = boot_params->acpi_rsdp_addr;

if (!pa)
pa = efi_get_rsdp_addr();

if (!pa)
pa = bios_get_rsdp_addr();

if (pa && !boot_params->acpi_rsdp_addr)
boot_params->acpi_rsdp_addr = pa;

return pa;
}

This version may look better, it does not need a bool.

Thanks,
Chao Fan

>
>Then you said I shall fill the boot_params->acpi_rsdp_addr, so in my
>understanding, if there is no acpi_rsdp_addr found in boot_params,
>we can parse RSDP by EFI/BIOS then fill it, other wise if it's found
>int boot_params, we need't to fill it.
>
>Thanks,
>Chao Fan