All of lore.kernel.org
 help / color / mirror / Atom feed
From: tip-bot for Thomas Gleixner <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: hpa@zytor.com, mingo@kernel.org, pbonzini@redhat.com,
	linux-kernel@vger.kernel.org, pasha.tatashin@oracle.com,
	tglx@linutronix.de
Subject: [tip:x86/timers] x86/kvmclock: Cleanup the code
Date: Thu, 19 Jul 2018 15:23:37 -0700	[thread overview]
Message-ID: <tip-146c394d0c3c8e88df433a179c2b0b85fd8cf247@git.kernel.org> (raw)
In-Reply-To: <20180719205545.16512-5-pasha.tatashin@oracle.com>

Commit-ID:  146c394d0c3c8e88df433a179c2b0b85fd8cf247
Gitweb:     https://git.kernel.org/tip/146c394d0c3c8e88df433a179c2b0b85fd8cf247
Author:     Thomas Gleixner <tglx@linutronix.de>
AuthorDate: Thu, 19 Jul 2018 16:55:23 -0400
Committer:  Thomas Gleixner <tglx@linutronix.de>
CommitDate: Fri, 20 Jul 2018 00:02:37 +0200

x86/kvmclock: Cleanup the code

- Cleanup the mrs write for wall clock. The type casts to (int) are sloppy
  because the wrmsr parameters are u32 and aside of that wrmsrl() already
  provides the high/low split for free.

- Remove the pointless get_cpu()/put_cpu() dance from various
  functions. Either they are called during early init where CPU is
  guaranteed to be 0 or they are already called from non preemptible
  context where smp_processor_id() can be used safely

- Simplify the convoluted check for kvmclock in the init function.

- Mark the parameter parsing function __init. No point in keeping it
  around.

- Convert to pr_info()

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Pavel Tatashin <pasha.tatashin@oracle.com>
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
Cc: steven.sistare@oracle.com
Cc: daniel.m.jordan@oracle.com
Cc: linux@armlinux.org.uk
Cc: schwidefsky@de.ibm.com
Cc: heiko.carstens@de.ibm.com
Cc: john.stultz@linaro.org
Cc: sboyd@codeaurora.org
Cc: hpa@zytor.com
Cc: douly.fnst@cn.fujitsu.com
Cc: peterz@infradead.org
Cc: prarit@redhat.com
Cc: feng.tang@intel.com
Cc: pmladek@suse.com
Cc: gnomes@lxorguk.ukuu.org.uk
Cc: linux-s390@vger.kernel.org
Cc: boris.ostrovsky@oracle.com
Cc: jgross@suse.com
Link: https://lkml.kernel.org/r/20180719205545.16512-5-pasha.tatashin@oracle.com

---
 arch/x86/kernel/kvmclock.c | 72 ++++++++++++++--------------------------------
 1 file changed, 22 insertions(+), 50 deletions(-)

diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c
index f0a0aef5e9fa..4afb03e49a4f 100644
--- a/arch/x86/kernel/kvmclock.c
+++ b/arch/x86/kernel/kvmclock.c
@@ -37,7 +37,7 @@ static int msr_kvm_system_time = MSR_KVM_SYSTEM_TIME;
 static int msr_kvm_wall_clock = MSR_KVM_WALL_CLOCK;
 static u64 kvm_sched_clock_offset;
 
