Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1345397

[RFC PATCH v8 08/10] watchdog: retu: Convert to use infrastructure triggered keepalives

Path csiph.com!news.mixmin.net!aioe.org!gothmog.csi.it!bofh.it!news.nic.it!robomod
From Guenter Roeck <linux@roeck-us.net>
Newsgroups linux.kernel
Subject [RFC PATCH v8 08/10] watchdog: retu: Convert to use infrastructure triggered keepalives
Date Sun, 28 Feb 2016 22:20:03 +0100
Message-ID <r7gUX-5v-29@gated-at.bofh.it> (permalink)
References <r7gUW-5v-7@gated-at.bofh.it>
X-Original-To linux-watchdog@vger.kernel.org
Dkim-Signature v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=roeck-us.net; s=default; h=References:In-Reply-To:Message-Id:Date:Subject: Cc:To:From; bh=cQ6MFSgqcuO9d3gSkoJQq0uM0eZs2OqfEe097GdF6jE=; b=pfVnfJbpeWWwe+ 24AXuL/W9PKkhdjdUKH2Yplnu6OYqRTafbFNtRQaxdwO+AjcVseXrUW97DPEH66J+WR9DSfGKu0xc XpS7LPvvnsh49hNr3MsIzVWcs05URKnm2l1Ec/agPGnRCAanmvki1qS29JL5lvzW9m3ZSYmm0Sn7l d/GYtX/hQkk+pCuECrnm7XrrGW5Qc5w4aWzCSED+ZlxCYfJqh/gDRevz/HIx5DRSLVOPaoQnvfAZG 8rKGtspFPr7MkpwCmzFZGoLkfjgXl5RX31ZS7QmKdS7w2rvJhMOwCJ2Nh/5wMlb3eImp1ufxG5v3S N0AwN3vndQhIMskozvBw==;
X-Mailer git-send-email 2.5.0
X-Authenticated_Sender guenter@roeck-us.net
X-Outgoing-Spam-Status No, score=-1.0
X-Antiabuse This header was added to track abuse, please include it with any abuse report
X-Antiabuse Primary Hostname - bh-25.webhostbox.net
X-Antiabuse Original Domain - vger.kernel.org
X-Antiabuse Originator/Caller UID/GID - [47 12] / [47 12]
X-Antiabuse Sender Address Domain - roeck-us.net
X-Get-Message-Sender-Via bh-25.webhostbox.net: authenticated_id: guenter@roeck-us.net
X-Authenticated-Sender bh-25.webhostbox.net: guenter@roeck-us.net
Sender robomod@news.nic.it
List-ID <linux-kernel.vger.kernel.org>
X-Mailing-List linux-kernel@vger.kernel.org
Approved robomod@news.nic.it
Lines 165
Organization linux.* mail to news gateway
X-Original-Cc Wim Van Sebroeck <wim@iguana.be>, linux-kernel@vger.kernel.org, Timo Kokkonen <timo.kokkonen@offcode.fi>, Uwe Kleine-König <u.kleine-koenig@pengutronix.de>, linux-doc@vger.kernel.org, Doug Anderson <dianders@chromium.org>, Jonathan Corbet <corbet@lwn.net>, Guenter Roeck <linux@roeck-us.net>
X-Original-Date Sun, 28 Feb 2016 13:12:21 -0800
X-Original-Message-ID <1456693943-6876-9-git-send-email-linux@roeck-us.net>
X-Original-References <1456693943-6876-1-git-send-email-linux@roeck-us.net>
X-Original-Sender linux-kernel-owner@vger.kernel.org
Xref csiph.com linux.kernel:1345397

Show key headers only | View raw


The watchdog infrastructure now supports handling watchdog keepalive
if the watchdog is running while the watchdog device is closed.
Convert the driver to use this infrastructure.

Signed-off-by: Guenter Roeck <linux@roeck-us.net>
---
v8: max_hw_timeout_ms -> max_hw_heartbeat_ms
    Rebased to v4.5-rc5
v7: Set max_hw_timeout_ms
    Rebased to v4.5-rc1
v6: Rename WDOG_RUNNING to WDOG_HW_RUNNING
    Rebased to v4.4-rc2
