Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp6356414imu; Tue, 13 Nov 2018 23:31:38 -0800 (PST) X-Google-Smtp-Source: AJdET5fv84VwGSDMFtwg7ogX5t8BKxwd2LnIgKIdvuBDKk1luwIXSUFbyi43KagyAAO96DUs81xg X-Received: by 2002:a63:d208:: with SMTP id a8mr732008pgg.77.1542180698652; Tue, 13 Nov 2018 23:31:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1542180698; cv=none; d=google.com; s=arc-20160816; b=IcgI4WKhpGaJA7UujIfhJWzcw8YBCoYCc6dG5qIqR7mlXdtV3Ku7SLgjuNmrkMZCgR iILz3GRCQb2IyiDxSLLAqezWDCMS1yCaEBozyjjPlwHDEpiOxQBJpGw6temFpu5cX46Q NytML78YvfubZuB/D0A3Kw8/I8OSoNRfEnU3P8C+jZ+sC8fushcT0jZIfVe041qiba7J lvLB9w41BZ73yH7NYYiTeMT7XsZnP1j3ydPyCWv9fpMFP+7hWUofsGK9FTA5sPjonsK8 eS39GSJcNxccVCDt5fBXnPzFc1MGyeQ+SBKFbAtqSQ8Z5+YvN8uhtmHX6C4ddiQuZ3Pb MIvQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=/dI6hEy2GlPhiJPRlfa3e9hYdHftxTPZ46Gz/SVb06w=; b=uEW+NfVQc27MIVatJT0/Zi3JoRIBFmKyKuM4kUD/xvsCOjVrTQRr9Z/SkPb7S8ivSb 5vUq08wkRaDImuHNxNfrzsFHijx7MPAdR0ku1w7Prl4d8nL01Pxtxn+b4XdQTG4v9VMk t6AOGzICQZBaPO2kkwd58MWH5Tnorz4D94AOBPBdtnzt/yX2EA2QSbof1xHVMdBPNc1+ 7VrkTpOPxGiyjCZ/guVKC99LKK4yQHJKMZCsPdwuXQUd8YvpEUyiJmMjLIkvPo0krV7b RZkZ/XmouwHxZE3lRjmHZSoXk+SaynIGs39E3o5GPSRRUlJzXstiqjbVhfCn6kj8oFa+ 5NOw== 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 62-v6si23417680plf.308.2018.11.13.23.31.23; Tue, 13 Nov 2018 23:31:38 -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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732200AbeKNRcC (ORCPT + 99 others); Wed, 14 Nov 2018 12:32:02 -0500 Received: from mx1.redhat.com ([209.132.183.28]:41128 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727576AbeKNRcB (ORCPT ); Wed, 14 Nov 2018 12:32:01 -0500 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 97EF030AAD66; Wed, 14 Nov 2018 07:30:00 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-12-24.pek2.redhat.com [10.72.12.24]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0D385105B20A; Wed, 14 Nov 2018 07:29:48 +0000 (UTC) From: Lianbo Jiang To: linux-kernel@vger.kernel.org Cc: kexec@lists.infradead.org, x86@kernel.org, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, akpm@linux-foundation.org, dyoung@redhat.com, bhe@redhat.com Subject: [PATCH 2/2 v6] x86/kexec_file: add reserved e820 ranges to kdump kernel e820 table Date: Wed, 14 Nov 2018 15:29:26 +0800 Message-Id: <20181114072926.13312-3-lijiang@redhat.com> In-Reply-To: <20181114072926.13312-1-lijiang@redhat.com> References: <20181114072926.13312-1-lijiang@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.40]); Wed, 14 Nov 2018 07:30:00 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org At present, when use the kexec_file_load syscall to load the kernel image and initramfs(for example: kexec -s -p xxx), the upstream kernel does not pass the e820 reserved ranges to the second kernel, which might produce two problems: The first one is the MMCONFIG issue, although which does not make the system crash or hang, this issue is still a potential risk, and also might lead to the hot-plug device could not be recognized in kdump kernel. Because the PCI MMCONFIG(extended mode) requires the reserved region otherwise it falls back to legacy mode. For example, the kdump kernel outputs the following log. Example: ...... [ 19.798354] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0x80000000-0x8fffffff] (base 0x80000000) [ 19.800653] [Firmware Info]: PCI: MMCONFIG at [mem 0x80000000-0x8fffffff] not reserved in ACPI motherboard resources [ 19.800995] PCI: not using MMCONFIG ...... The correct kernel log is like this: ...... [ 0.082649] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0x80000000-0x8fffffff] (base 0x80000000) [ 0.083610] PCI: MMCONFIG at [mem 0x80000000-0x8fffffff] reserved in E820 ...... The second issue is that the e820 reserved ranges do not setup in kdump kernel, which will cause some functions that related to the e820 reserved ranges to become invalid. For example: early_memremap()-> early_memremap_pgprot_adjust()-> memremap_should_map_decrypted()-> e820__get_entry_type() Please focus on these functions, early_memremap_pgprot_adjust() and memremap_should_map_decrypted(). In the first kernel, these ranges sit in e820 reserved ranges, so the memremap_should_map_decrypted() will return true, that is to say, the reserved memory is decrypted, then the early_memremap_pgprot_adjust() will call the pgprot_decrypted() to clear the memory encryption mask. In the second kernel, because the e820 reserved ranges are not passed to the second kernel, these ranges don't sit in the e820 reserved ranges, so the memremap_should_map_decrypted() will return false, that is to say, the reserved memory is encrypted, and then the early_memremap_pgprot_ adjust() will also call the pgprot_encrypted() to set the memory encryption mask. In fact, in the second kernel, the e820 reserved memory is still decrypted. Obviously, it has gone wrong. So, this issue must be fixed, otherwise kdump won't work in this case. The e820 reserved range is useful in kdump kernel, so it is necessary to pass the e820 reserved ranges to kdump kernel. Suggested-by: Dave Young Signed-off-by: Lianbo Jiang --- Changes since v5: 1. Improve the patch log arch/x86/kernel/crash.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arch/x86/kernel/crash.c b/arch/x86/kernel/crash.c index ae724a6e0a5f..d3167125800e 100644 --- a/arch/x86/kernel/crash.c +++ b/arch/x86/kernel/crash.c @@ -384,6 +384,10 @@ int crash_setup_memmap_entries(struct kimage *image, struct boot_params *params) walk_iomem_res_desc(IORES_DESC_ACPI_NV_STORAGE, flags, 0, -1, &cmd, memmap_entry_callback); + cmd.type = E820_TYPE_RESERVED; + walk_iomem_res_desc(IORES_DESC_NONE, 0, 0, -1, &cmd, + memmap_entry_callback); + /* Add crashk_low_res region */ if (crashk_low_res.end) { ei.addr = crashk_low_res.start; -- 2.17.1