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

Commit f3e92d35 authored by Jan Beulich's avatar Jan Beulich Committed by Linus Torvalds
Browse files

[PATCH] rtc: fx error case



Ensure RTC driver doesn't use its timer when it doesn't get to set it up
(as it cannot currently prevent other of its functions to be called from
outside when not built as a module - probably this should also be
addressed).

Signed-off-by: default avatarJan Beulich <jbeulich@novell.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent e8c5c045
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -958,6 +958,7 @@ static int __init rtc_init(void)
		}
	}
#endif
	rtc_has_irq = 0;
	printk(KERN_ERR "rtc_init: no PC rtc found\n");
	return -EIO;

@@ -972,6 +973,7 @@ found:
	 * PCI Slot 2 INTA# (and some INTx# in Slot 1).
	 */
	if (request_irq(rtc_irq, rtc_interrupt, IRQF_SHARED, "rtc", (void *)&rtc_port)) {
		rtc_has_irq = 0;
		printk(KERN_ERR "rtc: cannot register IRQ %d\n", rtc_irq);
		return -EIO;
	}
@@ -982,6 +984,9 @@ no_irq:
	else
		r = request_mem_region(RTC_PORT(0), RTC_IO_EXTENT, "rtc");
	if (!r) {
#ifdef RTC_IRQ
		rtc_has_irq = 0;
#endif
		printk(KERN_ERR "rtc: I/O resource %lx is not free.\n",
		       (long)(RTC_PORT(0)));
		return -EIO;
@@ -996,6 +1001,7 @@ no_irq:

	if(request_irq(RTC_IRQ, rtc_int_handler_ptr, IRQF_DISABLED, "rtc", NULL)) {
		/* Yeah right, seeing as irq 8 doesn't even hit the bus. */
		rtc_has_irq = 0;
		printk(KERN_ERR "rtc: IRQ %d is not free.\n", RTC_IRQ);
		if (RTC_IOMAPPED)
			release_region(RTC_PORT(0), RTC_IO_EXTENT);
@@ -1012,6 +1018,7 @@ no_irq:
	if (misc_register(&rtc_dev)) {
#ifdef RTC_IRQ
		free_irq(RTC_IRQ, NULL);
		rtc_has_irq = 0;
#endif
		release_region(RTC_PORT(0), RTC_IO_EXTENT);
		return -ENODEV;
@@ -1021,6 +1028,7 @@ no_irq:
	if (!ent) {
#ifdef RTC_IRQ
		free_irq(RTC_IRQ, NULL);
		rtc_has_irq = 0;
#endif
		release_region(RTC_PORT(0), RTC_IO_EXTENT);
		misc_deregister(&rtc_dev);