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 EF6C4C001DF for ; Tue, 1 Aug 2023 01:22:31 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9244C2800BF; Mon, 31 Jul 2023 21:22:31 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8D66E28007A; Mon, 31 Jul 2023 21:22:31 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 79BDB2800BF; Mon, 31 Jul 2023 21:22:31 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 6983428007A for ; Mon, 31 Jul 2023 21:22:31 -0400 (EDT) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 3EA7E1C9AF3 for ; Tue, 1 Aug 2023 01:22:31 +0000 (UTC) X-FDA: 81073785702.12.8F4BEC0 Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by imf28.hostedemail.com (Postfix) with ESMTP id 51E3EC0006 for ; Tue, 1 Aug 2023 01:22:27 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf28.hostedemail.com: domain of maobibo@loongson.cn designates 114.242.206.163 as permitted sender) smtp.mailfrom=maobibo@loongson.cn ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690852949; 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; bh=oSNn+mgH6vp+azQQwJUppZcNXop5DhQhGvrYRChS83k=; b=61XzG/pFUrCCzITnsUwHCQSwEKl3YAM5mCYS3ZWowfqtTYFbToOmvxApUYVRS7AVNz6kMX hBRWRrjN1oDKyuvgXpvUCwKgNFIjZFE4Gr4NI5lHEWubtk/bDDnfFqWCQ0ygws1p/kUcwc XH5Bq3aQtkfRd4hdub1kJquMB0DBpL0= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf28.hostedemail.com: domain of maobibo@loongson.cn designates 114.242.206.163 as permitted sender) smtp.mailfrom=maobibo@loongson.cn ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690852949; a=rsa-sha256; cv=none; b=uOPtYlX0E0pgtdMNCjG/wT4gGx4wRfRbUv9YhzcBnWmjMXyy8OAWRjGtw7+awNvtJMNOxL h02d/hKxn8Xn8Jz808NzoaYymndyausuVGCM+UlZRgYLAsfYVaDOoQByioU0fUelCAm+g1 57MOIIKfDsdK0vwv0I5CCMiQ8eQmiv4= Received: from loongson.cn (unknown [10.20.42.170]) by gateway (Coremail) with SMTP id _____8Bx5fBSXshklsINAA--.32741S3; Tue, 01 Aug 2023 09:22:26 +0800 (CST) Received: from [10.20.42.170] (unknown [10.20.42.170]) by localhost.localdomain (Coremail) with SMTP id AQAAf8CxvM5RXshklWdDAA--.44902S3; Tue, 01 Aug 2023 09:22:26 +0800 (CST) Message-ID: Date: Tue, 1 Aug 2023 09:22:25 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.13.0 Subject: Re: [PATCH 3/3] LoongArch: mm: Add unified function populate_kernel_pte Content-Language: en-US To: Huacai Chen Cc: Dennis Zhou , Tejun Heo , Christoph Lameter , Andrew Morton , loongarch@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org, WANG Xuerui References: <20230712031622.1888321-1-maobibo@loongson.cn> <20230712031622.1888321-4-maobibo@loongson.cn> From: bibo mao In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-CM-TRANSID:AQAAf8CxvM5RXshklWdDAA--.44902S3 X-CM-SenderInfo: xpdruxter6z05rqj20fqof0/ X-Coremail-Antispam: 1Uk129KBj93XoW3Gr1xJFWxtw4rKry5JrWDtrc_yoW7CF18pr ZrJ3WvvF48Xr97C39rXryFgrn7Jw1kK3WaganrWF1rA3sFqrnrGr1kWwn7WFy2yayxZa1x WF1rJ3Zxua1qq3cCm3ZEXasCq-sJn29KB7ZKAUJUUUU8529EdanIXcx71UUUUU7KY7ZEXa sCq-sGcSsGvfJ3Ic02F40EFcxC0VAKzVAqx4xG6I80ebIjqfuFe4nvWSU5nxnvy29KBjDU 0xBIdaVrnRJUUUv0b4IE77IF4wAFF20E14v26r1j6r4UM7CY07I20VC2zVCF04k26cxKx2 IYs7xG6rWj6s0DM7CIcVAFz4kK6r106r15M28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48v e4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_Gr0_Xr1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI 0_Gr0_Cr1l84ACjcxK6I8E87Iv67AKxVW8JVWxJwA2z4x0Y4vEx4A2jsIEc7CjxVAFwI0_ Gr0_Gr1UM2AIxVAIcxkEcVAq07x20xvEncxIr21l57IF6xkI12xvs2x26I8E6xACxx1l5I 8CrVACY4xI64kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r1q6rW5McIj6I8E87Iv67AK xVWUJVW8JwAm72CE4IkC6x0Yz7v_Jr0_Gr1lF7xvr2IY64vIr41lc7I2V7IY0VAS07AlzV AYIcxG8wCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E 14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jw0_GFylIx kGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVWUCVW8JwCI42IY6xIIjxv20xvEc7CjxVAF wI0_Jr0_Gr1lIxAIcVCF04k26cxKx2IYs7xG6r1j6r1xMIIF0xvEx4A2jsIE14v26r1j6r 4UMIIF0xvEx4A2jsIEc7CjxVAFwI0_Jr0_GrUvcSsGvfC2KfnxnUUI43ZEXa7IU8xOz3UU UUU== X-Rspamd-Queue-Id: 51E3EC0006 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: faf1jgqb7qr1znphd57yhyqe461bx89s X-HE-Tag: 1690852947-254307 X-HE-Meta: U2FsdGVkX1+9PnoADpHJWkMkt5VmQAybKHCCRERtOo74rGe+Ms0/kHTwHyFv9nXxpeNOXB8dtRYhmx05Kad2oI89QLL/ECuxJoPYkp2zXIS1ynhDF3ix5G6wzGxGoA9yQK32ev2lRVLf1RFW8Mci/wOyKK1AY2GWmZ6yab0RkYD+ZGvUNmUYhQSO9zWNlFT6OWM78DRzewjroNzhpDoi4MMqsJ44gn1RebFRjDfpMkP7ric5M2MwGxFh8U6og1/H9dF0KiI3P0ai9JGVK3WxQU0TO/m1wa8b8ZIrljJZRyXXJlqox0LFlVj1aEzCWupOBsOTSpXHWdPA376XnKZkKAGPpRyNb6wJRMEIshkNMbtjQVPWJ9lif14e818b/QRQ8BeksszEYGwvaxNFFRJYp7oAGn2+xqQhUpdTsxUGhQBFjySV0rBn7c45lTi27ZqLd6Coj7eBRlI3tPOZN2SqZyh6US3fBR7Bx9xaUjc6yhnzFSTtx/6mqgm8WNG1ggPo2I93RTD7SXQQn3nt47PWLbUxHP67R5HVLop+buLjexgr9UWLcqgLyVtDmhX/ErhqCuj30TOMITxz+ghxf7z+jLVLdFqV6SfTq8iXnTDw0EjOLAr1/KPc/sLtsqKJScYi/l97XVYsUind3CDbrtL/qB9PMYPu0Y1MmSjGjTWjNWRepg41tYHpplCzWLC/qP0DFeg3E8xQL/Iuceq4DaUiV8liXz/X1Ewr+kDxVbR3QuJKDLpFz9vg8rS9uWkCNM0Wh8TnPIQfAiUpChcccHD6su2Fi9Mm8DlkqokVwQyiM9bpTbPaITCwJlj03bu6UcqPItadsxfJRLiLklfH3/nXpPhJzKaFxzKtmhpYz8y6OxIrSs3Ipc5F6Ujdx8upLadfXLWxqZ3RlM5PD1oVdbrLNxqmlMOPO6QlgARDTwGn+DuwbbWBH05lV6o5DBlFL4IPoj907ynpI7TLmzyQ/+n mSLAbFRS rZLBCFcSx+ybd+DxOd6FBJJ/3wJxIasB1Y1pj2lx/OABh3NrUBQGOZEqAYPumy2vA6zFmUntxykd/p+pKAr6J2wJ0jlhkGpqKQGpc 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: 在 2023/7/31 22:15, Huacai Chen 写道: > On Wed, Jul 12, 2023 at 11:16 AM Bibo Mao wrote: >> >> 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/include/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 = pgd_offset_k(addr); >> - p4d_t *p4d = p4d_offset(pgd, addr); >> - pud_t *pud; >> - pmd_t *pmd; >> - >> - if (p4d_none(*p4d)) { >> - pud = 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 = pud_offset(p4d, addr); >> - if (pud_none(*pud)) { >> - pmd = 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 = pmd_offset(pud, addr); >> - if (!pmd_present(*pmd)) { >> - pte_t *pte; >> - >> - pte = 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 long 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 = pgd_offset_k(addr); >> + p4d_t *p4d = p4d_offset(pgd, addr); >> pud_t *pud; >> pmd_t *pmd; >> >> - pgd = pgd_offset_k(addr); >> - p4d = p4d_offset(pgd, addr); >> - >> - if (pgd_none(*pgd)) { >> - pud_t *new __maybe_unused; >> - >> - new = memblock_alloc_low(PAGE_SIZE, PAGE_SIZE); >> - pgd_populate(&init_mm, pgd, new); >> + if (p4d_none(*p4d)) { >> + pud = 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 = pud_offset(p4d, addr); >> if (pud_none(*pud)) { >> - pmd_t *new __maybe_unused; >> - >> - new = memblock_alloc_low(PAGE_SIZE, PAGE_SIZE); >> - pud_populate(&init_mm, pud, new); >> + pmd = 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 = pmd_offset(pud, addr); >> - if (pmd_none(*pmd)) { >> - pte_t *new __maybe_unused; >> + if (!pmd_present(*pmd)) { >> + pte_t *pte; >> >> - new = memblock_alloc_low(PAGE_SIZE, PAGE_SIZE); >> - pmd_populate_kernel(&init_mm, pmd, new); >> + pte = memblock_alloc(PAGE_SIZE, PAGE_SIZE); > I don't think memblock_alloc_low() here can be replaced by memblock_alloc(). Can you share me the points that pte table must be allocated with memblock_alloc_low in this place? Regards Bibo Mao > > > 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 <= FIX_HOLE || idx >= __end_of_fixed_addresses); >> >> - ptep = 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 method. >> + */ >> + ptep = populate_kernel_pte(addr); >> if (!pte_none(*ptep)) { >> pte_ERROR(*ptep); >> return; >> -- >> 2.27.0 >>