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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 2D2BAECAAD5 for ; Sat, 3 Sep 2022 08:55:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=9TsZ199eTuoa1fWXPf2Memf82VCRhH3IChz6+oV5CEc=; b=aarVB/uujjzi9C LB+ksD8xpbIbjUHbltpocfKbRSSoCKNLLncqjMJVWVo2RPLjj4wXQkXEMdsTUw4DcX4PqEqtGafoe Aix7GocuWetAvX0O2zse3Km1lRUK9vBM8gnZN+nkObJZE5ZILfIo+b8BpntMpyusLEX86iq5fdIqq yACYVKKIEEhb4+njuLwRIggYyIKuh8SzbYNCYeeRluITvkXr6OyUaCRd/v+aY529eeB/sTA4WQtTB xyfwseB5iCuox/LyYiWwoFsECo5pSihRmZ7u8JwgR2ew4Q9LS5lZJ3P0YK32FT5Oj32Iw0dbLV04j pzZO54KSYFSr/vEz1W+g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oUOv4-007L8f-54; Sat, 03 Sep 2022 08:54:26 +0000 Received: from out28-169.mail.aliyun.com ([115.124.28.169]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oUOv0-007KwR-JP for linux-arm-kernel@lists.infradead.org; Sat, 03 Sep 2022 08:54:25 +0000 X-Alimail-AntiSpam: AC=CONTINUE;BC=0.07436378|-1;CH=green;DM=|CONTINUE|false|;DS=CONTINUE|ham_social|0.0832323-0.00195295-0.914815;FP=0|0|0|0|0|-1|-1|-1;HT=ay29a033018047201;MF=victor@allwinnertech.com;NM=1;PH=DS;RN=12;RT=12;SR=0;TI=SMTPD_---.P6puSW6_1662195252; Received: from 192.168.220.144(mailfrom:victor@allwinnertech.com fp:SMTPD_---.P6puSW6_1662195252) by smtp.aliyun-inc.com; Sat, 03 Sep 2022 16:54:13 +0800 Message-ID: Date: Sat, 3 Sep 2022 16:54:11 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.9.0 Subject: Re: [PATCH] ARM: mmu: fix access to illegal address when using earlycon & memblock=debug Content-Language: en-US To: Rob Herring Cc: Marek Szyprowski , Russell King , Russell King , Linus Walleij , yanfei.xu@windriver.com, Ard Biesheuvel , Thomas Gleixner , =?UTF-8?B?TWljaGHFgiBNaXJvc8WCYXc=?= , Arnd Bergmann , linux-arm-kernel , "linux-kernel@vger.kernel.org" References: <20220316023356.120595-1-victor@allwinnertech.com> <9a425a51-9460-6c4d-e331-5cd5873f8a43@samsung.com> <6c14e174-cdb6-c1fc-58cc-d579111d2328@allwinnertech.com> From: Victor Hassan In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220903_015422_866647_FB57A141 X-CRM114-Status: GOOD ( 26.97 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Dear Rob, On 2022/9/1 21:21, Rob Herring wrote: > On Thu, Sep 1, 2022 at 7:54 AM Victor Hassan wrote: >> >> >> >> On 2022/8/31 20:37, Victor Hassan wrote: >>> On 8/31/2022 7:52 PM, Marek Szyprowski wrote: >>>> Hi Victor, >>>> >>>> On 16.03.2022 03:33, Victor Hassan wrote: >>>>> earlycon uses fixmap to create a memory map, >>>>> So we need to close earlycon before closing fixmap, >>>>> otherwise printk will access illegal addresses. > > How? Due to recent changes in how printk and the consoles work or just > because create_mapping() can print? In the latter case, the only > variable input is the phys address. I think most if not all prints > cannot occur. > >>>>> After creating a new memory map, we open earlycon again. >>>>> >>>>> Signed-off-by: Victor Hassan >>>> >>>> This patch landed in linux next-20220831 as commit a76886d117cb ("ARM: >>>> 9223/1: mmu: fix access to illegal address when using earlycon & >>>> memblock=debug"). Unfortunately it breaks booting of all my test boards >>>> which *do not* use earlycon. It can be easily reproduced even with QEMU. >>>> >>>> With kernel compiled from multi_v7_defconfig the following setup boots: >>>> >>>> $ qemu-system-arm -nographic -kernel arch/arm/boot/zImage -append >>>> "console=ttyAMA0 earlycon" -M virt -smp 2 -m 512 >>>> >>>> while this one doesn't: >>>> >>>> $ qemu-system-arm -nographic -kernel arch/arm/boot/zImage -append >>>> "console=ttyAMA0" -M virt -smp 2 -m 512 >>>> >>>> >>>>> --- >>>>> arch/arm/mm/mmu.c | 7 +++++++ >>>>> 1 file changed, 7 insertions(+) >>>>> >>>>> diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c >>>>> index 274e4f73fd33..f3511f07a7d0 100644 >>>>> --- a/arch/arm/mm/mmu.c >>>>> +++ b/arch/arm/mm/mmu.c >>>>> @@ -14,6 +14,7 @@ >>>>> #include >>>>> #include >>>>> #include >>>>> +#include >>>>> #include >>>>> #include >>>>> @@ -1695,6 +1696,9 @@ static void __init early_fixmap_shutdown(void) >>>>> pmd_clear(fixmap_pmd(va)); >>>>> local_flush_tlb_kernel_page(va); >>>>> +#ifdef CONFIG_FIX_EARLYCON_MEM >>>>> + console_stop(console_drivers); >>>>> +#endif >>>>> for (i = 0; i < __end_of_permanent_fixed_addresses; i++) { >>>>> pte_t *pte; >>>>> struct map_desc map; >>>>> @@ -1713,6 +1717,9 @@ static void __init early_fixmap_shutdown(void) >>>>> create_mapping(&map); >>>>> } >>>>> +#ifdef CONFIG_FIX_EARLYCON_MEM >>>>> + console_start(console_drivers); >>>>> +#endif >>>>> } >>>>> /* >>>> >>>> Best regards >>> >>> Dear Marek, >>> Thank you for the notice. I'll figure it out and feed back to you as >>> soon as possible. >>> >>> Regards, >>> Victor >> >> Hi Marek, >> >> Sorry, didn't take into account that console_drivers is NULL when >> earlycon is not used. >> >> Here is the patch-v2. Please review: >> >> diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c >> index a49f0b9..a240f38 100644 >> --- a/arch/arm/mm/mmu.c >> +++ b/arch/arm/mm/mmu.c >> @@ -14,6 +14,7 @@ >> #include >> #include >> #include >> +#include >> >> #include >> #include >> @@ -1730,6 +1731,10 @@ >> pmd_clear(fixmap_pmd(va)); >> local_flush_tlb_kernel_page(va); >> >> +#ifdef CONFIG_FIX_EARLYCON_MEM > > This is always true for CONFIG_MMU and this file is only built for > CONFIG_MMU. So you don't need it. Yes, you are right. > >> + if (console_drivers) >> + console_stop(console_drivers); > > console_drivers is a list, so you are only stopping the 1st one. > Couldn't console_lock() be used here? > Thanks for the suggestion: console_lock is actually the same as console_stop in the test, and the code is more compact. > Also, this should be before pmd_clear(). During the test, I found that the console failed after executing local_flush_tlb_kernel_page, so I think the pmd_clear function can output in time if there is printing. This doesn't seem possible, so before pmd_clear it's not bad either. > >> +#endif >> for (i = 0; i < __end_of_permanent_fixed_addresses; i++) { >> pte_t *pte; >> struct map_desc map; >> @@ -1748,6 +1753,10 @@ >> >> create_mapping(&map); >> } >> +#ifdef CONFIG_FIX_EARLYCON_MEM >> + if (console_drivers) >> + console_start(console_drivers); >> +#endif >> } >> >> BTW, should I resend the patch-v2 through the site >> (https://www.armlinux.org.uk/developer/patches/add.php), or should I >> send the patch-v2 through E-mail to Linux-Mainline? >> >> Thanks you. >> >> Regards, >> Victor >> >> _______________________________________________ >> linux-arm-kernel mailing list >> linux-arm-kernel@lists.infradead.org >> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel Here is the patch-v3. Please review: diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c index a49f0b9..57ca77f 100644 --- a/arch/arm/mm/mmu.c +++ b/arch/arm/mm/mmu.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include @@ -1727,6 +1728,7 @@ unsigned long va = fix_to_virt(__end_of_permanent_fixed_addresses - 1); pte_offset_fixmap = pte_offset_late_fixmap; + console_lock(); pmd_clear(fixmap_pmd(va)); local_flush_tlb_kernel_page(va); @@ -1748,6 +1750,7 @@ create_mapping(&map); } + console_unlock(); } Thanks you. Regards, Victor _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel