Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp3757625pxv; Mon, 28 Jun 2021 12:04:05 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz3K2Abn6FMokVtE5OaIutBgFCGFCDYcxZ0E93E7MHB3rC0qUzG4XH65WoeXauT0E7FH4ts X-Received: by 2002:aa7:cb9a:: with SMTP id r26mr35746026edt.78.1624907045369; Mon, 28 Jun 2021 12:04:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1624907045; cv=none; d=google.com; s=arc-20160816; b=TrzL0KFfO+X4UvlyXSUcjjLG9VrgSbBS6O+e/gHoRCsPODcG3AcxAIvnR3skXf5tTU UscSrjruxFvEfyiefGGADkhOMTIQxo4wV8HoFLxJ6HJRgw974k7vasgSWcm5F5k9/EE3 iMAjaIikzyFfahowex+TwozWPsJ3k1SxSJlMlQLAR1wUPY4NwcDNUugJXbToQ7iPrSFV ush/raj0Hp7kqE08aqi+qlPE+6k1TPpEpSCdS9RxruPlMX0XB4tOBfACUJy/y7htxQBF gJ72ZoCwR+v+9XZrK9V4N4aTutG5s6n2Ohm2ynaer9Tay3elbr9kxvi90O2ReTtAikKv eJ0g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=p8j3uZyK+Fh2WawsjyERijn6Q3oWI3rCkz4WKmCJGFo=; b=UeXfN5HROC9rtGikZaMamD3s7GQjCdhZcRfPN97TwrUXjUpMdULg4I85Gqa66EkZIG W2tps36H/aVMlBaYTW8rMTREXZDZMv9QtS+QuVrD0jJ2SIDYVCGLhZJiz4qTN/zI12v1 nRqGnopr4prmOWhMS1B8CO/6uDydtSWXHUGo/cYjVaocmT4kbTo3op/pHV2bifebl3F3 67Fvv9MNM1aSvT21GsEvJ3nyq3iKlbudjn9FWk2E0JwGX5LfrO0iFmqFYViGmwxq9Z3Q /hVvBIEvJvssj9D0j2jSESZE7z2qvyoQBtz2MN/54ETHo/kIPp2M7u+VMWqh2tOQxIRS Z4Yw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b="ng3uir/g"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y20si11867946edd.118.2021.06.28.12.03.39; Mon, 28 Jun 2021 12:04:05 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b="ng3uir/g"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233471AbhF1OcE (ORCPT + 99 others); Mon, 28 Jun 2021 10:32:04 -0400 Received: from mail.kernel.org ([198.145.29.99]:36752 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234392AbhF1O3m (ORCPT ); Mon, 28 Jun 2021 10:29:42 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 5CD1F61C80; Mon, 28 Jun 2021 14:26:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1624890381; bh=a0ZXIHwPKUOQgh6KHswguKhHKWzW1AzYJXHjhIZf3tY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ng3uir/gNT59/OS8MuIHSZmRQ3VCCYvhe6ARLs6uBy55frUigqi47+HdnhSE6FYt1 sTzy9OSc67nHCxDEYbKckTMUuYLqv1zw7ezfv2D9QMJ5rFfzWlA0ejxWcilmR49fvE F3W3MdxcsHeTxAmwD9+x8leuSzdQm8hYkv6OOAnKLQfqfedZv7hq8aSGehmc2pH4W6 F5+Rv7MIIKubDj3li/LWDnfTM0HO6QMBQpu4Q84+ZqNs2HSxHOmODZzfrD280vxTzV PspfaH2v5Z4uRqUdDvmqryMcmYt/tESAeiD7UFx60q5m3rbfcEQG8Oi3bq4Bjx5ll2 puG/d/gZVwOBg== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Catalin Marinas , Nicolas Saenz Julienne , James Morse , Kefeng Wang , Greg Kroah-Hartman Subject: [PATCH 5.10 012/101] arm64: Force NO_BLOCK_MAPPINGS if crashkernel reservation is required Date: Mon, 28 Jun 2021 10:24:38 -0400 Message-Id: <20210628142607.32218-13-sashal@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210628142607.32218-1-sashal@kernel.org> References: <20210628142607.32218-1-sashal@kernel.org> MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.10.47-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.10.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.10.47-rc1 X-KernelTest-Deadline: 2021-06-30T14:25+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Catalin Marinas commit 2687275a5843d1089687f08fc64eb3f3b026a169 upstream. mem_init() currently relies on knowing the boundaries of the crashkernel reservation to map such region with page granularity for later unmapping via set_memory_valid(..., 0). If the crashkernel reservation is deferred, such boundaries are not known when the linear mapping is created. Simply parse the command line for "crashkernel" and, if found, create the linear map with NO_BLOCK_MAPPINGS. Signed-off-by: Catalin Marinas Tested-by: Nicolas Saenz Julienne Reviewed-by: Nicolas Saenz Julienne Acked-by: James Morse Cc: James Morse Cc: Nicolas Saenz Julienne Link: https://lore.kernel.org/r/20201119175556.18681-1-catalin.marinas@arm.com Signed-off-by: Catalin Marinas Cc: Kefeng Wang Signed-off-by: Greg Kroah-Hartman --- arch/arm64/mm/mmu.c | 37 ++++++++++++++++--------------------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c index afdad7607850..58dc93e56617 100644 --- a/arch/arm64/mm/mmu.c +++ b/arch/arm64/mm/mmu.c @@ -469,6 +469,21 @@ void __init mark_linear_text_alias_ro(void) PAGE_KERNEL_RO); } +static bool crash_mem_map __initdata; + +static int __init enable_crash_mem_map(char *arg) +{ + /* + * Proper parameter parsing is done by reserve_crashkernel(). We only + * need to know if the linear map has to avoid block mappings so that + * the crashkernel reservations can be unmapped later. + */ + crash_mem_map = true; + + return 0; +} +early_param("crashkernel", enable_crash_mem_map); + static void __init map_mem(pgd_t *pgdp) { phys_addr_t kernel_start = __pa_symbol(_text); @@ -477,7 +492,7 @@ static void __init map_mem(pgd_t *pgdp) int flags = 0; u64 i; - if (rodata_full || debug_pagealloc_enabled()) + if (rodata_full || crash_mem_map || debug_pagealloc_enabled()) flags = NO_BLOCK_MAPPINGS | NO_CONT_MAPPINGS; /* @@ -487,11 +502,6 @@ static void __init map_mem(pgd_t *pgdp) * the following for-loop */ memblock_mark_nomap(kernel_start, kernel_end - kernel_start); -#ifdef CONFIG_KEXEC_CORE - if (crashk_res.end) - memblock_mark_nomap(crashk_res.start, - resource_size(&crashk_res)); -#endif /* map all the memory banks */ for_each_mem_range(i, &start, &end) { @@ -519,21 +529,6 @@ static void __init map_mem(pgd_t *pgdp) __map_memblock(pgdp, kernel_start, kernel_end, PAGE_KERNEL, NO_CONT_MAPPINGS); memblock_clear_nomap(kernel_start, kernel_end - kernel_start); - -#ifdef CONFIG_KEXEC_CORE - /* - * Use page-level mappings here so that we can shrink the region - * in page granularity and put back unused memory to buddy system - * through /sys/kernel/kexec_crash_size interface. - */ - if (crashk_res.end) { - __map_memblock(pgdp, crashk_res.start, crashk_res.end + 1, - PAGE_KERNEL, - NO_BLOCK_MAPPINGS | NO_CONT_MAPPINGS); - memblock_clear_nomap(crashk_res.start, - resource_size(&crashk_res)); - } -#endif } void mark_rodata_ro(void) -- 2.30.2