Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e42162a46d948769c8b45d25ee81827bc7dac435
Commit:     e42162a46d948769c8b45d25ee81827bc7dac435
Parent:     c9d7710ea2b497784314a916a39d4d390855a557
Author:     Wim Van Sebroeck <[EMAIL PROTECTED]>
AuthorDate: Sat Jan 27 22:12:54 2007 +0100
Committer:  Wim Van Sebroeck <[EMAIL PROTECTED]>
CommitDate: Sat Jan 27 22:12:54 2007 +0100

    [WATCHDOG] ib700wdt.c spinlock/WDIOC_SETOPTIONS changes
    
    Add the WDIOC_SETOPTIONS ioctl call. Because of this we
    move the spinlocking to the different watchdog operations.
    
    Signed-off-by: Wim Van Sebroeck <[EMAIL PROTECTED]>
---
 drivers/char/watchdog/ib700wdt.c |   32 ++++++++++++++++++++++++++------
 1 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/drivers/char/watchdog/ib700wdt.c b/drivers/char/watchdog/ib700wdt.c
index 3cec679..be61e47 100644
--- a/drivers/char/watchdog/ib700wdt.c
+++ b/drivers/char/watchdog/ib700wdt.c
@@ -128,14 +128,20 @@ MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped 
once started (default=" _
 static void
 ibwdt_ping(void)
 {
+       spin_lock(&ibwdt_lock);
+
        /* Write a watchdog value */
        outb_p(wd_margin, WDT_START);
+
+       spin_unlock(&ibwdt_lock);
 }
 
 static void
 ibwdt_disable(void)
 {
+       spin_lock(&ibwdt_lock);
        outb_p(0, WDT_STOP);
+       spin_unlock(&ibwdt_lock);
 }
 
 static int
@@ -218,7 +224,26 @@ ibwdt_ioctl(struct inode *inode, struct file *file, 
unsigned int cmd,
 
        case WDIOC_GETTIMEOUT:
          return put_user(wd_times[wd_margin], p);
-         break;
+
+       case WDIOC_SETOPTIONS:
+       {
+         int options, retval = -EINVAL;
+
+         if (get_user(options, p))
+           return -EFAULT;
+
+         if (options & WDIOS_DISABLECARD) {
+           ibwdt_disable();
+           retval = 0;
+         }
+
+         if (options & WDIOS_ENABLECARD) {
+           ibwdt_ping();
+           retval = 0;
+         }
+
+         return retval;
+       }
 
        default:
          return -ENOTTY;
@@ -229,9 +254,7 @@ ibwdt_ioctl(struct inode *inode, struct file *file, 
unsigned int cmd,
 static int
 ibwdt_open(struct inode *inode, struct file *file)
 {
-       spin_lock(&ibwdt_lock);
        if (test_and_set_bit(0, &ibwdt_is_open)) {
-               spin_unlock(&ibwdt_lock);
                return -EBUSY;
        }
        if (nowayout)
@@ -239,14 +262,12 @@ ibwdt_open(struct inode *inode, struct file *file)
 
        /* Activate */
        ibwdt_ping();
-       spin_unlock(&ibwdt_lock);
        return nonseekable_open(inode, file);
 }
 
 static int
 ibwdt_close(struct inode *inode, struct file *file)
 {
-       spin_lock(&ibwdt_lock);
        if (expect_close == 42) {
                ibwdt_disable();
        } else {
@@ -255,7 +276,6 @@ ibwdt_close(struct inode *inode, struct file *file)
        }
        clear_bit(0, &ibwdt_is_open);
        expect_close = 0;
-       spin_unlock(&ibwdt_lock);
        return 0;
 }
 
-
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