diff options
Diffstat (limited to 'drivers/rtc/rtc-m48t59.c')
| -rw-r--r-- | drivers/rtc/rtc-m48t59.c | 18 | 
1 files changed, 10 insertions, 8 deletions
diff --git a/drivers/rtc/rtc-m48t59.c b/drivers/rtc/rtc-m48t59.c index 90abb5bd589c..d99a705bec07 100644 --- a/drivers/rtc/rtc-m48t59.c +++ b/drivers/rtc/rtc-m48t59.c @@ -345,11 +345,12 @@ static ssize_t m48t59_nvram_read(struct file *filp, struct kobject *kobj,  	ssize_t cnt = 0;  	unsigned long flags; -	for (; size > 0 && pos < pdata->offset; cnt++, size--) { -		spin_lock_irqsave(&m48t59->lock, flags); +	spin_lock_irqsave(&m48t59->lock, flags); + +	for (; cnt < size; cnt++)  		*buf++ = M48T59_READ(cnt); -		spin_unlock_irqrestore(&m48t59->lock, flags); -	} + +	spin_unlock_irqrestore(&m48t59->lock, flags);  	return cnt;  } @@ -365,11 +366,12 @@ static ssize_t m48t59_nvram_write(struct file *filp, struct kobject *kobj,  	ssize_t cnt = 0;  	unsigned long flags; -	for (; size > 0 && pos < pdata->offset; cnt++, size--) { -		spin_lock_irqsave(&m48t59->lock, flags); +	spin_lock_irqsave(&m48t59->lock, flags); + +	for (; cnt < size; cnt++)  		M48T59_WRITE(*buf++, cnt); -		spin_unlock_irqrestore(&m48t59->lock, flags); -	} + +	spin_unlock_irqrestore(&m48t59->lock, flags);  	return cnt;  }  |