All of lore.kernel.org
 help / color / mirror / Atom feed
From: Borislav Petkov <bp@alien8.de>
To: Chao Fan <fanc.fnst@cn.fujitsu.com>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org, tglx@linutronix.de,
	mingo@redhat.com, hpa@zytor.com, keescook@chromium.org,
	bhe@redhat.com, msys.mizuma@gmail.com,
	indou.takao@jp.fujitsu.com, caoj.fnst@cn.fujitsu.com
Subject: Re: [PATCH v15 3/6] x86/boot: Introduce efi_get_rsdp_addr() to find RSDP from EFI table
Date: Thu, 10 Jan 2019 22:15:23 +0100	[thread overview]
Message-ID: <20190110211523.GG17621@zn.tnic> (raw)
In-Reply-To: <20190107032243.25324-4-fanc.fnst@cn.fujitsu.com>

On Mon, Jan 07, 2019 at 11:22:40AM +0800, Chao Fan wrote:
> Memory information in SRAT is necessary to fix the conflict between
> KASLR and memory-hotremove. So RSDP and SRAT should be parsed.
> 
> When booting form KEXEC/EFI/BIOS, the methods to compute RSDP
> are different. When booting from EFI, EFI table points to RSDP.
> So parse the EFI table and find the RSDP.
> 
> Signed-off-by: Chao Fan <fanc.fnst@cn.fujitsu.com>
> ---
>  arch/x86/boot/compressed/acpi.c | 83 +++++++++++++++++++++++++++++++++
>  1 file changed, 83 insertions(+)
> 
> diff --git a/arch/x86/boot/compressed/acpi.c b/arch/x86/boot/compressed/acpi.c
> index 7ca5001d7639..f74c5d033d79 100644
> --- a/arch/x86/boot/compressed/acpi.c
> +++ b/arch/x86/boot/compressed/acpi.c
> @@ -5,6 +5,8 @@
>  #include "../string.h"
>  
>  #include <linux/acpi.h>
> +#include <linux/efi.h>
> +#include <asm/efi.h>
>  
>  /*
>   * Max length of 64-bit hex address string is 19, prefix "0x" + 16 hex
> @@ -28,3 +30,84 @@ static acpi_physical_address get_acpi_rsdp(void)
>  #endif
>  	return 0;
>  }
> +
> +/* Search EFI table for RSDP. */
> +static acpi_physical_address efi_get_rsdp_addr(void)
> +{
> +	acpi_physical_address rsdp_addr = 0;


<---- newline here.

> +#ifdef CONFIG_EFI
> +	efi_system_table_t *systab;
> +	struct efi_info *ei;
> +	bool efi_64;
> +	char *sig;
> +	int size;
> +	int i;
> +
> +	ei = &boot_params->efi_info;
> +	sig = (char *)&ei->efi_loader_signature;
> +
> +	if (!strncmp(sig, EFI64_LOADER_SIGNATURE, 4)) {
> +		efi_64 = true;
> +	} else if (!strncmp(sig, EFI32_LOADER_SIGNATURE, 4)) {
> +		efi_64 = false;
> +	} else {
> +		debug_putstr("Wrong EFI loader signature.\n");
> +		return 0;
> +	}
> +
> +	/* Get systab from boot params. Based on efi_init(). */
> +#ifdef CONFIG_X86_64
> +	systab = (efi_system_table_t *)(ei->efi_systab | ((__u64)ei->efi_systab_hi<<32));
> +#else
> +	if (ei->efi_systab_hi || ei->efi_memmap_hi) {
> +		debug_putstr("Error getting RSDP address: EFI system table located above 4GB.\n");
> +		return 0;
> +	}
> +	systab = (efi_system_table_t *)ei->efi_systab;
> +#endif
> +
> +	if (!systab)
> +		error("EFI system table is not found.");

s/is//

> +
> +	/*
> +	 * Get EFI tables from systab. Based on efi_config_init() and
> +	 * efi_config_parse_tables().
> +	 */
> +	size = efi_64 ? sizeof(efi_config_table_64_t) :
> +			sizeof(efi_config_table_32_t);
> +
> +	for (i = 0; i < systab->nr_tables; i++) {
> +		void *config_tables;
> +		unsigned long table;
> +		efi_guid_t guid;
> +
> +		config_tables = (void *)(systab->tables + size * i);
> +		if (efi_64) {
> +			efi_config_table_64_t *tmp_table;
> +			u64 table64;
> +
> +			tmp_table = config_tables;
> +			guid = tmp_table->guid;
> +			table64 = tmp_table->table;
> +			table = table64;

That table64 looks superfluous.

-- 
Regards/Gruss,
    Boris.

Good mailing practices for 400: avoid top-posting and trim the reply.

  reply	other threads:[~2019-01-10 21:15 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-07  3:22 [PATCH v15 0/6] x86/boot/KASLR: Parse ACPI table and limit KASLR to choosing immovable memory Chao Fan
2019-01-07  3:22 ` [PATCH v15 1/6] x86/boot: Copy kstrtoull() to boot/string.c instead of using simple_strtoull() Chao Fan
2019-01-09 12:48   ` Borislav Petkov
2019-01-10  1:15     ` Chao Fan
2019-01-07  3:22 ` [PATCH v15 2/6] x86/boot: Introduce get_acpi_rsdp() to parse RSDP in cmdline from KEXEC Chao Fan
2019-01-10 17:01   ` Borislav Petkov
2019-01-11  1:17     ` Chao Fan
2019-01-07  3:22 ` [PATCH v15 3/6] x86/boot: Introduce efi_get_rsdp_addr() to find RSDP from EFI table Chao Fan
2019-01-10 21:15   ` Borislav Petkov [this message]
2019-01-11  1:23     ` Chao Fan
2019-01-11 10:32       ` Borislav Petkov
2019-01-13  9:47         ` Chao Fan
2019-01-13 11:05           ` Borislav Petkov
2019-01-14  1:26             ` Chao Fan
2019-01-14  9:07               ` Borislav Petkov
2019-01-15  7:21                 ` Chao Fan
2019-01-15  9:55                   ` Borislav Petkov
2019-01-16  3:26                     ` Chao Fan
2019-01-07  3:22 ` [PATCH v15 4/6] x86/boot: Introduce bios_get_rsdp_addr() to search RSDP in memory Chao Fan
2019-01-10 21:27   ` Borislav Petkov
2019-01-11  1:27     ` Chao Fan
2019-01-07  3:22 ` [PATCH v15 5/6] x86/boot: Parse SRAT address from RSDP and store immovable memory Chao Fan
2019-01-16  7:28   ` Kairui Song
2019-01-17  1:42     ` Chao Fan
     [not found]     ` <20190117062451.GA588@localhost.localdomain>
2019-01-17  7:57       ` Chao Fan
2019-01-17  8:22         ` Kairui Song
2019-01-17  9:06           ` Juergen Gross
2019-01-16 11:01   ` Borislav Petkov
2019-01-17  1:16     ` Chao Fan
2019-01-17  3:20     ` Chao Fan
2019-01-17 15:27       ` Borislav Petkov
2019-01-18  1:14         ` Chao Fan
2019-01-21  9:33     ` Chao Fan
2019-01-21  9:42       ` Chao Fan
2019-01-21  9:45         ` Borislav Petkov
2019-01-21  9:51           ` Chao Fan
2019-01-07  3:22 ` [PATCH v15 6/6] x86/boot/KASLR: Limit KASLR to extracting kernel in " Chao Fan
2019-01-16 11:15   ` Borislav Petkov
2019-01-17  1:25     ` Chao Fan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190110211523.GG17621@zn.tnic \
    --to=bp@alien8.de \
    --cc=bhe@redhat.com \
    --cc=caoj.fnst@cn.fujitsu.com \
    --cc=fanc.fnst@cn.fujitsu.com \
    --cc=hpa@zytor.com \
    --cc=indou.takao@jp.fujitsu.com \
    --cc=keescook@chromium.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=msys.mizuma@gmail.com \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.