Message ID | 1437947316-5652-9-git-send-email-vz@mleia.com |
---|---|
State | Superseded |
Headers | show |
On 27/07/2015 at 00:48:33 +0300, Vladimir Zapolskiy wrote : > @@ -365,11 +366,10 @@ 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); > - } > Isn't a spin_unlock_irqrestore() missing?
Hi Alexandre, On 05.08.2015 11:27, Alexandre Belloni wrote: > On 27/07/2015 at 00:48:33 +0300, Vladimir Zapolskiy wrote : >> @@ -365,11 +366,10 @@ 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); >> - } >> > > Isn't a spin_unlock_irqrestore() missing? > oops, you are correct, will update this change. With best wishes, Vladimir
diff --git a/drivers/rtc/rtc-m48t59.c b/drivers/rtc/rtc-m48t59.c index 90abb5b..512c44b 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,10 @@ 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); - } return cnt; }
The change removes redundant sysfs binary file boundary checks, since this task is already done on caller side in fs/sysfs/file.c Spinlock acquisition/release is moved out of the loop body to get atomic states of NVRAM reading and writing operations. Signed-off-by: Vladimir Zapolskiy <vz@mleia.com> --- drivers/rtc/rtc-m48t59.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-)