[kernel] r18980 - in dists/squeeze/linux-2.6/debian: . patches/bugfix/s390 patches/series
Ben Hutchings
benh at alioth.debian.org
Fri May 4 16:10:10 UTC 2012
Author: benh
Date: Fri May 4 16:10:07 2012
New Revision: 18980
Log:
[s390] vdso: use ntp adjusted clock multiplier (Closes: #669120)
Added:
dists/squeeze/linux-2.6/debian/patches/bugfix/s390/S390-vdso-use-ntp-adjusted-clock-multiplier.patch
Modified:
dists/squeeze/linux-2.6/debian/changelog
dists/squeeze/linux-2.6/debian/patches/series/44
Modified: dists/squeeze/linux-2.6/debian/changelog
==============================================================================
--- dists/squeeze/linux-2.6/debian/changelog Fri May 4 06:33:24 2012 (r18979)
+++ dists/squeeze/linux-2.6/debian/changelog Fri May 4 16:10:07 2012 (r18980)
@@ -2,6 +2,7 @@
[ Ben Hutchings ]
* [x86] mm: Fix pgd_lock deadlock (Closes: #669335)
+ * [s390] vdso: use ntp adjusted clock multiplier (Closes: #669120)
[ dann frazier ]
* Revert "Work around unhappy compat problem on x86-64",
Added: dists/squeeze/linux-2.6/debian/patches/bugfix/s390/S390-vdso-use-ntp-adjusted-clock-multiplier.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/squeeze/linux-2.6/debian/patches/bugfix/s390/S390-vdso-use-ntp-adjusted-clock-multiplier.patch Fri May 4 16:10:07 2012 (r18980)
@@ -0,0 +1,165 @@
+From: Hendrik Brueckner <brueckner at linux.vnet.ibm.com>
+Date: Thu, 22 Apr 2010 17:17:06 +0200
+Subject: [PATCH] [S390] vdso: use ntp adjusted clock multiplier
+
+commit 157a1a27d5921fc94db8c14e0d01363d13de99b5 upstream.
+
+Commit "timekeeping: Fix clock_gettime vsyscall time warp" (0696b711e)
+introduced the new parameter "mult" to update_vsyscall(). This parameter
+contains the internal NTP adjusted clock multiplier.
+
+The s390x vdso did not use this adjusted multiplier. Instead, it used
+the constant clock multiplier for gettimeofday() and clock_gettime()
+variants. This may result in observable time warps as explained in
+commit 0696b711e.
+
+Make the NTP adjusted clock multiplier available to the s390x vdso
+implementation and use it for time calculations.
+
+Signed-off-by: Hendrik Brueckner <brueckner at linux.vnet.ibm.com>
+Signed-off-by: Martin Schwidefsky <schwidefsky at de.ibm.com>
+[Backported to 2.6.32 by Philipp Kern <pkern at debian.org>: adjust context]
+Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
+---
+ arch/s390/include/asm/vdso.h | 1 +
+ arch/s390/kernel/asm-offsets.c | 1 +
+ arch/s390/kernel/time.c | 1 +
+ arch/s390/kernel/vdso32/clock_gettime.S | 12 ++++++------
+ arch/s390/kernel/vdso32/gettimeofday.S | 6 +++---
+ arch/s390/kernel/vdso64/clock_gettime.S | 4 ++--
+ arch/s390/kernel/vdso64/gettimeofday.S | 2 +-
+ 7 files changed, 15 insertions(+), 12 deletions(-)
+
+diff --git a/arch/s390/include/asm/vdso.h b/arch/s390/include/asm/vdso.h
+index 4a76d94..533f357 100644
+--- a/arch/s390/include/asm/vdso.h
++++ b/arch/s390/include/asm/vdso.h
+@@ -29,6 +29,7 @@ struct vdso_data {
+ __u32 tz_minuteswest; /* Minutes west of Greenwich 0x30 */
+ __u32 tz_dsttime; /* Type of dst correction 0x34 */
+ __u32 ectg_available;
++ __u32 ntp_mult; /* NTP adjusted multiplier 0x3C */
+ };
+
+ struct vdso_per_cpu_data {
+diff --git a/arch/s390/kernel/asm-offsets.c b/arch/s390/kernel/asm-offsets.c
+index 63e4643..7ffc4c0 100644
+--- a/arch/s390/kernel/asm-offsets.c
++++ b/arch/s390/kernel/asm-offsets.c
+@@ -52,6 +52,7 @@ int main(void)
+ DEFINE(__VDSO_WTOM_NSEC, offsetof(struct vdso_data, wtom_clock_nsec));
+ DEFINE(__VDSO_TIMEZONE, offsetof(struct vdso_data, tz_minuteswest));
+ DEFINE(__VDSO_ECTG_OK, offsetof(struct vdso_data, ectg_available));
++ DEFINE(__VDSO_NTP_MULT, offsetof(struct vdso_data, ntp_mult));
+ DEFINE(__VDSO_ECTG_BASE,
+ offsetof(struct vdso_per_cpu_data, ectg_timer_base));
+ DEFINE(__VDSO_ECTG_USER,
+diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c
+index 68e1ecf..7ad595a 100644
+--- a/arch/s390/kernel/time.c
++++ b/arch/s390/kernel/time.c
+@@ -228,6 +228,7 @@ void update_vsyscall(struct timespec *wall_time, struct clocksource *clock,
+ vdso_data->xtime_clock_nsec = xtime.tv_nsec;
+ vdso_data->wtom_clock_sec = wall_to_monotonic.tv_sec;
+ vdso_data->wtom_clock_nsec = wall_to_monotonic.tv_nsec;
++ vdso_data->ntp_mult = mult;
+ smp_wmb();
+ ++vdso_data->tb_update_count;
+ }
+diff --git a/arch/s390/kernel/vdso32/clock_gettime.S b/arch/s390/kernel/vdso32/clock_gettime.S
+index 4a98909..9696439 100644
+--- a/arch/s390/kernel/vdso32/clock_gettime.S
++++ b/arch/s390/kernel/vdso32/clock_gettime.S
+@@ -38,13 +38,13 @@ __kernel_clock_gettime:
+ sl %r1,__VDSO_XTIME_STAMP+4(%r5)
+ brc 3,2f
+ ahi %r0,-1
+-2: mhi %r0,1000 /* cyc2ns(clock,cycle_delta) */
++2: ms %r0,__VDSO_NTP_MULT(%r5) /* cyc2ns(clock,cycle_delta) */
+ lr %r2,%r0
+- lhi %r0,1000
++ l %r0,__VDSO_NTP_MULT(%r5)
+ ltr %r1,%r1
+ mr %r0,%r0
+ jnm 3f
+- ahi %r0,1000
++ a %r0,__VDSO_NTP_MULT(%r5)
+ 3: alr %r0,%r2
+ srdl %r0,12
+ al %r0,__VDSO_XTIME_NSEC(%r5) /* + xtime */
+@@ -86,13 +86,13 @@ __kernel_clock_gettime:
+ sl %r1,__VDSO_XTIME_STAMP+4(%r5)
+ brc 3,12f
+ ahi %r0,-1
+-12: mhi %r0,1000 /* cyc2ns(clock,cycle_delta) */
++12: ms %r0,__VDSO_NTP_MULT(%r5) /* cyc2ns(clock,cycle_delta) */
+ lr %r2,%r0
+- lhi %r0,1000
++ l %r0,__VDSO_NTP_MULT(%r5)
+ ltr %r1,%r1
+ mr %r0,%r0
+ jnm 13f
+- ahi %r0,1000
++ a %r0,__VDSO_NTP_MULT(%r5)
+ 13: alr %r0,%r2
+ srdl %r0,12
+ al %r0,__VDSO_XTIME_NSEC(%r5) /* + xtime */
+diff --git a/arch/s390/kernel/vdso32/gettimeofday.S b/arch/s390/kernel/vdso32/gettimeofday.S
+index ad8acfc..2d36331 100644
+--- a/arch/s390/kernel/vdso32/gettimeofday.S
++++ b/arch/s390/kernel/vdso32/gettimeofday.S
+@@ -35,13 +35,13 @@ __kernel_gettimeofday:
+ sl %r1,__VDSO_XTIME_STAMP+4(%r5)
+ brc 3,3f
+ ahi %r0,-1
+-3: mhi %r0,1000 /* cyc2ns(clock,cycle_delta) */
++3: ms %r0,__VDSO_NTP_MULT(%r5) /* cyc2ns(clock,cycle_delta) */
+ st %r0,24(%r15)
+- lhi %r0,1000
++ l %r0,__VDSO_NTP_MULT(%r5)
+ ltr %r1,%r1
+ mr %r0,%r0
+ jnm 4f
+- ahi %r0,1000
++ a %r0,__VDSO_NTP_MULT(%r5)
+ 4: al %r0,24(%r15)
+ srdl %r0,12
+ al %r0,__VDSO_XTIME_NSEC(%r5) /* + xtime */
+diff --git a/arch/s390/kernel/vdso64/clock_gettime.S b/arch/s390/kernel/vdso64/clock_gettime.S
+index 49106c6..f404678 100644
+--- a/arch/s390/kernel/vdso64/clock_gettime.S
++++ b/arch/s390/kernel/vdso64/clock_gettime.S
+@@ -36,7 +36,7 @@ __kernel_clock_gettime:
+ stck 48(%r15) /* Store TOD clock */
+ lg %r1,48(%r15)
+ sg %r1,__VDSO_XTIME_STAMP(%r5) /* TOD - cycle_last */
+- mghi %r1,1000
++ msgf %r1,__VDSO_NTP_MULT(%r5) /* * NTP adjustment */
+ srlg %r1,%r1,12 /* cyc2ns(clock,cycle_delta) */
+ alg %r1,__VDSO_XTIME_NSEC(%r5) /* + xtime */
+ lg %r0,__VDSO_XTIME_SEC(%r5)
+@@ -64,7 +64,7 @@ __kernel_clock_gettime:
+ stck 48(%r15) /* Store TOD clock */
+ lg %r1,48(%r15)
+ sg %r1,__VDSO_XTIME_STAMP(%r5) /* TOD - cycle_last */
+- mghi %r1,1000
++ msgf %r1,__VDSO_NTP_MULT(%r5) /* * NTP adjustment */
+ srlg %r1,%r1,12 /* cyc2ns(clock,cycle_delta) */
+ alg %r1,__VDSO_XTIME_NSEC(%r5) /* + xtime */
+ lg %r0,__VDSO_XTIME_SEC(%r5)
+diff --git a/arch/s390/kernel/vdso64/gettimeofday.S b/arch/s390/kernel/vdso64/gettimeofday.S
+index f873e75..36ee674 100644
+--- a/arch/s390/kernel/vdso64/gettimeofday.S
++++ b/arch/s390/kernel/vdso64/gettimeofday.S
+@@ -31,7 +31,7 @@ __kernel_gettimeofday:
+ stck 48(%r15) /* Store TOD clock */
+ lg %r1,48(%r15)
+ sg %r1,__VDSO_XTIME_STAMP(%r5) /* TOD - cycle_last */
+- mghi %r1,1000
++ msgf %r1,__VDSO_NTP_MULT(%r5) /* * NTP adjustment */
+ srlg %r1,%r1,12 /* cyc2ns(clock,cycle_delta) */
+ alg %r1,__VDSO_XTIME_NSEC(%r5) /* + xtime.tv_nsec */
+ lg %r0,__VDSO_XTIME_SEC(%r5) /* xtime.tv_sec */
+--
+1.7.9.5
+
Modified: dists/squeeze/linux-2.6/debian/patches/series/44
==============================================================================
--- dists/squeeze/linux-2.6/debian/patches/series/44 Fri May 4 06:33:24 2012 (r18979)
+++ dists/squeeze/linux-2.6/debian/patches/series/44 Fri May 4 16:10:07 2012 (r18980)
@@ -8,3 +8,4 @@
+ bugfix/all/fcaps-clear-the-same-personality-flags-as-suid-when-fcaps-are-used.patch
+ bugfix/all/security-fix-compile-error-in-commoncap.c.patch
+ bugfix/all/jbd2-clear-BH_Delay-BH_Unwritten-in-journal_unmap_buffer.patch
++ bugfix/s390/S390-vdso-use-ntp-adjusted-clock-multiplier.patch
More information about the Kernel-svn-changes
mailing list