mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "tip-bot2 for Thomas Weißschuh" <tip-bot2@linutronix.de>
To: linux-tip-commits@vger.kernel.org
Cc: Thomas Gleixner <tglx@linutronix.de>,
	thomas.weissschuh@linutronix.de,
	Andreas Larsson <andreas@gaisler.com>,
	x86@kernel.org, linux-kernel@vger.kernel.org
Subject: [tip: timers/vdso] sparc64: vdso: Replace code patching with runtime conditional
Date: Sat, 01 Nov 2025 19:47:39 -0000	[thread overview]
Message-ID: <176202645935.2601451.18090397675824023670.tip-bot2@tip-bot2> (raw)
In-Reply-To: <20251014-vdso-sparc64-generic-2-v4-27-e0607bf49dea@linutronix.de>

The following commit has been merged into the timers/vdso branch of tip:

Commit-ID:     05aac329b1c78b9c6b17133c2f4550f641666d1b
Gitweb:        https://git.kernel.org/tip/05aac329b1c78b9c6b17133c2f4550f641666d1b
Author:        Thomas Weißschuh <thomas.weissschuh@linutronix.de>
AuthorDate:    Tue, 14 Oct 2025 08:49:13 +02:00
Committer:     Thomas Gleixner <tglx@linutronix.de>
CommitterDate: Sat, 01 Nov 2025 20:44:07 +01:00

sparc64: vdso: Replace code patching with runtime conditional

The patching logic is unnecessarily complicated and stands in the way of
the adoption of the generic vDSO framework.

Replace it by a simple runtime switch, similar to other architectures.

Suggested-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Andreas Larsson <andreas@gaisler.com>
Reviewed-by: Andreas Larsson <andreas@gaisler.com>
Acked-by: Andreas Larsson <andreas@gaisler.com>
Link: https://lore.kernel.org/lkml/87ecu9tfhw.ffs@tglx/
Link: https://patch.msgid.link/20251014-vdso-sparc64-generic-2-v4-27-e0607bf49dea@linutronix.de
---
 arch/sparc/vdso/vclock_gettime.c    | 112 +---------------
 arch/sparc/vdso/vdso.lds.S          |   2 +-
 arch/sparc/vdso/vdso32/vdso32.lds.S |   2 +-
 arch/sparc/vdso/vma.c               | 204 +---------------------------
 4 files changed, 4 insertions(+), 316 deletions(-)

diff --git a/arch/sparc/vdso/vclock_gettime.c b/arch/sparc/vdso/vclock_gettime.c
index 7960780..643608b 100644
--- a/arch/sparc/vdso/vclock_gettime.c
+++ b/arch/sparc/vdso/vclock_gettime.c
@@ -148,17 +148,11 @@ notrace static __always_inline u64 vgetsns(struct vvar_data *vvar)
 	u64 v;
 	u64 cycles;
 
-	cycles = vread_tick();
-	v = (cycles - vvar->clock.cycle_last) & vvar->clock.mask;
-	return v * vvar->clock.mult;
-}
-
-notrace static __always_inline u64 vgetsns_stick(struct vvar_data *vvar)
-{
-	u64 v;
-	u64 cycles;
+	if (likely(vvar->vclock_mode == VCLOCK_STICK))
+		cycles = vread_tick_stick();
+	else
+		cycles = vread_tick();
 
-	cycles = vread_tick_stick();
 	v = (cycles - vvar->clock.cycle_last) & vvar->clock.mask;
 	return v * vvar->clock.mult;
 }
@@ -183,26 +177,6 @@ notrace static __always_inline int do_realtime(struct vvar_data *vvar,
 	return 0;
 }
 
