Received: by 2002:a05:6358:1087:b0:cb:c9d3:cd90 with SMTP id j7csp831758rwi; Wed, 26 Oct 2022 07:46:08 -0700 (PDT) X-Google-Smtp-Source: AMsMyM4ao/P2OSv6FjgZMSGZS4HqL5Hx8boX7Yfxd36zxxCTjyzqD+dc6YFWpJbyrRKvhVO5bord X-Received: by 2002:a05:6a00:22ca:b0:56b:f793:5abc with SMTP id f10-20020a056a0022ca00b0056bf7935abcmr13169957pfj.54.1666795567756; Wed, 26 Oct 2022 07:46:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666795567; cv=none; d=google.com; s=arc-20160816; b=anHu/UnZUzuDbYwoqMqbxPkHRGw8k9Hdh6gLVct54Rhsj27lLkx1kQCgFeqXj+4q6f 4yUM01+Ns5XELmz0oZWT+mW9i+QSHB2KrvU7nqL83EUIKAhjpD2u9013I6PO9kePwW2q 6+/3d7OGtvmcbfRfOWGM443XEmRJB47IJP4gSsU7twCPc0mGQT/Rvn9fwjifrJBfsSey xCTUyavMUH72eajQZgqMQzdMxy2neFqtvMo3i1nybBKeOBXzsbWrCM7eT3cntLo7TnTI tzTz5CgWKlr3mAMr3CNT732xXJCY+65jwZJHWBxz4eL7GPNPjFOJoInS1LqKAuQqZjHT h2Gw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:from :references:cc:to:subject:user-agent:mime-version:date:message-id; bh=ETHmbAn8ks2H86smaXDZBly6znFl38rABQSkVn3mJco=; b=b30MXYEpYlXgq1tt5jb0HxlBvLy0gEQBJDVxEyoDWYn0/kyodVWQ+XnfZbgyFVcAGV lLR1Q8WFiRzxnqXlg7Am17zVSxCioWegH7nMm+jwJs8I1zpqpGEFd4ki4DlhH2FTLfR/ Z7QSS/N9SxuNYsUTak/rx9c8MKmYYGNJ2PxdkYFMJvuftE82DfnwdISvNOOExZJe9cig 9JYAdjGEM+I/QUa+1ARAwy1+kf+zqg7K4bWFHTbU7YuWzIZBmLSHG/g2H8DHms1nBn+w rSB6IlsrFyVTTj3hfu++S5iY6NH68B5yFCuYGNBBV/1PdAKCF4sKyz0958vgAyvzwgY8 johw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alibaba.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id bg27-20020a056a02011b00b0046edf48affcsi876318pgb.399.2022.10.26.07.45.47; Wed, 26 Oct 2022 07:46:07 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alibaba.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234295AbiJZOXH (ORCPT + 99 others); Wed, 26 Oct 2022 10:23:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45180 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234058AbiJZOXF (ORCPT ); Wed, 26 Oct 2022 10:23:05 -0400 Received: from out30-54.freemail.mail.aliyun.com (out30-54.freemail.mail.aliyun.com [115.124.30.54]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 18BD2E09F6; Wed, 26 Oct 2022 07:23:01 -0700 (PDT) X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R201e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018046051;MF=xianting.tian@linux.alibaba.com;NM=1;PH=DS;RN=24;SR=0;TI=SMTPD_---0VT7dVVz_1666794173; Received: from 30.39.214.125(mailfrom:xianting.tian@linux.alibaba.com fp:SMTPD_---0VT7dVVz_1666794173) by smtp.aliyun-inc.com; Wed, 26 Oct 2022 22:22:56 +0800 Message-ID: <52fe447b-5d0d-2ca7-c041-9b6ae2ab66cf@linux.alibaba.com> Date: Wed, 26 Oct 2022 22:22:53 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.12.0 Subject: Re: [PATCH V4 1/2] RISC-V: Add arch_crash_save_vmcoreinfo support To: Baoquan He Cc: Conor Dooley , Palmer Dabbelt , paul.walmsley@sifive.com, aou@eecs.berkeley.edu, anup@brainfault.org, heiko@sntech.de, guoren@kernel.org, mick@ics.forth.gr, alexandre.ghiti@canonical.com, vgoyal@redhat.com, dyoung@redhat.com, corbet@lwn.net, bagasdotme@gmail.com, k-hagio-ab@nec.com, lijiang@redhat.com, kexec@lists.infradead.org, linux-doc@vger.kernel.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, crash-utility@redhat.com, heinrich.schuchardt@canonical.com, hschauhan@nulltrace.org, yixun.lan@gmail.com References: <20221019103623.7008-1-xianting.tian@linux.alibaba.com> <20221019103623.7008-2-xianting.tian@linux.alibaba.com> <30621b3b-47ba-d612-cfb0-583d779691a3@linux.alibaba.com> <6af05838-fa58-8197-f3ce-ca95457077a7@linux.alibaba.com> <5df30e57-88ae-0a3b-2c1a-b962363d8670@linux.alibaba.com> <3c8beab1-3ca7-c3d7-6f31-c28a0ae008a3@linux.alibaba.com> From: Xianting Tian In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-9.9 required=5.0 tests=BAYES_00, ENV_AND_HDR_SPF_MATCH,NICE_REPLY_A,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY, USER_IN_DEF_SPF_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 在 2022/10/26 下午8:05, Baoquan He 写道: > Hi Xianting, > > On 10/26/22 at 05:44pm, Xianting Tian wrote: >> 在 2022/10/26 下午5:25, Conor Dooley 写道: >>> On Wed, Oct 26, 2022 at 05:08:11PM +0800, Xianting Tian wrote: >>>> Hi Palmer, Conor >>>> >>>> Is this version OK for you? >>> The weird ifdef/IS_ENABLED thing was the only comment I had. It's a bit >>> odd & I notice Baoquan brought it up too. I didn't (and won't) give you >>> a reviewed by on these patches because I don't understand the area well >>> enough. The general nitpickery seems to be sorted though. >> I checked the KERNEL_LINK_ADDR definition of riscv,  it is valid for >> CONFIG_64BIT and !CONFIG_64BIT. > This series looks good to me. My only minor concern is if we can make > the arch_crash_save_vmcoreinfo() as below. I don't understand why we > have to have the CONFIG_64BIT ifdeffery and the IS_ENABLED(CONFIG_64BIT) > between two adjacent code blocks. Not sure if we are saying the same > thing. KERNEL_LINK_ADDR is valid for both CONFIG_64BIT and !CONFIG_64BIT, but  MODULES_VADDR is only defined when CONFIG_64BIT. I tend to agree only remove IS_ENABLED, thanks For riscv: #ifdef CONFIG_64BIT /* Leave 2GB for kernel and BPF at the end of the address space */ #define KERNEL_LINK_ADDR        (ADDRESS_SPACE_END - SZ_2G + 1) #else #define KERNEL_LINK_ADDR        PAGE_OFFSET #endif > > +void arch_crash_save_vmcoreinfo(void) > +{ > + VMCOREINFO_NUMBER(VA_BITS); > + VMCOREINFO_NUMBER(phys_ram_base); > + > + vmcoreinfo_append_str("NUMBER(PAGE_OFFSET)=0x%lx\n", PAGE_OFFSET); > + vmcoreinfo_append_str("NUMBER(VMALLOC_START)=0x%lx\n", VMALLOC_START); > + vmcoreinfo_append_str("NUMBER(VMALLOC_END)=0x%lx\n", VMALLOC_END); > + vmcoreinfo_append_str("NUMBER(VMEMMAP_START)=0x%lx\n", VMEMMAP_START); > + vmcoreinfo_append_str("NUMBER(VMEMMAP_END)=0x%lx\n", VMEMMAP_END); > +#ifdef CONFIG_64BIT > + vmcoreinfo_append_str("NUMBER(MODULES_VADDR)=0x%lx\n", MODULES_VADDR); > + vmcoreinfo_append_str("NUMBER(MODULES_END)=0x%lx\n", MODULES_END); > + vmcoreinfo_append_str("NUMBER(KERNEL_LINK_ADDR)=0x%lx\n", KERNEL_LINK_ADDR); > +#endif > +} > >> Maybe we can remove IS_ENABLED(CONFIG_64BIT) >> >> arch/riscv/include/asm/pgtable.h >> #define ADDRESS_SPACE_END       (UL(-1)) >> #ifdef CONFIG_64BIT >> /* Leave 2GB for kernel and BPF at the end of the address space */ >> #define KERNEL_LINK_ADDR        (ADDRESS_SPACE_END - SZ_2G + 1) >> #else >> #define KERNEL_LINK_ADDR        PAGE_OFFSET >> #endif >> >> arch/riscv/include/asm/page.h >> #ifdef CONFIG_64BIT >> #ifdef CONFIG_MMU >> #define PAGE_OFFSET             kernel_map.page_offset >> #else >> #define PAGE_OFFSET             _AC(CONFIG_PAGE_OFFSET, UL) >> #endif >> /* >>  * By default, CONFIG_PAGE_OFFSET value corresponds to SV48 address space so >>  * define the PAGE_OFFSET value for SV39. >>  */ >> #define PAGE_OFFSET_L4          _AC(0xffffaf8000000000, UL) >> #define PAGE_OFFSET_L3          _AC(0xffffffd800000000, UL) >> #else >> #define PAGE_OFFSET             _AC(CONFIG_PAGE_OFFSET, UL) >> #endif /* CONFIG_64BIT */ >> >>> Thanks, >>> Conor. >>> >>>> 在 2022/10/20 下午12:40, Xianting Tian 写道: >>>>> 在 2022/10/20 上午11:05, Baoquan He 写道: >>>>>> On 10/20/22 at 10:17am, Xianting Tian wrote: >>>>>>> 在 2022/10/20 上午10:08, Baoquan He 写道: >>>>>>>> On 10/19/22 at 06:36pm, Xianting Tian wrote: >>>>>>>>> Add arch_crash_save_vmcoreinfo(), which exports VM >>>>>>>>> layout(MODULES, VMALLOC, >>>>>>>>> VMEMMAP ranges and KERNEL_LINK_ADDR), va bits and ram >>>>>>>>> base for vmcore. >>>>>>>>> >>>>>>>>> Default pagetable levels and PAGE_OFFSET aren't same for >>>>>>>>> different kernel >>>>>>>>> version as below. For pagetable levels, it sets sv57 by >>>>>>>>> default and falls >>>>>>>>> back to setting sv48 at boot time if sv57 is not >>>>>>>>> supported by the hardware. >>>>>>>>> >>>>>>>>> For ram base, the default value is 0x80200000 for qemu >>>>>>>>> riscv64 env and, >>>>>>>>> for example, is 0x200000 on the XuanTie 910 CPU. >>>>>>>>> >>>>>>>>>    * Linux Kernel 5.18 ~ >>>>>>>>>    *      PGTABLE_LEVELS = 5 >>>>>>>>>    *      PAGE_OFFSET = 0xff60000000000000 >>>>>>>>>    * Linux Kernel 5.17 ~ >>>>>>>>>    *      PGTABLE_LEVELS = 4 >>>>>>>>>    *      PAGE_OFFSET = 0xffffaf8000000000 >>>>>>>>>    * Linux Kernel 4.19 ~ >>>>>>>>>    *      PGTABLE_LEVELS = 3 >>>>>>>>>    *      PAGE_OFFSET = 0xffffffe000000000 >>>>>>>>> >>>>>>>>> Since these configurations change from time to time and >>>>>>>>> version to version, >>>>>>>>> it is preferable to export them via vmcoreinfo than to >>>>>>>>> change the crash's >>>>>>>>> code frequently, it can simplify the development of crash tool. >>>>>>>>> >>>>>>>>> Signed-off-by: Xianting Tian >>>>>>>>> --- >>>>>>>>>    arch/riscv/kernel/Makefile     |  1 + >>>>>>>>>    arch/riscv/kernel/crash_core.c | 23 +++++++++++++++++++++++ >>>>>>>>>    2 files changed, 24 insertions(+) >>>>>>>>>    create mode 100644 arch/riscv/kernel/crash_core.c >>>>>>>>> >>>>>>>>> diff --git a/arch/riscv/kernel/Makefile b/arch/riscv/kernel/Makefile >>>>>>>>> index db6e4b1294ba..4cf303a779ab 100644 >>>>>>>>> --- a/arch/riscv/kernel/Makefile >>>>>>>>> +++ b/arch/riscv/kernel/Makefile >>>>>>>>> @@ -81,6 +81,7 @@ obj-$(CONFIG_KGDB)        += kgdb.o >>>>>>>>>    obj-$(CONFIG_KEXEC_CORE)    += kexec_relocate.o >>>>>>>>> crash_save_regs.o machine_kexec.o >>>>>>>>>    obj-$(CONFIG_KEXEC_FILE)    += elf_kexec.o machine_kexec_file.o >>>>>>>>>    obj-$(CONFIG_CRASH_DUMP)    += crash_dump.o >>>>>>>>> +obj-$(CONFIG_CRASH_CORE)    += crash_core.o >>>>>>>>>    obj-$(CONFIG_JUMP_LABEL)    += jump_label.o >>>>>>>>> diff --git a/arch/riscv/kernel/crash_core.c >>>>>>>>> b/arch/riscv/kernel/crash_core.c >>>>>>>>> new file mode 100644 >>>>>>>>> index 000000000000..3e889d0ed7bd >>>>>>>>> --- /dev/null >>>>>>>>> +++ b/arch/riscv/kernel/crash_core.c >>>>>>>>> @@ -0,0 +1,23 @@ >>>>>>>>> +// SPDX-License-Identifier: GPL-2.0-only >>>>>>>>> + >>>>>>>>> +#include >>>>>>>>> +#include >>>>>>>>> + >>>>>>>>> +void arch_crash_save_vmcoreinfo(void) >>>>>>>>> +{ >>>>>>>>> +    VMCOREINFO_NUMBER(VA_BITS); >>>>>>>>> +    VMCOREINFO_NUMBER(phys_ram_base); >>>>>>>>> + >>>>>>>>> + >>>>>>>>> vmcoreinfo_append_str("NUMBER(PAGE_OFFSET)=0x%lx\n", >>>>>>>>> PAGE_OFFSET); >>>>>>>>> + vmcoreinfo_append_str("NUMBER(VMALLOC_START)=0x%lx\n", >>>>>>>>> VMALLOC_START); >>>>>>>>> + >>>>>>>>> vmcoreinfo_append_str("NUMBER(VMALLOC_END)=0x%lx\n", >>>>>>>>> VMALLOC_END); >>>>>>>>> + vmcoreinfo_append_str("NUMBER(VMEMMAP_START)=0x%lx\n", >>>>>>>>> VMEMMAP_START); >>>>>>>>> + >>>>>>>>> vmcoreinfo_append_str("NUMBER(VMEMMAP_END)=0x%lx\n", >>>>>>>>> VMEMMAP_END); >>>>>>>>> +#ifdef CONFIG_64BIT >>>>>>>>> + vmcoreinfo_append_str("NUMBER(MODULES_VADDR)=0x%lx\n", >>>>>>>>> MODULES_VADDR); >>>>>>>>> + >>>>>>>>> vmcoreinfo_append_str("NUMBER(MODULES_END)=0x%lx\n", >>>>>>>>> MODULES_END); >>>>>>>>> +#endif >>>>>>>>> + >>>>>>>>> +    if (IS_ENABLED(CONFIG_64BIT)) >>>>>>>>> + >>>>>>>>> vmcoreinfo_append_str("NUMBER(KERNEL_LINK_ADDR)=0x%lx\n", >>>>>>>>> KERNEL_LINK_ADDR); >>>>>>>> Wondering why you don't put KERNEL_LINK_ADDR exporting into the above >>>>>>>> ifdeffery scope, with that you can save one line of >>>>>>>> "IS_ENABLED(CONFIG_64BIT)". >>>>>>> I followed the rule in print_vm_layout() of >>>>>>> arch/riscv/mm/init.c, which used >>>>>>> IS_ENABLED when print the value of KERNEL_LINK_ADDR. >>>>>>> >>>>>> I see. There's PAGE_OFFSET in the middle. Thanks. >>>>>> >>>>>>          print_ml("lowmem", (unsigned long)PAGE_OFFSET, >>>>>>                  (unsigned long)high_memory) >>>>>> >>>>>> So now, do you think if it's necessary to have another >>>>>> IS_ENABLED(CONFIG_64BIT) in the current arch_crash_save_vmcoreinfo()? >>>>> For which MACRO?  I think current code for PAGE_OFFSET is OK. >>>>>