From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from canpmsgout02.his.huawei.com (canpmsgout02.his.huawei.com [113.46.200.217]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1A29D39EF01; Mon, 8 Jun 2026 08:07:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=113.46.200.217 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780906036; cv=none; b=q2zD+rYmoxJ5D4vqyHReLPF0goxsGzwdF5Ln23JJeoc9kj3oF3e4WZpBgZ1WRRE8TYXntkRQ4bszVi4ljld7SRedEflBZvfeSCZrHkCCw9zXmdrmcMhh4cQOC+dzzH3xpRM3aOCWe3vwiTXnQJj5I3cK9um9dI72eh1GHHucGmI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780906036; c=relaxed/simple; bh=vU0Lq8g00XlEZmlw0DT/lddA72fo7MIfMItv+nMrVE0=; h=Message-ID:Date:MIME-Version:Subject:To:References:From: In-Reply-To:Content-Type; b=Aa5DbCikdyDsuNdQRc2+ZJ+k0SUxs6H8AiPoKlIUo6TH8F1Nf1S9iKzYTTF2ZIqbhTXIrwzVEZtTuYh34pIhmvQaMIwrop2y/hu4mglrflX5mtJrXBYHRLXdW2y5qp82/Mdc665ooSRaVnhe6ohacsgUXvajR6ZYRKzoeBLGHo8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; dkim=pass (1024-bit key) header.d=huawei.com header.i=@huawei.com header.b=KfpMRhsX; arc=none smtp.client-ip=113.46.200.217 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=huawei.com header.i=@huawei.com header.b="KfpMRhsX" dkim-signature: v=1; a=rsa-sha256; d=huawei.com; s=dkim; c=relaxed/relaxed; q=dns/txt; h=From; bh=9GfoYO9Ez3GPgUjbOCSIO7Rv/8xo1QbYLJmt+2dUr5E=; b=KfpMRhsXCMP5Z5iy3po04X1xjsJG+lNmgjX0PUYQELmooXBwibf4r7BPfH59CHnJn3WdGkok7 BvzAYjWn3VembATsPXILgbYbLW1R0CP35+aN+fgoGH/Jo4AGC5cs1v603IqFk5fzg/teiiwgA3m tzoI+isR3Gg30dINCmBFjuY= Received: from mail.maildlp.com (unknown [172.19.163.0]) by canpmsgout02.his.huawei.com (SkyGuard) with ESMTPS id 4gYkvV0G6nzcZyL; Mon, 8 Jun 2026 15:59:02 +0800 (CST) Received: from dggpemf500011.china.huawei.com (unknown [7.185.36.131]) by mail.maildlp.com (Postfix) with ESMTPS id 4174E40537; Mon, 8 Jun 2026 16:07:10 +0800 (CST) Received: from [10.67.109.254] (10.67.109.254) by dggpemf500011.china.huawei.com (7.185.36.131) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Mon, 8 Jun 2026 16:07:07 +0800 Message-ID: <36979c7f-853f-433a-a31f-4aba3c8242b4@huawei.com> Date: Mon, 8 Jun 2026 16:07:06 +0800 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v16 04/10] arm64: kexec_file: Use crash_prepare_headers() helper to simplify code To: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , References: <20260608073459.3119290-1-ruanjinjie@huawei.com> <20260608073459.3119290-5-ruanjinjie@huawei.com> From: Jinjie Ruan In-Reply-To: <20260608073459.3119290-5-ruanjinjie@huawei.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit X-ClientProxiedBy: kwepems500002.china.huawei.com (7.221.188.17) To dggpemf500011.china.huawei.com (7.185.36.131) The below AI reported TOCTOU bug is an existing artifact and completely unrelated to the core CMA implementation introduced here. Therefore, we will skip fixing it in this series to avoid unnecessary noise. Link: https://lore.kernel.org/all/20260608075628.039FC1F00893@smtp.kernel.org/ On 6/8/2026 3:34 PM, Jinjie Ruan wrote: > Use the newly introduced crash_prepare_headers() function to replace > the existing prepare_elf_headers(), allocate cmem and exclude crash > kernel memory in the crash core, which reduce code duplication. > > Only the following two architecture functions need to be implemented: > - arch_get_system_nr_ranges(). Use for_each_mem_range() to traverse > and pre-count the max number of memory ranges. > > - arch_crash_populate_cmem(). Use for_each_mem_range to traverse > and collect the memory ranges and fills them into cmem. > > Acked-by: Catalin Marinas > Reviewed-by: Sourabh Jain > Acked-by: Baoquan He > Acked-by: Mike Rapoport (Microsoft) > Signed-off-by: Jinjie Ruan > --- > arch/arm64/kernel/machine_kexec_file.c | 40 ++++++++------------------ > 1 file changed, 12 insertions(+), 28 deletions(-) > > diff --git a/arch/arm64/kernel/machine_kexec_file.c b/arch/arm64/kernel/machine_kexec_file.c > index e31fabed378a..b019b31df48c 100644 > --- a/arch/arm64/kernel/machine_kexec_file.c > +++ b/arch/arm64/kernel/machine_kexec_file.c > @@ -40,46 +40,30 @@ int arch_kimage_file_post_load_cleanup(struct kimage *image) > } > > #ifdef CONFIG_CRASH_DUMP > -static int prepare_elf_headers(void **addr, unsigned long *sz) > +unsigned int arch_get_system_nr_ranges(void) > { > - struct crash_mem *cmem; > - unsigned int nr_ranges; > - int ret; > - u64 i; > + unsigned int nr_ranges = 2; /* for exclusion of crashkernel region */ > phys_addr_t start, end; > + u64 i; > > - nr_ranges = 2; /* for exclusion of crashkernel region */ > for_each_mem_range(i, &start, &end) > nr_ranges++; > > - cmem = kmalloc_flex(*cmem, ranges, nr_ranges); > - if (!cmem) > - return -ENOMEM; > + return nr_ranges; > +} > + > +int arch_crash_populate_cmem(struct crash_mem *cmem) > +{ > + phys_addr_t start, end; > + u64 i; > > - cmem->max_nr_ranges = nr_ranges; > - cmem->nr_ranges = 0; > for_each_mem_range(i, &start, &end) { > cmem->ranges[cmem->nr_ranges].start = start; > cmem->ranges[cmem->nr_ranges].end = end - 1; > cmem->nr_ranges++; > } > > - /* Exclude crashkernel region */ > - ret = crash_exclude_mem_range(cmem, crashk_res.start, crashk_res.end); > - if (ret) > - goto out; > - > - if (crashk_low_res.end) { > - ret = crash_exclude_mem_range(cmem, crashk_low_res.start, crashk_low_res.end); > - if (ret) > - goto out; > - } > - > - ret = crash_prepare_elf64_headers(cmem, true, addr, sz); > - > -out: > - kfree(cmem); > - return ret; > + return 0; > } > #endif > > @@ -109,7 +93,7 @@ int load_other_segments(struct kimage *image, > void *headers; > unsigned long headers_sz; > if (image->type == KEXEC_TYPE_CRASH) { > - ret = prepare_elf_headers(&headers, &headers_sz); > + ret = crash_prepare_headers(true, &headers, &headers_sz, NULL); > if (ret) { > pr_err("Preparing elf core header failed\n"); > goto out_err;