Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1737614 > unrolled thread
| Started by | Joao Martins <joao.m.martins@oracle.com> |
|---|---|
| First post | 2017-09-22 18:30 +0200 |
| Last post | 2017-09-22 18:30 +0200 |
| Articles | 2 — 1 participant |
Back to article view | Back to linux.kernel
[PATCH v2 0/3] x86/xen: pvclock vdso support Joao Martins <joao.m.martins@oracle.com> - 2017-09-22 18:30 +0200
[PATCH v2 1/3] x86/pvclock: add setter for pvclock_pvti_cpu0_va Joao Martins <joao.m.martins@oracle.com> - 2017-09-22 18:30 +0200
| From | Joao Martins <joao.m.martins@oracle.com> |
|---|---|
| Date | 2017-09-22 18:30 +0200 |
| Subject | [PATCH v2 0/3] x86/xen: pvclock vdso support |
| Message-ID | <usyZY-8kh-9@gated-at.bofh.it> |
Hey, Sorry for the huge delay in following up this series. This take 2 for vdso for Xen. PVCLOCK_TSC_STABLE_BIT can be set starting Xen 4.8 which is required for vdso time related calls. In order to have it on, you need to have the hypervisor clocksource be TSC e.g. with the following boot params "clocksource=tsc tsc=stable:socket". Series is structured as following: Patch 1 streamlines pvti page get/set in pvclock for both of its users Patch 2 registers the pvti page on Xen and sets it in pvclock accordingly Patch 3 adds a file to KVM/Xen maintainers for tracking pvclock ABI changes. Changelog since v1 is included in individual patches. Any comments/suggestions are welcome. Thanks, Joao Joao Martins (3): x86/pvclock: add setter for pvclock_pvti_cpu0_va x86/xen/time: setup vcpu 0 time info page MAINTAINERS: xen, kvm: track pvclock-abi.h changes MAINTAINERS | 2 + arch/x86/include/asm/pvclock.h | 19 ++++---- arch/x86/kernel/kvmclock.c | 7 +-- arch/x86/kernel/pvclock.c | 14 ++++++ arch/x86/xen/suspend.c | 4 ++ arch/x86/xen/time.c | 100 +++++++++++++++++++++++++++++++++++++++++ arch/x86/xen/xen-ops.h | 2 + include/xen/interface/vcpu.h | 28 ++++++++++++ 8 files changed, 161 insertions(+), 15 deletions(-) -- 2.11.0
[toc] | [next] | [standalone]
| From | Joao Martins <joao.m.martins@oracle.com> |
|---|---|
| Date | 2017-09-22 18:30 +0200 |
| Subject | [PATCH v2 1/3] x86/pvclock: add setter for pvclock_pvti_cpu0_va |
| Message-ID | <usyZZ-8kh-21@gated-at.bofh.it> |
| In reply to | #1737614 |
Right now there is only a pvclock_pvti_cpu0_va() which is defined
on kvmclock since:
commit dac16fba6fc5
("x86/vdso: Get pvclock data from the vvar VMA instead of the fixmap")
The only user of this interface so far is kvm. This commit adds a
setter function for the pvti page and moves pvclock_pvti_cpu0_va
to pvclock, which is a more generic place to have it; and would
allow other PV clocksources to use it, such as Xen.
Signed-off-by: Joao Martins <joao.m.martins@oracle.com>
Acked-by: Andy Lutomirski <luto@kernel.org>
---
Changes since v1:
* Rebased: the only conflict was that I had move the export
pvclock_pvti_cpu0_va() symbol as it is used by kvm PTP driver.
* Do not initialize pvti_cpu0_va to NULL (checkpatch error)
( Comments from Andy Lutomirski )
* Removed asm/pvclock.h 'pvclock_set_pvti_cpu0_va' definition
for non !PARAVIRT_CLOCK to better track screwed Kconfig stuff.
* Add his Acked-by (provided the previous adjustment was made)
Changes since RFC:
(Comments from Andy Lutomirski)
* Add __init to pvclock_set_pvti_cpu0_va
* Add WARN_ON(vclock_was_used(VCLOCK_PVCLOCK)) to
pvclock_set_pvti_cpu0_va
---
arch/x86/include/asm/pvclock.h | 19 ++++++++++---------
arch/x86/kernel/kvmclock.c | 7 +------
arch/x86/kernel/pvclock.c | 14 ++++++++++++++
3 files changed, 25 insertions(+), 15 deletions(-)
diff --git a/arch/x86/include/asm/pvclock.h b/arch/x86/include/asm/pvclock.h
index 448cfe1b48cf..6f228f90cdd7 100644
--- a/arch/x86/include/asm/pvclock.h
+++ b/arch/x86/include/asm/pvclock.h
@@ -4,15 +4,6 @@
#include <linux/clocksource.h>
#include <asm/pvclock-abi.h>
-#ifdef CONFIG_KVM_GUEST
-extern struct pvclock_vsyscall_time_info *pvclock_pvti_cpu0_va(void);
-#else
-static inline struct pvclock_vsyscall_time_info *pvclock_pvti_cpu0_va(void)
-{
- return NULL;
-}
-#endif
-
/* some helper functions for xen and kvm pv clock sources */
u64 pvclock_clocksource_read(struct pvclock_vcpu_time_info *src);
u8 pvclock_read_flags(struct pvclock_vcpu_time_info *src);
@@ -101,4 +92,14 @@ struct pvclock_vsyscall_time_info {
#define PVTI_SIZE sizeof(struct pvclock_vsyscall_time_info)
+#ifdef CONFIG_PARAVIRT_CLOCK
+void pvclock_set_pvti_cpu0_va(struct pvclock_vsyscall_time_info *pvti);
+struct pvclock_vsyscall_time_info *pvclock_pvti_cpu0_va(void);
+#else
+static inline struct pvclock_vsyscall_time_info *pvclock_pvti_cpu0_va(void)
+{
+ return NULL;
+}
+#endif
+
#endif /* _ASM_X86_PVCLOCK_H */
diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c
index d88967659098..538738047ff5 100644
--- a/arch/x86/kernel/kvmclock.c
+++ b/arch/x86/kernel/kvmclock.c
@@ -47,12 +47,6 @@ early_param("no-kvmclock", parse_no_kvmclock);
static struct pvclock_vsyscall_time_info *hv_clock;
static struct pvclock_wall_clock wall_clock;
-struct pvclock_vsyscall_time_info *pvclock_pvti_cpu0_va(void)
-{
- return hv_clock;
-}
-EXPORT_SYMBOL_GPL(pvclock_pvti_cpu0_va);
-
/*
* The wallclock is the time of day when we booted. Since then, some time may
* have elapsed since the hypervisor wrote the data. So we try to account for
@@ -334,6 +328,7 @@ int __init kvm_setup_vsyscall_timeinfo(void)
return 1;
}
+ pvclock_set_pvti_cpu0_va(hv_clock);
put_cpu();
kvm_clock.archdata.vclock_mode = VCLOCK_PVCLOCK;
diff --git a/arch/x86/kernel/pvclock.c b/arch/x86/kernel/pvclock.c
index 5c3f6d6a5078..cb7d6d9c9c2d 100644
--- a/arch/x86/kernel/pvclock.c
+++ b/arch/x86/kernel/pvclock.c
@@ -25,8 +25,10 @@
#include <asm/fixmap.h>
#include <asm/pvclock.h>
+#include <asm/vgtod.h>
static u8 valid_flags __read_mostly = 0;
+static struct pvclock_vsyscall_time_info *pvti_cpu0_va __read_mostly;
void pvclock_set_flags(u8 flags)
{
@@ -144,3 +146,15 @@ void pvclock_read_wallclock(struct pvclock_wall_clock *wall_clock,
set_normalized_timespec(ts, now.tv_sec, now.tv_nsec);
}
+
+void pvclock_set_pvti_cpu0_va(struct pvclock_vsyscall_time_info *pvti)
+{
+ WARN_ON(vclock_was_used(VCLOCK_PVCLOCK));
+ pvti_cpu0_va = pvti;
+}
+
+struct pvclock_vsyscall_time_info *pvclock_pvti_cpu0_va(void)
+{
+ return pvti_cpu0_va;
+}
+EXPORT_SYMBOL_GPL(pvclock_pvti_cpu0_va);
--
2.11.0
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web