mirror of
https://github.com/torvalds/linux.git
synced 2024-12-26 12:52:30 +00:00
[PATCH] RTC: Remove RTC UIP synchronization on x86_64
Signed-off-by: Matt Mackall <mpm@selenic.com> Cc: Andi Kleen <ak@muc.de> Cc: Alessandro Zummo <a.zummo@towertech.it> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
63732c2f37
commit
641f71f5f6
@ -504,42 +504,25 @@ unsigned long long sched_clock(void)
|
|||||||
|
|
||||||
static unsigned long get_cmos_time(void)
|
static unsigned long get_cmos_time(void)
|
||||||
{
|
{
|
||||||
unsigned int timeout = 1000000, year, mon, day, hour, min, sec;
|
unsigned int year, mon, day, hour, min, sec;
|
||||||
unsigned char uip = 0, this = 0;
|
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
unsigned extyear = 0;
|
unsigned extyear = 0;
|
||||||
|
|
||||||
/*
|
|
||||||
* 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);
|
spin_lock_irqsave(&rtc_lock, flags);
|
||||||
|
|
||||||
while (timeout && (!uip || this)) {
|
do {
|
||||||
uip |= this;
|
sec = CMOS_READ(RTC_SECONDS);
|
||||||
this = CMOS_READ(RTC_FREQ_SELECT) & RTC_UIP;
|
min = CMOS_READ(RTC_MINUTES);
|
||||||
timeout--;
|
hour = CMOS_READ(RTC_HOURS);
|
||||||
}
|
day = CMOS_READ(RTC_DAY_OF_MONTH);
|
||||||
|
mon = CMOS_READ(RTC_MONTH);
|
||||||
/*
|
year = CMOS_READ(RTC_YEAR);
|
||||||
* 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);
|
|
||||||
|
|
||||||
#ifdef CONFIG_ACPI
|
#ifdef CONFIG_ACPI
|
||||||
if (acpi_fadt.revision >= FADT2_REVISION_ID && acpi_fadt.century)
|
if (acpi_fadt.revision >= FADT2_REVISION_ID &&
|
||||||
extyear = CMOS_READ(acpi_fadt.century);
|
acpi_fadt.century)
|
||||||
|
extyear = CMOS_READ(acpi_fadt.century);
|
||||||
#endif
|
#endif
|
||||||
|
} while (sec != CMOS_READ(RTC_SECONDS));
|
||||||
|
|
||||||
spin_unlock_irqrestore(&rtc_lock, flags);
|
spin_unlock_irqrestore(&rtc_lock, flags);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user