-static int parse_no_kvmclock(char *arg)
+static int __init parse_no_kvmclock(char *arg)
 {
 	kvmclock = 0;
 	return 0;
@@ -61,13 +61,9 @@ static struct pvclock_wall_clock wall_clock;
 static void kvm_get_wallclock(struct timespec64 *now)
 {
 	struct pvclock_vcpu_time_info *vcpu_time;
-	int low, high;
 	int cpu;
 
-	low = (int)slow_virt_to_phys(&wall_clock);
-	high = ((u64)slow_virt_to_phys(&wall_clock) >> 32);
-
-	native_write_msr(msr_kvm_wall_clock, low, high);
+	wrmsrl(msr_kvm_wall_clock, slow_virt_to_phys(&wall_clock));
 
 	cpu = get_cpu();
 
@@ -117,11 +113,11 @@ static inline void kvm_sched_clock_init(bool stable)
 	kvm_sched_clock_offset = kvm_clock_read();
 	pv_time_ops.sched_clock = kvm_sched_clock_read;
 
-	printk(KERN_INFO "kvm-clock: using sched offset of %llu cycles\n",
-			kvm_sched_clock_offset);
+	pr_info("kvm-clock: using sched offset of %llu cycles",
+		kvm_sched_clock_offset);
 
 	BUILD_BUG_ON(sizeof(kvm_sched_clock_offset) >
-	         sizeof(((struct pvclock_vcpu_time_info *)NULL)->system_time));
+		sizeof(((struct pvclock_vcpu_time_info *)NULL)->system_time));
 }
 
 /*
@@ -135,16 +131,8 @@ static inline void kvm_sched_clock_init(bool stable)
  */
 static unsigned long kvm_get_tsc_khz(void)
 {
-	struct pvclock_vcpu_time_info *src;
-	int cpu;
-	unsigned long tsc_khz;
-
-	cpu = get_cpu();
-	src = &hv_clock[cpu].pvti;
-	tsc_khz = pvclock_tsc_khz(src);
-	put_cpu();
 	setup_force_cpu_cap(X86_FEATURE_TSC_KNOWN_FREQ);
-	return tsc_khz;
+	return pvclock_tsc_khz(&hv_clock[0].pvti);
 }
 
 static void kvm_get_preset_lpj(void)
@@ -161,29 +149,27 @@ static void kvm_get_preset_lpj(void)
 
 bool kvm_check_and_clear_guest_paused(void)
 {
-	bool ret = false;
 	struct pvclock_vcpu_time_info *src;
-	int cpu = smp_processor_id();
+	bool ret = false;
 
 	if (!hv_clock)
 		return ret;
 
-	src = &hv_clock[cpu].pvti;
+	src = &hv_clock[smp_processor_id()].pvti;
 	if ((src->flags & PVCLOCK_GUEST_STOPPED) != 0) {
 		src->flags &= ~PVCLOCK_GUEST_STOPPED;
 		pvclock_touch_watchdogs();
 		ret = true;
 	}
-
 	return ret;
 }
 
 struct clocksource kvm_clock = {
-	.name = "kvm-clock",
-	.read = kvm_clock_get_cycles,
-	.rating = 400,
-	.mask = CLOCKSOURCE_MASK(64),
-	.flags = CLOCK_SOURCE_IS_CONTINUOUS,
+	.name	= "kvm-clock",
+	.read	= kvm_clock_get_cycles,
+	.rating	= 400,
+	.mask	= CLOCKSOURCE_MASK(64),
+	.flags	= CLOCK_SOURCE_IS_CONTINUOUS,
 };
 EXPORT_SYMBOL_GPL(kvm_clock);
 
@@ -199,7 +185,7 @@ static void kvm_register_clock(char *txt)
 	src = &hv_clock[cpu].pvti;
 	pa = slow_virt_to_phys(src) | 0x01ULL;
 	wrmsrl(msr_kvm_system_time, pa);
-	pr_info("kvm-clock: cpu %d, msr %llx, %s\n", cpu, pa, txt);
+	pr_info("kvm-clock: cpu %d, msr %llx, %s", cpu, pa, txt);
 }
 
 static void kvm_save_sched_clock_state(void)
