From: george anzinger <george@mvista.com>
To: Stephen Hemminger <shemminger@osdl.org>
Cc: Linus Torvalds <torvalds@transmeta.com>,
Andrea Arcangeli <andrea@suse.de>, Andi Kleen <ak@suse.de>,
Andrew Morton <akpm@digeo.com>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] (2/4) 2.5.59 fast reader/writer lock for gettimeofday
Date: Tue, 28 Jan 2003 16:24:50 -0800 [thread overview]
Message-ID: <3E371F52.370D1F77@mvista.com> (raw)
In-Reply-To: 1043797351.10150.302.camel@dell_ss3.pdx.osdl.net
One wonders if it wouldn't be better to put the div in
gettimeofday() outside of the lock region, see below... It
makes the while condition even more unlikely.
-g
~snip~
> diff -urN -X dontdiff linux-2.5.59/arch/i386/kernel/time.c linux-2.5-frlock/arch/i386/kernel/time.c
> --- linux-2.5.59/arch/i386/kernel/time.c 2003-01-17 09:42:14.000000000 -0800
> +++ linux-2.5-frlock/arch/i386/kernel/time.c 2003-01-24 15:06:37.000000000 -0800
> @@ -70,7 +70,7 @@
>
> unsigned long cpu_khz; /* Detected as we calibrate the TSC */
>
> -extern rwlock_t xtime_lock;
> +extern frlock_t xtime_lock;
> extern unsigned long wall_jiffies;
>
> spinlock_t rtc_lock = SPIN_LOCK_UNLOCKED;
> @@ -87,19 +87,21 @@
> */
> void do_gettimeofday(struct timeval *tv)
> {
> - unsigned long flags;
> + unsigned long seq;
++++> unsigned long xtimensec;
> unsigned long usec, sec;
>
> - read_lock_irqsave(&xtime_lock, flags);
> - usec = timer->get_offset();
> - {
> - unsigned long lost = jiffies - wall_jiffies;
> - if (lost)
> - usec += lost * (1000000 / HZ);
> - }
> - sec = xtime.tv_sec;
> - usec += (xtime.tv_nsec / 1000);
> - read_unlock_irqrestore(&xtime_lock, flags);
> + do {
> + seq = fr_read_begin(&xtime_lock);
> +
> + usec = timer->get_offset();
> + {
> + unsigned long lost = jiffies - wall_jiffies;
> + if (lost)
> + usec += lost * (1000000 / HZ);
> + }
> + sec = xtime.tv_sec;
----> + usec += (xtime.tv_nsec / 1000);
++++> + xtimensec = xtime.tv_nsec;
> + } while (unlikely(seq != fr_read_end(&xtime_lock)));
>
++++> usec += xtimensec / 1000;
> while (usec >= 1000000) {
> usec -= 1000000;
> @@ -112,7 +114,7 @@
>
> void do_settimeofday(struct timeval *tv)
> {
> - write_lock_irq(&xtime_lock);
> + fr_write_lock_irq(&xtime_lock);
> /*
> * This is revolting. We need to set "xtime" correctly. However, the
> * value in this location is the value at the most recent update of
> @@ -133,7 +135,7 @@
> time_status |= STA_UNSYNC;
> time_maxerror = NTP_PHASE_LIMIT;
> time_esterror = NTP_PHASE_LIMIT;
> - write_unlock_irq(&xtime_lock);
> + fr_write_unlock_irq(&xtime_lock);
> }
>
> /*
> @@ -279,12 +281,12 @@
> * the irq version of write_lock because as just said we have irq
> * locally disabled. -arca
> */
> - write_lock(&xtime_lock);
> + fr_write_lock(&xtime_lock);
>
> timer->mark_offset();
>
> do_timer_interrupt(irq, NULL, regs);
>
> - write_unlock(&xtime_lock);
> + fr_write_unlock(&xtime_lock);
>
> }
--
George Anzinger george@mvista.com
High-res-timers:
http://sourceforge.net/projects/high-res-timers/
Preemption patch:
http://www.kernel.org/pub/linux/kernel/people/rml
prev parent reply other threads:[~2003-01-29 0:16 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-01-28 23:42 [PATCH] (2/4) 2.5.59 fast reader/writer lock for gettimeofday Stephen Hemminger
2003-01-29 0:24 ` george anzinger [this message]
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=3E371F52.370D1F77@mvista.com \
--to=george@mvista.com \
--cc=ak@suse.de \
--cc=akpm@digeo.com \
--cc=andrea@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=shemminger@osdl.org \
--cc=torvalds@transmeta.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox