diff options
author | David S. Miller | 2019-06-22 14:59:24 +0200 |
---|---|---|
committer | David S. Miller | 2019-06-22 14:59:24 +0200 |
commit | 92ad6325cb891bb455487bfe90cc47d18aa6ec37 (patch) | |
tree | 433a7ef938fae69789216043f67eff9f9c6b0c68 /arch/x86/entry/vdso/vclock_gettime.c | |
parent | Merge branch 'PCI-let-pci_disable_link_state-propagate-errors' (diff) | |
parent | Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net (diff) | |
download | kernel-qcow2-linux-92ad6325cb891bb455487bfe90cc47d18aa6ec37.tar.gz kernel-qcow2-linux-92ad6325cb891bb455487bfe90cc47d18aa6ec37.tar.xz kernel-qcow2-linux-92ad6325cb891bb455487bfe90cc47d18aa6ec37.zip |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Minor SPDX change conflict.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/x86/entry/vdso/vclock_gettime.c')
-rw-r--r-- | arch/x86/entry/vdso/vclock_gettime.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/arch/x86/entry/vdso/vclock_gettime.c b/arch/x86/entry/vdso/vclock_gettime.c index 0f82a70c7682..4aed41f638bb 100644 --- a/arch/x86/entry/vdso/vclock_gettime.c +++ b/arch/x86/entry/vdso/vclock_gettime.c @@ -128,13 +128,24 @@ notrace static inline u64 vgetcyc(int mode) { if (mode == VCLOCK_TSC) return (u64)rdtsc_ordered(); + + /* + * For any memory-mapped vclock type, we need to make sure that gcc + * doesn't cleverly hoist a load before the mode check. Otherwise we + * might end up touching the memory-mapped page even if the vclock in + * question isn't enabled, which will segfault. Hence the barriers. + */ #ifdef CONFIG_PARAVIRT_CLOCK - else if (mode == VCLOCK_PVCLOCK) + if (mode == VCLOCK_PVCLOCK) { + barrier(); return vread_pvclock(); + } #endif #ifdef CONFIG_HYPERV_TSCPAGE - else if (mode == VCLOCK_HVCLOCK) + if (mode == VCLOCK_HVCLOCK) { + barrier(); return vread_hvclock(); + } #endif return U64_MAX; } |