mirror of
https://github.com/genesi/linux-legacy.git
synced 2026-05-17 15:28:31 +00:00
Use rtc_lock to protect RTC operations
Many RTC routines were not protected against each other, so there are
potential races, for example, ntp-update against /dev/rtc. This patch
fixes them using rtc_lock.
Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
committed by
Ralf Baechle
parent
e329331aed
commit
53c2df2f4e
@@ -8,6 +8,7 @@
|
||||
#include <asm/lasat/lasat.h>
|
||||
#include <linux/delay.h>
|
||||
#include <asm/lasat/ds1603.h>
|
||||
#include <asm/time.h>
|
||||
|
||||
#include "ds1603.h"
|
||||
|
||||
@@ -138,19 +139,27 @@ static void rtc_end_op(void)
|
||||
unsigned long ds1603_read(void)
|
||||
{
|
||||
unsigned long word;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&rtc_lock, flags);
|
||||
rtc_init_op();
|
||||
rtc_write_byte(READ_TIME_CMD);
|
||||
word = rtc_read_word();
|
||||
rtc_end_op();
|
||||
spin_unlock_irqrestore(&rtc_lock, flags);
|
||||
return word;
|
||||
}
|
||||
|
||||
int ds1603_set(unsigned long time)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&rtc_lock, flags);
|
||||
rtc_init_op();
|
||||
rtc_write_byte(SET_TIME_CMD);
|
||||
rtc_write_word(time);
|
||||
rtc_end_op();
|
||||
spin_unlock_irqrestore(&rtc_lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user