Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=f3e92d355e1251fb6d1a15508f2a5448d2354727
Commit:     f3e92d355e1251fb6d1a15508f2a5448d2354727
Parent:     e8c5c045d790e7018c56f1a998a2d240b732ea3c
Author:     Jan Beulich <[EMAIL PROTECTED]>
AuthorDate: Wed Dec 13 00:35:04 2006 -0800
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Wed Dec 13 09:05:52 2006 -0800

    [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: Jan Beulich <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 drivers/char/rtc.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/drivers/char/rtc.c b/drivers/char/rtc.c
index 66a7385..2eb53be 100644
--- a/drivers/char/rtc.c
+++ b/drivers/char/rtc.c
@@ -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);
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to