diff options
Diffstat (limited to 'target/linux/omap24xx/patches-2.6.38/530-cbus-retu-wdt-preemptible.patch')
-rw-r--r-- | target/linux/omap24xx/patches-2.6.38/530-cbus-retu-wdt-preemptible.patch | 125 |
1 files changed, 0 insertions, 125 deletions
diff --git a/target/linux/omap24xx/patches-2.6.38/530-cbus-retu-wdt-preemptible.patch b/target/linux/omap24xx/patches-2.6.38/530-cbus-retu-wdt-preemptible.patch deleted file mode 100644 index 96c1f6c120..0000000000 --- a/target/linux/omap24xx/patches-2.6.38/530-cbus-retu-wdt-preemptible.patch +++ /dev/null @@ -1,125 +0,0 @@ ---- a/drivers/cbus/retu-wdt.c -+++ b/drivers/cbus/retu-wdt.c -@@ -58,13 +58,11 @@ struct retu_wdt_dev { - struct device *dev; - int users; - struct miscdevice retu_wdt_miscdev; -- struct timer_list ping_timer; -+ struct delayed_work ping_work; - }; - - static struct retu_wdt_dev *retu_wdt; - --static void retu_wdt_set_ping_timer(unsigned long enable); -- - static int _retu_modify_counter(unsigned int new) - { - if (retu_wdt) -@@ -86,6 +84,31 @@ static int retu_modify_counter(unsigned - return 0; - } - -+/* -+ * Since retu watchdog cannot be disabled in hardware, we must kick it -+ * with a timer until userspace watchdog software takes over. Do this -+ * unless /dev/watchdog is open or CONFIG_WATCHDOG_NOWAYOUT is set. -+ */ -+static void retu_wdt_ping_enable(struct retu_wdt_dev *wdev) -+{ -+ _retu_modify_counter(RETU_WDT_MAX_TIMER); -+ schedule_delayed_work(&wdev->ping_work, -+ round_jiffies_relative(RETU_WDT_DEFAULT_TIMER * HZ)); -+} -+ -+static void retu_wdt_ping_disable(struct retu_wdt_dev *wdev) -+{ -+ _retu_modify_counter(RETU_WDT_MAX_TIMER); -+ cancel_delayed_work_sync(&wdev->ping_work); -+} -+ -+static void retu_wdt_ping_work(struct work_struct *work) -+{ -+ struct retu_wdt_dev *wdev = container_of(to_delayed_work(work), -+ struct retu_wdt_dev, ping_work); -+ retu_wdt_ping_enable(wdev); -+} -+ - static ssize_t retu_wdt_period_show(struct device *dev, - struct device_attribute *attr, char *buf) - { -@@ -105,7 +128,7 @@ static ssize_t retu_wdt_period_store(str - int ret; - - #ifdef CONFIG_WATCHDOG_NOWAYOUT -- retu_wdt_set_ping_timer(0); -+ retu_wdt_ping_disable(retu_wdt); - #endif - - if (sscanf(buf, "%u", &new_period) != 1) { -@@ -136,30 +159,13 @@ static DEVICE_ATTR(period, S_IRUGO | S_I - retu_wdt_period_store); - static DEVICE_ATTR(counter, S_IRUGO, retu_wdt_counter_show, NULL); - --/*----------------------------------------------------------------------------*/ -- --/* -- * Since retu watchdog cannot be disabled in hardware, we must kick it -- * with a timer until userspace watchdog software takes over. Do this -- * unless /dev/watchdog is open or CONFIG_WATCHDOG_NOWAYOUT is set. -- */ --static void retu_wdt_set_ping_timer(unsigned long enable) --{ -- _retu_modify_counter(RETU_WDT_MAX_TIMER); -- if (enable) -- mod_timer(&retu_wdt->ping_timer, -- jiffies + RETU_WDT_DEFAULT_TIMER * HZ); -- else -- del_timer_sync(&retu_wdt->ping_timer); --} -- - static int retu_wdt_open(struct inode *inode, struct file *file) - { - if (test_and_set_bit(1, (unsigned long *)&(retu_wdt->users))) - return -EBUSY; - - file->private_data = (void *)retu_wdt; -- retu_wdt_set_ping_timer(0); -+ retu_wdt_ping_disable(retu_wdt); - - return nonseekable_open(inode, file); - } -@@ -169,7 +175,7 @@ static int retu_wdt_release(struct inode - struct retu_wdt_dev *wdev = file->private_data; - - #ifndef CONFIG_WATCHDOG_NOWAYOUT -- retu_wdt_set_ping_timer(1); -+ retu_wdt_ping_enable(retu_wdt); - #endif - wdev->users = 0; - -@@ -232,7 +238,7 @@ static int __devinit retu_wdt_ping(void) - #ifdef CONFIG_WATCHDOG_NOWAYOUT - retu_modify_counter(RETU_WDT_MAX_TIMER); - #else -- retu_wdt_set_ping_timer(1); -+ retu_wdt_ping_enable(retu_wdt); - #endif - - return 0; -@@ -283,7 +289,7 @@ static int __init retu_wdt_probe(struct - if (ret) - goto free3; - -- setup_timer(&wdev->ping_timer, retu_wdt_set_ping_timer, 1); -+ INIT_DELAYED_WORK(&wdev->ping_work, retu_wdt_ping_work); - - /* passed as module parameter? */ - ret = retu_modify_counter(counter_param); -@@ -326,6 +332,7 @@ static int __devexit retu_wdt_remove(str - misc_deregister(&wdev->retu_wdt_miscdev); - device_remove_file(&pdev->dev, &dev_attr_period); - device_remove_file(&pdev->dev, &dev_attr_counter); -+ cancel_delayed_work_sync(&wdev->ping_work); - kfree(wdev); - - return 0; |