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 4D0B0D0E6F1 for ; Mon, 21 Oct 2024 11:20:14 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A164E6B007B; Mon, 21 Oct 2024 07:20:13 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9C5416B0082; Mon, 21 Oct 2024 07:20:13 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 88E756B0083; Mon, 21 Oct 2024 07:20:13 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 6B0EA6B007B for ; Mon, 21 Oct 2024 07:20:13 -0400 (EDT) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id F168D814F5 for ; Mon, 21 Oct 2024 11:19:59 +0000 (UTC) X-FDA: 82697365338.28.CA8D2E2 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf09.hostedemail.com (Postfix) with ESMTP id 5FBDC14001B for ; Mon, 21 Oct 2024 11:20:00 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf09.hostedemail.com: domain of ryan.roberts@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=ryan.roberts@arm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1729509446; 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=KKr7hYaLZmexUKE90xTqeofSPZjyYdn87PLVDih0MQY=; b=rON99u3dC177jxcUxjLa3DNBmQPfJZ/AvCy/35vvrUg+TRo1ByFhJSrItBC8KLcQC9XB+q rA0Z9mg0oYL4+73M8gv162LDB2R3JNsOD+/Xe16z+ygvdReLmxIJ3qlTX9WjDfeDLmAO2G YHedIUf/ek1hWQWtsT1JIK+Y6hOxcsg= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1729509446; a=rsa-sha256; cv=none; b=fhJ52u21qYR2WQUkDEdt2XWSmvSKEIJbG5T5NMWu4WM6VyD8zLUro0pJiZkYqsz1wXGN4C slDo8Iv8VonAFAstekhWEKNgt+rBd5NH9wxuqrfvO6KJaiUTaq9W4jfJiKHRtJwL9wmdfp kMiggy1kqEZre5i9MHjqFDiSpMUH6r4= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf09.hostedemail.com: domain of ryan.roberts@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=ryan.roberts@arm.com 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 BCA96DA7; Mon, 21 Oct 2024 04:20:39 -0700 (PDT) Received: from [10.57.87.148] (unknown [10.57.87.148]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id B769F3F528; Mon, 21 Oct 2024 04:20:06 -0700 (PDT) Message-ID: Date: Mon, 21 Oct 2024 12:20:04 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [RFC PATCH v1 44/57] arm64: Align sections to PAGE_SIZE_MAX Content-Language: en-GB To: =?UTF-8?Q?Thomas_Wei=C3=9Fschuh?= Cc: Andrew Morton , Anshuman Khandual , Ard Biesheuvel , Catalin Marinas , David Hildenbrand , Greg Marsden , Ivan Ivanov , Kalesh Singh , Marc Zyngier , Mark Rutland , Matthias Brugger , Miroslav Benes , Oliver Upton , Will Deacon , kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org References: <20241014105514.3206191-1-ryan.roberts@arm.com> <20241014105912.3207374-1-ryan.roberts@arm.com> <20241014105912.3207374-44-ryan.roberts@arm.com> <69533deb-dc77-49c3-a256-49efee308905@t-8ch.de> From: Ryan Roberts In-Reply-To: <69533deb-dc77-49c3-a256-49efee308905@t-8ch.de> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 5FBDC14001B X-Stat-Signature: ddhomgke7imzn679731qk4u7awkozsue X-Rspam-User: X-HE-Tag: 1729509600-887176 X-HE-Meta: U2FsdGVkX1+T525mBJh+CCHwd+PiZ87vBAf/X5lc4xQ45SxTMPzxKBNtMlw9L4MDWVTBIj3yzHo2isJc5qQgsDnIMQVytDVKP84FMeLzh1T6CuwoYoeKSqTvHhoKNxblP69GZG/4ftO6kFDG1WeN0vZXg6oLVlRiXFp6f6AMNEc+KQqUZu2AGfhU+WWkbQT2LIAmybO+IrfDPJQb/H70wdURhCmVJba8W8J4LWzN9Aq1bSMUTOEEUFgSpXVLX5EmMGr8Bdo4y3VNkO1Xyq/1ZHKBSXmle2j7nEZN4xRShGoaIUBARpFQsKba03WEy7Nl5HRsGGhhTMShiZuOHY5CQ6viYycRhNx50NUd7PikQrgo1F33wztYBmqf33lGlR3pZgz8BgDLCvfdefjotros/6+MpshCwR7SGpwdrCpNYTn30qlUAlgtvE2BT5uMSJdH07cgaIbMU3cnUcKz2Hq+N7RhrDpwC51x+lFZ4Rn32mDjUmIj7B7Bg3fzGkQej5kg2FW3vbmiFfjJ97VdZpIiYt42Zsgs81XLw7fjn/CPTDWeBHawn6/nl31lnpP0qQOt5x+98nMZE+T4WPjQiP+wICDomPa03JSI9wvlWzrXlPnqKJ5oOVI15fgdT1uG2pYo5M1iUPZ0dJrcWLyDTnye1dNIbgoKeA45NfqDhNUug448I2pUTinqn+a0Wf0BYsFjyLFAC5hCgA134/TkQLOdnnuOqBGCVjMXMGjeur2XRx+OJi9pZeIURXtE4pcCYzjQa9Ol+GPqHRUfZ4w3jqes+8bOys5JGEcHlX2NGap7ZCAvZslEiOFGtBDSPVmqLRzbBnOpiAs0GrJSm1phugbo/6Sn7EqfWnmmFA3BnOcAmvhpMJMQ/sTa9PR6YN2rM6GXe+l8JCEXokK0BoJV7Todqi9hVQTrbWpAxIDmfEIrx/H6DBa1aO7kvGM3nY5Scq4LoL+Kt8LphaPZeVwp/vO /l100Ms8 ak6oCOK+YskBji8EJJi9mURKXqvxBVoHhuRp+ivsqqVK1Y00RPwdA3dATaGxlyuyOeQsJ346p5PjuWAVttjVRcXPSJ4W+lkHO9l45i9tMlqEL3DKxe2l5GkSG9tDr/+lne0EratCozcbu5udigeMswQdo6ugeegx2pS6fhGg7v3mfBfK2HAEBleqvd2WSyXEQ6Wp3ElIfg0A+GdFf9Jq6TasyzsHZrIGJpH5+LeblqhSGruNijdOALz7xRI9gyz49v7BusfLPWlah+UEDmA5WyhTeXfucxsWjEcVtDz7qqR81LZg= 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: List-Subscribe: List-Unsubscribe: On 19/10/2024 15:16, Thomas Weißschuh wrote: > On 2024-10-14 11:58:51+0100, Ryan Roberts wrote: >> Increase alignment of sections in nvhe hyp, vdso and final vmlinux image >> from PAGE_SIZE to PAGE_SIZE_MAX. For compile-time PAGE_SIZE, >> PAGE_SIZE_MAX == PAGE_SIZE so there is no change. For boot-time >> PAGE_SIZE, PAGE_SIZE_MAX is the largest selectable page size. >> >> For a boot-time page size build, image size is comparable to a 64K page >> size compile-time build. In future, it may be desirable to optimize >> run-time memory consumption by freeing unused padding pages when the >> boot-time selected page size is less than PAGE_SIZE_MAX. >> >> Signed-off-by: Ryan Roberts >> --- >> >> ***NOTE*** >> Any confused maintainers may want to read the cover note here for context: >> https://lore.kernel.org/all/20241014105514.3206191-1-ryan.roberts@arm.com/ >> >> arch/arm64/include/asm/memory.h | 4 +-- >> arch/arm64/kernel/vdso-wrap.S | 4 +-- >> arch/arm64/kernel/vdso.c | 7 +++--- >> arch/arm64/kernel/vdso/vdso.lds.S | 4 +-- >> arch/arm64/kernel/vdso32-wrap.S | 4 +-- >> arch/arm64/kernel/vdso32/vdso.lds.S | 4 +-- >> arch/arm64/kernel/vmlinux.lds.S | 38 ++++++++++++++--------------- >> arch/arm64/kvm/hyp/nvhe/hyp.lds.S | 2 +- >> 8 files changed, 34 insertions(+), 33 deletions(-) > >> diff --git a/arch/arm64/kernel/vdso.c b/arch/arm64/kernel/vdso.c >> index 89b6e78400023..1efe98909a2e0 100644 >> --- a/arch/arm64/kernel/vdso.c >> +++ b/arch/arm64/kernel/vdso.c >> @@ -195,7 +195,7 @@ static int __setup_additional_pages(enum vdso_abi abi, >> >> vdso_text_len = vdso_info[abi].vdso_pages << PAGE_SHIFT; >> /* Be sure to map the data page */ >> - vdso_mapping_len = vdso_text_len + VVAR_NR_PAGES * PAGE_SIZE; >> + vdso_mapping_len = vdso_text_len + VVAR_NR_PAGES * PAGE_SIZE_MAX; >> >> vdso_base = get_unmapped_area(NULL, 0, vdso_mapping_len, 0, 0); >> if (IS_ERR_VALUE(vdso_base)) { >> @@ -203,7 +203,8 @@ static int __setup_additional_pages(enum vdso_abi abi, >> goto up_fail; >> } >> >> - ret = _install_special_mapping(mm, vdso_base, VVAR_NR_PAGES * PAGE_SIZE, >> + ret = _install_special_mapping(mm, vdso_base, >> + VVAR_NR_PAGES * PAGE_SIZE_MAX, >> VM_READ|VM_MAYREAD|VM_PFNMAP, >> vdso_info[abi].dm); >> if (IS_ERR(ret)) >> @@ -212,7 +213,7 @@ static int __setup_additional_pages(enum vdso_abi abi, >> if (system_supports_bti_kernel()) >> gp_flags = VM_ARM64_BTI; >> >> - vdso_base += VVAR_NR_PAGES * PAGE_SIZE; >> + vdso_base += VVAR_NR_PAGES * PAGE_SIZE_MAX; >> mm->context.vdso = (void *)vdso_base; >> ret = _install_special_mapping(mm, vdso_base, vdso_text_len, >> VM_READ|VM_EXEC|gp_flags| > >> diff --git a/arch/arm64/kernel/vdso/vdso.lds.S b/arch/arm64/kernel/vdso/vdso.lds.S >> index 45354f2ddf706..f7d1537a689e8 100644 >> --- a/arch/arm64/kernel/vdso/vdso.lds.S >> +++ b/arch/arm64/kernel/vdso/vdso.lds.S >> @@ -18,9 +18,9 @@ OUTPUT_ARCH(aarch64) >> >> SECTIONS >> { >> - PROVIDE(_vdso_data = . - __VVAR_PAGES * PAGE_SIZE); >> + PROVIDE(_vdso_data = . - __VVAR_PAGES * PAGE_SIZE_MAX); >> #ifdef CONFIG_TIME_NS >> - PROVIDE(_timens_data = _vdso_data + PAGE_SIZE); >> + PROVIDE(_timens_data = _vdso_data + PAGE_SIZE_MAX); > > This looks like it also needs a change to vvar_fault() in vdso.c. > The symbols are now always PAGE_SIZE_MAX apart, while vvar_fault() works > in page offsets (vmf->pgoff) that are based on the runtime PAGE_SIZE and > it expects hardcoded offsets. > > As test you can use tools/testing/selftests/timens/timens. > > (I can't test this right now, so it's only a suspicion) Ahh good spot - that test does infact fail. This fixes the problem: ---8<--- diff --git a/arch/arm64/kernel/vdso.c b/arch/arm64/kernel/vdso.c index 1efe98909a2e0..d2049ba6b19f5 100644 --- a/arch/arm64/kernel/vdso.c +++ b/arch/arm64/kernel/vdso.c @@ -151,10 +151,11 @@ int vdso_join_timens(struct task_struct *task, struct time_namespace *ns) static vm_fault_t vvar_fault(const struct vm_special_mapping *sm, struct vm_area_struct *vma, struct vm_fault *vmf) { + pgoff_t pgmaxoff = vmf->pgoff >> (PAGE_SHIFT_MAX - PAGE_SHIFT); struct page *timens_page = find_timens_vvar_page(vma); unsigned long pfn; - switch (vmf->pgoff) { + switch (pgmaxoff) { case VVAR_DATA_PAGE_OFFSET: if (timens_page) pfn = page_to_pfn(timens_page); ---8<--- I'll include it in the next version. Thanks, Ryan > >> #endif >> . = VDSO_LBASE + SIZEOF_HEADERS; > >> diff --git a/arch/arm64/kernel/vdso32/vdso.lds.S b/arch/arm64/kernel/vdso32/vdso.lds.S >> index 8d95d7d35057d..c46d18a69d1ce 100644 >> --- a/arch/arm64/kernel/vdso32/vdso.lds.S >> +++ b/arch/arm64/kernel/vdso32/vdso.lds.S >> @@ -18,9 +18,9 @@ OUTPUT_ARCH(arm) >> >> SECTIONS >> { >> - PROVIDE_HIDDEN(_vdso_data = . - __VVAR_PAGES * PAGE_SIZE); >> + PROVIDE_HIDDEN(_vdso_data = . - __VVAR_PAGES * PAGE_SIZE_MAX); >> #ifdef CONFIG_TIME_NS >> - PROVIDE_HIDDEN(_timens_data = _vdso_data + PAGE_SIZE); >> + PROVIDE_HIDDEN(_timens_data = _vdso_data + PAGE_SIZE_MAX); >> #endif >> . = VDSO_LBASE + SIZEOF_HEADERS;