From patchwork Fri Jan 10 15:23:39 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Thomas_Wei=C3=9Fschuh?= X-Patchwork-Id: 13935031 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 AF925E77188 for ; Fri, 10 Jan 2025 15:34:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Cc:To: Content-Transfer-Encoding:Content-Type:MIME-Version:Message-Id:Date:Subject: From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=UI7XVJHwyBBPQMiPL+ZamFg3pb9rD7DgDNZEm6y13nA=; b=M52lRmNh9r7cHJ ZI+mUGHRGXe2PbAf26kScHWRy/DU8rQ724kXjsU75N0+MwzmkL80IG2uGwfbCWTXDfVLlWtCQUpO2 9awo/XflHBtJuKFOqYdtsmDCPZFt23uVKrwxqKrhP73baYMwr7HfgTF1uUBgqOZXxyCLqKp6UzEPo rAa11XIS6nMM7HFflz/glVPPOoxdpdFCY1i42fP0jVzPHUmXgOPmUB/qWed5rU5+oPCnXbsLwyb8+ 1BTnyfWjh+Z3pKGS2NwuqjCswZ3fxrr9wjz1MAix8D+Ix5R9jnx7VLPJOi3J75t8QKYVdh2Rd13aW +c/p+//oZgxg0/K43RWg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tWH1M-0000000FxdH-1ktd; Fri, 10 Jan 2025 15:34:00 +0000 Received: from galois.linutronix.de ([2a0a:51c0:0:12e:550::1]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tWGrc-0000000Ftgq-3ozD; Fri, 10 Jan 2025 15:23:59 +0000 From: =?utf-8?q?Thomas_Wei=C3=9Fschuh?= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1736522631; h=from:from: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; bh=UI7XVJHwyBBPQMiPL+ZamFg3pb9rD7DgDNZEm6y13nA=; b=uY/ax7AL7Plx4ur9D/Yp2YdgMZ61KuqsU8wMKpwGRge3O2jVFI0Z3t9dX7gU6IQXJsUJA1 ugdrWlHNISgjE4+Hhq6goOTvD9ASfrQGoJUMBS5P+h+WbJsPpZ0psPlr9r16pR3800n3k0 b/dkZNI8LbC1PryxZqGBIXMGRYIKjFZHh+B2VvLOEfVTWVY4FG3kkQ6D+cv7wqr12ii2o4 CI7LGNlt7G5l4qJc0R5F41H0f/Sdg1V1TSqK1ePP8loNWbtBX/z1JB96qRAmv9/jU+yPC+ 7D/X1OHtbEzIQ/QXcERVbejzF7kMjtLVdnl+2f7yRYSupLUNPSAsplGsPFwnpQ== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1736522631; h=from:from: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; bh=UI7XVJHwyBBPQMiPL+ZamFg3pb9rD7DgDNZEm6y13nA=; b=E/9rzHbalg8TqlnMyHo4JH/y16nchoJm56KUN1rXmB0MXD6E0TNwmPoDZrCfP7giNrWyGB of7HGIQWEzooasCA== Subject: [PATCH v2 00/18] vDSO: Introduce generic data storage Date: Fri, 10 Jan 2025 16:23:39 +0100 Message-Id: <20250110-vdso-store-rng-v2-0-350c9179bbf1@linutronix.de> MIME-Version: 1.0 X-B4-Tracking: v=1; b=H4sIAHw7gWcC/13MwQ6CMAzG8VchPVuzDoXgifcwHIAVaGI2s+GCI Xt3B0eP/6bfb4fAXjjAo9jBc5QgzubQlwLGpbczo5jcoJW+qYYIowkOw+o8o7czVqruSzM2rO4 K8ujteZLtBJ9d7kWO3+/pRzquJ0Waqn8qEiqc6p4NDWYoB92+xH5W76xsV8PQpZR+f1NTK7AAA AA= X-Change-ID: 20240911-vdso-store-rng-607a3dc9e050 To: "James E.J. Bottomley" , Helge Deller , Andy Lutomirski , Thomas Gleixner , Vincenzo Frascino , Anna-Maria Behnsen , Frederic Weisbecker , Andrew Morton , Catalin Marinas , Will Deacon , Theodore Ts'o , "Jason A. Donenfeld" , Paul Walmsley , Palmer Dabbelt , Albert Ou , Huacai Chen , WANG Xuerui , Russell King , Heiko Carstens , Vasily Gorbik , Alexander Gordeev , Christian Borntraeger , Sven Schnelle , Thomas Bogendoerfer , Michael Ellerman , Nicholas Piggin , Christophe Leroy , Naveen N Rao , Madhavan Srinivasan , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" , Arnd Bergmann , Guo Ren Cc: linux-parisc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-riscv@lists.infradead.org, loongarch@lists.linux.dev, linux-s390@vger.kernel.org, linux-mips@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-arch@vger.kernel.org, Nam Cao , =?utf-8?q?Thom?= =?utf-8?q?as_Wei=C3=9Fschuh?= , linux-csky@vger.kernel.org X-Developer-Signature: v=1; a=ed25519-sha256; t=1736522629; l=9279; i=thomas.weissschuh@linutronix.de; s=20240209; h=from:subject:message-id; bh=gHW/zEEmiS5AuvJBD42Grk7gAg6JiH501MsDcMhU8a8=; b=ZiIr16RiQfjdFdicYH3uLXIHVrt2Mk4E5DqIKDdiPYFwiRGM5J08v4FNlMJIgrpRpL1kM0aSg tJm8A7ZCaa0BZVnMfK0zy2WggTs4ngbNYpeobNqgVuWNovXsc8ixb2s X-Developer-Key: i=thomas.weissschuh@linutronix.de; a=ed25519; pk=pfvxvpFUDJV2h2nY0FidLUml22uGLSjByFbM6aqQQws= X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250110_072357_244903_69EDDB9B X-CRM114-Status: GOOD ( 15.18 ) 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: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Currently each architecture defines the setup of the vDSO data page on its own, mostly through copy-and-paste from some other architecture. Extend the existing generic vDSO implementation to also provide generic data storage. This removes duplicated code and paves the way for further changes to the generic vDSO implementation without having to go through a lot of per-architecture changes. Based on v6.13-rc1 and intended to be merged through the tip tree. This also provides the basis for some generic vDSO reworks. The commits from this series and the upcoming reworks can be seen at: https://git.kernel.org/pub/scm/linux/kernel/git/thomas.weissschuh/linux.git/log/?h=vdso/store --- Changes in v2: - Drop __arch_get_vdso_u_timens_data() (Christophe) - Move to lib/vdso/ (Christophe) - Rename __ppc_get_vdso_u_timens_data() to __arch_get_vdso_u_timens_data(), same for other hooks (Christophe) - Fix build for architectures with time-less vDSO, like riscv32. (Conor) - Explicitly fix bug around x86 vclock pages - Link to v1: https://lore.kernel.org/r/20241216-vdso-store-rng-v1-0-f7aed1bdb3b2@linutronix.de --- Thomas Weißschuh (18): x86/vdso: Fix latent bug in vclock_pages calculation parisc: Remove unused symbol vdso_data vdso: Introduce vdso/align.h vdso: Rename included Makefile vdso: Add generic time data storage vdso: Add generic random data storage vdso: Add generic architecture-specific data storage arm64: vdso: Switch to generic storage implementation riscv: vdso: Switch to generic storage implementation LoongArch: vDSO: Switch to generic storage implementation arm: vdso: Switch to generic storage implementation s390/vdso: Switch to generic storage implementation MIPS: vdso: Switch to generic storage implementation powerpc/vdso: Switch to generic storage implementation x86/vdso: Switch to generic storage implementation x86/vdso/vdso2c: Remove page handling vdso: Remove remnants of architecture-specific random state storage vdso: Remove remnants of architecture-specific time storage arch/Kconfig | 4 + arch/arm/include/asm/vdso.h | 2 + arch/arm/include/asm/vdso/gettimeofday.h | 7 +- arch/arm/include/asm/vdso/vsyscall.h | 12 +- arch/arm/kernel/asm-offsets.c | 4 - arch/arm/kernel/vdso.c | 34 ++---- arch/arm/mm/Kconfig | 1 + arch/arm/vdso/Makefile | 2 +- arch/arm/vdso/vdso.lds.S | 4 +- arch/arm64/Kconfig | 1 + arch/arm64/include/asm/vdso.h | 2 +- arch/arm64/include/asm/vdso/compat_gettimeofday.h | 36 ++---- arch/arm64/include/asm/vdso/getrandom.h | 12 -- arch/arm64/include/asm/vdso/gettimeofday.h | 16 +-- arch/arm64/include/asm/vdso/vsyscall.h | 25 +--- arch/arm64/kernel/vdso.c | 90 +------------- arch/arm64/kernel/vdso/Makefile | 2 +- arch/arm64/kernel/vdso/vdso.lds.S | 7 +- arch/arm64/kernel/vdso32/Makefile | 2 +- arch/arm64/kernel/vdso32/vdso.lds.S | 7 +- arch/csky/kernel/vdso/Makefile | 2 +- arch/loongarch/Kconfig | 2 + arch/loongarch/include/asm/vdso.h | 1 - arch/loongarch/include/asm/vdso/arch_data.h | 25 ++++ arch/loongarch/include/asm/vdso/getrandom.h | 5 - arch/loongarch/include/asm/vdso/gettimeofday.h | 14 +-- arch/loongarch/include/asm/vdso/vdso.h | 38 +----- arch/loongarch/include/asm/vdso/vsyscall.h | 17 --- arch/loongarch/kernel/asm-offsets.c | 2 +- arch/loongarch/kernel/vdso.c | 92 +-------------- arch/loongarch/vdso/Makefile | 2 +- arch/loongarch/vdso/vdso.lds.S | 8 +- arch/loongarch/vdso/vgetcpu.c | 12 +- arch/mips/Kconfig | 1 + arch/mips/include/asm/vdso/gettimeofday.h | 9 +- arch/mips/include/asm/vdso/vdso.h | 19 ++- arch/mips/include/asm/vdso/vsyscall.h | 14 +-- arch/mips/kernel/vdso.c | 47 +++----- arch/mips/vdso/Makefile | 2 +- arch/mips/vdso/vdso.lds.S | 5 +- arch/parisc/include/asm/vdso.h | 2 - arch/parisc/kernel/vdso32/Makefile | 2 +- arch/parisc/kernel/vdso64/Makefile | 2 +- arch/powerpc/Kconfig | 2 + arch/powerpc/include/asm/vdso.h | 1 + arch/powerpc/include/asm/vdso/arch_data.h | 37 ++++++ arch/powerpc/include/asm/vdso/getrandom.h | 11 +- arch/powerpc/include/asm/vdso/gettimeofday.h | 29 ++--- arch/powerpc/include/asm/vdso/vsyscall.h | 13 --- arch/powerpc/include/asm/vdso_datapage.h | 44 +------ arch/powerpc/kernel/asm-offsets.c | 1 - arch/powerpc/kernel/time.c | 2 +- arch/powerpc/kernel/vdso.c | 115 ++---------------- arch/powerpc/kernel/vdso/Makefile | 2 +- arch/powerpc/kernel/vdso/cacheflush.S | 2 +- arch/powerpc/kernel/vdso/datapage.S | 4 +- arch/powerpc/kernel/vdso/gettimeofday.S | 4 +- arch/powerpc/kernel/vdso/vdso32.lds.S | 4 +- arch/powerpc/kernel/vdso/vdso64.lds.S | 4 +- arch/powerpc/kernel/vdso/vgettimeofday.c | 14 +-- arch/riscv/Kconfig | 3 +- arch/riscv/include/asm/vdso.h | 2 +- .../include/asm/vdso/{time_data.h => arch_data.h} | 8 +- arch/riscv/include/asm/vdso/gettimeofday.h | 14 +-- arch/riscv/include/asm/vdso/vsyscall.h | 9 -- arch/riscv/kernel/sys_hwprobe.c | 3 +- arch/riscv/kernel/vdso.c | 90 +------------- arch/riscv/kernel/vdso/Makefile | 2 +- arch/riscv/kernel/vdso/hwprobe.c | 6 +- arch/riscv/kernel/vdso/vdso.lds.S | 7 +- arch/s390/Kconfig | 1 + arch/s390/include/asm/vdso.h | 4 +- arch/s390/include/asm/vdso/getrandom.h | 12 -- arch/s390/include/asm/vdso/gettimeofday.h | 15 +-- arch/s390/include/asm/vdso/vsyscall.h | 20 ---- arch/s390/kernel/time.c | 6 +- arch/s390/kernel/vdso.c | 97 +--------------- arch/s390/kernel/vdso32/Makefile | 2 +- arch/s390/kernel/vdso32/vdso32.lds.S | 7 +- arch/s390/kernel/vdso64/Makefile | 2 +- arch/s390/kernel/vdso64/vdso64.lds.S | 8 +- arch/x86/Kconfig | 1 + arch/x86/entry/vdso/Makefile | 2 +- arch/x86/entry/vdso/vdso-layout.lds.S | 10 +- arch/x86/entry/vdso/vdso2c.c | 21 ---- arch/x86/entry/vdso/vdso2c.h | 20 ---- arch/x86/entry/vdso/vma.c | 125 ++------------------ arch/x86/include/asm/vdso.h | 6 - arch/x86/include/asm/vdso/getrandom.h | 10 -- arch/x86/include/asm/vdso/gettimeofday.h | 25 +--- arch/x86/include/asm/vdso/vsyscall.h | 23 +--- drivers/char/random.c | 6 +- include/asm-generic/vdso/vsyscall.h | 23 ++-- include/linux/align.h | 10 +- include/linux/time_namespace.h | 2 - include/linux/vdso_datastore.h | 10 ++ include/vdso/align.h | 15 +++ include/vdso/datapage.h | 75 +++++++++--- include/vdso/helpers.h | 8 +- kernel/time/namespace.c | 12 +- kernel/time/vsyscall.c | 19 ++- lib/Makefile | 2 +- lib/vdso/Kconfig | 5 + lib/vdso/Makefile | 19 +-- lib/vdso/Makefile.include | 18 +++ lib/vdso/datastore.c | 129 +++++++++++++++++++++ lib/vdso/getrandom.c | 8 +- lib/vdso/gettimeofday.c | 74 +++++++----- 108 files changed, 602 insertions(+), 1276 deletions(-) --- base-commit: 40384c840ea1944d7c5a392e8975ed088ecf0b37 change-id: 20240911-vdso-store-rng-607a3dc9e050 Best regards,