Displaying 20 results from an estimated 20 matches for "hv_get_tsc_page".
2017 Feb 09
2
[PATCH 1/2] hyperv: implement hv_get_tsc_page()
...gt;; Haiyang Zhang <haiyangz at microsoft.com>; Stephen Hemminger <sthemmin at microsoft.com>; Dexuan Cui <decui at microsoft.com>; linux-kernel at vger.kernel.org; devel at linuxdriverproject.org; virtualization at lists.linux-foundation.org
Subject: [PATCH 1/2] hyperv: implement hv_get_tsc_page()
To use Hyper-V TSC page clocksource from vDSO we need to make tsc_pg available. Implement hv_get_tsc_page() and add CONFIG_HYPERV_TSCPAGE to make #ifdef-s simple.
Signed-off-by: Vitaly Kuznetsov <vkuznets at redhat.com>
---
arch/x86/hyperv/hv_init.c | 9 +++++++--
arch/x86/include/...
2017 Feb 09
2
[PATCH 1/2] hyperv: implement hv_get_tsc_page()
...gt;; Haiyang Zhang <haiyangz at microsoft.com>; Stephen Hemminger <sthemmin at microsoft.com>; Dexuan Cui <decui at microsoft.com>; linux-kernel at vger.kernel.org; devel at linuxdriverproject.org; virtualization at lists.linux-foundation.org
Subject: [PATCH 1/2] hyperv: implement hv_get_tsc_page()
To use Hyper-V TSC page clocksource from vDSO we need to make tsc_pg available. Implement hv_get_tsc_page() and add CONFIG_HYPERV_TSCPAGE to make #ifdef-s simple.
Signed-off-by: Vitaly Kuznetsov <vkuznets at redhat.com>
---
arch/x86/hyperv/hv_init.c | 9 +++++++--
arch/x86/include/...
2017 Feb 09
0
[PATCH 1/2] hyperv: implement hv_get_tsc_page()
To use Hyper-V TSC page clocksource from vDSO we need to make tsc_pg
available. Implement hv_get_tsc_page() and add CONFIG_HYPERV_TSCPAGE to
make #ifdef-s simple.
Signed-off-by: Vitaly Kuznetsov <vkuznets at redhat.com>
---
arch/x86/hyperv/hv_init.c | 9 +++++++--
arch/x86/include/asm/mshyperv.h | 8 ++++++++
drivers/hv/Kconfig | 3 +++
3 files changed, 18 insertions(+), 2 de...
2017 Feb 09
0
[PATCH 1/2] hyperv: implement hv_get_tsc_page()
...Hemminger wrote:
> The actual code looks fine, but the style police will not like you.
> { should be at start of line on functions.
> And #else should be at start of line,
>
> But maybe this was just more of exchange mangling the mail.
Looks like.
> +struct ms_hyperv_tsc_page *hv_get_tsc_page(void) {
> + return tsc_pg;
> +}
> +
That's how it reads in a proper mail client connected to a proper mail
server:
> +struct ms_hyperv_tsc_page *hv_get_tsc_page(void)
> +{
> + return tsc_pg;
> +}
:)
2017 Feb 09
4
[PATCH 0/2] x86/vdso: Add Hyper-V TSC page clocksource support
...another one [Andy Lutomirski]
- Fix issues reported by kbuild test robot.
- Rename HYPERV_CLOCK -> HYPERV_TSCPAGE to avoid the ambiguity.
I'm also going to try to optimize mul_u64_u64_shr() for 32bit but this can
be split from this series I guess.
Vitaly Kuznetsov (2):
hyperv: implement hv_get_tsc_page()
x86/vdso: Add VCLOCK_HVCLOCK vDSO clock read method
arch/x86/entry/vdso/vclock_gettime.c | 36 +++++++++++++++++++++++++++++++++++
arch/x86/entry/vdso/vdso-layout.lds.S | 3 ++-
arch/x86/entry/vdso/vdso2c.c | 3 +++
arch/x86/entry/vdso/vma.c | 7 +++++++
arch/x86/hype...
2017 Feb 09
4
[PATCH 0/2] x86/vdso: Add Hyper-V TSC page clocksource support
...another one [Andy Lutomirski]
- Fix issues reported by kbuild test robot.
- Rename HYPERV_CLOCK -> HYPERV_TSCPAGE to avoid the ambiguity.
I'm also going to try to optimize mul_u64_u64_shr() for 32bit but this can
be split from this series I guess.
Vitaly Kuznetsov (2):
hyperv: implement hv_get_tsc_page()
x86/vdso: Add VCLOCK_HVCLOCK vDSO clock read method
arch/x86/entry/vdso/vclock_gettime.c | 36 +++++++++++++++++++++++++++++++++++
arch/x86/entry/vdso/vdso-layout.lds.S | 3 ++-
arch/x86/entry/vdso/vdso2c.c | 3 +++
arch/x86/entry/vdso/vma.c | 7 +++++++
arch/x86/hype...
2017 Mar 03
4
[PATCH v3 0/3] x86/vdso: Add Hyper-V TSC page clocksource support
...following results:
Before:
# time sysbench --test=memory --max-requests=500000 run
...
real 1m22.618s
user 0m50.193s
sys 0m32.268s
After:
# time sysbench --test=memory --max-requests=500000 run
...
real 0m47.241s
user 0m47.117s
sys 0m0.008s
Vitaly Kuznetsov (3):
x86/hyperv: implement hv_get_tsc_page()
x86/hyperv: move TSC reading method to asm/mshyperv.h
x86/vdso: Add VCLOCK_HVCLOCK vDSO clock read method
arch/x86/entry/vdso/vclock_gettime.c | 24 +++++++++++++++
arch/x86/entry/vdso/vdso-layout.lds.S | 3 +-
arch/x86/entry/vdso/vdso2c.c | 3 ++
arch/x86/entry/vdso/vma.c...
2017 Mar 03
4
[PATCH v3 0/3] x86/vdso: Add Hyper-V TSC page clocksource support
...following results:
Before:
# time sysbench --test=memory --max-requests=500000 run
...
real 1m22.618s
user 0m50.193s
sys 0m32.268s
After:
# time sysbench --test=memory --max-requests=500000 run
...
real 0m47.241s
user 0m47.117s
sys 0m0.008s
Vitaly Kuznetsov (3):
x86/hyperv: implement hv_get_tsc_page()
x86/hyperv: move TSC reading method to asm/mshyperv.h
x86/vdso: Add VCLOCK_HVCLOCK vDSO clock read method
arch/x86/entry/vdso/vclock_gettime.c | 24 +++++++++++++++
arch/x86/entry/vdso/vdso-layout.lds.S | 3 +-
arch/x86/entry/vdso/vdso2c.c | 3 ++
arch/x86/entry/vdso/vma.c...
2017 Feb 08
3
[PATCH RFC 0/2] x86/vdso: Add Hyper-V TSC page clocksource support
...ry --max-requests=500000 run
...
real 1m22.618s
user 0m50.193s
sys 0m32.268s
After:
# time sysbench --test=memory --max-requests=500000 run
...
real 0m50.218s
user 0m50.171s
sys 0m0.016s
So it seems it is worth it. What do you think?
Vitaly Kuznetsov (2):
hyperv: implement hv_get_tsc_page()
x86/vdso: Add VCLOCK_HVCLOCK vDSO clock read method
arch/x86/entry/vdso/vclock_gettime.c | 48 ++++++++++++++++++++++++++++++++++++
arch/x86/entry/vdso/vma.c | 26 +++++++++++++------
arch/x86/hyperv/hv_init.c | 8 ++++++
arch/x86/include/asm/clocksource.h | 3 ++-
a...
2017 Feb 08
3
[PATCH RFC 0/2] x86/vdso: Add Hyper-V TSC page clocksource support
...ry --max-requests=500000 run
...
real 1m22.618s
user 0m50.193s
sys 0m32.268s
After:
# time sysbench --test=memory --max-requests=500000 run
...
real 0m50.218s
user 0m50.171s
sys 0m0.016s
So it seems it is worth it. What do you think?
Vitaly Kuznetsov (2):
hyperv: implement hv_get_tsc_page()
x86/vdso: Add VCLOCK_HVCLOCK vDSO clock read method
arch/x86/entry/vdso/vclock_gettime.c | 48 ++++++++++++++++++++++++++++++++++++
arch/x86/entry/vdso/vma.c | 26 +++++++++++++------
arch/x86/hyperv/hv_init.c | 8 ++++++
arch/x86/include/asm/clocksource.h | 3 ++-
a...
2017 Feb 14
6
[PATCH v2 0/3] x86/vdso: Add Hyper-V TSC page clocksource support
...uests=500000 run
...
real 0m47.241s
user 0m47.117s
sys 0m0.008s
Patches 1 and 2 are made on top of K. Y.'s code refactoring which moved tsc
page clocksource to arch/x86/hyperv/hv_init.c, this is currently present in
Greg's char-misc-next tree.
Vitaly Kuznetsov (3):
x86/hyperv: implement hv_get_tsc_page()
x86/hyperv: move TSC reading method to asm/mshyperv.h
x86/vdso: Add VCLOCK_HVCLOCK vDSO clock read method
arch/x86/entry/vdso/vclock_gettime.c | 24 +++++++++++++++
arch/x86/entry/vdso/vdso-layout.lds.S | 3 +-
arch/x86/entry/vdso/vdso2c.c | 3 ++
arch/x86/entry/vdso/vma.c...
2017 Feb 14
6
[PATCH v2 0/3] x86/vdso: Add Hyper-V TSC page clocksource support
...uests=500000 run
...
real 0m47.241s
user 0m47.117s
sys 0m0.008s
Patches 1 and 2 are made on top of K. Y.'s code refactoring which moved tsc
page clocksource to arch/x86/hyperv/hv_init.c, this is currently present in
Greg's char-misc-next tree.
Vitaly Kuznetsov (3):
x86/hyperv: implement hv_get_tsc_page()
x86/hyperv: move TSC reading method to asm/mshyperv.h
x86/vdso: Add VCLOCK_HVCLOCK vDSO clock read method
arch/x86/entry/vdso/vclock_gettime.c | 24 +++++++++++++++
arch/x86/entry/vdso/vdso-layout.lds.S | 3 +-
arch/x86/entry/vdso/vdso2c.c | 3 ++
arch/x86/entry/vdso/vma.c...
2017 Mar 03
0
[PATCH v3 2/3] x86/hyperv: move TSC reading method to asm/mshyperv.h
...++++++++++++++++++++++++++++++++++++++
2 files changed, 54 insertions(+), 32 deletions(-)
diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c
index 6b64cae..63dd00e 100644
--- a/arch/x86/hyperv/hv_init.c
+++ b/arch/x86/hyperv/hv_init.c
@@ -38,39 +38,11 @@ struct ms_hyperv_tsc_page *hv_get_tsc_page(void)
static u64 read_hv_clock_tsc(struct clocksource *arg)
{
- u64 current_tick;
+ u64 current_tick = hv_read_tsc_page(tsc_pg);
+
+ if (current_tick == U64_MAX)
+ rdmsrl(HV_X64_MSR_TIME_REF_COUNT, current_tick);
- if (tsc_pg->tsc_sequence != 0) {
- /*
- * Use the tsc page to compute t...
2017 Feb 08
2
[PATCH RFC 2/2] x86/vdso: Add VCLOCK_HVCLOCK vDSO clock read method
...vmf->address,
> + __pa(pvti) >> PAGE_SHIFT);
> + }
> + } else if (vclock_was_used(VCLOCK_HVCLOCK)) {
> + struct ms_hyperv_tsc_page *tsc_pg =
> + hv_get_tsc_page();
> + if (tsc_pg) {
> + ret = vm_insert_pfn(
> + vma,
> + vmf->address,
> + vmalloc_to_pfn(tsc_pg));
> +...
2017 Feb 08
2
[PATCH RFC 2/2] x86/vdso: Add VCLOCK_HVCLOCK vDSO clock read method
...vmf->address,
> + __pa(pvti) >> PAGE_SHIFT);
> + }
> + } else if (vclock_was_used(VCLOCK_HVCLOCK)) {
> + struct ms_hyperv_tsc_page *tsc_pg =
> + hv_get_tsc_page();
> + if (tsc_pg) {
> + ret = vm_insert_pfn(
> + vma,
> + vmf->address,
> + vmalloc_to_pfn(tsc_pg));
> +...
2020 Sep 15
0
[PATCH RFC v1 05/18] clocksource/hyperv: use MSR-based access if running as root
...why don't we use it? (I
understand that with TSC scaling support in modern CPUs even migration
is a no-issue and we can use raw TSC but this all seems to be
independent from root/non-root partition question).
> hv_read_reference_counter = read_hv_clock_tsc;
> phys_addr = virt_to_phys(hv_get_tsc_page());
--
Vitaly
2017 Feb 08
0
[PATCH RFC 2/2] x86/vdso: Add VCLOCK_HVCLOCK vDSO clock read method
...CLOCK)) {
+ struct pvclock_vsyscall_time_info *pvti =
+ pvclock_pvti_cpu0_va();
+ if (pvti) {
+ ret = vm_insert_pfn(
+ vma,
+ vmf->address,
+ __pa(pvti) >> PAGE_SHIFT);
+ }
+ } else if (vclock_was_used(VCLOCK_HVCLOCK)) {
+ struct ms_hyperv_tsc_page *tsc_pg =
+ hv_get_tsc_page();
+ if (tsc_pg) {
+ ret = vm_insert_pfn(
+ vma,
+ vmf->address,
+ vmalloc_to_pfn(tsc_pg));
+ }
}
}
diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c
index aa36049..3d534d2 100644
--- a/arch/x86/hyperv/hv_init.c
+++ b/arch/x86/hyperv/hv_init.c
@@ -157,6...
2017 Mar 03
1
[PATCH v3 2/3] x86/hyperv: move TSC reading method to asm/mshyperv.h
...shyperv.h b/arch/x86/include/asm/mshyperv.h
> index d324dce..4ff25436 100644
> --- a/arch/x86/include/asm/mshyperv.h
> +++ b/arch/x86/include/asm/mshyperv.h
> @@ -178,6 +178,56 @@ void hyperv_cleanup(void);
> #endif
> #ifdef CONFIG_HYPERV_TSCPAGE
> struct ms_hyperv_tsc_page *hv_get_tsc_page(void);
> +static inline u64 hv_read_tsc_page(const struct ms_hyperv_tsc_page *tsc_pg)
> +{
> + u64 scale, offset, current_tick, cur_tsc;
> + u32 sequence;
> +
> + /*
> + * The protocol for reading Hyper-V TSC page is specified in Hypervisor
> + * Top-Level Functional Speci...
2017 Mar 03
1
[PATCH v3 2/3] x86/hyperv: move TSC reading method to asm/mshyperv.h
...shyperv.h b/arch/x86/include/asm/mshyperv.h
> index d324dce..4ff25436 100644
> --- a/arch/x86/include/asm/mshyperv.h
> +++ b/arch/x86/include/asm/mshyperv.h
> @@ -178,6 +178,56 @@ void hyperv_cleanup(void);
> #endif
> #ifdef CONFIG_HYPERV_TSCPAGE
> struct ms_hyperv_tsc_page *hv_get_tsc_page(void);
> +static inline u64 hv_read_tsc_page(const struct ms_hyperv_tsc_page *tsc_pg)
> +{
> + u64 scale, offset, current_tick, cur_tsc;
> + u32 sequence;
> +
> + /*
> + * The protocol for reading Hyper-V TSC page is specified in Hypervisor
> + * Top-Level Functional Speci...
2017 Feb 09
0
[PATCH 2/2] x86/vdso: Add VCLOCK_HVCLOCK vDSO clock read method
...IG_X86_64)
unsigned int __read_mostly vdso64_enabled = 1;
@@ -120,6 +121,12 @@ static int vvar_fault(const struct vm_special_mapping *sm,
vmf->address,
__pa(pvti) >> PAGE_SHIFT);
}
+ } else if (sym_offset == image->sym_hvclock_page) {
+ struct ms_hyperv_tsc_page *tsc_pg = hv_get_tsc_page();
+
+ if (tsc_pg && vclock_was_used(VCLOCK_HVCLOCK))
+ ret = vm_insert_pfn(vma, vmf->address,
+ vmalloc_to_pfn(tsc_pg));
}
if (ret == 0 || ret == -EBUSY)
diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c
index 0ce8485..17519e0 100644
--- a/arch/x86/hype...