rtc: rtc-rv8803: Fix a couple locking bugs
Subsystems (2)
PATCH 1/1 rtc: rtc-rv8803: Fix a couple locking bugs
There was one missing unlock on error in rv8803_set_alarm() and one unlock in rv8803_ioctl() which was missing altogether.
Fixes 2f370c4a1a44 ('rtc: Add a driver for Micro Crystal RV8803')
Signed-off-by Dan Carpenter <[email protected]>
---
Presumably the IOCTL issue was a last minute change after the driver had been tested...
drivers/rtc/rtc-rv8803.c +4 -1
@@ -240,8 +240,10 @@ static int rv8803_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)spin_lock_irqsave (&rv8803->flags_lock, irqflags); ret =i2c_smbus_read_i2c_block_data (client,RV8803_FLAG ,2 , ctrl); -if (ret !=2 ) +if (ret !=2 ) { +spin_unlock_irqrestore (&rv8803->flags_lock, irqflags);return ret <0 ? ret : -EIO ; + } alarmvals[0 ] =bin2bcd (alrm->time.tm_min); alarmvals[1 ] =bin2bcd (alrm->time.tm_hour);
@@ -338,6 +340,7 @@ static int rv8803_ioctl(struct device *dev, unsigned int cmd, unsigned long arg)case RTC_VL_READ :spin_lock_irqsave (&rv8803->flags_lock, irqflags); flags =i2c_smbus_read_byte_data (client,RV8803_FLAG ); +spin_unlock_irqrestore (&rv8803->flags_lock, irqflags);if (flags <0 )return flags;
Hi,
Quoted 9 lines · Dan Carpenter
There was one missing unlock on error in
rv8803_set_alarm()and one unlock inrv8803_ioctl()which was missing altogether.Fixes 2f370c4a1a44 ('rtc: Add a driver for Micro Crystal RV8803')Signed-off-by Dan Carpenter <[email protected]>---
Presumably the IOCTL issue was a last minute change after the driver had been tested...
Yeah, I already fixed the first one and the lock in rv8803_ioctl is actually unnecessary.
Thanks for the info.
Quoted 24 lines
drivers/rtc/rtc-rv8803.c +4
-1@@ -240,8 +240,10 @@ static int rv8803_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)spin_lock_irqsave (&rv8803->flags_lock, irqflags); ret =i2c_smbus_read_i2c_block_data (client,RV8803_FLAG ,2 , ctrl); -if (ret !=2 ) +if (ret !=2 ) { +spin_unlock_irqrestore (&rv8803->flags_lock, irqflags);return ret <0 ? ret : -EIO ; + } alarmvals[0 ] =bin2bcd (alrm->time.tm_min); alarmvals[1 ] =bin2bcd (alrm->time.tm_hour);@@ -338,6 +340,7 @@ static int rv8803_ioctl(struct device *dev, unsigned int cmd, unsigned long arg)case RTC_VL_READ :spin_lock_irqsave (&rv8803->flags_lock, irqflags); flags =i2c_smbus_read_byte_data (client,RV8803_FLAG ); +spin_unlock_irqrestore (&rv8803->flags_lock, irqflags);if (flags <0 )return flags;
Signature · 3 lines
Alexandre Belloni, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com