Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / drivers / char / watchdog / cpu5wdt.c
index 2865dac..3e8410b 100644 (file)
@@ -28,6 +28,8 @@
 #include <linux/init.h>
 #include <linux/ioport.h>
 #include <linux/timer.h>
+#include <linux/completion.h>
+#include <linux/jiffies.h>
 #include <asm/io.h>
 #include <asm/uaccess.h>
 
@@ -56,7 +58,7 @@ static int ticks = 10000;
 /* some device data */
 
 static struct {
-       struct semaphore stop;
+       struct completion stop;
        volatile int running;
        struct timer_list timer;
        volatile int queue;
@@ -84,7 +86,7 @@ static void cpu5wdt_trigger(unsigned long unused)
        }
        else {
                /* ticks doesn't matter anyway */
-               up(&cpu5wdt_device.stop);
+               complete(&cpu5wdt_device.stop);
        }
 
 }
@@ -238,7 +240,7 @@ static int __devinit cpu5wdt_init(void)
        if ( !val )
                printk(KERN_INFO PFX "sorry, was my fault\n");
 
-       init_MUTEX_LOCKED(&cpu5wdt_device.stop);
+       init_completion(&cpu5wdt_device.stop);
        cpu5wdt_device.queue = 0;
 
        clear_bit(0, &cpu5wdt_device.inuse);
@@ -268,7 +270,7 @@ static void __devexit cpu5wdt_exit(void)
 {
        if ( cpu5wdt_device.queue ) {
                cpu5wdt_device.queue = 0;
-               down(&cpu5wdt_device.stop);
+               wait_for_completion(&cpu5wdt_device.stop);
        }
 
        misc_deregister(&cpu5wdt_misc);