LKML Archive on lore.kernel.org
 help / color / Atom feed
From: Junichi Nomura <j-nomura@ce.jp.nec.com>
To: Dave Young <dyoung@redhat.com>,
	"fanc.fnst@cn.fujitsu.com" <fanc.fnst@cn.fujitsu.com>,
	"bp@suse.de" <bp@suse.de>, "bhe@redhat.com" <bhe@redhat.com>,
	"kasong@redhat.com" <kasong@redhat.com>
Cc: "x86@kernel.org" <x86@kernel.org>,
	"kexec@lists.infradead.org" <kexec@lists.infradead.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Borislav Petkov <bp@alien8.de>
Subject: [PATCH v2] x86/boot: Use EFI setup data if provided
Date: Mon, 25 Mar 2019 08:27:21 +0000
Message-ID: <20190325082720.GA20771@jeru.linux.bs1.fc.nec.co.jp> (raw)
In-Reply-To: <20190325065921.GA11096@dhcp-128-65.nay.redhat.com>

On 3/25/19 3:59 PM, Dave Young wrote:
> On 03/25/19 at 06:47am, Junichi Nomura wrote:
>> On 3/25/19 3:19 PM, Dave Young wrote:
>>> On 03/25/19 at 02:01pm, Dave Young wrote:
>>> I think normally people do not see this bug, because kernel will set the
>>> rsdp in boot_params->acpi_rsdp_addr.  Maybe you are testing with
>>
>> I think it's only done for file-based kexec interface.
> 
> Saw Kairui's another reply, yes, kexec-tools need a patch to fill the
> value as well then.
> 
> I would vote for a repost of your old patch with some #ifdef

Thanks for comments, Dave, Kairui and Baoquan.

The problem for me is it's a regression in v5.1-rc1, that breaks
existing setup. If early parsing of RSDP is required only for newly
supported configuration, I'm fine such configuration requires
new tools or new options.

This is the 1st version plus #ifdef around the EFI code.
Build tested both with and without CONFIG_EFI to see no warnings.

[PATCH v2] x86/boot: Use EFI setup data if provided

Commit 3a63f70bf4c3a ("x86/boot: Early parse RSDP and save it in
boot_params") broke kexec boot on EFI systems.  efi_get_rsdp_addr()
in the early parsing code tries to search RSDP from EFI table but
whose address is virtual.

Since kexec(1) provides physical address of config_table via boot_params,
efi_get_rsdp_addr() should look for setup_data in the same way as
efi_systab_init() in arch/x86/platform/efi/efi.c does.

Fixes: 3a63f70bf4c3a ("x86/boot: Early parse RSDP and save it in boot_params")
Signed-off-by: Jun'ichi Nomura <j-nomura@ce.jp.nec.com>
Acked-by: Dave Young <dyoung@redhat.com>
Cc: Chao Fan <fanc.fnst@cn.fujitsu.com>
Cc: Borislav Petkov <bp@suse.de>

diff --git a/arch/x86/boot/compressed/acpi.c b/arch/x86/boot/compressed/acpi.c
--- a/arch/x86/boot/compressed/acpi.c
+++ b/arch/x86/boot/compressed/acpi.c
@@ -44,6 +44,24 @@ static acpi_physical_address get_acpi_rsdp(void)
 	return addr;
 }
 
