s390/vdso: simplify __arch_get_hw_counter()
authorHeiko Carstens <hca@linux.ibm.com>
Sun, 31 Jan 2021 21:27:36 +0000 (22:27 +0100)
committerVasily Gorbik <gor@linux.ibm.com>
Tue, 9 Feb 2021 14:57:05 +0000 (15:57 +0100)
Use the passed in vdso_data pointer instead of calculating it again.
This is also required as a prerequisite for vdso time namespaces: if a
process is part of a time namespace __arch_get_vdso_data() will return
a pointer to the time namespace data page instead of the vdso data
page, which is not what __arch_get_hw_counter() expects.

Reviewed-by: Alexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
arch/s390/include/asm/vdso/gettimeofday.h

index bf12306..c92b0de 100644 (file)
@@ -24,13 +24,12 @@ static __always_inline const struct vdso_data *__arch_get_vdso_data(void)
 
 static inline u64 __arch_get_hw_counter(s32 clock_mode, const struct vdso_data *vd)
 {
-       const struct vdso_data *vdso = __arch_get_vdso_data();
        u64 adj, now;
 
        now = get_tod_clock();
-       adj = vdso->arch_data.tod_steering_end - now;
+       adj = vd->arch_data.tod_steering_end - now;
        if (unlikely((s64) adj > 0))
-               now += (vdso->arch_data.tod_steering_delta < 0) ? (adj >> 15) : -(adj >> 15);
+               now += (vd->arch_data.tod_steering_delta < 0) ? (adj >> 15) : -(adj >> 15);
        return now;
 }