Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp2179713imu; Thu, 29 Nov 2018 00:20:16 -0800 (PST) X-Google-Smtp-Source: AFSGD/WLZ72jxTvzVkkrooq4LCIErWDTD45swFlTmf62NeFXFLRHBK7C3MY0DGbA8FgP1Zup5B3m X-Received: by 2002:aa7:810c:: with SMTP id b12mr510696pfi.44.1543479615951; Thu, 29 Nov 2018 00:20:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543479615; cv=none; d=google.com; s=arc-20160816; b=BtW9QjrMg8DM4eK+x6r/p/UhfghWiOXk8XpKmGtVBGT4Vyss7AnlDU2EDPLUbB8hF9 YR1Mp+wnq9F9yWfJLlOKzPKjmjIzhQckfOvq06iNJtwv5/Y/hoFrSF+g8upwe23SNDkH 6EFtk5nXT+YrX3OeM6/vQDK7TjZEilSTeS6iTxzgf7FxF+UMdAXvFOyw97pDPp2ufvt8 VTTFXQcIJQsiV5E2FgEUp4QDHR/74eZcqubSMHsTM88rd5Snb31bq5P2E7bz5R05Ehnw Ayy2WbKhJeI8vg4u+h+CApLH5B9G2G6tI4PuniryUfmO1a48jooyq18TsW4qK6AszKcy 7ZZg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=C/7rmCrOeXZzC9jxvlLeX3PtjMXXjafwoYIixLrACkY=; b=hPehPWEdxvz0f8My8O15PG5LYXsiD/7vB0BgApWorT7ewFioXpgPDASjmV4dSZoSQ6 NMV1jYbQYRvPrYXPxsCQTkCqE8ZdLjP3Y7CpW6Z7S45zAsMgWoOdV4K1khy/dblsuJag PLFn1Ge8gP/Nblqr+DGBBHC/k1TqF+S0Nkdo12qvC+Ec+4W/E1odrmi+QXgzAGANptzb FlRamAlB8x5bGWESCDIU5kzS9C2GIg3DS5i9JJt87AgV0CZeAJrz+LVoZe0CCe6l/5zJ ZOtsi7NDIvfOIB1gPywf+h7CFoL2Is0YuS+dg8i95ZJjMgWEHDma3TZc94fxSvGSHPtk QtFg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c67si1479927pfa.114.2018.11.29.00.20.01; Thu, 29 Nov 2018 00:20:15 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727608AbeK2TV3 (ORCPT + 99 others); Thu, 29 Nov 2018 14:21:29 -0500 Received: from mail.cn.fujitsu.com ([183.91.158.132]:27144 "EHLO heian.cn.fujitsu.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726733AbeK2TV3 (ORCPT ); Thu, 29 Nov 2018 14:21:29 -0500 X-IronPort-AV: E=Sophos;i="5.56,293,1539619200"; d="scan'208";a="48821854" Received: from unknown (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 29 Nov 2018 16:16:55 +0800 Received: from G08CNEXCHPEKD01.g08.fujitsu.local (unknown [10.167.33.80]) by cn.fujitsu.com (Postfix) with ESMTP id C6E944B734A2; Thu, 29 Nov 2018 16:16:52 +0800 (CST) Received: from localhost.local (10.167.225.56) by G08CNEXCHPEKD01.g08.fujitsu.local (10.167.33.89) with Microsoft SMTP Server (TLS) id 14.3.408.0; Thu, 29 Nov 2018 16:16:58 +0800 From: Chao Fan To: , , , , , , , , CC: , , Subject: [PATCH v12 1/5] x86/boot: Add get_acpi_rsdp() to parse RSDP in cmdline from KEXEC Date: Thu, 29 Nov 2018 16:16:27 +0800 Message-ID: <20181129081631.11139-2-fanc.fnst@cn.fujitsu.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20181129081631.11139-1-fanc.fnst@cn.fujitsu.com> References: <20181129081631.11139-1-fanc.fnst@cn.fujitsu.com> MIME-Version: 1.0 Content-Transfer-Encoding: 7BIT Content-Type: text/plain; charset=US-ASCII X-Originating-IP: [10.167.225.56] X-yoursite-MailScanner-ID: C6E944B734A2.A8872 X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: fanc.fnst@cn.fujitsu.com X-Spam-Status: No Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org To fix the conflict between KASLR and memory-hotremove, memory information in SRAT table is necessary. ACPI SRAT (System/Static Resource Affinity Table) can show the details about memory ranges, including ranges of memory provided by hot-added memory devices. SRAT table must be introduced by RSDP pointer (Root System Description Pointer). So RSDP should be found firstly. When booting form KEXEC/EFI/BIOS, the methods to find RSDP pointer are different. When booting from KEXEC, 'acpi_rsdp' may have been added to cmdline, so parse the cmdline and find the RSDP pointer. Signed-off-by: Chao Fan --- arch/x86/boot/compressed/acpitb.c | 33 +++++++++++++++++++++++++++++++ arch/x86/boot/compressed/misc.c | 5 +++++ arch/x86/boot/compressed/misc.h | 4 ++++ lib/kstrtox.c | 5 +++++ 4 files changed, 47 insertions(+) create mode 100644 arch/x86/boot/compressed/acpitb.c diff --git a/arch/x86/boot/compressed/acpitb.c b/arch/x86/boot/compressed/acpitb.c new file mode 100644 index 000000000000..614c45655cff --- /dev/null +++ b/arch/x86/boot/compressed/acpitb.c @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: GPL-2.0 +#define BOOT_CTYPE_H +#include "misc.h" +#include "error.h" + +#include +#include +#include +#include + +#define STATIC +#include + +/* Store the immovable memory regions. */ +struct mem_vector immovable_mem[MAX_NUMNODES*2]; +#endif + +static acpi_physical_address get_acpi_rsdp(void) +{ +#ifdef CONFIG_KEXEC + unsigned long long res; + int len = 0; + char *val; + + val = malloc(19); + len = cmdline_find_option("acpi_rsdp", val, 19); + if (len > 0) { + val[len] = 0; + return (acpi_physical_address)kstrtoull(val, 16, &res); + } + return 0; +#endif +} diff --git a/arch/x86/boot/compressed/misc.c b/arch/x86/boot/compressed/misc.c index 8dd1d5ccae58..e51713fe3add 100644 --- a/arch/x86/boot/compressed/misc.c +++ b/arch/x86/boot/compressed/misc.c @@ -12,6 +12,7 @@ * High loaded stuff by Hans Lermen & Werner Almesberger, Feb. 1996 */ +#define BOOT_CTYPE_H #include "misc.h" #include "error.h" #include "pgtable.h" @@ -426,3 +427,7 @@ void fortify_panic(const char *name) { error("detected buffer overflow"); } + +#ifdef BOOT_STRING +#include "../../../../lib/kstrtox.c" +#endif diff --git a/arch/x86/boot/compressed/misc.h b/arch/x86/boot/compressed/misc.h index a1d5918765f3..809c31effa4b 100644 --- a/arch/x86/boot/compressed/misc.h +++ b/arch/x86/boot/compressed/misc.h @@ -116,3 +116,7 @@ static inline void console_init(void) void set_sev_encryption_mask(void); #endif + +/* acpitb.c */ +#define BOOT_STRING +extern int kstrtoull(const char *s, unsigned int base, unsigned long long *res); diff --git a/lib/kstrtox.c b/lib/kstrtox.c index 1006bf70bf74..a0ac1b2257b8 100644 --- a/lib/kstrtox.c +++ b/lib/kstrtox.c @@ -126,6 +126,9 @@ int kstrtoull(const char *s, unsigned int base, unsigned long long *res) } EXPORT_SYMBOL(kstrtoull); +/* Make compressed period code be able to use kstrtoull(). */ +#ifndef BOOT_STRING + /** * kstrtoll - convert a string to a long long * @s: The start of the string. The string must be null-terminated, and may also @@ -408,3 +411,5 @@ kstrto_from_user(kstrtou16_from_user, kstrtou16, u16); kstrto_from_user(kstrtos16_from_user, kstrtos16, s16); kstrto_from_user(kstrtou8_from_user, kstrtou8, u8); kstrto_from_user(kstrtos8_from_user, kstrtos8, s8); + +#endif /* BOOT_STRING */ -- 2.19.1