Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1d96469a authored by Atsushi Nemoto's avatar Atsushi Nemoto Committed by Linus Torvalds
Browse files

rtc: fix double lock on UIE emulation



With commit 5ad31a57 ("rtc: remove BKL
for ioctl()"), RTC_UIE_ON ioctl cause double lock on rtc->ops_lock.
The ops_lock must not be held while set_uie() calls rtc_read_time()
which takes the lock.  Also clear_uie() does not need ops_lock.  This
patch fixes return value of RTC_UIE_OFF ioctl too.

Signed-off-by: default avatarAtsushi Nemoto <anemo@mba.ocn.ne.jp>
Cc: David Brownell <david-b@pacbell.net>
Cc: Russell King <rmk@arm.linux.org.uk>
Cc: Alessandro Zummo <a.zummo@towertech.it>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent ff9bc512
Loading
Loading
Loading
Loading
+4 −1
Original line number Original line Diff line number Diff line
@@ -403,11 +403,14 @@ static long rtc_dev_ioctl(struct file *file,


#ifdef CONFIG_RTC_INTF_DEV_UIE_EMUL
#ifdef CONFIG_RTC_INTF_DEV_UIE_EMUL
	case RTC_UIE_OFF:
	case RTC_UIE_OFF:
		mutex_unlock(&rtc->ops_lock);
		clear_uie(rtc);
		clear_uie(rtc);
		break;
		return 0;


	case RTC_UIE_ON:
	case RTC_UIE_ON:
		mutex_unlock(&rtc->ops_lock);
		err = set_uie(rtc);
		err = set_uie(rtc);
		return err;
#endif
#endif
	default:
	default:
		err = -ENOTTY;
		err = -ENOTTY;