lkml.org 
[lkml]   [2006]   [Mar]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/14] RTC: Remove RTC UIP synchronization on x86_64
    Date
    Remove RTC UIP synchronization on x86_64

    Signed-off-by: Matt Mackall <mpm@selenic.com>

    Index: rtc/arch/x86_64/kernel/time.c
    ===================================================================
    --- rtc.orig/arch/x86_64/kernel/time.c 2006-03-16 16:48:38.000000000 -0600
    +++ rtc/arch/x86_64/kernel/time.c 2006-03-16 17:21:17.000000000 -0600
    @@ -514,36 +514,19 @@ unsigned long long sched_clock(void)

    static unsigned long get_cmos_time(void)
    {
    - unsigned int timeout = 1000000, year, mon, day, hour, min, sec;
    - unsigned char uip = 0, this = 0;
    + unsigned int year, mon, day, hour, min, sec;
    unsigned long flags;

    -/*
    - * The Linux interpretation of the CMOS clock register contents: When the
    - * Update-In-Progress (UIP) flag goes from 1 to 0, the RTC registers show the
    - * second which has precisely just started. Waiting for this can take up to 1
    - * second, we timeout approximately after 2.4 seconds on a machine with
    - * standard 8.3 MHz ISA bus.
    - */
    -
    spin_lock_irqsave(&rtc_lock, flags);

    - while (timeout && (!uip || this)) {
    - uip |= this;
    - this = CMOS_READ(RTC_FREQ_SELECT) & RTC_UIP;
    - timeout--;
    - }
    -
    - /*
    - * Here we are safe to assume the registers won't change for a whole
    - * second, so we just go ahead and read them.
    - */
    - sec = CMOS_READ(RTC_SECONDS);
    - min = CMOS_READ(RTC_MINUTES);
    - hour = CMOS_READ(RTC_HOURS);
    - day = CMOS_READ(RTC_DAY_OF_MONTH);
    - mon = CMOS_READ(RTC_MONTH);
    - year = CMOS_READ(RTC_YEAR);
    + do {
    + sec = CMOS_READ(RTC_SECONDS);
    + min = CMOS_READ(RTC_MINUTES);
    + hour = CMOS_READ(RTC_HOURS);
    + day = CMOS_READ(RTC_DAY_OF_MONTH);
    + mon = CMOS_READ(RTC_MONTH);
    + year = CMOS_READ(RTC_YEAR);
    + } while (sec != CMOS_READ(RTC_SECONDS));

    spin_unlock_irqrestore(&rtc_lock, flags);

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2006-03-18 00:34    [from the cache]
    ©2003-2011 Jasper Spaans