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.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT 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 EDE60C433E1 for ; Wed, 1 Jul 2020 20:31:02 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id B576220853 for ; Wed, 1 Jul 2020 20:31:02 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="kppzAt5c"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="RTw3mcRS" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B576220853 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-Id:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=7oi6cxNkUduJf9M2TH2Ny232F75qGnKDhs6kKUkeSaU=; b=kppzAt5c+9whtIv41HYJclILN 0OTFPSLmIrubBJWniH3v8Z37RFueBpR4JAqJ4uUrnSBJ0Uaous0S+YU4a0JUtbTHATR2zm3MY3X+I IG+/y1fumwSh4W8Y3TdRq/JsldMzcpRAO/s+G4O47WslNDliz2yf+RhkDqUuVNxhQqHTaiNBEVYdr txKpgpHUoh2Kuetq5G1FnHGb609fpFd/9fQGPzdt693k/BsQT0rhpYnqVboDZEG8HMtveOOijZRYr NzHRwxKJAQluooOJedd+bKDIblDfTbKXLamtPeDhgUJws11zHTZewVzwr2gEptAsMZdAzWzGn5UrP GoL0gePgg==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jqjMY-0004hW-UR; Wed, 01 Jul 2020 20:29:46 +0000 Received: from mail.kernel.org ([198.145.29.99]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jqjMO-0004cL-Li for linux-arm-kernel@lists.infradead.org; Wed, 01 Jul 2020 20:29:37 +0000 Received: from localhost (fw-tnat.cambridge.arm.com [217.140.96.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 7B6162085B; Wed, 1 Jul 2020 20:29:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1593635376; bh=Vs+BhgQg1M9glWIm3/WlYfL4LcrNrMeCPPfLg5XNYQk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RTw3mcRSbK8TaBHPw7gCliuTUaZwsBpZYc+GKntO+caCr5XRSrjJWlcabOwB1TVdF iuGsNiWrCB8kxZ9DiuBB+xDJQS+H6F7Wq35D5ckipn/KHFiVYZqRrEoft2nvqXkghv Fxvc92jsKXuWBvIgVVXxzVcPXEOPwD0qycJj4sbM= From: Mark Brown To: Catalin Marinas , Will Deacon , Marc Zyngier Subject: [PATCH v2 10/11] arm64: vdso: Support multiple pages of vDSO data Date: Wed, 1 Jul 2020 21:28:45 +0100 Message-Id: <20200701202846.54648-11-broonie@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200701202846.54648-1-broonie@kernel.org> References: <20200701202846.54648-1-broonie@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200701_162936_809630_2D9CE484 X-CRM114-Status: GOOD ( 16.92 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Brown , Andrei Vagin , Vincenzo Frascino , linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org In order to provide per-CPU data for systems with larger numbers of CPUs we need multiple data pages for the vDSO, exactly how many will depend on the page size and the maximum number of CPUs the kernel is configured to support. Since the vDSO references the data via a symbol defined in the linker script we need to be able to reference the sizes of structures defined in C which appears not to be something we have sensible support for. Handle this by defining magic numbers and using BUILD_BUG_ON() which checks that the numbers are accurate, this is rather distasteful but works. Currently the patch duplicates CS_BASES, with the hard coding of struct sizes it felt like more trouble than it was worth to move it into an assembler clean header. Signed-off-by: Mark Brown --- arch/arm64/include/asm/vdso.h | 4 ++++ arch/arm64/kernel/vdso.c | 2 ++ arch/arm64/kernel/vdso/vdso.lds.S | 2 +- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/arch/arm64/include/asm/vdso.h b/arch/arm64/include/asm/vdso.h index c7edf7a7491f..21e35d79022a 100644 --- a/arch/arm64/include/asm/vdso.h +++ b/arch/arm64/include/asm/vdso.h @@ -18,6 +18,10 @@ */ #define VDSO_BASE_DATA_SIZE 240 #define VDSO_CS_BASES 2 +#define VDSO_PER_CPU_SIZE 8 +#define VDSO_DATA_SIZE ((VDSO_PER_CPU_SIZE * CONFIG_NR_CPUS) \ + + (VDSO_BASE_DATA_SIZE * VDSO_CS_BASES)) +#define VDSO_DATA_PAGES ((VDSO_DATA_SIZE / PAGE_SIZE) + 1) #ifndef __ASSEMBLY__ diff --git a/arch/arm64/kernel/vdso.c b/arch/arm64/kernel/vdso.c index e1146f424e6f..b0899591d91e 100644 --- a/arch/arm64/kernel/vdso.c +++ b/arch/arm64/kernel/vdso.c @@ -112,6 +112,8 @@ static int __vdso_init(enum vdso_abi abi) } BUILD_BUG_ON(sizeof(struct vdso_data) != VDSO_BASE_DATA_SIZE); + BUILD_BUG_ON(CS_BASES != VDSO_CS_BASES); + BUILD_BUG_ON(sizeof(struct vdso_cpu_data) != VDSO_PER_CPU_SIZE); /* * We ensure that the vDSO text is page aligned and an exact diff --git a/arch/arm64/kernel/vdso/vdso.lds.S b/arch/arm64/kernel/vdso/vdso.lds.S index c2fd94f14b94..7ee43b149bf9 100644 --- a/arch/arm64/kernel/vdso/vdso.lds.S +++ b/arch/arm64/kernel/vdso/vdso.lds.S @@ -17,7 +17,7 @@ OUTPUT_ARCH(aarch64) SECTIONS { - PROVIDE(_vdso_data = . - PAGE_SIZE); + PROVIDE(_vdso_data = . - (VDSO_DATA_PAGES * PAGE_SIZE)); . = VDSO_LBASE + SIZEOF_HEADERS; .hash : { *(.hash) } :text -- 2.20.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel