From: "Thomas Weißschuh" <thomas.weissschuh@linutronix.de>
To: Andy Lutomirski <luto@kernel.org>,
Thomas Gleixner <tglx@linutronix.de>,
Vincenzo Frascino <vincenzo.frascino@arm.com>,
Arnd Bergmann <arnd@arndb.de>,
"David S. Miller" <davem@davemloft.net>,
Andreas Larsson <andreas@gaisler.com>,
Nick Alcock <nick.alcock@oracle.com>,
John Stultz <jstultz@google.com>,
Stephen Boyd <sboyd@kernel.org>,
John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>,
Shuah Khan <shuah@kernel.org>,
Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will@kernel.org>, Theodore Ts'o <tytso@mit.edu>,
"Jason A. Donenfeld" <Jason@zx2c4.com>,
Russell King <linux@armlinux.org.uk>,
Madhavan Srinivasan <maddy@linux.ibm.com>,
Michael Ellerman <mpe@ellerman.id.au>,
Nicholas Piggin <npiggin@gmail.com>,
Christophe Leroy <christophe.leroy@csgroup.eu>,
Huacai Chen <chenhuacai@kernel.org>,
WANG Xuerui <kernel@xen0n.name>,
Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
Heiko Carstens <hca@linux.ibm.com>,
Vasily Gorbik <gor@linux.ibm.com>,
Alexander Gordeev <agordeev@linux.ibm.com>,
Christian Borntraeger <borntraeger@linux.ibm.com>,
Sven Schnelle <svens@linux.ibm.com>,
Nagarathnam Muthusamy <nagarathnam.muthusamy@oracle.com>,
Shannon Nelson <sln@onemain.com>
Cc: linux-kernel@vger.kernel.org, sparclinux@vger.kernel.org,
linux-kselftest@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linuxppc-dev@lists.ozlabs.org, loongarch@lists.linux.dev,
linux-mips@vger.kernel.org, linux-s390@vger.kernel.org,
"Thomas Weißschuh" <thomas.weissschuh@linutronix.de>
Subject: [PATCH v3 23/36] vdso/datastore: Map pages through struct page
Date: Wed, 17 Sep 2025 16:00:25 +0200 [thread overview]
Message-ID: <20250917-vdso-sparc64-generic-2-v3-23-3679b1bc8ee8@linutronix.de> (raw)
In-Reply-To: <20250917-vdso-sparc64-generic-2-v3-0-3679b1bc8ee8@linutronix.de>
An upcoming change will allocate the datapages dynamically instead of as
part of the kernel image. Such pages can only be mapped through
'struct page' and not through PFNs.
Prepare for the dynamic allocation by mapping through 'struct page'.
VM_MIXEDMAP is necessary for the call to vmf_insert_page() in the timens
prefault path to work.
Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
---
lib/vdso/datastore.c | 24 +++++++++++++-----------
1 file changed, 13 insertions(+), 11 deletions(-)
diff --git a/lib/vdso/datastore.c b/lib/vdso/datastore.c
index 7377fcb6e1dfe31d02ffcae371fdf9da069ae4c1..6e5feb4a95b85f5a1cbdced7cdeddc593fcbad40 100644
--- a/lib/vdso/datastore.c
+++ b/lib/vdso/datastore.c
@@ -39,14 +39,15 @@ struct vdso_arch_data *vdso_k_arch_data = &vdso_arch_data_store.data;
static vm_fault_t vvar_fault(const struct vm_special_mapping *sm,
struct vm_area_struct *vma, struct vm_fault *vmf)
{
- struct page *timens_page = find_timens_vvar_page(vma);
- unsigned long pfn;
+ struct page *page, *timens_page;
+
+ timens_page = find_timens_vvar_page(vma);
switch (vmf->pgoff) {
case VDSO_TIME_PAGE_OFFSET:
if (!IS_ENABLED(CONFIG_GENERIC_GETTIMEOFDAY))
return VM_FAULT_SIGBUS;
- pfn = __phys_to_pfn(__pa_symbol(vdso_k_time_data));
+ page = virt_to_page(vdso_k_time_data);
if (timens_page) {
/*
* Fault in VVAR page too, since it will be accessed
@@ -56,10 +57,10 @@ static vm_fault_t vvar_fault(const struct vm_special_mapping *sm,
vm_fault_t err;
addr = vmf->address + VDSO_TIMENS_PAGE_OFFSET * PAGE_SIZE;
- err = vmf_insert_pfn(vma, addr, pfn);
+ err = vmf_insert_page(vma, addr, page);
if (unlikely(err & VM_FAULT_ERROR))
return err;
- pfn = page_to_pfn(timens_page);
+ page = timens_page;
}
break;
case VDSO_TIMENS_PAGE_OFFSET:
@@ -72,24 +73,25 @@ static vm_fault_t vvar_fault(const struct vm_special_mapping *sm,
*/
if (!IS_ENABLED(CONFIG_TIME_NS) || !timens_page)
return VM_FAULT_SIGBUS;
- pfn = __phys_to_pfn(__pa_symbol(vdso_k_time_data));
+ page = virt_to_page(vdso_k_time_data);
break;
case VDSO_RNG_PAGE_OFFSET:
if (!IS_ENABLED(CONFIG_VDSO_GETRANDOM))
return VM_FAULT_SIGBUS;
- pfn = __phys_to_pfn(__pa_symbol(vdso_k_rng_data));
+ page = virt_to_page(vdso_k_rng_data);
break;
case VDSO_ARCH_PAGES_START ... VDSO_ARCH_PAGES_END:
if (!IS_ENABLED(CONFIG_ARCH_HAS_VDSO_ARCH_DATA))
return VM_FAULT_SIGBUS;
- pfn = __phys_to_pfn(__pa_symbol(vdso_k_arch_data)) +
- vmf->pgoff - VDSO_ARCH_PAGES_START;
+ page = virt_to_page(vdso_k_arch_data) + vmf->pgoff - VDSO_ARCH_PAGES_START;
break;
default:
return VM_FAULT_SIGBUS;
}
- return vmf_insert_pfn(vma, vmf->address, pfn);
+ get_page(page);
+ vmf->page = page;
+ return 0;
}
const struct vm_special_mapping vdso_vvar_mapping = {
@@ -101,7 +103,7 @@ struct vm_area_struct *vdso_install_vvar_mapping(struct mm_struct *mm, unsigned
{
return _install_special_mapping(mm, addr, VDSO_NR_PAGES * PAGE_SIZE,
VM_READ | VM_MAYREAD | VM_IO | VM_DONTDUMP |
- VM_PFNMAP | VM_SEALED_SYSMAP,
+ VM_MIXEDMAP | VM_SEALED_SYSMAP,
&vdso_vvar_mapping);
}
--
2.51.0
next prev parent reply other threads:[~2025-09-17 14:04 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-17 14:00 [PATCH v3 00/36] sparc64: vdso: Switch to the generic vDSO library Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 01/36] selftests: vDSO: vdso_test_correctness: Handle different tv_usec types Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 02/36] arm64: vDSO: getrandom: Explicitly include asm/alternative.h Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 03/36] arm64: vDSO: gettimeofday: Explicitly include vdso/clocksource.h Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 04/36] arm64: vDSO: compat_gettimeofday: Add explicit includes Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 05/36] ARM: vdso: gettimeofday: " Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 06/36] powerpc/vdso/gettimeofday: Explicitly include vdso/time32.h Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 07/36] powerpc/vdso: Explicitly include asm/cputable.h and asm/feature-fixups.h Thomas Weißschuh
2025-09-17 14:41 ` Christophe Leroy
2025-09-17 15:21 ` Thomas Weißschuh
2025-09-17 15:23 ` Christophe Leroy
2025-09-22 2:44 ` Michael Ellerman
2025-09-17 14:00 ` [PATCH v3 08/36] LoongArch: vDSO: Explicitly include asm/vdso/vdso.h Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 09/36] MIPS: vdso: Add include guard to asm/vdso/vdso.h Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 10/36] MIPS: vdso: Explicitly include asm/vdso/vdso.h Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 11/36] random: vDSO: Add explicit includes Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 12/36] vdso/gettimeofday: " Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 13/36] vdso/helpers: Explicitly include vdso/processor.h Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 14/36] vdso/datapage: Remove inclusion of gettimeofday.h Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 15/36] vdso/datapage: Trim down unnecessary includes Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 16/36] random: vDSO: trim vDSO includes Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 17/36] random: vDSO: remove ifdeffery Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 18/36] random: vDSO: split out datapage update into helper functions Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 19/36] random: vDSO: only access vDSO datapage after random_init() Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 20/36] s390/time: Set up vDSO datapage later Thomas Weißschuh
2025-09-17 15:12 ` Heiko Carstens
2025-09-17 14:00 ` [PATCH v3 21/36] vdso/datastore: Reduce scope of some variables in vvar_fault() Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 22/36] vdso/datastore: Drop inclusion of linux/mmap_lock.h Thomas Weißschuh
2025-09-17 14:00 ` Thomas Weißschuh [this message]
2025-09-17 14:00 ` [PATCH v3 24/36] vdso/datastore: Allocate data pages dynamically Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 25/36] sparc64: vdso: Link with -z noexecstack Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 26/36] sparc64: vdso: Remove obsolete "fake section table" reservation Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 27/36] sparc64: vdso: Replace code patching with runtime conditional Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 28/36] sparc64: vdso: Move hardware counter read into header Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 29/36] sparc64: vdso: Move syscall fallbacks " Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 30/36] sparc64: vdso: Introduce vdso/processor.h Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 31/36] sparc64: vdso: Switch to the generic vDSO library Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 32/36] sparc64: vdso2c: Drop sym_vvar_start handling Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 33/36] sparc64: vdso2c: Remove symbol handling Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 34/36] sparc64: vdso: Implement clock_gettime64() Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 35/36] clocksource: remove ARCH_CLOCKSOURCE_DATA Thomas Weißschuh
2025-09-17 14:00 ` [PATCH v3 36/36] clocksource: drop include of asm/clocksource.h from linux/clocksource.h Thomas Weißschuh
2025-09-20 13:24 ` [PATCH v3 00/36] sparc64: vdso: Switch to the generic vDSO library John Paul Adrian Glaubitz
2025-09-20 14:37 ` Thomas Weißschuh
2025-09-21 5:05 ` John Paul Adrian Glaubitz
2025-09-24 7:40 ` John Paul Adrian Glaubitz
2025-09-24 8:07 ` Thomas Weißschuh
2025-09-24 8:28 ` John Paul Adrian Glaubitz
2025-09-24 11:35 ` Thomas Weißschuh
2025-09-26 13:53 ` Andreas Larsson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250917-vdso-sparc64-generic-2-v3-23-3679b1bc8ee8@linutronix.de \
--to=thomas.weissschuh@linutronix.de \
--cc=Jason@zx2c4.com \
--cc=agordeev@linux.ibm.com \
--cc=andreas@gaisler.com \
--cc=arnd@arndb.de \
--cc=borntraeger@linux.ibm.com \
--cc=catalin.marinas@arm.com \
--cc=chenhuacai@kernel.org \
--cc=christophe.leroy@csgroup.eu \
--cc=davem@davemloft.net \
--cc=glaubitz@physik.fu-berlin.de \
--cc=gor@linux.ibm.com \
--cc=hca@linux.ibm.com \
--cc=jstultz@google.com \
--cc=kernel@xen0n.name \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-mips@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=loongarch@lists.linux.dev \
--cc=luto@kernel.org \
--cc=maddy@linux.ibm.com \
--cc=mpe@ellerman.id.au \
--cc=nagarathnam.muthusamy@oracle.com \
--cc=nick.alcock@oracle.com \
--cc=npiggin@gmail.com \
--cc=sboyd@kernel.org \
--cc=shuah@kernel.org \
--cc=sln@onemain.com \
--cc=sparclinux@vger.kernel.org \
--cc=svens@linux.ibm.com \
--cc=tglx@linutronix.de \
--cc=tsbogend@alpha.franken.de \
--cc=tytso@mit.edu \
--cc=vincenzo.frascino@arm.com \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).