Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp2291958pxu; Mon, 7 Dec 2020 02:45:15 -0800 (PST) X-Google-Smtp-Source: ABdhPJzB2oJxBn47vqnUmVpCxLVMbSQ9M4o30Di+H94L7wwZF4Bvvr0rhjuv+XCdohVJTvnouH6J X-Received: by 2002:a17:906:1412:: with SMTP id p18mr18590061ejc.480.1607337915333; Mon, 07 Dec 2020 02:45:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1607337915; cv=none; d=google.com; s=arc-20160816; b=N2HlFED7I704dLpIRrCWJeXmJbD2jBU2fBk1Q2aHC93t5J4xboUcZxz/Mfqq7RIyLj xYGEBBHJcyFivFzlmaL/brmQT4xwLXdEEJG8g0l+JltCzdMTFjEoq212+hR4RGTM77v3 K5SYA6o3xwcNIKMTwOf9/+6DWAaFj9BmJ2CUJEQOJRoBDCy6FXa5fFOfOqBAuVGkrcWd jnRz0+i4J2n+lPxfR0NBRXRaU+LHTAw8XtK/2yTK/FeWax8sVpbkYE+yTFHXNRjaTcth pCqRp4w2m6kpriQLhyD8EB9/X6SLrGeTed0iZFDBSk2Wnj+ryxYZQdHoBG3XS1VdRdIT 0Yvg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject; bh=5QqIlkTXtall3oR4y+NOXJeCM3Wo4IeLeGvN3uutRxo=; b=nEdhBYHM44urPND/IcSRihAvrYQcM2m5Mt/6AS7rGzzE0TjObkCZgMBFOleFzgFXkC NRIXqqTlq17nQ6bJSG2gR+sAt4zNs5zNgDcmX39ipNMj42v84miqziXN6zwm6w0uuZ1A wYKhTRfGeuEz7j7LOQKOFyvoA08qfhHMHgsiUZfzGPaacVtn0d39yyGruULZNMjOb46s gOSKv1bWEPfN5CMTo9gNqBKjwWGAONBgaXaja6h9ybHCLmr7We3yV0SLc+HK9Ek7L9ru NOSa9OWxroKxeEjKB9pm8WBuYi+IApq0UpcX1it+dn6KnmMpqHFVhMLIPOXf/9oJ8UKh a+eA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id o31si7889287edd.172.2020.12.07.02.44.53; Mon, 07 Dec 2020 02:45:15 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726299AbgLGKkl (ORCPT + 99 others); Mon, 7 Dec 2020 05:40:41 -0500 Received: from foss.arm.com ([217.140.110.172]:46698 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725842AbgLGKkk (ORCPT ); Mon, 7 Dec 2020 05:40:40 -0500 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 1D43B1042; Mon, 7 Dec 2020 02:39:55 -0800 (PST) Received: from [10.163.86.92] (unknown [10.163.86.92]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 0BC2A3F66B; Mon, 7 Dec 2020 02:39:50 -0800 (PST) Subject: Re: [PATCH] arm64: mm: decrease the section size to reduce the memory reserved for the page map To: Mike Rapoport , Ard Biesheuvel Cc: Barry Song , Linux ARM , Steve Capper , Marc Zyngier , Linux Kernel Mailing List , Wei Li , Catalin Marinas , butao@hisilicon.com, Will Deacon , Nicolas Saenz Julienne , fengbaopeng2@hisilicon.com References: <20201204014443.43329-1-liwei213@huawei.com> <20201204111347.GA844@willie-the-truck> <390f5f441d99a832f4b2425b46f6d971@kernel.org> <20201207094215.GC1112728@linux.ibm.com> <20201207100426.GE1112728@linux.ibm.com> From: Anshuman Khandual Message-ID: <39d72e1c-b3b3-89d3-1a1a-3ee222d40761@arm.com> Date: Mon, 7 Dec 2020 16:09:52 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <20201207100426.GE1112728@linux.ibm.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 12/7/20 3:34 PM, Mike Rapoport wrote: > On Mon, Dec 07, 2020 at 10:49:26AM +0100, Ard Biesheuvel wrote: >> On Mon, 7 Dec 2020 at 10:42, Mike Rapoport wrote: >>> >>> On Mon, Dec 07, 2020 at 09:35:06AM +0000, Marc Zyngier wrote: >>>> On 2020-12-07 09:09, Ard Biesheuvel wrote: >>>>> (+ Marc) >>>>> >>>>> On Fri, 4 Dec 2020 at 12:14, Will Deacon wrote: >>>>>> >>>>>> On Fri, Dec 04, 2020 at 09:44:43AM +0800, Wei Li wrote: >>>>>>> For the memory hole, sparse memory model that define SPARSEMEM_VMEMMAP >>>>>>> do not free the reserved memory for the page map, decrease the section >>>>>>> size can reduce the waste of reserved memory. >>>>>>> >>>>>>> Signed-off-by: Wei Li >>>>>>> Signed-off-by: Baopeng Feng >>>>>>> Signed-off-by: Xia Qing >>>>>>> --- >>>>>>> arch/arm64/include/asm/sparsemem.h | 2 +- >>>>>>> 1 file changed, 1 insertion(+), 1 deletion(-) >>>>>>> >>>>>>> diff --git a/arch/arm64/include/asm/sparsemem.h b/arch/arm64/include/asm/sparsemem.h >>>>>>> index 1f43fcc79738..8963bd3def28 100644 >>>>>>> --- a/arch/arm64/include/asm/sparsemem.h >>>>>>> +++ b/arch/arm64/include/asm/sparsemem.h >>>>>>> @@ -7,7 +7,7 @@ >>>>>>> >>>>>>> #ifdef CONFIG_SPARSEMEM >>>>>>> #define MAX_PHYSMEM_BITS CONFIG_ARM64_PA_BITS >>>>>>> -#define SECTION_SIZE_BITS 30 >>>>>>> +#define SECTION_SIZE_BITS 27 >>>>>> >>>>>> We chose '30' to avoid running out of bits in the page flags. What >>>>>> changed? >>>>>> >>>>>> With this patch, I can trigger: >>>>>> >>>>>> ./include/linux/mmzone.h:1170:2: error: Allocator MAX_ORDER exceeds >>>>>> SECTION_SIZE >>>>>> #error Allocator MAX_ORDER exceeds SECTION_SIZE >>>>>> >>>>>> if I bump up NR_CPUS and NODES_SHIFT. >>>>>> >>>>> >>>>> Does this mean we will run into problems with the GICv3 ITS LPI tables >>>>> again if we are forced to reduce MAX_ORDER to fit inside >>>>> SECTION_SIZE_BITS? >>>> >>>> Most probably. We are already massively constraint on platforms >>>> such as TX1, and dividing the max allocatable range by 8 isn't >>>> going to make it work any better... >>> >>> I don't think MAX_ORDER should shrink. Even if SECTION_SIZE_BITS is >>> reduced it should accomodate the existing MAX_ORDER. >>> >>> My two pennies. >>> >> >> But include/linux/mmzone.h:1170 has this: >> >> #if (MAX_ORDER - 1 + PAGE_SHIFT) > SECTION_SIZE_BITS >> #error Allocator MAX_ORDER exceeds SECTION_SIZE >> #endif >> >> and Will managed to trigger it after applying this patch. > > Right, because with 64K pages section size of 27 bits is not enough to > accomodate MAX_ORDER (2^13 pages of 64K). > > Which means that definition of SECTION_SIZE_BITS should take MAX_ORDER > into account either statically with > > #ifdef ARM64_4K_PAGES > #define SECTION_SIZE_BITS > #elif ARM64_16K_PAGES > #define SECTION_SIZE_BITS > #elif ARM64_64K_PAGES > #define SECTION_SIZE_BITS > #else > #error "and what is the page size?" > #endif > > or dynamically, like e.g. ia64 does: > > #ifdef CONFIG_FORCE_MAX_ZONEORDER > #if ((CONFIG_FORCE_MAX_ZONEORDER - 1 + PAGE_SHIFT) > SECTION_SIZE_BITS) > #undef SECTION_SIZE_BITS > #define SECTION_SIZE_BITS (CONFIG_FORCE_MAX_ZONEORDER - 1 + PAGE_SHIFT) > #endif I had proposed the same on the other thread here. But with this the SECTION_SIZE_BITS becomes 22 in case of 4K page size reducing to an extent where PMD based vmemmap mapping could not be created. Though have not looked into much details yet. Using CONFIG_FORCE_MAX_ZONEORDER seems to the right thing to do. But if that does not reasonably work for 4K pages, we might have to hard code it as 27 to have huge page vmemmap mappings.