[Devel] [PATCH] vdso/ia32: Revert monotonic time virtualization for ia32
Dmitry Safonov
dsafonov at virtuozzo.com
Fri Jul 7 20:47:34 MSK 2017
As vz-kernel is based on v3.10 kernel and __vdso_gettimeofday()
was added to vdso page laterly, we don't need to virtualize
clocks in case of ia32 clock_gettime()/vdso_gettimeofday().
So, they are present in ms, but our kernel yet have poorer
vdso32.lds.S:
VERSION
{
LINUX_2.5 {
global:
__kernel_vsyscall;
__kernel_sigreturn;
__kernel_rt_sigreturn;
local: *;
};
}
https://jira.sw.ru/browse/PSBM-68050
Fixes: commit 25960eecc77e ("ve/vdso: virtualized monotonic gettime
through vdso") and commit 481382a5f63e ("vdso32: Fix monotonic time
virtualization for ia32)".
Cc: Andrey Ryabinin <aryabinin at virtuozzo.com>
Signed-off-by: Dmitry Safonov <dsafonov at virtuozzo.com>
---
arch/x86/vdso/vclock_gettime.c | 2 --
arch/x86/vdso/vdso32-setup.c | 11 ++++++-----
2 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/arch/x86/vdso/vclock_gettime.c b/arch/x86/vdso/vclock_gettime.c
index e3f80badc5ac..7c218ce347a3 100644
--- a/arch/x86/vdso/vclock_gettime.c
+++ b/arch/x86/vdso/vclock_gettime.c
@@ -28,8 +28,6 @@
#define gtod (&VVAR(vsyscall_gtod_data))
struct timespec VDSO64_ve_start_timespec;
-extern struct timespec VDSO32_ve_start_timespec
- __attribute__((weak, alias("VDSO64_ve_start_timespec")));
notrace static cycle_t vread_tsc(void)
{
diff --git a/arch/x86/vdso/vdso32-setup.c b/arch/x86/vdso/vdso32-setup.c
index 70e1cc45a17c..81a16c803f11 100644
--- a/arch/x86/vdso/vdso32-setup.c
+++ b/arch/x86/vdso/vdso32-setup.c
@@ -344,8 +344,10 @@ static struct page **uts_prep_vdso_pages_locked(int map)
* preallocated one.
*/
new_version = KERNEL_VERSION(n1, n2, n3);
+ if (new_version == LINUX_VERSION_CODE)
+ goto out;
#ifdef CONFIG_X86_32
- {
+ else {
/*
* Native x86-32 mode requires vDSO runtime
* relocations applied which is not supported
@@ -368,8 +370,8 @@ static struct page **uts_prep_vdso_pages_locked(int map)
* better than walk out with error.
*/
pr_warn_once("Wrong release uts name format detected."
- " Using host's uts name.\n");
- new_version = LINUX_VERSION_CODE;
+ " Ignoring vDSO virtualization.\n");
+ goto out;
}
mutex_lock(&vdso32_mutex);
@@ -399,9 +401,7 @@ static struct page **uts_prep_vdso_pages_locked(int map)
copy_page(page_address(new_pages[0]), page_address(vdso32_pages[0]));
addr = page_address(new_pages[0]);
- uts_ns->vdso32.addr = addr;
*((int *)(addr + uts_ns->vdso32.version_off)) = new_version;
- *((struct timespec*)(VDSO32_SYMBOL(uts_ns->vdso32.addr, ve_start_timespec))) = ve->start_timespec;
smp_wmb();
pages = uts_ns->vdso32.pages = new_pages;
@@ -411,6 +411,7 @@ static struct page **uts_prep_vdso_pages_locked(int map)
out_unlock:
mutex_unlock(&vdso32_mutex);
+out:
down_write(&mm->mmap_sem);
return pages;
}
--
2.13.1
More information about the Devel
mailing list