diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-08-07 18:05:09 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-08-07 18:05:09 -0700 |
commit | b588e2bbd7b872c9cdf635fe0f04840534e72443 (patch) | |
tree | 8e298e0f18f305dd12223ffb36c2450cf62318bb /drivers/watchdog/mpc8xx_wdt.c | |
parent | 3df302ff56fac91d54e964faed9d293018ac71ca (diff) | |
parent | 7944d3a5a70ee5c1904ed1e8b1d71ff0af2854d9 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/wim/linux-2.6-watchdog
* git://git.kernel.org/pub/scm/linux/kernel/git/wim/linux-2.6-watchdog: (70 commits)
[WATCHDOG] more coding style clean-up's
[WATCHDOG] sbc8360.c - move stop code into a function
[WATCHDOG] Coding style - Indentation - part 2
[WATCHDOG] Coding style - Indentation - part 1
[WATCHDOG] mpc8xxx_wdt: add support for MPC8xx watchdogs
[WATCHDOG] mpc8xxx_wdt: fix build
[WATCHDOG] mpc8xxx_wdt: various renames, mostly s/mpc83xx/mpc8xxx/g
[WATCHDOG] mpc83xx_wdt: rename to mpc8xxx_wdt
[WATCHDOG] mpc83xx_wdt: add support for MPC86xx CPUs
[WATCHDOG] mpc83xx_wdt: convert to the OF platform driver
[WATCHDOG] pcwd: a couple of watchdogs escaped conversion
[WATCHDOG] Clean-up includes
[WATCHDOG] hpwdt.c - fix double includes
[WATCHDOG 57/57] wdt501/pci: Clean up, coding style and switch to unlocked_ioctl
[WATCHDOG 56/57] wdt977: clean up, coding style and switch to unlocked_ioctl
[WATCHDOG 55/57] wdt285: switch to unlocked_ioctl and tidy up oddments of coding style
[WATCHDOG 54/57] wdrtas: clean up, coding style, switch to unlocked_ioctl
[WATCHDOG 53/57] wafer5823wdt: Clean up, coding style, switch to unlocked_ioctl
[WATCHDOG 52/57] w83977f_wdt: clean up, coding style and switch to unlocked_ioctl
[WATCHDOG 51/57] w83877f_wdt: clean up code, coding style, switch to unlocked_ioctl
...
Diffstat (limited to 'drivers/watchdog/mpc8xx_wdt.c')
-rw-r--r-- | drivers/watchdog/mpc8xx_wdt.c | 37 |
1 files changed, 19 insertions, 18 deletions
diff --git a/drivers/watchdog/mpc8xx_wdt.c b/drivers/watchdog/mpc8xx_wdt.c index 85b5734403a..1336425acf2 100644 --- a/drivers/watchdog/mpc8xx_wdt.c +++ b/drivers/watchdog/mpc8xx_wdt.c @@ -16,36 +16,35 @@ #include <linux/module.h> #include <linux/watchdog.h> #include <asm/8xx_immap.h> -#include <asm/uaccess.h> -#include <asm/io.h> +#include <linux/uaccess.h> +#include <linux/io.h> #include <syslib/m8xx_wdt.h> static unsigned long wdt_opened; static int wdt_status; +static spinlock_t wdt_lock; static void mpc8xx_wdt_handler_disable(void) { volatile uint __iomem *piscr; - piscr = (uint *)&((immap_t*)IMAP_ADDR)->im_sit.sit_piscr; + piscr = (uint *)&((immap_t *)IMAP_ADDR)->im_sit.sit_piscr; if (!m8xx_has_internal_rtc) m8xx_wdt_stop_timer(); else out_be32(piscr, in_be32(piscr) & ~(PISCR_PIE | PISCR_PTE)); - printk(KERN_NOTICE "mpc8xx_wdt: keep-alive handler deactivated\n"); } static void mpc8xx_wdt_handler_enable(void) { volatile uint __iomem *piscr; - piscr = (uint *)&((immap_t*)IMAP_ADDR)->im_sit.sit_piscr; + piscr = (uint *)&((immap_t *)IMAP_ADDR)->im_sit.sit_piscr; if (!m8xx_has_internal_rtc) m8xx_wdt_install_timer(); else out_be32(piscr, in_be32(piscr) | PISCR_PIE | PISCR_PTE); - printk(KERN_NOTICE "mpc8xx_wdt: keep-alive handler activated\n"); } @@ -53,37 +52,34 @@ static int mpc8xx_wdt_open(struct inode *inode, struct file *file) { if (test_and_set_bit(0, &wdt_opened)) return -EBUSY; - m8xx_wdt_reset(); mpc8xx_wdt_handler_disable(); - return nonseekable_open(inode, file); } static int mpc8xx_wdt_release(struct inode *inode, struct file *file) { m8xx_wdt_reset(); - #if !defined(CONFIG_WATCHDOG_NOWAYOUT) mpc8xx_wdt_handler_enable(); #endif - clear_bit(0, &wdt_opened); - return 0; } -static ssize_t mpc8xx_wdt_write(struct file *file, const char *data, size_t len, - loff_t * ppos) +static ssize_t mpc8xx_wdt_write(struct file *file, const char *data, + size_t len, loff_t *ppos) { - if (len) + if (len) { + spin_lock(&wdt_lock); m8xx_wdt_reset(); - + spin_unlock(&wdt_lock); + } return len; } -static int mpc8xx_wdt_ioctl(struct inode *inode, struct file *file, - unsigned int cmd, unsigned long arg) +static long mpc8xx_wdt_ioctl(struct file *file, + unsigned int cmd, unsigned long arg) { int timeout; static struct watchdog_info info = { @@ -112,15 +108,19 @@ static int mpc8xx_wdt_ioctl(struct inode *inode, struct file *file, return -EOPNOTSUPP; case WDIOC_KEEPALIVE: + spin_lock(&wdt_lock); m8xx_wdt_reset(); wdt_status |= WDIOF_KEEPALIVEPING; + spin_unlock(&wdt_lock); break; case WDIOC_SETTIMEOUT: return -EOPNOTSUPP; case WDIOC_GETTIMEOUT: + spin_lock(&wdt_lock); timeout = m8xx_wdt_get_timeout(); + spin_unlock(&wdt_lock); if (put_user(timeout, (int *)arg)) return -EFAULT; break; @@ -136,7 +136,7 @@ static const struct file_operations mpc8xx_wdt_fops = { .owner = THIS_MODULE, .llseek = no_llseek, .write = mpc8xx_wdt_write, - .ioctl = mpc8xx_wdt_ioctl, + .unlocked_ioctl = mpc8xx_wdt_ioctl, .open = mpc8xx_wdt_open, .release = mpc8xx_wdt_release, }; @@ -149,6 +149,7 @@ static struct miscdevice mpc8xx_wdt_miscdev = { static int __init mpc8xx_wdt_init(void) { + spin_lock_init(&wdt_lock); return misc_register(&mpc8xx_wdt_miscdev); } |