v5: Rebased to v4.4-rc1
v4: No changes
v3: No changes
v2: No changes
---
 drivers/watchdog/retu_wdt.c | 80 +++++----------------------------------------
 1 file changed, 8 insertions(+), 72 deletions(-)

diff --git a/drivers/watchdog/retu_wdt.c b/drivers/watchdog/retu_wdt.c
index 39cd51df2ffc..fd827b0ec689 100644
--- a/drivers/watchdog/retu_wdt.c
+++ b/drivers/watchdog/retu_wdt.c
@@ -28,69 +28,22 @@
 /* Watchdog timer values in seconds */
 #define RETU_WDT_MAX_TIMER	63
 
-struct retu_wdt_dev {
-	struct retu_dev		*rdev;
-	struct device		*dev;
-	struct delayed_work	ping_work;
-};
-
-/*
- * Since Retu watchdog cannot be disabled in hardware, we must kick it
- * with a timer until userspace watchdog software takes over. If
- * CONFIG_WATCHDOG_NOWAYOUT is set, we never start the feeding.
- */
-static void retu_wdt_ping_enable(struct retu_wdt_dev *wdev)
-{
-	retu_write(wdev->rdev, RETU_REG_WATCHDOG, RETU_WDT_MAX_TIMER);
-	schedule_delayed_work(&wdev->ping_work,
-			round_jiffies_relative(RETU_WDT_MAX_TIMER * HZ / 2));
-}
-
-static void retu_wdt_ping_disable(struct retu_wdt_dev *wdev)
-{
-	retu_write(wdev->rdev, RETU_REG_WATCHDOG, 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 int retu_wdt_start(struct watchdog_device *wdog)
 {
-	struct retu_wdt_dev *wdev = watchdog_get_drvdata(wdog);
+	struct retu_dev *rdev = watchdog_get_drvdata(wdog);
 
-	retu_wdt_ping_disable(wdev);
+	set_bit(WDOG_HW_RUNNING, &wdog->status);
 
-	return retu_write(wdev->rdev, RETU_REG_WATCHDOG, wdog->timeout);
-}
-
-static int retu_wdt_stop(struct watchdog_device *wdog)
-{
-	struct retu_wdt_dev *wdev = watchdog_get_drvdata(wdog);
-
-	retu_wdt_ping_enable(wdev);
-
-	return 0;
-}
-
-static int retu_wdt_ping(struct watchdog_device *wdog)
-{
-	struct retu_wdt_dev *wdev = watchdog_get_drvdata(wdog);
-
-	return retu_write(wdev->rdev, RETU_REG_WATCHDOG, wdog->timeout);
+	return retu_write(rdev, RETU_REG_WATCHDOG, wdog->timeout);
 }
 
 static int retu_wdt_set_timeout(struct watchdog_device *wdog,
 				unsigned int timeout)
 {
-	struct retu_wdt_dev *wdev = watchdog_get_drvdata(wdog);
+	struct retu_dev *rdev = watchdog_get_drvdata(wdog);
 
 	wdog->timeout = timeout;
-	return retu_write(wdev->rdev, RETU_REG_WATCHDOG, wdog->timeout);
+	return retu_write(rdev, RETU_REG_WATCHDOG, wdog->timeout);
 }
 
 static const struct watchdog_info retu_wdt_info = {
@@ -101,8 +54,6 @@ static const struct watchdog_info retu_wdt_info = {
 static const struct watchdog_ops retu_wdt_ops = {
 	.owner		= THIS_MODULE,
 	.start		= retu_wdt_start,
-	.stop		= retu_wdt_stop,
-	.ping		= retu_wdt_ping,
 	.set_timeout	= retu_wdt_set_timeout,
 };
 
@@ -111,40 +62,27 @@ static int retu_wdt_probe(struct platform_device *pdev)
 	struct retu_dev *rdev = dev_get_drvdata(pdev->dev.parent);
 	bool nowayout = WATCHDOG_NOWAYOUT;
 	struct watchdog_device *retu_wdt;
-	struct retu_wdt_dev *wdev;
 	int ret;
 
 	retu_wdt = devm_kzalloc(&pdev->dev, sizeof(*retu_wdt), GFP_KERNEL);
 	if (!retu_wdt)
 		return -ENOMEM;
 
-	wdev = devm_kzalloc(&pdev->dev, sizeof(*wdev), GFP_KERNEL);
-	if (!wdev)
-		return -ENOMEM;
-
 	retu_wdt->info		= &retu_wdt_info;
 	retu_wdt->ops		= &retu_wdt_ops;
 	retu_wdt->timeout	= RETU_WDT_MAX_TIMER;
 	retu_wdt->min_timeout	= 0;
-	retu_wdt->max_timeout	= RETU_WDT_MAX_TIMER;
+	retu_wdt->max_hw_heartbeat_ms = RETU_WDT_MAX_TIMER * 1000;
 	retu_wdt->parent	= &pdev->dev;
 
-	watchdog_set_drvdata(retu_wdt, wdev);
+	watchdog_set_drvdata(retu_wdt, rdev);
 	watchdog_set_nowayout(retu_wdt, nowayout);
 
-	wdev->rdev		= rdev;
-	wdev->dev		= &pdev->dev;
-
-	INIT_DELAYED_WORK(&wdev->ping_work, retu_wdt_ping_work);
-
 	ret = watchdog_register_device(retu_wdt);
 	if (ret < 0)
 		return ret;
 
-	if (nowayout)
-		retu_wdt_ping(retu_wdt);
-	else
-		retu_wdt_ping_enable(wdev);
+	retu_wdt_start(retu_wdt);
 
 	platform_set_drvdata(pdev, retu_wdt);
 
@@ -154,10 +92,8 @@ static int retu_wdt_probe(struct platform_device *pdev)
 static int retu_wdt_remove(struct platform_device *pdev)
 {
 	struct watchdog_device *wdog = platform_get_drvdata(pdev);
-	struct retu_wdt_dev *wdev = watchdog_get_drvdata(wdog);
 
 	watchdog_unregister_device(wdog);
-	cancel_delayed_work_sync(&wdev->ping_work);
 
 	return 0;
 }
-- 
2.5.0

Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH v8 0/10] watchdog: Add support for keepalives triggered by infrastructure Guenter Roeck <linux@roeck-us.net> - 2016-02-28 22:20 +0100
  [PATCH v8 04/10] watchdog: Make stop function optional Guenter Roeck <linux@roeck-us.net> - 2016-02-28 22:20 +0100
  [PATCH v8 07/10] watchdog: imx2: Convert to use infrastructure triggered keepalives Guenter Roeck <linux@roeck-us.net> - 2016-02-28 22:20 +0100
  [PATCH v8 03/10] watchdog: Introduce WDOG_HW_RUNNING flag Guenter Roeck <linux@roeck-us.net> - 2016-02-28 22:20 +0100
  [RFC PATCH v8 09/10] watchdog: at91sam9: Convert to use infrastructure triggered keepalives Guenter Roeck <linux@roeck-us.net> - 2016-02-28 22:20 +0100
  [PATCH v8 01/10] watchdog: Make set_timeout function optional Guenter Roeck <linux@roeck-us.net> - 2016-02-28 22:20 +0100
  [RFC PATCH v8 08/10] watchdog: retu: Convert to use infrastructure triggered keepalives Guenter Roeck <linux@roeck-us.net> - 2016-02-28 22:20 +0100
  [PATCH v8 05/10] watchdog: Add support for minimum time between heartbeats Guenter Roeck <linux@roeck-us.net> - 2016-02-28 22:20 +0100
  [PATCH v8 02/10] watchdog: Introduce hardware maximum heartbeat in watchdog core Guenter Roeck <linux@roeck-us.net> - 2016-02-28 22:20 +0100
  [PATCH v8 06/10] watchdog: dw_wdt: Convert to use watchdog infrastructure Guenter Roeck <linux@roeck-us.net> - 2016-02-28 22:20 +0100
    Re: [PATCH v8 06/10] watchdog: dw_wdt: Convert to use watchdog infrastructure Doug Anderson <dianders@chromium.org> - 2016-03-02 00:00 +0100
      Re: [PATCH v8 06/10] watchdog: dw_wdt: Convert to use watchdog  infrastructure Guenter Roeck <linux@roeck-us.net> - 2016-03-02 20:50 +0100

csiph-web