-notrace static __always_inline int do_realtime_stick(struct vvar_data *vvar,
-						     struct __kernel_old_timespec *ts)
-{
-	unsigned long seq;
-	u64 ns;
-
-	do {
-		seq = vvar_read_begin(vvar);
-		ts->tv_sec = vvar->wall_time_sec;
-		ns = vvar->wall_time_snsec;
-		ns += vgetsns_stick(vvar);
-		ns = __shr64(ns, vvar->clock.shift);
-	} while (unlikely(vvar_read_retry(vvar, seq)));
-
-	ts->tv_sec += __iter_div_u64_rem(ns, NSEC_PER_SEC, &ns);
-	ts->tv_nsec = ns;
-
-	return 0;
-}
-
 notrace static __always_inline int do_monotonic(struct vvar_data *vvar,
 						struct __kernel_old_timespec *ts)
 {
@@ -223,26 +197,6 @@ notrace static __always_inline int do_monotonic(struct vvar_data *vvar,
 	return 0;
 }
 
-notrace static __always_inline int do_monotonic_stick(struct vvar_data *vvar,
-						      struct __kernel_old_timespec *ts)
-{
-	unsigned long seq;
-	u64 ns;
-
-	do {
-		seq = vvar_read_begin(vvar);
-		ts->tv_sec = vvar->monotonic_time_sec;
-		ns = vvar->monotonic_time_snsec;
-		ns += vgetsns_stick(vvar);
-		ns = __shr64(ns, vvar->clock.shift);
-	} while (unlikely(vvar_read_retry(vvar, seq)));
-
-	ts->tv_sec += __iter_div_u64_rem(ns, NSEC_PER_SEC, &ns);
-	ts->tv_nsec = ns;
-
-	return 0;
-}
-
 notrace static int do_realtime_coarse(struct vvar_data *vvar,
 				      struct __kernel_old_timespec *ts)
 {
@@ -299,31 +253,6 @@ clock_gettime(clockid_t, struct __kernel_old_timespec *)
 	__attribute__((weak, alias("__vdso_clock_gettime")));
 
 notrace int
-__vdso_clock_gettime_stick(clockid_t clock, struct __kernel_old_timespec *ts)
-{
-	struct vvar_data *vvd = get_vvar_data();
-
-	switch (clock) {
-	case CLOCK_REALTIME:
-		if (unlikely(vvd->vclock_mode == VCLOCK_NONE))
-			break;
-		return do_realtime_stick(vvd, ts);
-	case CLOCK_MONOTONIC:
-		if (unlikely(vvd->vclock_mode == VCLOCK_NONE))
-			break;
-		return do_monotonic_stick(vvd, ts);
-	case CLOCK_REALTIME_COARSE:
-		return do_realtime_coarse(vvd, ts);
-	case CLOCK_MONOTONIC_COARSE:
-		return do_monotonic_coarse(vvd, ts);
-	}
-	/*
-	 * Unknown clock ID ? Fall back to the syscall.
-	 */
-	return vdso_fallback_gettime(clock, ts);
-}
-
-notrace int
 __vdso_gettimeofday(struct __kernel_old_timeval *tv, struct timezone *tz)
 {
 	struct vvar_data *vvd = get_vvar_data();
@@ -358,36 +287,3 @@ __vdso_gettimeofday(struct __kernel_old_timeval *tv, struct timezone *tz)
 int
 gettimeofday(struct __kernel_old_timeval *, struct timezone *)
 	__attribute__((weak, alias("__vdso_gettimeofday")));
-
-notrace int
-__vdso_gettimeofday_stick(struct __kernel_old_timeval *tv, struct timezone *tz)
-{
-	struct vvar_data *vvd = get_vvar_data();
-
-	if (likely(vvd->vclock_mode != VCLOCK_NONE)) {
-		if (likely(tv != NULL)) {
-			union tstv_t {
-				struct __kernel_old_timespec ts;
-				struct __kernel_old_timeval tv;
-			} *tstv = (union tstv_t *) tv;
-			do_realtime_stick(vvd, &tstv->ts);
-			/*
-			 * Assign before dividing to ensure that the division is
-			 * done in the type of tv_usec, not tv_nsec.
-			 *
-			 * There cannot be > 1 billion usec in a second:
-			 * do_realtime() has already distributed such overflow
-			 * into tv_sec.  So we can assign it to an int safely.
-			 */
-			tstv->tv.tv_usec = tstv->ts.tv_nsec;
-			tstv->tv.tv_usec /= 1000;
-		}
-		if (unlikely(tz != NULL)) {
-			/* Avoid memcpy. Some old compilers fail to inline it */
-			tz->tz_minuteswest = vvd->tz_minuteswest;
-			tz->tz_dsttime = vvd->tz_dsttime;
-		}
-		return 0;
-	}
-	return vdso_fallback_gettimeofday(tv, tz);
-}
diff --git a/arch/sparc/vdso/vdso.lds.S b/arch/sparc/vdso/vdso.lds.S
index 629ab69..f3caa29 100644
--- a/arch/sparc/vdso/vdso.lds.S
+++ b/arch/sparc/vdso/vdso.lds.S
@@ -18,10 +18,8 @@ VERSION {
 	global:
 		clock_gettime;
 		__vdso_clock_gettime;
-		__vdso_clock_gettime_stick;
 		gettimeofday;
 		__vdso_gettimeofday;
-		__vdso_gettimeofday_stick;
 	local: *;
 	};
 }
diff --git a/arch/sparc/vdso/vdso32/vdso32.lds.S b/arch/sparc/vdso/vdso32/vdso32.lds.S
index 218930f..53575ee 100644
--- a/arch/sparc/vdso/vdso32/vdso32.lds.S
+++ b/arch/sparc/vdso/vdso32/vdso32.lds.S
@@ -17,10 +17,8 @@ VERSION {
 	global:
 		clock_gettime;
 		__vdso_clock_gettime;
-		__vdso_clock_gettime_stick;
 		gettimeofday;
 		__vdso_gettimeofday;
-		__vdso_gettimeofday_stick;
 	local: *;
 	};
 }
diff --git a/arch/sparc/vdso/vma.c b/arch/sparc/vdso/vma.c
index bab7a59..582d84e 100644
--- a/arch/sparc/vdso/vma.c
+++ b/arch/sparc/vdso/vma.c
@@ -42,203 +42,6 @@ static struct vm_special_mapping vdso_mapping32 = {
 
 struct vvar_data *vvar_data;
 
-struct vdso_elfinfo32 {
-	Elf32_Ehdr	*hdr;
-	Elf32_Sym	*dynsym;
-	unsigned long	dynsymsize;
-	const char	*dynstr;
-	unsigned long	text;
-};
-
-struct vdso_elfinfo64 {
-	Elf64_Ehdr	*hdr;
-	Elf64_Sym	*dynsym;
-	unsigned long	dynsymsize;
-	const char	*dynstr;
-	unsigned long	text;
-};
-
-struct vdso_elfinfo {
-	union {
-		struct vdso_elfinfo32 elf32;
-		struct vdso_elfinfo64 elf64;
-	} u;
-};
-
-static void *one_section64(struct vdso_elfinfo64 *e, const char *name,
-			   unsigned long *size)
-{
-	const char *snames;
-	Elf64_Shdr *shdrs;
-	unsigned int i;
-
-	shdrs = (void *)e->hdr + e->hdr->e_shoff;
-	snames = (void *)e->hdr + shdrs[e->hdr->e_shstrndx].sh_offset;
-	for (i = 1; i < e->hdr->e_shnum; i++) {
-		if (!strcmp(snames+shdrs[i].sh_name, name)) {
-			if (size)
-				*size = shdrs[i].sh_size;
-			return (void *)e->hdr + shdrs[i].sh_offset;
-		}
-	}
-	return NULL;
-}
-
-static int find_sections64(const struct vdso_image *image, struct vdso_elfinfo *_e)
-{
-	struct vdso_elfinfo64 *e = &_e->u.elf64;
-
-	e->hdr = image->data;
-	e->dynsym = one_section64(e, ".dynsym", &e->dynsymsize);
-	e->dynstr = one_section64(e, ".dynstr", NULL);
-
-	if (!e->dynsym || !e->dynstr) {
-		pr_err("VDSO64: Missing symbol sections.\n");
-		return -ENODEV;
-	}
-	return 0;
-}
-
-static Elf64_Sym *find_sym64(const struct vdso_elfinfo64 *e, const char *name)
-{
-	unsigned int i;
-
-	for (i = 0; i < (e->dynsymsize / sizeof(Elf64_Sym)); i++) {
-		Elf64_Sym *s = &e->dynsym[i];
-		if (s->st_name == 0)
-			continue;
-		if (!strcmp(e->dynstr + s->st_name, name))
-			return s;
-	}
-	return NULL;
-}
-
-static int patchsym64(struct vdso_elfinfo *_e, const char *orig,
-		      const char *new)
-{
-	struct vdso_elfinfo64 *e = &_e->u.elf64;
-	Elf64_Sym *osym = find_sym64(e, orig);
-	Elf64_Sym *nsym = find_sym64(e, new);
-
-	if (!nsym || !osym) {
-		pr_err("VDSO64: Missing symbols.\n");
-		return -ENODEV;
-	}
-	osym->st_value = nsym->st_value;
-	osym->st_size = nsym->st_size;
-	osym->st_info = nsym->st_info;
-	osym->st_other = nsym->st_other;
-	osym->st_shndx = nsym->st_shndx;
-
-	return 0;
-}
-
-static void *one_section32(struct vdso_elfinfo32 *e, const char *name,
-			   unsigned long *size)
-{
-	const char *snames;
-	Elf32_Shdr *shdrs;
-	unsigned int i;
-
-	shdrs = (void *)e->hdr + e->hdr->e_shoff;
-	snames = (void *)e->hdr + shdrs[e->hdr->e_shstrndx].sh_offset;
-	for (i = 1; i < e->hdr->e_shnum; i++) {
-		if (!strcmp(snames+shdrs[i].sh_name, name)) {
-			if (size)
-				*size = shdrs[i].sh_size;
-			return (void *)e->hdr + shdrs[i].sh_offset;
-		}
-	}
-	return NULL;
-}
-
-static int find_sections32(const struct vdso_image *image, struct vdso_elfinfo *_e)
-{
-	struct vdso_elfinfo32 *e = &_e->u.elf32;
-
-	e->hdr = image->data;
-	e->dynsym = one_section32(e, ".dynsym", &e->dynsymsize);
-	e->dynstr = one_section32(e, ".dynstr", NULL);
-
-	if (!e->dynsym || !e->dynstr) {
-		pr_err("VDSO32: Missing symbol sections.\n");
-		return -ENODEV;
-	}
-	return 0;
-}
-
-static Elf32_Sym *find_sym32(const struct vdso_elfinfo32 *e, const char *name)
-{
-	unsigned int i;
-
-	for (i = 0; i < (e->dynsymsize / sizeof(Elf32_Sym)); i++) {
-		Elf32_Sym *s = &e->dynsym[i];
-		if (s->st_name == 0)
-			continue;
-		if (!strcmp(e->dynstr + s->st_name, name))
-			return s;
-	}
-	return NULL;
-}
-
-static int patchsym32(struct vdso_elfinfo *_e, const char *orig,
-		      const char *new)
-{
-	struct vdso_elfinfo32 *e = &_e->u.elf32;
-	Elf32_Sym *osym = find_sym32(e, orig);
-	Elf32_Sym *nsym = find_sym32(e, new);
-
-	if (!nsym || !osym) {
-		pr_err("VDSO32: Missing symbols.\n");
-		return -ENODEV;
-	}
-	osym->st_value = nsym->st_value;
-	osym->st_size = nsym->st_size;
-	osym->st_info = nsym->st_info;
-	osym->st_other = nsym->st_other;
-	osym->st_shndx = nsym->st_shndx;
-
-	return 0;
-}
-
-static int find_sections(const struct vdso_image *image, struct vdso_elfinfo *e,
-			 bool elf64)
-{
-	if (elf64)
-		return find_sections64(image, e);
-	else
-		return find_sections32(image, e);
-}
-
-static int patch_one_symbol(struct vdso_elfinfo *e, const char *orig,
-			    const char *new_target, bool elf64)
-{
-	if (elf64)
-		return patchsym64(e, orig, new_target);
-	else
-		return patchsym32(e, orig, new_target);
-}
-
-static int stick_patch(const struct vdso_image *image, struct vdso_elfinfo *e, bool elf64)
-{
-	int err;
-
-	err = find_sections(image, e, elf64);
-	if (err)
-		return err;
-
-	err = patch_one_symbol(e,
-			       "__vdso_gettimeofday",
-			       "__vdso_gettimeofday_stick", elf64);
-	if (err)
-		return err;
-
-	return patch_one_symbol(e,
-				"__vdso_clock_gettime",
-				"__vdso_clock_gettime_stick", elf64);
-	return 0;
-}
-
 /*
  * Allocate pages for the vdso and vvar, and copy in the vdso text from the
  * kernel image.
@@ -250,15 +53,8 @@ static int __init init_vdso_image(const struct vdso_image *image,
 	int cnpages = (image->size) / PAGE_SIZE;
 	struct page *dp, **dpp = NULL;
 	struct page *cp, **cpp = NULL;
-	struct vdso_elfinfo ei;
 	int i, dnpages = 0;
 
-	if (tlb_type != spitfire) {
-		int err = stick_patch(image, &ei, elf64);
-		if (err)
-			return err;
-	}
-
 	/*
 	 * First, the vdso text.  This is initialied data, an integral number of
 	 * pages long.

  reply	other threads:[~2025-11-01 19:47 UTC|newest]

Thread overview: 91+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-14  6:48 [PATCH v4 00/35] sparc64: vdso: Switch to the generic vDSO library Thomas Weißschuh
2025-10-14  6:48 ` [PATCH v4 01/35] selftests: vDSO: vdso_test_correctness: Handle different tv_usec types Thomas Weißschuh
2025-11-01 19:48   ` [tip: timers/vdso] " tip-bot2 for Thomas Weißschuh
2025-10-14  6:48 ` [PATCH v4 02/35] arm64: vDSO: getrandom: Explicitly include asm/alternative.h Thomas Weißschuh
2025-11-01 19:48   ` [tip: timers/vdso] " tip-bot2 for Thomas Weißschuh
2025-10-14  6:48 ` [PATCH v4 03/35] arm64: vDSO: gettimeofday: Explicitly include vdso/clocksource.h Thomas Weißschuh
2025-11-01 19:48   ` [tip: timers/vdso] " tip-bot2 for Thomas Weißschuh
2025-10-14  6:48 ` [PATCH v4 04/35] arm64: vDSO: compat_gettimeofday: Add explicit includes Thomas Weißschuh
2025-11-01 19:48   ` [tip: timers/vdso] " tip-bot2 for Thomas Weißschuh
2025-10-14  6:48 ` [PATCH v4 05/35] ARM: vdso: gettimeofday: " Thomas Weißschuh
2025-11-01 19:48   ` [tip: timers/vdso] " tip-bot2 for Thomas Weißschuh
2025-10-14  6:48 ` [PATCH v4 06/35] powerpc/vdso/gettimeofday: Explicitly include vdso/time32.h Thomas Weißschuh
2025-10-14  7:42   ` Christophe Leroy
2025-11-01 19:48   ` [tip: timers/vdso] " tip-bot2 for Thomas Weißschuh
2025-10-14  6:48 ` [PATCH v4 07/35] powerpc/vdso: Explicitly include asm/cputable.h and asm/feature-fixups.h Thomas Weißschuh
2025-11-01 19:48   ` [tip: timers/vdso] " tip-bot2 for Thomas Weißschuh
2025-10-14  6:48 ` [PATCH v4 08/35] LoongArch: vDSO: Explicitly include asm/vdso/vdso.h Thomas Weißschuh
2025-11-01 19:48   ` [tip: timers/vdso] " tip-bot2 for Thomas Weißschuh
2025-10-14  6:48 ` [PATCH v4 09/35] MIPS: vdso: Add include guard to asm/vdso/vdso.h Thomas Weißschuh
2025-11-01 19:48   ` [tip: timers/vdso] " tip-bot2 for Thomas Weißschuh
2025-10-14  6:48 ` [PATCH v4 10/35] MIPS: vdso: Explicitly include asm/vdso/vdso.h Thomas Weißschuh
2025-11-01 19:48   ` [tip: timers/vdso] " tip-bot2 for Thomas Weißschuh
2025-10-14  6:48 ` [PATCH v4 11/35] random: vDSO: Add explicit includes Thomas Weißschuh
2025-11-01 19:48   ` [tip: timers/vdso] " tip-bot2 for Thomas Weißschuh
2025-10-14  6:48 ` [PATCH v4 12/35] vdso/gettimeofday: " Thomas Weißschuh
2025-11-01 19:48   ` [tip: timers/vdso] " tip-bot2 for Thomas Weißschuh
2025-10-14  6:48 ` [PATCH v4 13/35] vdso/helpers: Explicitly include vdso/processor.h Thomas Weißschuh
2025-11-01 19:48   ` [tip: timers/vdso] " tip-bot2 for Thomas Weißschuh
2025-10-14  6:49 ` [PATCH v4 14/35] vdso/datapage: Remove inclusion of gettimeofday.h Thomas Weißschuh
2025-11-01 19:47   ` [tip: timers/vdso] " tip-bot2 for Thomas Weißschuh
2025-10-14  6:49 ` [PATCH v4 15/35] vdso/datapage: Trim down unnecessary includes Thomas Weißschuh
2025-11-01 19:47   ` [tip: timers/vdso] " tip-bot2 for Thomas Weißschuh
2025-10-14  6:49 ` [PATCH v4 16/35] random: vDSO: trim vDSO includes Thomas Weißschuh
2025-11-01 19:47   ` [tip: timers/vdso] random: vDSO: Trim " tip-bot2 for Thomas Weißschuh
2025-10-14  6:49 ` [PATCH v4 17/35] random: vDSO: remove ifdeffery Thomas Weißschuh
2025-11-01 19:47   ` [tip: timers/vdso] random: vDSO: Remove ifdeffery tip-bot2 for Thomas Weißschuh
2025-10-14  6:49 ` [PATCH v4 18/35] random: vDSO: split out datapage update into helper functions Thomas Weißschuh
2025-11-01 19:47   ` [tip: timers/vdso] random: vDSO: Split " tip-bot2 for Thomas Weißschuh
2025-10-14  6:49 ` [PATCH v4 19/35] random: vDSO: only access vDSO datapage after random_init() Thomas Weißschuh
2025-11-01 19:47   ` [tip: timers/vdso] random: vDSO: Only " tip-bot2 for Thomas Weißschuh
2025-10-14  6:49 ` [PATCH v4 20/35] s390/time: Set up vDSO datapage later Thomas Weißschuh
2025-11-01 19:47   ` [tip: timers/vdso] " tip-bot2 for Thomas Weißschuh
2025-10-14  6:49 ` [PATCH v4 21/35] vdso/datastore: Reduce scope of some variables in vvar_fault() Thomas Weißschuh
2025-11-01 19:47   ` [tip: timers/vdso] " tip-bot2 for Thomas Weißschuh
2025-10-14  6:49 ` [PATCH v4 22/35] vdso/datastore: Drop inclusion of linux/mmap_lock.h Thomas Weißschuh
2025-11-01 19:47   ` [tip: timers/vdso] " tip-bot2 for Thomas Weißschuh
2025-10-14  6:49 ` [PATCH v4 23/35] vdso/datastore: Map pages through struct page Thomas Weißschuh
2025-11-01 19:47   ` [tip: timers/vdso] " tip-bot2 for Thomas Weißschuh
2025-11-03 15:24   ` [PATCH v4 23/35] " Mark Brown
2025-11-03 15:54     ` Thomas Gleixner
2025-11-03 16:55       ` Mark Brown
     [not found]     ` <CGME20251104084442eucas1p2af1bd88393f4d6a532df1cd41f32a287@eucas1p2.samsung.com>
2025-11-04  8:44       ` Marek Szyprowski
2025-11-04  8:58         ` Thomas Weißschuh
2025-11-04 13:14         ` Mark Brown
2025-11-04 15:43           ` Thomas Weißschuh
2025-11-04 15:47             ` Mark Brown
2025-11-04 16:03               ` Thomas Weißschuh
2025-11-04 16:21                 ` Mark Brown
2025-11-04 13:29         ` Mark Brown
2025-11-06 13:28         ` Mark Brown
2025-11-06 13:32           ` Thomas Weißschuh
2025-11-06 13:39             ` Mark Brown
2025-10-14  6:49 ` [PATCH v4 24/35] vdso/datastore: Allocate data pages dynamically Thomas Weißschuh
2025-11-01 19:47   ` [tip: timers/vdso] " tip-bot2 for Thomas Weißschuh
2025-11-04  8:49   ` Lad Prabhakar
2025-11-05 15:34   ` [PATCH v4 24/35] " Heiko Carstens
2025-11-05 16:13     ` Thomas Weißschuh
2025-11-06 12:43     ` Aithal, Srikanth
2025-10-14  6:49 ` [PATCH v4 25/35] sparc64: vdso: Link with -z noexecstack Thomas Weißschuh
2025-11-01 19:47   ` [tip: timers/vdso] " tip-bot2 for Thomas Weißschuh
2025-10-14  6:49 ` [PATCH v4 26/35] sparc64: vdso: Remove obsolete "fake section table" reservation Thomas Weißschuh
2025-11-01 19:47   ` [tip: timers/vdso] " tip-bot2 for Thomas Weißschuh
2025-10-14  6:49 ` [PATCH v4 27/35] sparc64: vdso: Replace code patching with runtime conditional Thomas Weißschuh
2025-11-01 19:47   ` tip-bot2 for Thomas Weißschuh [this message]
2025-10-14  6:49 ` [PATCH v4 28/35] sparc64: vdso: Move hardware counter read into header Thomas Weißschuh
2025-11-01 19:47   ` [tip: timers/vdso] " tip-bot2 for Thomas Weißschuh
2025-10-14  6:49 ` [PATCH v4 29/35] sparc64: vdso: Move syscall fallbacks " Thomas Weißschuh
2025-11-01 19:47   ` [tip: timers/vdso] " tip-bot2 for Thomas Weißschuh
2025-10-14  6:49 ` [PATCH v4 30/35] sparc64: vdso: Introduce vdso/processor.h Thomas Weißschuh
2025-11-01 19:47   ` [tip: timers/vdso] " tip-bot2 for Thomas Weißschuh
2025-10-14  6:49 ` [PATCH v4 31/35] sparc64: vdso: Switch to the generic vDSO library Thomas Weißschuh
2025-11-01 19:47   ` [tip: timers/vdso] " tip-bot2 for Thomas Weißschuh
2025-10-14  6:49 ` [PATCH v4 32/35] sparc64: vdso2c: Drop sym_vvar_start handling Thomas Weißschuh
2025-11-01 19:47   ` [tip: timers/vdso] " tip-bot2 for Thomas Weißschuh
2025-10-14  6:49 ` [PATCH v4 33/35] sparc64: vdso2c: Remove symbol handling Thomas Weißschuh
2025-11-01 19:47   ` [tip: timers/vdso] " tip-bot2 for Thomas Weißschuh
2025-10-14  6:49 ` [PATCH v4 34/35] sparc64: vdso: Implement clock_gettime64() Thomas Weißschuh
2025-11-01 19:47   ` [tip: timers/vdso] " tip-bot2 for Thomas Weißschuh
2025-10-14  6:49 ` [PATCH v4 35/35] clocksource: remove ARCH_CLOCKSOURCE_DATA Thomas Weißschuh
2025-11-01 19:47   ` [tip: timers/vdso] clocksource: Remove ARCH_CLOCKSOURCE_DATA tip-bot2 for Arnd Bergmann
2026-03-04  7:49 [PATCH v6 06/14] sparc64: vdso: Replace code patching with runtime conditional Thomas Weißschuh
2026-03-11  9:31 ` [tip: timers/vdso] " tip-bot2 for Thomas Weißschuh

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=176202645935.2601451.18090397675824023670.tip-bot2@tip-bot2 \
    --to=tip-bot2@linutronix.de \
    --cc=andreas@gaisler.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=tglx@linutronix.de \
    --cc=thomas.weissschuh@linutronix.de \
    --cc=x86@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

all inboxes | Powered by JetHome®