|
@@ -82,18 +82,15 @@ static int set_rtc_mmss(unsigned long nowtime)
|
|
int retval = 0;
|
|
int retval = 0;
|
|
int real_seconds, real_minutes, cmos_minutes;
|
|
int real_seconds, real_minutes, cmos_minutes;
|
|
unsigned char control, freq_select;
|
|
unsigned char control, freq_select;
|
|
|
|
+ unsigned long flags;
|
|
|
|
|
|
/*
|
|
/*
|
|
- * IRQs are disabled when we're called from the timer interrupt,
|
|
|
|
- * no need for spin_lock_irqsave()
|
|
|
|
|
|
+ * set_rtc_mmss is called when irqs are enabled, so disable irqs here
|
|
*/
|
|
*/
|
|
-
|
|
|
|
- spin_lock(&rtc_lock);
|
|
|
|
-
|
|
|
|
|
|
+ spin_lock_irqsave(&rtc_lock, flags);
|
|
/*
|
|
/*
|
|
* Tell the clock it's being set and stop it.
|
|
* Tell the clock it's being set and stop it.
|
|
*/
|
|
*/
|
|
-
|
|
|
|
control = CMOS_READ(RTC_CONTROL);
|
|
control = CMOS_READ(RTC_CONTROL);
|
|
CMOS_WRITE(control | RTC_SET, RTC_CONTROL);
|
|
CMOS_WRITE(control | RTC_SET, RTC_CONTROL);
|
|
|
|
|
|
@@ -138,7 +135,7 @@ static int set_rtc_mmss(unsigned long nowtime)
|
|
CMOS_WRITE(control, RTC_CONTROL);
|
|
CMOS_WRITE(control, RTC_CONTROL);
|
|
CMOS_WRITE(freq_select, RTC_FREQ_SELECT);
|
|
CMOS_WRITE(freq_select, RTC_FREQ_SELECT);
|
|
|
|
|
|
- spin_unlock(&rtc_lock);
|
|
|
|
|
|
+ spin_unlock_irqrestore(&rtc_lock, flags);
|
|
|
|
|
|
return retval;
|
|
return retval;
|
|
}
|
|
}
|