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 X-Spam-Level: X-Spam-Status: No, score=-10.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A, SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 98FFEC433B4 for ; Fri, 30 Apr 2021 11:24:51 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id DB6B86145D for ; Fri, 30 Apr 2021 11:24:50 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DB6B86145D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=huawei.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id EC4A46B006C; Fri, 30 Apr 2021 07:24:49 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E4D3E6B006E; Fri, 30 Apr 2021 07:24:49 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C9EDD6B0070; Fri, 30 Apr 2021 07:24:49 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0210.hostedemail.com [216.40.44.210]) by kanga.kvack.org (Postfix) with ESMTP id AE1FA6B006C for ; Fri, 30 Apr 2021 07:24:49 -0400 (EDT) Received: from smtpin09.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay02.hostedemail.com (Postfix) with ESMTP id 6881F12EE for ; Fri, 30 Apr 2021 11:24:49 +0000 (UTC) X-FDA: 78088801098.09.A4F88AF Received: from szxga05-in.huawei.com (szxga05-in.huawei.com [45.249.212.191]) by imf15.hostedemail.com (Postfix) with ESMTP id 78D5FA0003A2 for ; Fri, 30 Apr 2021 11:24:43 +0000 (UTC) Received: from DGGEMS406-HUB.china.huawei.com (unknown [172.30.72.60]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4FWqhk0Hn2znTYF; Fri, 30 Apr 2021 19:22:14 +0800 (CST) Received: from [10.174.177.244] (10.174.177.244) by DGGEMS406-HUB.china.huawei.com (10.3.19.206) with Microsoft SMTP Server id 14.3.498.0; Fri, 30 Apr 2021 19:24:38 +0800 Subject: Re: arm32: panic in move_freepages (Was [PATCH v2 0/4] arm64: drop pfn_valid_within() and simplify pfn_valid()) To: Mike Rapoport CC: , Andrew Morton , Anshuman Khandual , Ard Biesheuvel , Catalin Marinas , David Hildenbrand , Marc Zyngier , "Mark Rutland" , Mike Rapoport , "Will Deacon" , , , References: <52f7d03b-7219-46bc-c62d-b976bc31ebd5@huawei.com> <2d879629-3059-fd42-428f-4b7c2a73d698@huawei.com> <259d14df-a713-72e7-4ccb-c06a8ee31e13@huawei.com> <6ad2956c-70ae-c423-ed7d-88e94c88060f@huawei.com> <0cb013e4-1157-f2fa-96ec-e69e60833f72@huawei.com> From: Kefeng Wang Message-ID: Date: Fri, 30 Apr 2021 19:24:37 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.7.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="utf-8"; format=flowed Content-Language: en-US X-Originating-IP: [10.174.177.244] X-CFilter-Loop: Reflected Authentication-Results: imf15.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=huawei.com; spf=pass (imf15.hostedemail.com: domain of wangkefeng.wang@huawei.com designates 45.249.212.191 as permitted sender) smtp.mailfrom=wangkefeng.wang@huawei.com X-Rspamd-Server: rspam03 X-Stat-Signature: rrud8h6znb9ay5buug8zpyt1uwj4pukz X-Rspamd-Queue-Id: 78D5FA0003A2 Received-SPF: none (huawei.com>: No applicable sender policy available) receiver=imf15; identity=mailfrom; envelope-from=""; helo=szxga05-in.huawei.com; client-ip=45.249.212.191 X-HE-DKIM-Result: none/none X-HE-Tag: 1619781883-464257 Content-Transfer-Encoding: quoted-printable 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 2021/4/30 17:51, Mike Rapoport wrote: > On Thu, Apr 29, 2021 at 06:22:55PM +0800, Kefeng Wang wrote: >> >> On 2021/4/29 14:57, Mike Rapoport wrote: >> >>>>> Do you use SPARSMEM? If yes, what is your section size? >>>>> What is the value if CONFIG_FORCE_MAX_ZONEORDER in your configurati= on? >>>> Yes, >>>> >>>> CONFIG_SPARSEMEM=3Dy >>>> >>>> CONFIG_SPARSEMEM_STATIC=3Dy >>>> >>>> CONFIG_FORCE_MAX_ZONEORDER =3D 11 >>>> >>>> CONFIG_PAGE_OFFSET=3D0xC0000000 >>>> CONFIG_HAVE_ARCH_PFN_VALID=3Dy >>>> CONFIG_HIGHMEM=3Dy >>>> #define SECTION_SIZE_BITS 26 >>>> #define MAX_PHYSADDR_BITS 32 >>>> #define MAX_PHYSMEM_BITS 32 >> >> >> With the patch,=C2=A0 the addr is aligned, but the panic still occurre= d, >=20 > Is this the same panic at move_freepages() for range [de600, de7ff]? >=20 > Do you enable CONFIG_ARM_LPAE? no, the CONFIG_ARM_LPAE is not set, and yes with same panic at=20 move_freepages at start_pfn/end_pfn [de600, de7ff], [de600000, de7ff000] : pfn =3Dde600,=20 page =3Def3cc000, page-flags =3D ffffffff, pfn2phy =3D de600000 >=20 >> new free memory log is below, >> >> memblock_free: [0xaf430000-0xaf44ffff] mem_init+0x158/0x23c >> >> memblock_free: [0xaf510000-0xaf53ffff] mem_init+0x158/0x23c >> memblock_free: [0xaf560000-0xaf57ffff] mem_init+0x158/0x23c >> memblock_free: [0xafd98000-0xafdc7fff] mem_init+0x158/0x23c >> memblock_free: [0xafdd8000-0xafdfffff] mem_init+0x158/0x23c >> memblock_free: [0xafe18000-0xafe7ffff] mem_init+0x158/0x23c >> memblock_free: [0xafee0000-0xafefffff] mem_init+0x158/0x23c >> __free_memory_core, range: 0x80a03000 - 0x80a04000, pfn: 80a03 - 80a04 >> __free_memory_core, range: 0x80a08000 - 0x80b00000, pfn: 80a08 - 80b00 >> __free_memory_core, range: 0x812e8058 - 0x83000000, pfn: 812e9 - 83000 >> __free_memory_core, range: 0x85000000 - 0x85600000, pfn: 85000 - 85600 >> __free_memory_core, range: 0x86a00000 - 0x87e00000, pfn: 86a00 - 87e00 >> __free_memory_core, range: 0x8bd00000 - 0x8c500000, pfn: 8bd00 - 8c500 >> __free_memory_core, range: 0x8e300000 - 0x8ed00000, pfn: 8e300 - 8ed00 >> __free_memory_core, range: 0x90d00000 - 0xaf2c0000, pfn: 90d00 - af2c0 >> __free_memory_core, range: 0xaf430000 - 0xaf450000, pfn: af430 - af450 >> __free_memory_core, range: 0xaf510000 - 0xaf540000, pfn: af510 - af540 >> __free_memory_core, range: 0xaf560000 - 0xaf580000, pfn: af560 - af580 >> __free_memory_core, range: 0xafd98000 - 0xafdc8000, pfn: afd98 - afdc8 >> __free_memory_core, range: 0xafdd8000 - 0xafe00000, pfn: afdd8 - afe00 >> __free_memory_core, range: 0xafe18000 - 0xafe80000, pfn: afe18 - afe80 >> __free_memory_core, range: 0xafee0000 - 0xaff00000, pfn: afee0 - aff00 >> __free_memory_core, range: 0xaff80000 - 0xaff8d000, pfn: aff80 - aff8d >> __free_memory_core, range: 0xafff2000 - 0xafff4580, pfn: afff2 - afff4 >> __free_memory_core, range: 0xafffe000 - 0xafffe0e0, pfn: afffe - afffe >> __free_memory_core, range: 0xafffe4fc - 0xafffe500, pfn: affff - afffe >> __free_memory_core, range: 0xafffe6e4 - 0xafffe700, pfn: affff - afffe >> __free_memory_core, range: 0xafffe8dc - 0xafffe8e0, pfn: affff - afffe >> __free_memory_core, range: 0xafffe970 - 0xafffe980, pfn: affff - afffe >> __free_memory_core, range: 0xafffe990 - 0xafffe9a0, pfn: affff - afffe >> __free_memory_core, range: 0xafffe9a4 - 0xafffe9c0, pfn: affff - afffe >> __free_memory_core, range: 0xafffeb54 - 0xafffeb60, pfn: affff - afffe >> __free_memory_core, range: 0xafffecf4 - 0xafffed00, pfn: affff - afffe >> __free_memory_core, range: 0xafffefc4 - 0xafffefd8, pfn: affff - afffe >> __free_memory_core, range: 0xb0200000 - 0xc0000000, pfn: b0200 - b0200 >> __free_memory_core, range: 0xcc000000 - 0xdca00000, pfn: cc000 - b0200 >> __free_memory_core, range: 0xde700000 - 0xdea00000, pfn: de700 - b0200 >=20 > The range [de600, de7ff] the __free_memory_core will check the start pfn and end pfn, if (start_pfn >=3D end_pfn) return 0; __free_pages_memory(start_pfn, end_pfn); so the memory will not be freed to buddy, confused... >=20 >> __free_memory_core, range: 0xe0800000 - 0xe0c00000, pfn: e0800 - b0200 >> __free_memory_core, range: 0xf4b00000 - 0xf7000000, pfn: f4b00 - b0200 >> __free_memory_core, range: 0xfda00000 - 0xffffffff, pfn: fda00 - b0200 >>> It seems that with SPARSEMEM we don't align the freed parts on pagebl= ock >>> boundaries. >>> >>> Can you try the patch below: >>> >>> diff --git a/mm/memblock.c b/mm/memblock.c >>> index afaefa8fc6ab..1926369b52ec 100644 >>> --- a/mm/memblock.c >>> +++ b/mm/memblock.c >>> @@ -1941,14 +1941,13 @@ static void __init free_unused_memmap(void) >>> * due to SPARSEMEM sections which aren't present. >>> */ >>> start =3D min(start, ALIGN(prev_end, PAGES_PER_SECTION)); >>> -#else >>> +#endif >>> /* >>> * Align down here since the VM subsystem insists that the >>> * memmap entries are valid from the bank start aligned to >>> * MAX_ORDER_NR_PAGES. >>> */ >>> start =3D round_down(start, MAX_ORDER_NR_PAGES); >>> -#endif >>> /* >>> * If we had a previous bank, and there is a space >>> >=20