@@ -244,20 +230,19 @@ static void kvm_shutdown(void)
 
 void __init kvmclock_init(void)
 {
-	struct pvclock_vcpu_time_info *vcpu_time;
-	int cpu;
 	u8 flags;
 
-	if (!kvm_para_available())
+	if (!kvm_para_available() || !kvmclock)
 		return;
 
-	if (kvmclock && kvm_para_has_feature(KVM_FEATURE_CLOCKSOURCE2)) {
+	if (kvm_para_has_feature(KVM_FEATURE_CLOCKSOURCE2)) {
 		msr_kvm_system_time = MSR_KVM_SYSTEM_TIME_NEW;
 		msr_kvm_wall_clock = MSR_KVM_WALL_CLOCK_NEW;
-	} else if (!(kvmclock && kvm_para_has_feature(KVM_FEATURE_CLOCKSOURCE)))
+	} else if (!kvm_para_has_feature(KVM_FEATURE_CLOCKSOURCE)) {
 		return;
+	}
 
-	printk(KERN_INFO "kvm-clock: Using msrs %x and %x",
+	pr_info("kvm-clock: Using msrs %x and %x",
 		msr_kvm_system_time, msr_kvm_wall_clock);
 
 	hv_clock = (struct pvclock_vsyscall_time_info *)hv_clock_mem;
@@ -267,20 +252,15 @@ void __init kvmclock_init(void)
 	if (kvm_para_has_feature(KVM_FEATURE_CLOCKSOURCE_STABLE_BIT))
 		pvclock_set_flags(PVCLOCK_TSC_STABLE_BIT);
 
-	cpu = get_cpu();
-	vcpu_time = &hv_clock[cpu].pvti;
-	flags = pvclock_read_flags(vcpu_time);
-
+	flags = pvclock_read_flags(&hv_clock[0].pvti);
 	kvm_sched_clock_init(flags & PVCLOCK_TSC_STABLE_BIT);
-	put_cpu();
 
 	x86_platform.calibrate_tsc = kvm_get_tsc_khz;
 	x86_platform.calibrate_cpu = kvm_get_tsc_khz;
 	x86_platform.get_wallclock = kvm_get_wallclock;
 	x86_platform.set_wallclock = kvm_set_wallclock;
 #ifdef CONFIG_X86_LOCAL_APIC
-	x86_cpuinit.early_percpu_clock_init =
-		kvm_setup_secondary_clock;
+	x86_cpuinit.early_percpu_clock_init = kvm_setup_secondary_clock;
 #endif
 	x86_platform.save_sched_clock_state = kvm_save_sched_clock_state;
 	x86_platform.restore_sched_clock_state = kvm_restore_sched_clock_state;
@@ -296,20 +276,12 @@ void __init kvmclock_init(void)
 int __init kvm_setup_vsyscall_timeinfo(void)
 {
 #ifdef CONFIG_X86_64
-	int cpu;
 	u8 flags;
-	struct pvclock_vcpu_time_info *vcpu_time;
 
 	if (!hv_clock)
 		return 0;
 
-	cpu = get_cpu();
-
-	vcpu_time = &hv_clock[cpu].pvti;
-	flags = pvclock_read_flags(vcpu_time);
-
-	put_cpu();
-
+	flags = pvclock_read_flags(&hv_clock[0].pvti);
 	if (!(flags & PVCLOCK_TSC_STABLE_BIT))
 		return 1;
 

  reply	other threads:[~2018-07-19 22:24 UTC|newest]

Thread overview: 99+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-19 20:55 [PATCH v15 00/26] Early boot time stamps Pavel Tatashin
2018-07-19 20:55 ` [PATCH v15 01/26] x86/kvmclock: Remove memblock dependency Pavel Tatashin
2018-07-19 22:21   ` [tip:x86/timers] " tip-bot for Pavel Tatashin
2018-07-19 20:55 ` [PATCH v15 02/26] x86/kvmclock: Remove page size requirement from wall_clock Pavel Tatashin
2018-07-19 22:22   ` [tip:x86/timers] " tip-bot for Thomas Gleixner
2018-07-19 20:55 ` [PATCH v15 03/26] x86/kvmclock: Decrapify kvm_register_clock() Pavel Tatashin
2018-07-19 22:23   ` [tip:x86/timers] " tip-bot for Thomas Gleixner
2018-07-19 20:55 ` [PATCH v15 04/26] x86/kvmclock: Cleanup the code Pavel Tatashin
2018-07-19 22:23   ` tip-bot for Thomas Gleixner [this message]
2018-07-19 20:55 ` [PATCH v15 05/26] x86/kvmclock: Mark variables __initdata and __ro_after_init Pavel Tatashin
2018-07-19 22:24   ` [tip:x86/timers] " tip-bot for Thomas Gleixner
2018-07-19 20:55 ` [PATCH v15 06/26] x86/kvmclock: Move kvmclock vsyscall param and init to kvmclock Pavel Tatashin
2018-07-19 22:24   ` [tip:x86/timers] " tip-bot for Thomas Gleixner
2018-07-19 20:55 ` [PATCH v15 07/26] x86/kvmclock: Switch kvmclock data to a PER_CPU variable Pavel Tatashin
2018-07-19 22:25   ` [tip:x86/timers] " tip-bot for Thomas Gleixner
2018-07-19 20:55 ` [PATCH v15 08/26] x86: text_poke() may access uninitialized struct pages Pavel Tatashin
2018-07-19 22:25   ` [tip:x86/timers] x86/alternatives, jumplabel: Use text_poke_early() before mm_init() tip-bot for Pavel Tatashin
2018-07-19 20:55 ` [PATCH v15 09/26] x86: initialize static branching early Pavel Tatashin
2018-07-19 22:26   ` [tip:x86/timers] x86/jump_label: Initialize " tip-bot for Pavel Tatashin
2018-07-19 20:55 ` [PATCH v15 10/26] x86/CPU: Call detect_nopl() only on the BSP Pavel Tatashin
2018-07-19 22:26   ` [tip:x86/timers] " tip-bot for Borislav Petkov
2018-07-19 20:55 ` [PATCH v15 11/26] x86/tsc: redefine notsc to behave as tsc=unstable Pavel Tatashin
2018-07-19 22:27   ` [tip:x86/timers] x86/tsc: Redefine " tip-bot for Pavel Tatashin
2018-07-19 20:55 ` [PATCH v15 12/26] x86/xen/time: initialize pv xen time in init_hypervisor_platform Pavel Tatashin
2018-07-19 22:27   ` [tip:x86/timers] x86/xen/time: Initialize pv xen time in init_hypervisor_platform() tip-bot for Pavel Tatashin
2018-07-19 20:55 ` [PATCH v15 13/26] x86/xen/time: output xen sched_clock time from 0 Pavel Tatashin
2018-07-19 22:28   ` [tip:x86/timers] x86/xen/time: Output " tip-bot for Pavel Tatashin
2018-07-19 20:55 ` [PATCH v15 14/26] s390/time: add read_persistent_wall_and_boot_offset() Pavel Tatashin
2018-07-19 22:28   ` [tip:x86/timers] s390/time: Add read_persistent_wall_and_boot_offset() tip-bot for Pavel Tatashin
2018-07-19 20:55 ` [PATCH v15 15/26] time: replace read_boot_clock64() with read_persistent_wall_and_boot_offset() Pavel Tatashin
2018-07-19 22:29   ` [tip:x86/timers] timekeeping: Replace " tip-bot for Pavel Tatashin
2018-07-19 20:55 ` [PATCH v15 16/26] time: default boot time offset to local_clock() Pavel Tatashin
2018-07-19 22:29   ` [tip:x86/timers] timekeeping: Default " tip-bot for Pavel Tatashin
2018-07-19 20:55 ` [PATCH v15 17/26] s390/time: remove read_boot_clock64() Pavel Tatashin
2018-07-19 22:30   ` [tip:x86/timers] s390/time: Remove read_boot_clock64() tip-bot for Pavel Tatashin
2018-07-19 20:55 ` [PATCH v15 18/26] ARM/time: remove read_boot_clock64() Pavel Tatashin
2018-07-19 22:30   ` [tip:x86/timers] ARM/time: Remove read_boot_clock64() tip-bot for Pavel Tatashin
2018-07-19 20:55 ` [PATCH v15 19/26] x86/tsc: calibrate tsc only once Pavel Tatashin
2018-07-19 22:31   ` [tip:x86/timers] x86/tsc: Calibrate " tip-bot for Pavel Tatashin
2018-07-19 20:55 ` [PATCH v15 20/26] x86/tsc: initialize cyc2ns when tsc freq. is determined Pavel Tatashin
2018-07-19 22:31   ` [tip:x86/timers] x86/tsc: Initialize cyc2ns when tsc frequency " tip-bot for Pavel Tatashin
2018-07-19 20:55 ` [PATCH v15 21/26] x86/tsc: use tsc early Pavel Tatashin
2018-07-19 22:32   ` [tip:x86/timers] x86/tsc: Use TSC as sched clock early tip-bot for Pavel Tatashin
2018-07-19 20:55 ` [PATCH v15 22/26] sched: move sched clock initialization and merge with generic clock Pavel Tatashin
2018-07-19 22:32   ` [tip:x86/timers] sched/clock: Move " tip-bot for Pavel Tatashin
2018-07-19 20:55 ` [PATCH v15 23/26] sched: early boot clock Pavel Tatashin
2018-07-19 22:33   ` [tip:x86/timers] sched/clock: Enable sched clock early tip-bot for Pavel Tatashin
2018-07-24 19:52     ` Guenter Roeck
2018-07-24 20:22       ` Pavel Tatashin
2018-07-25  0:36         ` Pavel Tatashin
2018-07-25  1:24           ` Guenter Roeck
2018-07-25  2:05             ` Pavel Tatashin
2018-07-25  2:41               ` Pavel Tatashin
2018-07-30 12:36                 ` Peter Zijlstra
2018-07-30 13:44                   ` Pavel Tatashin
2018-07-20  8:09   ` [PATCH v15 23/26] sched: early boot clock Peter Zijlstra
2018-07-20 10:00     ` [tip:x86/timers] sched/clock: Close a hole in sched_clock_init() tip-bot for Peter Zijlstra
2018-11-06  5:42   ` [PATCH v15 23/26] sched: early boot clock Dominique Martinet
2018-11-06  5:42   ` Dominique Martinet
2018-11-06  5:42     ` [Qemu-devel] " Dominique Martinet
2018-11-06 11:35     ` Steven Sistare
2018-11-06 11:35       ` [Qemu-devel] " Steven Sistare
2019-01-02 20:20       ` Salvatore Bonaccorso
2019-01-02 20:20         ` [Qemu-devel] " Salvatore Bonaccorso
2019-01-03 21:28         ` Pavel Tatashin
2019-01-03 21:28           ` [Qemu-devel] " Pavel Tatashin
2019-01-03 23:43           ` Dominique Martinet
2019-01-03 23:43             ` [Qemu-devel] " Dominique Martinet
2019-01-03 23:43             ` Dominique Martinet
2019-01-07 18:17             ` Pavel Tatashin
2019-01-07 18:17               ` [Qemu-devel] " Pavel Tatashin
2019-01-07 18:17               ` Pavel Tatashin
2019-01-07 23:48               ` Dominique Martinet
2019-01-07 23:48                 ` [Qemu-devel] " Dominique Martinet
2019-01-07 23:48                 ` Dominique Martinet
2019-01-08  1:04                 ` Pavel Tatashin
2019-01-08  1:04                   ` [Qemu-devel] " Pavel Tatashin
2019-01-08  1:04                   ` Pavel Tatashin
2019-01-08  1:09                   ` Dominique Martinet
2019-01-08  1:09                     ` [Qemu-devel] " Dominique Martinet
2019-01-08  1:09                     ` Dominique Martinet
2019-01-08  1:09                   ` Dominique Martinet
2019-01-26  2:04                   ` Jon DeVree
2019-01-26  2:04                     ` [Qemu-devel] " Jon DeVree
2019-01-26  2:04                     ` Jon DeVree
2019-01-26 16:11                     ` Pavel Tatashin
2019-01-26 16:11                       ` [Qemu-devel] " Pavel Tatashin
2019-01-26 16:11                       ` Pavel Tatashin
2019-01-07 23:48               ` Dominique Martinet
     [not found]           ` <20190104053013.GA6519@lorien.valinor.li>
2019-01-04  7:30             ` [PATCH v15 23/26] sched: early boot clock (was Re: Bug#918036: linux: uptime after reboot wrong (kvm-clock related?)) Thorsten Glaser
2019-01-04  7:30               ` [Qemu-devel] " Thorsten Glaser
2019-01-04  7:30               ` Bug#918036: " Thorsten Glaser
2018-07-19 20:55 ` [PATCH v15 24/26] sched: use static key for sched_clock_running Pavel Tatashin
2018-07-19 22:33   ` [tip:x86/timers] sched/clock: Use " tip-bot for Pavel Tatashin
2018-07-19 20:55 ` [PATCH v15 25/26] x86/tsc: split native_calibrate_cpu() into early and late parts Pavel Tatashin
2018-07-19 22:34   ` [tip:x86/timers] x86/tsc: Split " tip-bot for Pavel Tatashin
2018-07-19 20:55 ` [PATCH v15 26/26] x86/tsc: use tsc_calibrate_cpu_early and pit_hpet_ptimer_calibrate_cpu Pavel Tatashin
2018-07-19 22:35   ` [tip:x86/timers] x86/tsc: Make use of tsc_calibrate_cpu_early() tip-bot for Pavel Tatashin
2018-07-19 22:34 ` [PATCH v15 00/26] Early boot time stamps Thomas Gleixner
     [not found] <20190102163939.GB13145@eldamar.local>

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=tip-146c394d0c3c8e88df433a179c2b0b85fd8cf247@git.kernel.org \
    --to=tipbot@zytor.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=pasha.tatashin@oracle.com \
    --cc=pbonzini@redhat.com \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.