All of lore.kernel.org
 help / color / mirror / Atom feed
From: tip-bot for John Stultz <johnstul@us.ibm.com>
To: linux-tip-commits@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, hpa@zytor.com, mingo@redhat.com,
	johnstul@us.ibm.com, tglx@linutronix.de
Subject: [tip:timers/clocksource] clocksource: Add __clocksource_updatefreq_hz/khz methods
Date: Tue, 27 Jul 2010 10:49:03 GMT	[thread overview]
Message-ID: <tip-852db46d55e85b475a72e665ca08d3317769ceef@git.kernel.org> (raw)
In-Reply-To: <1279068988-21864-12-git-send-email-johnstul@us.ibm.com>

Commit-ID:  852db46d55e85b475a72e665ca08d3317769ceef
Gitweb:     http://git.kernel.org/tip/852db46d55e85b475a72e665ca08d3317769ceef
Author:     John Stultz <johnstul@us.ibm.com>
AuthorDate: Tue, 13 Jul 2010 17:56:28 -0700
Committer:  Thomas Gleixner <tglx@linutronix.de>
CommitDate: Tue, 27 Jul 2010 12:40:55 +0200

clocksource: Add __clocksource_updatefreq_hz/khz methods

To properly handle clocksources that change frequencies
at the clocksource->enable() point, this patch adds
a method that will update the clocksource's mult/shift and
max_idle_ns values.

Signed-off-by: John Stultz <johnstul@us.ibm.com>
LKML-Reference: <1279068988-21864-12-git-send-email-johnstul@us.ibm.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

---
 include/linux/clocksource.h |   11 +++++++++++
 kernel/time/clocksource.c   |   29 ++++++++++++++++++++++++-----
 2 files changed, 35 insertions(+), 5 deletions(-)

diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h
index 21677d9..c37b21a 100644
--- a/include/linux/clocksource.h
+++ b/include/linux/clocksource.h
@@ -292,6 +292,8 @@ clocks_calc_mult_shift(u32 *mult, u32 *shift, u32 from, u32 to, u32 minsec);
  */
 extern int
 __clocksource_register_scale(struct clocksource *cs, u32 scale, u32 freq);
+extern void
+__clocksource_updatefreq_scale(struct clocksource *cs, u32 scale, u32 freq);
 
 static inline int clocksource_register_hz(struct clocksource *cs, u32 hz)
 {
@@ -303,6 +305,15 @@ static inline int clocksource_register_khz(struct clocksource *cs, u32 khz)
 	return __clocksource_register_scale(cs, 1000, khz);
 }
 
+static inline void __clocksource_updatefreq_hz(struct clocksource *cs, u32 hz)
+{
+	__clocksource_updatefreq_scale(cs, 1, hz);
+}
+
+static inline void __clocksource_updatefreq_khz(struct clocksource *cs, u32 khz)
+{
+	__clocksource_updatefreq_scale(cs, 1000, khz);
+}
 
 static inline void
 clocksource_calc_mult_shift(struct clocksource *cs, u32 freq, u32 minsec)
diff --git a/kernel/time/clocksource.c b/kernel/time/clocksource.c
index c543d21..c18d7ef 100644
--- a/kernel/time/clocksource.c
+++ b/kernel/time/clocksource.c
@@ -639,19 +639,18 @@ static void clocksource_enqueue(struct clocksource *cs)
 #define MAX_UPDATE_LENGTH 5 /* Seconds */
 
 /**
- * __clocksource_register_scale - Used to install new clocksources
+ * __clocksource_updatefreq_scale - Used update clocksource with new freq
  * @t:		clocksource to be registered
  * @scale:	Scale factor multiplied against freq to get clocksource hz
  * @freq:	clocksource frequency (cycles per second) divided by scale
  *
- * Returns -EBUSY if registration fails, zero otherwise.
+ * This should only be called from the clocksource->enable() method.
  *
  * This *SHOULD NOT* be called directly! Please use the
- * clocksource_register_hz() or clocksource_register_khz helper functions.
+ * clocksource_updatefreq_hz() or clocksource_updatefreq_khz helper functions.
  */