+#ifdef CONFIG_EFI
+static unsigned long efi_get_setup_data_addr(void)
+{
+	struct setup_data *data;
+	u64 pa_data;
+
+	pa_data = boot_params->hdr.setup_data;
+	while (pa_data) {
+		data = (struct setup_data *) pa_data;
+		if (data->type == SETUP_EFI)
+			return pa_data + sizeof(struct setup_data);
+		pa_data = data->next;
+	}
+
+	return 0;
+}
+#endif
+
 /* Search EFI system tables for RSDP. */
 static acpi_physical_address efi_get_rsdp_addr(void)
 {
@@ -53,10 +71,12 @@ static acpi_physical_address efi_get_rsdp_addr(void)
 	unsigned long systab, systab_tables, config_tables;
 	unsigned int nr_tables;
 	struct efi_info *ei;
+	struct efi_setup_data *esd;
 	bool efi_64;
 	int size, i;
 	char *sig;
 
+	esd = (struct efi_setup_data *) efi_get_setup_data_addr();
 	ei = &boot_params->efi_info;
 	sig = (char *)&ei->efi_loader_signature;
 
@@ -86,13 +106,13 @@ static acpi_physical_address efi_get_rsdp_addr(void)
 	if (efi_64) {
 		efi_system_table_64_t *stbl = (efi_system_table_64_t *)systab;
 
-		config_tables	= stbl->tables;
+		config_tables	= esd ? esd->tables : stbl->tables;
 		nr_tables	= stbl->nr_tables;
 		size		= sizeof(efi_config_table_64_t);
 	} else {
 		efi_system_table_32_t *stbl = (efi_system_table_32_t *)systab;
 
-		config_tables	= stbl->tables;
+		config_tables	= esd ? esd->tables : stbl->tables;
 		nr_tables	= stbl->nr_tables;
 		size		= sizeof(efi_config_table_32_t);
 	}

  reply index

Thread overview: 90+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-22 11:03 [PATCH] " Junichi Nomura
2019-03-22 15:23 ` Borislav Petkov
2019-03-25  0:27   ` Junichi Nomura
2019-03-25  6:01     ` Dave Young
2019-03-25  6:19       ` Dave Young
2019-03-25  6:45         ` Kairui Song
2019-03-25  6:47         ` Junichi Nomura
2019-03-25  6:59           ` Dave Young
2019-03-25  8:27             ` Junichi Nomura [this message]
2019-03-25  8:54               ` [PATCH v2] " Boris Petkov
2019-03-25  9:25                 ` [PATCH v2] x86/boot: Don't try to search RSDP from EFI when kexec-booted Junichi Nomura
2019-03-25 10:15                 ` [PATCH v2] x86/boot: Use EFI setup data if provided Dave Young
2019-03-25 10:36                   ` Junichi Nomura
2019-03-25 11:16                     ` Dave Young
2019-03-25 12:01                     ` Borislav Petkov
2019-03-25 12:23                       ` Dave Young
2019-03-25 12:32                         ` Borislav Petkov
2019-03-25 23:10                           ` Junichi Nomura
2019-03-26 12:46                             ` Dave Young
2019-03-26 13:57                             ` Borislav Petkov
2019-03-27  1:48                               ` bhe
2019-03-27 12:14                                 ` Borislav Petkov
2019-03-28  4:17                                 ` Junichi Nomura
2019-03-28  6:26                                   ` Chao Fan
2019-03-28  6:43                                   ` bhe
2019-03-28  7:43                                     ` Junichi Nomura
2019-03-28 15:52                                       ` Borislav Petkov
2019-03-29  3:05                                         ` Junichi Nomura
2019-03-29  8:39                                           ` Borislav Petkov
2019-03-29  9:05                                             ` Chao Fan
2019-03-29  9:16                                               ` Borislav Petkov
2019-03-29  9:37                                                 ` Junichi Nomura
2019-03-29  9:44                                                   ` Chao Fan
2019-03-29  9:56                                                     ` Junichi Nomura
2019-03-29  7:20                                         ` [PATCH] x86/boot: Use efi_setup_data for searching RSDP on kexec-ed kernel Junichi Nomura
2019-03-29  7:49                                           ` bhe
2019-03-29  8:29                                           ` Chao Fan
2019-03-29  8:39                                             ` Junichi Nomura
2019-03-29  9:18                                               ` Chao Fan
2019-03-29  9:16                                             ` bhe
2019-03-29  9:20                                               ` Chao Fan
2019-04-01  0:08                                         ` [PATCH v2] " Junichi Nomura
2019-04-02  9:41                                           ` Chao Fan
2019-04-02  9:53                                             ` Junichi Nomura
2019-04-02 11:06                                               ` Chao Fan
2019-04-02 10:22                                                 ` Junichi Nomura
2019-04-02 12:03                                           ` Dave Young
2019-04-03  5:35                                             ` Chao Fan
2019-04-03  5:53                                               ` Dave Young
2019-04-03  6:39                                                 ` Dave Young
2019-04-03  7:30                                                   ` Chao Fan
2019-04-03  7:50                                                     ` bhe
2019-04-03  8:23                                                       ` Dave Young
2019-04-03  8:26                                                         ` Dave Young
2019-04-03 16:14                                                           ` Borislav Petkov
2019-04-04  1:02                                                             ` Chao Fan
2019-04-03  9:28                                                       ` Chao Fan
2019-04-03  7:21                                                 ` Chao Fan
2019-04-03  8:09                                                   ` Dave Young
2019-04-03  8:23                                                     ` Chao Fan
2019-04-03  9:02                                                       ` Chao Fan
2019-04-03  9:39                                                         ` Chao Fan
2019-04-04  1:23                                                         ` Junichi Nomura
2019-04-04  2:52                                                           ` Dave Young
2019-04-04  3:00                                                             ` bhe
2019-04-04  3:10                                                               ` bhe
2019-04-04  3:22                                                                 ` Dave Young
2019-04-04  6:41                                                                   ` Dave Young
2019-04-04  7:20                                                                     ` Chao Fan
2019-04-04  7:41                                                                       ` Dave Young
2019-04-04  7:48                                                                         ` Chao Fan
2019-04-04 12:22                                                                         ` Borislav Petkov
2019-04-04 14:08                                                                           ` Dave Young
2019-04-03  8:18                                                   ` Dave Young
2019-04-02 10:25                                         ` [PATCH v3] " Junichi Nomura
2019-04-04  7:32                                           ` Dave Young
2019-04-04 12:24                                             ` Borislav Petkov
2019-04-04 14:12                                               ` Dave Young
2019-04-04 14:41                                                 ` Borislav Petkov
2019-04-05  1:36                                                   ` Dave Young
2019-04-05  4:19                                             ` Junichi Nomura
2019-03-28 23:11                                       ` [PATCH v2] x86/boot: Use EFI setup data if provided bhe
2019-03-29  3:34                                         ` Junichi Nomura
2019-03-29  3:52                                           ` bhe
2019-03-29  5:16                                             ` Junichi Nomura
2019-03-25  7:27   ` [PATCH] " Baoquan He
2019-03-25  7:53     ` Borislav Petkov
2019-03-25  8:21       ` Baoquan He
2019-03-25  8:43         ` Thomas Gleixner
2019-03-25  9:03           ` Baoquan He

Reply instructions:

You may reply publically 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=20190325082720.GA20771@jeru.linux.bs1.fc.nec.co.jp \
    --to=j-nomura@ce.jp.nec.com \
    --cc=bhe@redhat.com \
    --cc=bp@alien8.de \
    --cc=bp@suse.de \
    --cc=dyoung@redhat.com \
    --cc=fanc.fnst@cn.fujitsu.com \
    --cc=kasong@redhat.com \
    --cc=kexec@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --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

LKML Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/lkml/0 lkml/git/0.git
	git clone --mirror https://lore.kernel.org/lkml/1 lkml/git/1.git
	git clone --mirror https://lore.kernel.org/lkml/2 lkml/git/2.git
	git clone --mirror https://lore.kernel.org/lkml/3 lkml/git/3.git
	git clone --mirror https://lore.kernel.org/lkml/4 lkml/git/4.git
	git clone --mirror https://lore.kernel.org/lkml/5 lkml/git/5.git
	git clone --mirror https://lore.kernel.org/lkml/6 lkml/git/6.git
	git clone --mirror https://lore.kernel.org/lkml/7 lkml/git/7.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 lkml lkml/ https://lore.kernel.org/lkml \
		linux-kernel@vger.kernel.org linux-kernel@archiver.kernel.org
	public-inbox-index lkml


Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-kernel


AGPL code for this site: git clone https://public-inbox.org/ public-inbox