From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
To: George Spelvin <linux@horizon.com>
Cc: john stultz <john.stultz@linaro.org>, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/2] timekeeping: Use unsigned int for seqlock sequence
Date: Tue, 13 May 2014 11:49:17 +0000 (UTC) [thread overview]
Message-ID: <754400443.15527.1399981757731.JavaMail.zimbra@efficios.com> (raw)
In-Reply-To: <20140513024519.31594.qmail@ns.horizon.com>
----- Original Message -----
> From: "George Spelvin" <linux@horizon.com>
> To: "john stultz" <john.stultz@linaro.org>, linux@horizon.com
> Cc: linux-kernel@vger.kernel.org, "mathieu desnoyers" <mathieu.desnoyers@efficios.com>
> Sent: Monday, May 12, 2014 10:45:19 PM
> Subject: [PATCH 1/2] timekeeping: Use unsigned int for seqlock sequence
>
> read_seqlock_begin returns an int, so using "unsigned long" to
> hold the return value is harmless, but a waste.
Did you try comparing this to changing read_seqlock to return
an "unsigned long" instead ? Does it change the executable
size at all ?
Seq locks correctness depends on ensuring the sequence
counter does not overflow. Strictly speaking, a 64-bit
value provides a stronger no-overflow guarantee than
a 32-bit value, even though it is already unlikely that
the 32-bit value will ever overflow in a sane system.
Therefore, I'd be tempted to use "unsigned long" if
possible if it's not significantly more expensive.
Thoughts ?
Thanks,
Mathieu
>
> Signed-off-by: George Spelvin <linux@horizon.com>
> ---
> kernel/time/timekeeping.c | 20 ++++++++++----------
> 1 file changed, 10 insertions(+), 10 deletions(-)
>
> diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
> index f7df8ea217..14e703e5bd 100644
> --- a/kernel/time/timekeeping.c
> +++ b/kernel/time/timekeeping.c
> @@ -300,7 +300,7 @@ static void timekeeping_forward_now(struct timekeeper
> *tk)
> int __getnstimeofday(struct timespec *ts)
> {
> struct timekeeper *tk = &timekeeper;
> - unsigned long seq;
> + unsigned int seq;
> s64 nsecs = 0;
>
> do {
> @@ -399,7 +399,7 @@ EXPORT_SYMBOL_GPL(ktime_get_ts);
> void timekeeping_clocktai(struct timespec *ts)
> {
> struct timekeeper *tk = &timekeeper;
> - unsigned long seq;
> + unsigned int seq;
> u64 nsecs;
>
> WARN_ON(timekeeping_suspended);
> @@ -447,7 +447,7 @@ EXPORT_SYMBOL(ktime_get_clocktai);
> void getnstime_raw_and_real(struct timespec *ts_raw, struct timespec
> *ts_real)
> {
> struct timekeeper *tk = &timekeeper;
> - unsigned long seq;
> + unsigned int seq;
> s64 nsecs_raw, nsecs_real;
>
> WARN_ON_ONCE(timekeeping_suspended);
> @@ -700,7 +700,7 @@ EXPORT_SYMBOL_GPL(ktime_get_real);
> void getrawmonotonic(struct timespec *ts)
> {
> struct timekeeper *tk = &timekeeper;
> - unsigned long seq;
> + unsigned int seq;
> s64 nsecs;
>
> do {
> @@ -720,7 +720,7 @@ EXPORT_SYMBOL(getrawmonotonic);
> int timekeeping_valid_for_hres(void)
> {
> struct timekeeper *tk = &timekeeper;
> - unsigned long seq;
> + unsigned int seq;
> int ret;
>
> do {
> @@ -739,7 +739,7 @@ int timekeeping_valid_for_hres(void)
> u64 timekeeping_max_deferment(void)
> {
> struct timekeeper *tk = &timekeeper;
> - unsigned long seq;
> + unsigned int seq;
> u64 ret;
>
> do {
> @@ -1546,7 +1546,7 @@ struct timespec current_kernel_time(void)
> {
> struct timekeeper *tk = &timekeeper;
> struct timespec now;
> - unsigned long seq;
> + unsigned int seq;
>
> do {
> seq = read_seqcount_begin(&timekeeper_seq);
> @@ -1562,7 +1562,7 @@ struct timespec get_monotonic_coarse(void)
> {
> struct timekeeper *tk = &timekeeper;
> struct timespec now, mono;
> - unsigned long seq;
> + unsigned int seq;
>
> do {
> seq = read_seqcount_begin(&timekeeper_seq);
> @@ -1596,7 +1596,7 @@ void get_xtime_and_monotonic_and_sleep_offset(struct
> timespec *xtim,
> struct timespec *wtom, struct timespec *sleep)
> {
> struct timekeeper *tk = &timekeeper;
> - unsigned long seq;
> + unsigned int seq;
>
> do {
> seq = read_seqcount_begin(&timekeeper_seq);
> @@ -1647,7 +1647,7 @@ ktime_t ktime_get_update_offsets(ktime_t *offs_real,
> ktime_t *offs_boot,
> ktime_t ktime_get_monotonic_offset(void)
> {
> struct timekeeper *tk = &timekeeper;
> - unsigned long seq;
> + unsigned int seq;
> struct timespec wtom;
>
> do {
> --
> 1.9.2
>
>
--
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
next prev parent reply other threads:[~2014-05-13 11:49 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-06 21:33 [PATCH 4/4] timekeeping: Use printk_deferred when holding timekeeping seqlock George Spelvin
2014-05-12 16:21 ` [rough draft PATCH] avoid stalls on the " George Spelvin
2014-05-12 18:23 ` John Stultz
2014-05-12 17:49 ` [PATCH 4/4] timekeeping: Use printk_deferred when holding " John Stultz
2014-05-13 2:44 ` George Spelvin
2014-05-13 3:39 ` John Stultz
2014-05-13 5:13 ` George Spelvin
2014-05-13 12:07 ` Mathieu Desnoyers
2014-05-13 13:29 ` George Spelvin
2014-05-13 13:39 ` Mathieu Desnoyers
2014-05-13 16:18 ` George Spelvin
2014-05-13 2:45 ` [PATCH 1/2] timekeeping: Use unsigned int for seqlock sequence George Spelvin
2014-05-13 11:49 ` Mathieu Desnoyers [this message]
2014-05-13 2:48 ` [PATCH 2/2] timekeeping: Mark struct timekeeper * passed to notifiers as const George Spelvin
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=754400443.15527.1399981757731.JavaMail.zimbra@efficios.com \
--to=mathieu.desnoyers@efficios.com \
--cc=john.stultz@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@horizon.com \
/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.