From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0E402C001DE for ; Mon, 31 Jul 2023 14:16:01 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 72F4B280069; Mon, 31 Jul 2023 10:16:01 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6DF6C280023; Mon, 31 Jul 2023 10:16:01 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5A7C2280069; Mon, 31 Jul 2023 10:16:01 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 4A868280023 for ; Mon, 31 Jul 2023 10:16:01 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id E459F1402B8 for ; Mon, 31 Jul 2023 14:16:00 +0000 (UTC) X-FDA: 81072106080.29.6D071F8 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf22.hostedemail.com (Postfix) with ESMTP id 77485C0031 for ; Mon, 31 Jul 2023 14:15:58 +0000 (UTC) Authentication-Results: imf22.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=PUfpn8dp; spf=pass (imf22.hostedemail.com: domain of chenhuacai@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=chenhuacai@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690812958; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=/IOnMlkUrp3X1uXxAb2j5yKT4LMLBeOtSRhVBGC1J40=; b=xGA4hqSfIcRv8lBjgbqrJPqMP8+DLPc7BsqBxdmbou8GvxFRmU0IGJ/PxfaTbujDgC5Vhg J7BOUtNBRq4g0e8ufHuMSH2t2aeQxmHbZjjq7DXUGNvjn3PZlr/bQf+f1zxzWFNMWKX+ig B56uHJjz7nPaM2NAqdzfhN8cfTCOwX0= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690812958; a=rsa-sha256; cv=none; b=RK4wHpeJvNMKS6aKSn3FHSl3mXsw3V7caZe6EEkcQ9431LWznj2uxrO3KC2n2J2Nep6Eb5 9RwRig5MtpLtJg63nAi055GSQ9Bp3iEkc15lyYG1b4KpzjqKRNolldPjsXKyvhNxXUkdbP fZo6Z+gFFGArJ4QcjMX733LW3m9I4SU= ARC-Authentication-Results: i=1; imf22.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=PUfpn8dp; spf=pass (imf22.hostedemail.com: domain of chenhuacai@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=chenhuacai@kernel.org; dmarc=pass (policy=none) header.from=kernel.org Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 879D261180 for ; Mon, 31 Jul 2023 14:15:57 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id C3070C433B6 for ; Mon, 31 Jul 2023 14:15:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1690812956; bh=N6VodkJW/ivyWk15n1haH9P1k1P3MyTjQDb5k+QEWBY=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=PUfpn8dpxcKPkxEEdWbhLVGphnhnz/ZACV+NZmNjo5cQGXgKmwNiJoxV4QldH52qI Z+UCh+qwgEWlIs46LByp13PDrKj1/Xv+ipy7hjtrU1fWEu8NoD4iCAsHrHGOjhBxog 60jbZu4zUUrrmPmbyv5VkZ6YSjei27MvH8NDfMhk/LcXaI4BZHmh8RG58O8TS+yV9V 9y5fiLvNCqIJ9+GKsyt3pMkfJCa3JQNgAjGue/4lw/eljzqOUEVZBDOZg2RMvDNIy9 7mFqluiiG2AlKlucrTOLmAVFDVcBLpDSGGU+ZJbx/Gc56Fd7rdfIhFqyY3Q2j9GEMZ haYOSWuAwYROw== Received: by mail-ed1-f44.google.com with SMTP id 4fb4d7f45d1cf-52256241c50so7199312a12.3 for ; Mon, 31 Jul 2023 07:15:56 -0700 (PDT) X-Gm-Message-State: ABy/qLa36EgTfSOINHORWQiFDtFVTHTr7Sa9i7W3fjdNk8aO4Ioe+I+Z H5JLW/QOiMjvd08atRjQtD0fPLHp9BsUf0k7S1g= X-Google-Smtp-Source: APBJJlEPZBC9yMb8MKDA0PdnxVuDFgj0KW7MwQBZ/mZNmqz1cM3+TaM3W9/7LN//t71s+eQKxjKZL5m4BzWjOCvDRJ4= X-Received: by 2002:a05:6402:702:b0:522:ae79:3ede with SMTP id w2-20020a056402070200b00522ae793edemr69251edx.11.1690812954996; Mon, 31 Jul 2023 07:15:54 -0700 (PDT) MIME-Version: 1.0 References: <20230712031622.1888321-1-maobibo@loongson.cn> <20230712031622.1888321-4-maobibo@loongson.cn> In-Reply-To: <20230712031622.1888321-4-maobibo@loongson.cn> From: Huacai Chen Date: Mon, 31 Jul 2023 22:15:43 +0800 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH 3/3] LoongArch: mm: Add unified function populate_kernel_pte To: Bibo Mao Cc: Dennis Zhou , Tejun Heo , Christoph Lameter , Andrew Morton , loongarch@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org, WANG Xuerui Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 77485C0031 X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: wct6y647gg5dgedxe6xan1rqxz4q79cn X-HE-Tag: 1690812958-300602 X-HE-Meta: U2FsdGVkX1+GCoeg1/Z0C9oh+eRzu8PvUsudjNjf4Xz0FzdCiWmXfF0pm7Yxap65RCWjeegk2MZUqsSkMIOVokPa5UXyyZ2qKed8r/Kv98opaDw3uXyCSgy2Uavm6YqdvXENDgx0UIrmRdVoUFjxaKwJMLsKTrswfFUQi4Nbe3aE8WVMtRxAq1T625wwh02ppgKK9zXxV1JQRdFPUYXWMGMcwosbx2fA+pHLIJ+QSMtwQFfKb18xToi49cBOiwCtLHIB9OkIAC9wfSPFweLnNOCuLhCyyUgyguqVQYyt0knSq6+0hjKJ/riBX96u3x/f5Bzw925XoPhvcbhewjjHU2meW5ksolw3AQolGl7gsssd/EEQGApSHdRqJx0nFKkiAerl01o368EXmfu++PnqEpn+x21Aj3D4stLaiAT2mFsvMhf4sebUw3BLpX2MGd2VUUoOP4ppSHjzkg6MNOW3bGRXDMpkPJqC7MC2ATJUOAMQGxcKZI8XUfHd5kHBYTMdmIQsy1Xk5MR0D9WaGWFUKD3rYXAINRrTi9YsedEJp3XI76siHQZGeY/omhaS7L7jyHQGR6NbCdy79hBH41qRVsHumfW2/aPuPdXnrIpYSC2Xv7jQroV2kc0cHFY+lFE4v8M4i3lDbXf6ST2g6AuwKTgrCOexsT4xOsEoeZzGvpwIGrZI7SyTqIEaFFE4cIxF7MlSd9sQv9f2kqrXA5Dqf7gmHBZNri3uRHgue+0ayZGzB0qKtBZR6qOllcccphTgDYNmGn0IRvOQxbn8HOHL6wFNLVHSrPPXp/iRMauydWjiVibA/qV13PV1qCHSYgcmbNAyAs86udNspGwfg+MKQz8gaQWgzsTk50bZaucpHcaxi7ujYU4DIZk9r15VAFNCxTtH0BU4Iaqf9lPYbel0XMxgjhtDnuAqpt21JrePNrm+/qRlKDd/nee7KZ1WYsmaFOahxsdBftPjPwRrjMK qclm5VgV mmBYn/Wlp7W+LuuhgFFJlxy1+HrLkhoglfIXcryc6Bdg35WYZCySAUP2vsjyZZ8yHpL12blv7Qow8drJ+daDyY8jMlz7S9RhNjtc9g59QXJC938OSZyLazmLID6VZugrvKIO979cHPfNG32wb9cG3O+RlJlaAM9q6H+AhqbRuWPsQF4sYhd5p/m73Lzjq4R2SbxoZVJuH0Hm4rPxVSnHylKaH7+ecZzxQP16iShuiks9b7F6fVP913dbPRtBzrSfhN9F44OG+o3MNyd3kAPEJaHIGeeArTkr3uY/lZe0DMVMRZ2gzFwqVS3QHLm4pwg7U2NxwWyDc+cUZ11tHrSAC+E/92BXlUYE9nHhgW6r3Df285Hc= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Wed, Jul 12, 2023 at 11:16=E2=80=AFAM Bibo Mao wro= te: > > Function pcpu_populate_pte and fixmap_pte are similar, they populate > one page from kernel address space. And there is confusion between > pgd and p4d in function fixmap_pte, such as pgd_none always returns > zero. This patch adds unified function populate_kernel_pte and replaces > pcpu_populate_pte and fixmap_pte. > > Signed-off-by: Bibo Mao > --- > arch/loongarch/include/asm/pgalloc.h | 1 + > arch/loongarch/kernel/numa.c | 40 +-------------------- > arch/loongarch/mm/init.c | 52 ++++++++++++++++------------ > 3 files changed, 32 insertions(+), 61 deletions(-) > > diff --git a/arch/loongarch/include/asm/pgalloc.h b/arch/loongarch/includ= e/asm/pgalloc.h > index af1d1e4a6965..ca17b573dba6 100644 > --- a/arch/loongarch/include/asm/pgalloc.h > +++ b/arch/loongarch/include/asm/pgalloc.h > @@ -91,4 +91,5 @@ static inline pud_t *pud_alloc_one(struct mm_struct *mm= , unsigned long address) > > #endif /* __PAGETABLE_PUD_FOLDED */ > > +extern pte_t * __init populate_kernel_pte(unsigned long addr); > #endif /* _ASM_PGALLOC_H */ > diff --git a/arch/loongarch/kernel/numa.c b/arch/loongarch/kernel/numa.c > index 778e1c20bfb0..24a693b76873 100644 > --- a/arch/loongarch/kernel/numa.c > +++ b/arch/loongarch/kernel/numa.c > @@ -67,46 +67,8 @@ static int __init pcpu_cpu_distance(unsigned int from,= unsigned int to) > > void __init pcpu_populate_pte(unsigned long addr) > { > - pgd_t *pgd =3D pgd_offset_k(addr); > - p4d_t *p4d =3D p4d_offset(pgd, addr); > - pud_t *pud; > - pmd_t *pmd; > - > - if (p4d_none(*p4d)) { > - pud =3D memblock_alloc_raw(PAGE_SIZE, PAGE_SIZE); > - if (!pud) > - goto err_alloc; > - p4d_populate(&init_mm, p4d, pud); > -#ifndef __PAGETABLE_PUD_FOLDED > - pud_init(pud); > -#endif > - } > - > - pud =3D pud_offset(p4d, addr); > - if (pud_none(*pud)) { > - pmd =3D memblock_alloc_raw(PAGE_SIZE, PAGE_SIZE); > - if (!pmd) > - goto err_alloc; > - pud_populate(&init_mm, pud, pmd); > -#ifndef __PAGETABLE_PMD_FOLDED > - pmd_init(pmd); > -#endif > - } > - > - pmd =3D pmd_offset(pud, addr); > - if (!pmd_present(*pmd)) { > - pte_t *pte; > - > - pte =3D memblock_alloc(PAGE_SIZE, PAGE_SIZE); > - if (!pte) > - goto err_alloc; > - pmd_populate_kernel(&init_mm, pmd, pte); > - } > - > + populate_kernel_pte(addr); > return; > - > -err_alloc: > - panic("%s: Failed to allocate memory\n", __func__); > } > > void __init setup_per_cpu_areas(void) > diff --git a/arch/loongarch/mm/init.c b/arch/loongarch/mm/init.c > index 3b7d8129570b..6cd2948373ae 100644 > --- a/arch/loongarch/mm/init.c > +++ b/arch/loongarch/mm/init.c > @@ -191,46 +191,49 @@ void vmemmap_free(unsigned long start, unsigned lon= g end, struct vmem_altmap *al > #endif > #endif > > -static pte_t *fixmap_pte(unsigned long addr) > +pte_t * __init populate_kernel_pte(unsigned long addr) > { > - pgd_t *pgd; > - p4d_t *p4d; > + pgd_t *pgd =3D pgd_offset_k(addr); > + p4d_t *p4d =3D p4d_offset(pgd, addr); > pud_t *pud; > pmd_t *pmd; > > - pgd =3D pgd_offset_k(addr); > - p4d =3D p4d_offset(pgd, addr); > - > - if (pgd_none(*pgd)) { > - pud_t *new __maybe_unused; > - > - new =3D memblock_alloc_low(PAGE_SIZE, PAGE_SIZE); > - pgd_populate(&init_mm, pgd, new); > + if (p4d_none(*p4d)) { > + pud =3D memblock_alloc_raw(PAGE_SIZE, PAGE_SIZE); > + if (!pud) > + goto err_alloc; > + p4d_populate(&init_mm, p4d, pud); > #ifndef __PAGETABLE_PUD_FOLDED > - pud_init(new); > + pud_init(pud); > #endif > } > > pud =3D pud_offset(p4d, addr); > if (pud_none(*pud)) { > - pmd_t *new __maybe_unused; > - > - new =3D memblock_alloc_low(PAGE_SIZE, PAGE_SIZE); > - pud_populate(&init_mm, pud, new); > + pmd =3D memblock_alloc_raw(PAGE_SIZE, PAGE_SIZE); > + if (!pmd) > + goto err_alloc; > + pud_populate(&init_mm, pud, pmd); > #ifndef __PAGETABLE_PMD_FOLDED > - pmd_init(new); > + pmd_init(pmd); > #endif > } > > pmd =3D pmd_offset(pud, addr); > - if (pmd_none(*pmd)) { > - pte_t *new __maybe_unused; > + if (!pmd_present(*pmd)) { > + pte_t *pte; > > - new =3D memblock_alloc_low(PAGE_SIZE, PAGE_SIZE); > - pmd_populate_kernel(&init_mm, pmd, new); > + pte =3D memblock_alloc(PAGE_SIZE, PAGE_SIZE); I don't think memblock_alloc_low() here can be replaced by memblock_alloc()= . Huacai > + if (!pte) > + goto err_alloc; > + pmd_populate_kernel(&init_mm, pmd, pte); > } > > return pte_offset_kernel(pmd, addr); > + > +err_alloc: > + panic("%s: Failed to allocate memory\n", __func__); > + return NULL; > } > > void __init __set_fixmap(enum fixed_addresses idx, > @@ -241,7 +244,12 @@ void __init __set_fixmap(enum fixed_addresses idx, > > BUG_ON(idx <=3D FIX_HOLE || idx >=3D __end_of_fixed_addresses); > > - ptep =3D fixmap_pte(addr); > + /* > + * Now only FIX_EARLYCON_MEM_BASE fixed map is used > + * __set_fixmap must be called before mem_init since function > + * populate_kernel_pte allocates memory with memblock_alloc metho= d. > + */ > + ptep =3D populate_kernel_pte(addr); > if (!pte_none(*ptep)) { > pte_ERROR(*ptep); > return; > -- > 2.27.0 >