Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp195631yba; Tue, 23 Apr 2019 22:47:29 -0700 (PDT) X-Google-Smtp-Source: APXvYqxmwqEb1ss68oUPQikMDdwwNJDjGgaUL1kVz7+R6xyJr6QSmPSBGIdFKaUcHA0lsXpCljYG X-Received: by 2002:a63:f809:: with SMTP id n9mr28241833pgh.201.1556084849046; Tue, 23 Apr 2019 22:47:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1556084849; cv=none; d=google.com; s=arc-20160816; b=aT+/kbXm31K/jAMKalc6NZnAfdktpGnAay0D+RH+94OecbRNXbzCwahmML9pIajI8h Zk0Gce8MhpYWrbaloLy3Ya71fs+MJCz7wIhfQCGZwgzYcRF7FuYmjn0sCfimJuW3UaDw qupDBUW2tpatwxuEVZ7nQDTnQ5FkcdvkPpLBbY/AUmy49xChrRu+B8wxIhOpwsOlEv7d SBz4gpvaXkxJCYYRLThm7XQeGGcrmgo9OKas4SIOmFc/u4j1yvvWqO32x4bPkHxRlMsd sKoF5r+LT4k/Zcghti9m1DeSr0chOqemvWAMJ1OAYV8hIWMPx3xE7YuK/dmNkxmcvLJ1 4DGA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date; bh=IbIjM7JTNLJGajtAng0DWuquPBGg0xXJDd6oSureE+o=; b=dxbdTilJwwlGli1EcP3MXZEZOJTNnO/kKDtR774ifG0F3f7RIvwG8rHqt+2uHXvKGa f92zZoQMdXmJ3tzLU64eDTybhnI29iFC4CyLSqkcIihT/BgyQXL1cAeeXhLDe1OdU+eC yIE1rWvUoqyBjZ+ABz9dO0YsS+PVHV5bi9VPZp3hL3ZbohynSBdD2rOzudP9I1U8okmg uUOXCTgKi40cbysDhvmiKp4JPXqBn+XVz7XWFg2GLugegviQs14znEa7whALxwt2APnS CHdm/UvU+CLV6f4tXFQBoVBiDtW7cWc9XgM0ctGnmmHQtPoHj0jl/u3oKbYQ+jwAUqSo UnKg== 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id ch1si568069plb.406.2019.04.23.22.47.11; Tue, 23 Apr 2019 22:47:29 -0700 (PDT) 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729457AbfDXFll (ORCPT + 99 others); Wed, 24 Apr 2019 01:41:41 -0400 Received: from mx1.redhat.com ([209.132.183.28]:58334 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726232AbfDXFll (ORCPT ); Wed, 24 Apr 2019 01:41:41 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 730F62CD806; Wed, 24 Apr 2019 05:41:40 +0000 (UTC) Received: from localhost (ovpn-12-131.pek2.redhat.com [10.72.12.131]) by smtp.corp.redhat.com (Postfix) with ESMTPS id D6C831797E; Wed, 24 Apr 2019 05:41:37 +0000 (UTC) Date: Wed, 24 Apr 2019 13:41:35 +0800 From: Baoquan He To: Kairui Song , Junichi Nomura Cc: "linux-kernel@vger.kernel.org" , Borislav Petkov , Thomas Gleixner , Chao Fan , Dave Young , "x86@kernel.org" , "kexec@lists.infradead.org" Subject: Re: [PATCH] x86/kexec: always ensure EFI systab region is mapped Message-ID: <20190424054135.GG3584@localhost.localdomain> References: <20190422092804.15534-1-kasong@redhat.com> <965f770a-b103-72fb-eaef-cb337ebe8290@ce.jp.nec.com> <24f1dc7c-1dea-79b0-d364-0dc7d605ce01@ce.jp.nec.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <24f1dc7c-1dea-79b0-d364-0dc7d605ce01@ce.jp.nec.com> User-Agent: Mutt/1.10.1 (2018-07-13) X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Wed, 24 Apr 2019 05:41:40 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 04/24/19 at 02:47am, Junichi Nomura wrote: > On 4/24/19 2:15 AM, Kairui Song wrote: > > On Mon, Apr 22, 2019 at 11:21 PM Junichi Nomura wrote: > >> Is the mapping of ACPI tables just by luck, too? > > > > Good question, they should have same issue with systab, I ignored this one. > > Then in first kernel when doing kexec it should ensure both ACPI > > tables and the EFI systab are mapped, that should cover everything and > > make it work. > > Right. > > > Is there anything else missing? > No, as far as I looked around get_rsdp_addr(). Have made a draft patch to build ident mapping for ACPI tables too, it's based on Kairui's patch. Dave has tested on his t400s laptop, and passed. Please check if this adding is OK. Kairui, you can add this into your patch to make a new one and resend. Or I can combine them and send for you today. From 7f17fcb12a6fddbb0f5e56e5137cc81f25c04af4 Mon Sep 17 00:00:00 2001 From: Baoquan He Date: Wed, 24 Apr 2019 09:57:01 +0800 Subject: [PATCH] x86/kexec: Prepare ACPI table mapping for kexec kernel If the kernel decompressing code accesses ACPI tabels in kexec-ed kernel, they also need be 1:1 mapped. --- arch/x86/kernel/machine_kexec_64.c | 54 ++++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 3 deletions(-) diff --git a/arch/x86/kernel/machine_kexec_64.c b/arch/x86/kernel/machine_kexec_64.c index d5da54893f97..e2948aea27d4 100644 --- a/arch/x86/kernel/machine_kexec_64.c +++ b/arch/x86/kernel/machine_kexec_64.c @@ -30,6 +30,48 @@ #include #include +#ifdef CONFIG_ACPI +/** + * Used while adding mapping for ACPI tables. + * Can be reused when other iomem regions need be mapped + */ +struct init_pgtable_data { + struct x86_mapping_info *info; + pgd_t *level4p; +}; + +static int mem_region_callback(struct resource *res, void *arg) +{ + struct init_pgtable_data *data= arg; + unsigned long mstart, mend; + + mstart = res->start; + mend = mstart + resource_size(res) - 1; + + return kernel_ident_mapping_init(data->info, + data->level4p, mstart, mend); +} + +static int init_acpi_pgtable(struct x86_mapping_info *info, + pgd_t *level4p) +{ + unsigned long flags = IORESOURCE_MEM | IORESOURCE_BUSY; + struct init_pgtable_data data; + + data.info = info; + data.level4p = level4p; + flags = IORESOURCE_MEM | IORESOURCE_BUSY; + return walk_iomem_res_desc(IORES_DESC_ACPI_TABLES, flags, 0, -1, + &data, mem_region_callback); +} +#else +static int init_acpi_pgtable(struct x86_mapping_info *info, + pgd_t *level4p) +{ + return 0; +} +#endif + #ifdef CONFIG_KEXEC_FILE const struct kexec_file_ops * const kexec_file_loaders[] = { &kexec_bzImage64_ops, @@ -114,6 +156,8 @@ static void *alloc_pgt_page(void *data) return p; } + + #ifdef CONFIG_EFI static int init_efi_systab_pgtable(struct x86_mapping_info *info, pgd_t *level4p) @@ -191,14 +235,18 @@ static int init_pgtable(struct kimage *image, unsigned long start_pgtable) return result; } - /* - * Prepare EFI systab mapping for kexec kernel, systab is not - * covered by pfn_mapped. + /** + * Prepare EFI systab and ACPI table mapping for kexec kernel, + * since they are not covered by pfn_mapped. */ result = init_efi_systab_pgtable(&info, level4p); if (result) return result; + result = init_acpi_pgtable(&info, level4p); + if (result) + return result; + return init_transition_pgtable(image, level4p); } -- 2.17.2