-int __clocksource_register_scale(struct clocksource *cs, u32 scale, u32 freq)
+void __clocksource_updatefreq_scale(struct clocksource *cs, u32 scale, u32 freq)
 {
-
 	/*
 	 * Ideally we want to use  some of the limits used in
 	 * clocksource_max_deferment, to provide a more informed
@@ -662,7 +661,27 @@ int __clocksource_register_scale(struct clocksource *cs, u32 scale, u32 freq)
 				      NSEC_PER_SEC/scale,
 				      MAX_UPDATE_LENGTH*scale);
 	cs->max_idle_ns = clocksource_max_deferment(cs);
+}
+EXPORT_SYMBOL_GPL(__clocksource_updatefreq_scale);
+
+/**
+ * __clocksource_register_scale - Used to install new clocksources
+ * @t:		clocksource to be registered
+ * @scale:	Scale factor multiplied against freq to get clocksource hz
+ * @freq:	clocksource frequency (cycles per second) divided by scale
+ *
+ * Returns -EBUSY if registration fails, zero otherwise.
+ *
+ * This *SHOULD NOT* be called directly! Please use the
+ * clocksource_register_hz() or clocksource_register_khz helper functions.
+ */
+int __clocksource_register_scale(struct clocksource *cs, u32 scale, u32 freq)
+{
+
+	/* Intialize mult/shift and max_idle_ns */
+	__clocksource_updatefreq_scale(cs, scale, freq);
 
+	/* Add clocksource to the clcoksource list */
 	mutex_lock(&clocksource_mutex);
 	clocksource_enqueue(cs);
 	clocksource_select();

  reply	other threads:[~2010-07-27 10:49 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-07-14  0:56 [PATCH 00/11] -tip Timekeeping changes for 2.6.36 John Stultz
2010-07-14  0:56 ` [PATCH 01/11] x86: Fix vtime/file timestamp inconsistencies John Stultz
2010-07-14  0:56   ` [PATCH 02/11] Implement timespec_add John Stultz
2010-07-14  0:56     ` [PATCH 03/11] time: Kill off CONFIG_GENERIC_TIME John Stultz
2010-07-14  0:56       ` [PATCH 04/11] powerpc: Simplify update_vsyscall John Stultz
2010-07-14  0:56         ` [PATCH 05/11] powerpc: Cleanup xtime usage John Stultz
2010-07-14  0:56           ` [PATCH 06/11] Fix update_vsyscall to provide wall_to_monotonic offset John Stultz
2010-07-14  0:56             ` [PATCH 07/11] Convert um to use read_persistent_clock John Stultz
2010-07-14  0:56               ` [PATCH 08/11] Cleanup hrtimer.c's direct access to wall_to_monotonic John Stultz
2010-07-14  0:56                 ` [PATCH 09/11] Make xtime and wall_to_monotonic static John Stultz
2010-07-14  0:56                   ` [PATCH 10/11] Convert common x86 clocksources to use clocksource_register_hz/khz John Stultz
2010-07-14  0:56                     ` [PATCH 11/11] Add __clocksource_updatefreq_hz/khz methods John Stultz
2010-07-27 10:49                       ` tip-bot for John Stultz [this message]
2010-07-27 10:48                     ` [tip:timers/clocksource] x86: Convert common clocksources to use clocksource_register_hz/khz tip-bot for John Stultz
2010-07-27 10:48                   ` [tip:timers/clocksource] timekeeping: Make xtime and wall_to_monotonic static tip-bot for John Stultz
2010-07-27 10:48                 ` [tip:timers/clocksource] hrtimer: Cleanup direct access to wall_to_monotonic tip-bot for John Stultz
2010-07-27 10:47               ` [tip:timers/clocksource] um: Convert to use read_persistent_clock tip-bot for John Stultz
2010-07-27 10:47             ` [tip:timers/clocksource] timkeeping: Fix update_vsyscall to provide wall_to_monotonic offset tip-bot for John Stultz
2010-07-27 10:47           ` [tip:timers/clocksource] powerpc: Cleanup xtime usage tip-bot for John Stultz
2010-07-27 10:46         ` [tip:timers/clocksource] powerpc: Simplify update_vsyscall tip-bot for John Stultz
2010-07-27 23:41         ` [PATCH 04/11] " Paul Mackerras
2010-07-27 23:41           ` Paul Mackerras
2010-07-28  1:33           ` john stultz
2010-07-28  1:33             ` john stultz
2010-07-27 10:46       ` [tip:timers/clocksource] time: Kill off CONFIG_GENERIC_TIME tip-bot for John Stultz
2010-07-27 10:46     ` [tip:timers/clocksource] time: Implement timespec_add tip-bot for John Stultz
2010-07-14  2:40   ` [PATCH 01/11] x86: Fix vtime/file timestamp inconsistencies KOSAKI Motohiro
2010-07-14 16:19     ` john stultz
2010-07-15  1:51       ` KOSAKI Motohiro
2010-07-15  2:46         ` john stultz
2010-07-15  4:41           ` KOSAKI Motohiro
2010-07-15 19:30             ` john stultz
2010-07-15  2:51         ` john stultz
2010-07-15  4:41           ` KOSAKI Motohiro
2010-07-27 10:45   ` [tip:timers/clocksource] " tip-bot for John Stultz

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-852db46d55e85b475a72e665ca08d3317769ceef@git.kernel.org \
    --to=johnstul@us.ibm.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=mingo@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.