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 8ECECC001B0 for ; Thu, 10 Aug 2023 04:09:03 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id DA0946B0071; Thu, 10 Aug 2023 00:09:02 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id D51326B0074; Thu, 10 Aug 2023 00:09:02 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C19058E0001; Thu, 10 Aug 2023 00:09:02 -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 AE92F6B0071 for ; Thu, 10 Aug 2023 00:09:02 -0400 (EDT) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 703181606A0 for ; Thu, 10 Aug 2023 04:09:02 +0000 (UTC) X-FDA: 81106864524.04.D72919C Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by imf03.hostedemail.com (Postfix) with ESMTP id 2693920005 for ; Thu, 10 Aug 2023 04:08:58 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=none; spf=pass (imf03.hostedemail.com: domain of maobibo@loongson.cn designates 114.242.206.163 as permitted sender) smtp.mailfrom=maobibo@loongson.cn; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691640540; 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=f+nvsulnVT8dywTCslJaDwaOnkiyZXyEZ/QVAn6hG5s=; b=N8uYn0Ep9UbsmIcwxoLfr4KZ62dLznbcDqtrUxQwGs1fnXZhhZHniEDoTtbeZ/hdmrFfg+ Fbm2jQcGuFkoWF7TvLtA+uMN2er/HGpu1nCcA7qUgnMhaCTZl6yxL2zuUZsfuIyAgD8gfp UYwKwvmsFLymmXGGts5tKuv6y5XHsD4= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691640540; a=rsa-sha256; cv=none; b=CizzC7jjX3MXXDYVz/JPmS1czTChdE/oMctQhdL5b1SBaR4faFWnhBh2GHGNhSFbrCy3ZH OxywYir37E8OG8WN5accJtmnNTE0JZChwSL2kn4QdIXjveum+UXKhzNSxb8FbiAEv5o9OI PU8ntXEAwGjqgSAPLuRj9RFH1fIlaaQ= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=none; spf=pass (imf03.hostedemail.com: domain of maobibo@loongson.cn designates 114.242.206.163 as permitted sender) smtp.mailfrom=maobibo@loongson.cn; dmarc=none Received: from loongson.cn (unknown [10.20.42.170]) by gateway (Coremail) with SMTP id _____8DxfevWYtRkrF0UAA--.41761S3; Thu, 10 Aug 2023 12:08:54 +0800 (CST) Received: from [10.20.42.170] (unknown [10.20.42.170]) by localhost.localdomain (Coremail) with SMTP id AQAAf8Dx4eTWYtRk225SAA--.9503S3; Thu, 10 Aug 2023 12:08:54 +0800 (CST) Message-ID: Date: Thu, 10 Aug 2023 12:08:54 +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 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> Content-Language: en-US From: bibo mao In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-CM-TRANSID:AQAAf8Dx4eTWYtRk225SAA--.9503S3 X-CM-SenderInfo: xpdruxter6z05rqj20fqof0/ X-Coremail-Antispam: 1Uk129KBj93XoW3JFW7Xry7Gw4kGF17Gw1fKrX_yoWxXw4kpr ZrG3WvvF4UXryDC39Fqw1Fgrn7tw1kK3W5WFnrG3W8Z3sFqFnrGF1kJw17ury0yFWfAF48 Xr15Kanxuayqq3cCm3ZEXasCq-sJn29KB7ZKAUJUUUU8529EdanIXcx71UUUUU7KY7ZEXa sCq-sGcSsGvfJ3Ic02F40EFcxC0VAKzVAqx4xG6I80ebIjqfuFe4nvWSU5nxnvy29KBjDU 0xBIdaVrnRJUUUvFb4IE77IF4wAFF20E14v26r1j6r4UM7CY07I20VC2zVCF04k26cxKx2 IYs7xG6rWj6s0DM7CIcVAFz4kK6r1Y6r17M28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48v e4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_Jr0_JF4l84ACjcxK6xIIjxv20xvEc7CjxVAFwI 0_Jr0_Gr1l84ACjcxK6I8E87Iv67AKxVWxJVW8Jr1l84ACjcxK6I8E87Iv6xkF7I0E14v2 6r4UJVWxJr1le2I262IYc4CY6c8Ij28IcVAaY2xG8wAqjxCEc2xF0cIa020Ex4CE44I27w Aqx4xG64xvF2IEw4CE5I8CrVC2j2WlYx0E2Ix0cI8IcVAFwI0_JrI_JrylYx0Ex4A2jsIE 14v26r1j6r4UMcvjeVCFs4IE7xkEbVWUJVW8JwACjcxG0xvEwIxGrwCYjI0SjxkI62AI1c AE67vIY487MxAIw28IcxkI7VAKI48JMxC20s026xCaFVCjc4AY6r1j6r4UMI8I3I0E5I8C rVAFwI0_Jr0_Jr4lx2IqxVCjr7xvwVAFwI0_JrI_JrWlx4CE17CEb7AF67AKxVWUtVW8Zw CIc40Y0x0EwIxGrwCI42IY6xIIjxv20xvE14v26r1j6r1xMIIF0xvE2Ix0cI8IcVCY1x02 67AKxVWUJVW8JwCI42IY6xAIw20EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Jr 0_Gr1lIxAIcVC2z280aVCY1x0267AKxVWUJVW8JbIYCTnIWIevJa73UjIFyTuYvjxU70Pf DUUUU X-Stat-Signature: 5xj9nxmdekhkaizyxwrjihmc4w1ags16 X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 2693920005 X-Rspam-User: X-HE-Tag: 1691640538-540169 X-HE-Meta: U2FsdGVkX18V9HmWarOsJ/AYzGVK+iuxTpPBhIyywptNME1FzsJPpcZrWNs86DcO2A3pdfD/A0i8QHNfhNcE0xDI7gKSdRmBpfcBRF73faWJqqnCmrzP8DMukvDqgnpkkOFtoucjdO7BHcaO5aI5dK462S2yXv7ixdEnVW3WYz9oUDHCKrycIJE+qTdQ3Mrj6Yf/XlT/QXgDVjb6BaErHOUm7QeO2IrcW6V0qN2hL+g2pl33WCGBp2Nk/7x1mFgjI/QTkH4jLxC/sH9lwhghY+qvEiRvwyhyBkgh09/hX/7uo/bJHrJKH4SRKuVwN1mQsL0qsXwRl2qHz5oYVMnteBdvFsmtBareKx7TqdjwXcNfYyV6V0AmzdH+qOMb465jK/ziaAyLu5r9CJNSAh+Yddi42nYC5Ykg/45SDo2O4fKclfO5TK8iYNWE/VwcdmKVG952VBMOJ1SJyOu7MmltaCOqq2G++FdCfqG0iKW3zJyvfexgB0r6WyMCVlC46x98iLSl93Lzaecy2dOWbS6p5baHaNiYIP9gfT4a2HRReibEwP6v2c6LnQ70Ekzrt9mItOAEjZJ6C1MUzYkqF5HFdtS8p4sMdi7lSSe4sDjIBAJl0/iI7YkgmtelP3updlfnznQUl16Fgoqb+i5+86r4wA5+1K0H1tN7EAgoomIVDV+1cTsGQii6CGf+fNKemDQA8tprgfpfBcNhDhAGt4PiclnXhsqoI78h8p6+PTU80Rfak/UVppJLWyaJTLiObjNn4Ig1ulGmqdifC0I0BWobOZEYUrMUFDfujgmv2udmY7/K0bh6Ehy3diyVD9Z85DrLi82ib7aSNkz6sAd1LHpY6L/QbVxzfF4b/DaZhIzoHAu+SY2n+suEkcDrWDcb7UPyu/xbqkjy+Obpt0BV3DdmaRoZGcgSnlXMuEBFZDWgYfSHL17xJaCpq92FjEjnkuNU3UFkEYrQCQ+putNp2ye D6z83Ox4 Ibw2nQ2ba764rWqjzueOYS3XkJtpBP8fjZMWM+Ftoy5myow40iKa6C7zSSKoKmFr+gtlYM60WCwUpZb00nYzAgep1yHWmozspiQPf 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/8/2 15:25, Huacai Chen 写道: > On Tue, Aug 1, 2023 at 9:22 AM bibo mao wrote: >> >> >> >> 在 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? > I forget the reason now, so if you confirm memblock_alloc() works well > here, you can use it. But please don't use memblock_alloc_raw(). what a mess, there is more comments if there is special reason, else everyone can forgot by elapsed time. why the function memblock_alloc_raw can not be use? there is one useless page copy. Regards Bibo Mao > > Huacai >> >> 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 >>>> >> >>