From patchwork Tue Jul 30 02:15:37 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Balantzyan X-Patchwork-Id: 11064825 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 88AE914E5 for ; Tue, 30 Jul 2019 02:15:53 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6CC272866D for ; Tue, 30 Jul 2019 02:15:53 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5BAD1286EE; Tue, 30 Jul 2019 02:15:53 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1427C2866D for ; Tue, 30 Jul 2019 02:15:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730929AbfG3CPv (ORCPT ); Mon, 29 Jul 2019 22:15:51 -0400 Received: from mail-pf1-f194.google.com ([209.85.210.194]:42068 "EHLO mail-pf1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730481AbfG3CPv (ORCPT ); Mon, 29 Jul 2019 22:15:51 -0400 Received: by mail-pf1-f194.google.com with SMTP id q10so28960924pff.9; Mon, 29 Jul 2019 19:15:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=7mVc3FHf9lbiZFRinrco4upcwRY0rhMFqs7bl6W7dgo=; b=Mp5BN0E6mU9E5mKatvwD5fi7X+PeAZze2NC0l5eieJmP8IRKVJZeSjO5toAuPZbMVl y1Y9gShrJhF7x74w2RrHkyO2nClA5H/nC8T3VobzpcK2nosnMOpDPUih0XSGN60VEKDx zgi6W+12P0Oipe1F1q7b9ymh1Zz8Ft0hC9BFinyyszDOcPwGjqKfRRTn60c6vuysZpth 3XXRjSc0uJHN6m7kRgV7Aw0hqik5k8e3OgORzf4JEUWAvJ7F6UN+ujZPV5otmY8RCUdI 7dS2Y7VEzOmdtXbRWWIQ4OPjD6KbJLnmDLMELit3xk22TWvDj91pHWyt8W+WLJEa3Abj Kwow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=7mVc3FHf9lbiZFRinrco4upcwRY0rhMFqs7bl6W7dgo=; b=LnyD0/haOpGGS8VN1JCzugXWrKdVCpUJJqwDH3Vdwk0AsiOQ21Nwhd8EyRb7q0Ru+n Bc/Lb4OkH4uEZU8PDPppzu2DMC1ucPq6xpzOsuZU8M1e7UNVuFL+3FxydxZYuBsCOgw/ 072ZtdtwPdGZ0igoZCtd+QFDvI4MtXIrBUgO94qkRMAkBhGH1BOm4oj+tqLD1KKmS/ay lyYaJXrYjG1e2d0GthUmwl+ExZ4p5Mpy6bKc8nEMoz6wtixSX6YWIr+xP5Iz1y46QcR7 SqSbaukUyLwdKYafU4tkYgGtuN5/Fl0Yvv2gMppnwJR1maMIPnsurLHlZQSmoL923Jft vUbQ== X-Gm-Message-State: APjAAAUNA9t/PL8ckkhpfJSo30cW5djQoTRBGtf7IsVtFf4hOy+pcQwx 0bbDlM4LTZHSO1e8qQpgBDM= X-Google-Smtp-Source: APXvYqxW1tfaC3ldmkhaNM76awxXyWJgwD8IWqtUZWPy32HLQm1y9DeygvanVcUYeGtccRxuYvPBJQ== X-Received: by 2002:a63:2b8e:: with SMTP id r136mr73243802pgr.216.1564452950448; Mon, 29 Jul 2019 19:15:50 -0700 (PDT) Received: from localhost.localdomain (d206-116-172-62.bchsia.telus.net. [206.116.172.62]) by smtp.gmail.com with ESMTPSA id x13sm66561133pfn.6.2019.07.29.19.15.48 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Mon, 29 Jul 2019 19:15:49 -0700 (PDT) From: Mark Balantzyan To: linux@roeck-us.net Cc: wim@linux-watchdog.org, linux-kernel@vger.kernel.org, linux-watchdog@vger.kernel.org, andrianov@ispras.ru, Mark Balantzyan Subject: [PATCH 1/4] watchdog device drivers:pc87413_wdt:Rewriting of pc87413_wdt driver to utilize common watchdog interface Date: Mon, 29 Jul 2019 19:15:37 -0700 Message-Id: <20190730021540.66579-1-mbalant3@gmail.com> X-Mailer: git-send-email 2.17.1 Sender: linux-watchdog-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-watchdog@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP There is a potential for the variable swc_base_addr in the call chain of the driver initialization function (init) to be used before initialization. This brought up the need for, by rewriting the driver to use the common watchdog interface, ensuring to have all resources in place. This patch addresses this need by rewriting into common watchdog interface utilization for the driver. Signed-off-by: Mark Balantzyan --- drivers/media/pci/tw686x/Kconfig | 1 + drivers/watchdog/pc87413_wdt.c | 92 +++++++++++++++----------------- 2 files changed, 45 insertions(+), 48 deletions(-) diff --git a/drivers/media/pci/tw686x/Kconfig b/drivers/media/pci/tw686x/Kconfig index da8bfee7..079d7464 100644 --- a/drivers/media/pci/tw686x/Kconfig +++ b/drivers/media/pci/tw686x/Kconfig @@ -5,6 +5,7 @@ config VIDEO_TW686X select VIDEOBUF2_DMA_CONTIG select VIDEOBUF2_DMA_SG select SND_PCM + select WATCHDOG_CORE help Support for Intersil/Techwell TW686x-based frame grabber cards. diff --git a/drivers/watchdog/pc87413_wdt.c b/drivers/watchdog/pc87413_wdt.c index 06a892e3..4c330ee5 100644 --- a/drivers/watchdog/pc87413_wdt.c +++ b/drivers/watchdog/pc87413_wdt.c @@ -22,12 +22,10 @@ #include #include -#include #include #include #include #include -#include #include #include #include @@ -65,7 +63,6 @@ static char expect_close; /* is the close expected? */ static DEFINE_SPINLOCK(io_lock); /* to guard us from io races */ -static bool nowayout = WATCHDOG_NOWAYOUT; /* -- Low level function ----------------------------------------*/ @@ -216,9 +213,9 @@ static inline void pc87413_disable_sw_wd_trg(void) /* -- Higher level functions ------------------------------------*/ -/* Enable the watchdog */ +/* Enable/start the watchdog */ -static void pc87413_enable(void) +static void pc87413_start(void) { spin_lock(&io_lock); @@ -231,9 +228,9 @@ static void pc87413_enable(void) spin_unlock(&io_lock); } -/* Disable the watchdog */ +/* Disable/stop the watchdog */ -static void pc87413_disable(void) +static void pc87413_stop(void) { spin_lock(&io_lock); @@ -245,9 +242,9 @@ static void pc87413_disable(void) spin_unlock(&io_lock); } -/* Refresh the watchdog */ +/* Refresh/keepalive the watchdog */ -static void pc87413_refresh(void) +static void pc87413_keepalive(struct watchdog_device *wdd) { spin_lock(&io_lock); @@ -260,6 +257,8 @@ static void pc87413_refresh(void) pc87413_enable_sw_wd_trg(); spin_unlock(&io_lock); + + return 0; } /* -- File operations -------------------------------------------*/ @@ -278,9 +277,6 @@ static int pc87413_open(struct inode *inode, struct file *file) if (test_and_set_bit(0, &timer_enabled)) return -EBUSY; - if (nowayout) - __module_get(THIS_MODULE); - /* Reload and activate timer */ pc87413_refresh(); @@ -331,7 +327,6 @@ static int pc87413_status(void) /** * pc87413_write: - * @file: file handle to the watchdog * @data: data buffer to write * @len: length in bytes * @ppos: pointer to the position to write. No seeks allowed @@ -345,26 +340,25 @@ static ssize_t pc87413_write(struct file *file, const char __user *data, { /* See if we got the magic character 'V' and reload the timer */ if (len) { - if (!nowayout) { - size_t i; - - /* reset expect flag */ - expect_close = 0; - - /* scan to see whether or not we got the - magic character */ - for (i = 0; i != len; i++) { - char c; - if (get_user(c, data + i)) - return -EFAULT; - if (c == 'V') - expect_close = 42; - } + size_t i; + + /* reset expect flag */ + expect_close = 0; + + /* scan to see whether or not we got the + magic character */ + for (i = 0; i != len; i++) { + char c; + if (get_user(c, data + i)) + return -EFAULT; + if (c == 'V') + expect_close = 42; } + } /* someone wrote to us, we should reload the timer */ - pc87413_refresh(); - } + pc87413_refresh(); + return len; } @@ -417,7 +411,7 @@ static long pc87413_ioctl(struct file *file, unsigned int cmd, retval = 0; } if (options & WDIOS_ENABLECARD) { - pc87413_enable(); + pc87413_start(); retval = 0; } return retval; @@ -466,31 +460,32 @@ static int pc87413_notify_sys(struct notifier_block *this, { if (code == SYS_DOWN || code == SYS_HALT) /* Turn the card off */ - pc87413_disable(); + pc87413_stop(); return NOTIFY_DONE; } /* -- Module's structures ---------------------------------------*/ -static const struct file_operations pc87413_fops = { - .owner = THIS_MODULE, - .llseek = no_llseek, - .write = pc87413_write, - .unlocked_ioctl = pc87413_ioctl, - .open = pc87413_open, - .release = pc87413_release, -}; -static struct notifier_block pc87413_notifier = { +static struct notifier_block pc87413wdt_notifier = { .notifier_call = pc87413_notify_sys, }; -static struct miscdevice pc87413_miscdev = { - .minor = WATCHDOG_MINOR, - .name = "watchdog", - .fops = &pc87413_fops, +static struct watchdog_ops pc87413wdt_ops = { + .owner = THIS_MODULE, + .start = pc87413wdt_start, + .stop = pc87413wdt_stop, + .ping = pc87413wdt_keepalive, + .set_timeout = pc87413wdt_set_heartbeat, +}; + +static struct watchdog_device pc87413wdt_wdd = { + .info = &pc87413wdt_ident, + .ops = &pc87413wdt_ops, + .status = WATCHDOG_NOWAYOUT_INIT_STATUS }; + /* -- Module init functions -------------------------------------*/ /** @@ -515,7 +510,7 @@ static int __init pc87413_init(void) if (ret != 0) pr_err("cannot register reboot notifier (err=%d)\n", ret); - ret = misc_register(&pc87413_miscdev); + ret = watchdog_register_device(&pc87413wdt_wdd); if (ret != 0) { pr_err("cannot register miscdev on minor=%d (err=%d)\n", WATCHDOG_MINOR, ret); @@ -533,13 +528,14 @@ static int __init pc87413_init(void) goto misc_unreg; } - pc87413_enable(); + pc87413_start(); release_region(io, 2); + pc87413_keepalive(&pc87413wdt_wdd); return 0; misc_unreg: - misc_deregister(&pc87413_miscdev); + watchdog_unregister_device(&pc87413wdt_wdd) reboot_unreg: unregister_reboot_notifier(&pc87413_notifier); release_region(io, 2); From patchwork Tue Jul 30 02:15:38 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Balantzyan X-Patchwork-Id: 11064827 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5781514E5 for ; Tue, 30 Jul 2019 02:15:56 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 447FB2866D for ; Tue, 30 Jul 2019 02:15:56 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 33477286EE; Tue, 30 Jul 2019 02:15:56 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7CA072866D for ; Tue, 30 Jul 2019 02:15:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731125AbfG3CPz (ORCPT ); Mon, 29 Jul 2019 22:15:55 -0400 Received: from mail-pg1-f195.google.com ([209.85.215.195]:34648 "EHLO mail-pg1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730481AbfG3CPy (ORCPT ); Mon, 29 Jul 2019 22:15:54 -0400 Received: by mail-pg1-f195.google.com with SMTP id n9so22973887pgc.1; Mon, 29 Jul 2019 19:15:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=pNQ2dTQynjWYzeUQMx7021f2qWtQZMIgO8E/5z+cVeo=; b=AIRmsECPdjdfYinyOfyi1+xTLdWg+3fyopu9nCOS8ciZSOQ3KulZEivS1+CF+z1iR6 reHSWUxtelRN6AA7cRCcaTF94sr9oZXRiK9MLRB3Z4E1tUw4swNxXW5yQtTeAGdoXAPl 3POirToQ5wDfQcX6Zitzg24CD7CD//6rej/BDleXkZHR6UckbetR5hwm5lxiSHBawAWu 2b5QNPmypjrg0sUOCCw2D3ByxlnfMCclgMbwc/sKuUyt3eZmLVQxJVW4SSbWCs0I2RPE PeJpN5W7GcN42Nt69Y+vM/8yRdxnG/O40z5yXEPmJQiJn5yudXKBEPRmuyhvsSYuNSF0 Jplw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=pNQ2dTQynjWYzeUQMx7021f2qWtQZMIgO8E/5z+cVeo=; b=NW/3DO4r4K+/tL8aGNYyKMirVd0U4S+KTx40BfcxL9UiP6Y+v3hCfviAq4gjSQMbDn /vUJAing6PfrZ+eFWfjglBFjYVPIs+P0AgjuXepQI6BCtmxm62SgGChy+zgsJklnmsJB nVQ7jZt3whzZvHLmn8lIGjMZkq+qMjR92wS1OeRkUg2j7UYNFZZH5epFsKrIE+SAsgJN peI4rlYgTXCLs8KoiGEroRJ3lMrsW6emXUE7UH7SWCePDWuW5tVPVFytNeoty1qkEn/b c4zWJILIfWubin4PebIjd6rXtZ58+g2PoEtgqxCKTYrZENIm1CCCAQ15eI6MTg9MrROw nzPQ== X-Gm-Message-State: APjAAAW69YcbJVeLYdL2R4+rIdr88KX/dkRi8RU46x70yWaPxvkSCWvg 2P2cIlGj/xyA6yWTDa78gtM= X-Google-Smtp-Source: APXvYqwMtamwq9KUTZXJqIsp1iolz8Lx0H1tSkCfL+t881J+67HsmBNG/201ZX1h2cTBbmFo3xKh5g== X-Received: by 2002:a17:90a:2190:: with SMTP id q16mr111121160pjc.23.1564452953762; Mon, 29 Jul 2019 19:15:53 -0700 (PDT) Received: from localhost.localdomain (d206-116-172-62.bchsia.telus.net. [206.116.172.62]) by smtp.gmail.com with ESMTPSA id x13sm66561133pfn.6.2019.07.29.19.15.52 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Mon, 29 Jul 2019 19:15:53 -0700 (PDT) From: Mark Balantzyan To: linux@roeck-us.net Cc: wim@linux-watchdog.org, linux-kernel@vger.kernel.org, linux-watchdog@vger.kernel.org, andrianov@ispras.ru, Mark Balantzyan Subject: [PATCH 2/4] watchdog device drivers:pc87413_wdt:Rewriting of pc87413_wdt driver to utilize common watchdog interface, with removal of file access functions for correct functionality Date: Mon, 29 Jul 2019 19:15:38 -0700 Message-Id: <20190730021540.66579-2-mbalant3@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190730021540.66579-1-mbalant3@gmail.com> References: <20190730021540.66579-1-mbalant3@gmail.com> Sender: linux-watchdog-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-watchdog@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP There is a potential for the variable swc_base_addr in the call chain of the driver initialization function (init) to be used before initialization. This brought up the need for, by rewriting the driver to use the common watchdog interface, ensuring to have all resources in place. This patch addresses this need by rewriting into common watchdog interface utilization for the driver. Signed-off-by: Mark Balantzyan --- drivers/watchdog/pc87413_wdt.c | 235 +++------------------------------ 1 file changed, 22 insertions(+), 213 deletions(-) diff --git a/drivers/watchdog/pc87413_wdt.c b/drivers/watchdog/pc87413_wdt.c index 4c330ee5..a9070a22 100644 --- a/drivers/watchdog/pc87413_wdt.c +++ b/drivers/watchdog/pc87413_wdt.c @@ -217,37 +217,28 @@ static inline void pc87413_disable_sw_wd_trg(void) static void pc87413_start(void) { - spin_lock(&io_lock); - pc87413_swc_bank3(); pc87413_programm_wdto(timeout); pc87413_enable_wden(); pc87413_enable_sw_wd_tren(); pc87413_enable_sw_wd_trg(); - spin_unlock(&io_lock); } /* Disable/stop the watchdog */ static void pc87413_stop(void) { - spin_lock(&io_lock); - pc87413_swc_bank3(); pc87413_disable_sw_wd_tren(); pc87413_disable_sw_wd_trg(); pc87413_programm_wdto(0); - - spin_unlock(&io_lock); } /* Refresh/keepalive the watchdog */ static void pc87413_keepalive(struct watchdog_device *wdd) { - spin_lock(&io_lock); - pc87413_swc_bank3(); pc87413_disable_sw_wd_tren(); pc87413_disable_sw_wd_trg(); @@ -255,192 +246,11 @@ static void pc87413_keepalive(struct watchdog_device *wdd) pc87413_enable_wden(); pc87413_enable_sw_wd_tren(); pc87413_enable_sw_wd_trg(); - - spin_unlock(&io_lock); - return 0; } -/* -- File operations -------------------------------------------*/ - -/** - * pc87413_open: - * @inode: inode of device - * @file: file handle to device - * - */ - -static int pc87413_open(struct inode *inode, struct file *file) -{ - /* /dev/watchdog can only be opened once */ - - if (test_and_set_bit(0, &timer_enabled)) - return -EBUSY; - /* Reload and activate timer */ - pc87413_refresh(); - - pr_info("Watchdog enabled. Timeout set to %d minute(s).\n", timeout); - - return nonseekable_open(inode, file); -} - -/** - * pc87413_release: - * @inode: inode to board - * @file: file handle to board - * - * The watchdog has a configurable API. There is a religious dispute - * between people who want their watchdog to be able to shut down and - * those who want to be sure if the watchdog manager dies the machine - * reboots. In the former case we disable the counters, in the latter - * case you have to open it again very soon. - */ - -static int pc87413_release(struct inode *inode, struct file *file) -{ - /* Shut off the timer. */ - - if (expect_close == 42) { - pc87413_disable(); - pr_info("Watchdog disabled, sleeping again...\n"); - } else { - pr_crit("Unexpected close, not stopping watchdog!\n"); - pc87413_refresh(); - } - clear_bit(0, &timer_enabled); - expect_close = 0; - return 0; -} - -/** - * pc87413_status: - * - * return, if the watchdog is enabled (timeout is set...) - */ - - -static int pc87413_status(void) -{ - return 0; /* currently not supported */ -} - -/** - * pc87413_write: - * @data: data buffer to write - * @len: length in bytes - * @ppos: pointer to the position to write. No seeks allowed - * - * A write to a watchdog device is defined as a keepalive signal. Any - * write of data will do, as we we don't define content meaning. - */ - -static ssize_t pc87413_write(struct file *file, const char __user *data, - size_t len, loff_t *ppos) -{ - /* See if we got the magic character 'V' and reload the timer */ - if (len) { - size_t i; - - /* reset expect flag */ - expect_close = 0; - - /* scan to see whether or not we got the - magic character */ - for (i = 0; i != len; i++) { - char c; - if (get_user(c, data + i)) - return -EFAULT; - if (c == 'V') - expect_close = 42; - } - } - - /* someone wrote to us, we should reload the timer */ - pc87413_refresh(); - - return len; -} - -/** - * pc87413_ioctl: - * @file: file handle to the device - * @cmd: watchdog command - * @arg: argument pointer - * - * The watchdog API defines a common set of functions for all watchdogs - * according to their available features. We only actually usefully support - * querying capabilities and current status. - */ - -static long pc87413_ioctl(struct file *file, unsigned int cmd, - unsigned long arg) -{ - int new_timeout; - - union { - struct watchdog_info __user *ident; - int __user *i; - } uarg; - - static const struct watchdog_info ident = { - .options = WDIOF_KEEPALIVEPING | - WDIOF_SETTIMEOUT | - WDIOF_MAGICCLOSE, - .firmware_version = 1, - .identity = "PC87413(HF/F) watchdog", - }; - - uarg.i = (int __user *)arg; - - switch (cmd) { - case WDIOC_GETSUPPORT: - return copy_to_user(uarg.ident, &ident, - sizeof(ident)) ? -EFAULT : 0; - case WDIOC_GETSTATUS: - return put_user(pc87413_status(), uarg.i); - case WDIOC_GETBOOTSTATUS: - return put_user(0, uarg.i); - case WDIOC_SETOPTIONS: - { - int options, retval = -EINVAL; - if (get_user(options, uarg.i)) - return -EFAULT; - if (options & WDIOS_DISABLECARD) { - pc87413_disable(); - retval = 0; - } - if (options & WDIOS_ENABLECARD) { - pc87413_start(); - retval = 0; - } - return retval; - } - case WDIOC_KEEPALIVE: - pc87413_refresh(); -#ifdef DEBUG - pr_info(DPFX "keepalive\n"); -#endif - return 0; - case WDIOC_SETTIMEOUT: - if (get_user(new_timeout, uarg.i)) - return -EFAULT; - /* the API states this is given in secs */ - new_timeout /= 60; - if (new_timeout < 0 || new_timeout > MAX_TIMEOUT) - return -EINVAL; - timeout = new_timeout; - pc87413_refresh(); - /* fall through and return the new timeout... */ - case WDIOC_GETTIMEOUT: - new_timeout = timeout * 60; - return put_user(new_timeout, uarg.i); - default: - return -ENOTTY; - } -} - -/* -- Notifier funtions -----------------------------------------*/ +/* -- Notifier functions -----------------------------------------*/ /** * notify_sys: @@ -454,22 +264,28 @@ static long pc87413_ioctl(struct file *file, unsigned int cmd, * trust me - if it happens it does suck. */ -static int pc87413_notify_sys(struct notifier_block *this, - unsigned long code, - void *unused) + +/* -- Module's structures ---------------------------------------*/ + + +static int watchdog_restart_notifier(struct notifier_block *nb, + unsigned long code, void *data) { - if (code == SYS_DOWN || code == SYS_HALT) - /* Turn the card off */ - pc87413_stop(); + struct watchdog_device *wdd = container_of(nb, struct watchdog_device, + reboot_nb); + + if (code == SYS_DOWN || code == SYS_HALT) { + int ret; + + ret = wdd->ops->stop(wdd); + if (ret) + return NOTIFY_BAD; + } + return NOTIFY_DONE; } -/* -- Module's structures ---------------------------------------*/ - -static struct notifier_block pc87413wdt_notifier = { - .notifier_call = pc87413_notify_sys, -}; static struct watchdog_ops pc87413wdt_ops = { .owner = THIS_MODULE, @@ -482,7 +298,9 @@ static struct watchdog_ops pc87413wdt_ops = { static struct watchdog_device pc87413wdt_wdd = { .info = &pc87413wdt_ident, .ops = &pc87413wdt_ops, - .status = WATCHDOG_NOWAYOUT_INIT_STATUS + .status = WATCHDOG_NOWAYOUT_INIT_STATUS, + .exit = pc87413_exit, + .restart = watchdog_restart_notifier, }; @@ -493,7 +311,6 @@ static struct watchdog_device pc87413wdt_wdd = { * * Set up the WDT watchdog board. All we have to do is grab the * resources we require and bitch if anyone beat us to them. - * The open() function will actually kick the board off. */ static int __init pc87413_init(void) @@ -528,8 +345,6 @@ static int __init pc87413_init(void) goto misc_unreg; } - pc87413_start(); - release_region(io, 2); pc87413_keepalive(&pc87413wdt_wdd); return 0; @@ -554,13 +369,7 @@ reboot_unreg: static void __exit pc87413_exit(void) { - /* Stop the timer before we leave */ - if (!nowayout) { - pc87413_disable(); - pr_info("Watchdog disabled\n"); - } - - misc_deregister(&pc87413_miscdev); + watchdog_unregister_device(&pc87413wdt_wdd); unregister_reboot_notifier(&pc87413_notifier); release_region(swc_base_addr, 0x20); From patchwork Tue Jul 30 02:15:39 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Balantzyan X-Patchwork-Id: 11064829 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3FC6D112C for ; Tue, 30 Jul 2019 02:16:01 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2FDD22866D for ; Tue, 30 Jul 2019 02:16:01 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 243A1286EE; Tue, 30 Jul 2019 02:16:01 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CCD3A2866D for ; Tue, 30 Jul 2019 02:16:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731138AbfG3CQA (ORCPT ); Mon, 29 Jul 2019 22:16:00 -0400 Received: from mail-pf1-f193.google.com ([209.85.210.193]:37733 "EHLO mail-pf1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730481AbfG3CQA (ORCPT ); Mon, 29 Jul 2019 22:16:00 -0400 Received: by mail-pf1-f193.google.com with SMTP id 19so28972481pfa.4; Mon, 29 Jul 2019 19:15:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=kK+9K230k9UmhXIlNoE4R+E3TALh2YKwntB3mvsn3JY=; b=h7vu3ze98CHC+g3s+U26XwrmG6mLVuk3ZVcnjTUqm4hdxP+S2iqPDZ4hcFGtszHP6p l20iDSIBd1ekBbNGA6yPU4gmmQs43wq3MQR3ejtriYG2WvA8oEVjw0df8KFtAG1w3egJ JWX/Ak+6oQh8GgVHJxrRqsrBYBcw2KUpEBDeKrgbr2xF9P1uGeHHYG6cpCryZ2pHuVuB VZOD6mrbuECNsvnCDwCnZKQlhIZB9Ki8gC9SrWUsaKC3hkNONqVRAoIy6UlNyITmF/1f bDcPmjBsqauWo31xkSgE7JS0CZzs569x9Tow3SiusO/DMwA9LoytiM0r/nIdvzLj7YZ0 bwDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=kK+9K230k9UmhXIlNoE4R+E3TALh2YKwntB3mvsn3JY=; b=H9OmZ6/rdxyIIONHM+8P3L3vnXP42unS5Gf2i74epbtyyfbGJHvRXuctLwHC3awBmM 44NAc+9tVrGTvpVSZN1wJGgeVrdyYZ6kBmA158kZYScv/pv0j/vKDuKYY7k/dxf0Zrmd UfaBmdn3Lom4aKRA5fNpuqrMjudmHLERo0BJKGkE7gcgENslyKXBj/ca6mHh+kQr1d53 YpQlCq3UZ/ptV0vt3j2grBwjfZvvTi2E+O3FqWLkZupQaq5+xs1zG7vIkQbz0yvgaXr7 tBJS16OkNK6wJ4+hrD2CkXDL+daJz62UxUmp89gvDohtKsJD+Fh/1+DJcWBnq9APZ0jN OyCw== X-Gm-Message-State: APjAAAW6UdNh95fbOiToHBdlQmg26389o8W8v5zgvRr/zo2sO4w1Y3ny yRg4nzZgmQKB+DDoSe3okKg= X-Google-Smtp-Source: APXvYqxz+/5jmcYgqPhXdoZoScMFO4V4MK6a+QEyGHcmsYDX0vk1W/pN8clbTXW6W1h3kRh4SUKR3g== X-Received: by 2002:a63:5920:: with SMTP id n32mr103128393pgb.352.1564452959435; Mon, 29 Jul 2019 19:15:59 -0700 (PDT) Received: from localhost.localdomain (d206-116-172-62.bchsia.telus.net. [206.116.172.62]) by smtp.gmail.com with ESMTPSA id x13sm66561133pfn.6.2019.07.29.19.15.58 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Mon, 29 Jul 2019 19:15:59 -0700 (PDT) From: Mark Balantzyan To: linux@roeck-us.net Cc: wim@linux-watchdog.org, linux-kernel@vger.kernel.org, linux-watchdog@vger.kernel.org, andrianov@ispras.ru, Mark Balantzyan Subject: [PATCH 3/4] watchdog device drivers:pc87413_wdt: Tidying up conversion of pc87413_wdt driver to common watchdog interface, removal of some stray nowayout parameters Date: Mon, 29 Jul 2019 19:15:39 -0700 Message-Id: <20190730021540.66579-3-mbalant3@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190730021540.66579-1-mbalant3@gmail.com> References: <20190730021540.66579-1-mbalant3@gmail.com> Sender: linux-watchdog-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-watchdog@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP There is a potential for the variable swc_base_addr in the call chain of the driver initialization function (init) to be used before initialization. This brought up the need for, by rewriting the driver to use the common watchdog interface, ensuring to have all resources in place. This patch addresses this need by rewriting into common watchdog interface utilization for the driver. Signed-off-by: Mark Balantzyan --- drivers/watchdog/pc87413_wdt.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/drivers/watchdog/pc87413_wdt.c b/drivers/watchdog/pc87413_wdt.c index a9070a22..bc6c4e19 100644 --- a/drivers/watchdog/pc87413_wdt.c +++ b/drivers/watchdog/pc87413_wdt.c @@ -392,9 +392,3 @@ module_param(timeout, int, 0); MODULE_PARM_DESC(timeout, "Watchdog timeout in minutes (default=" __MODULE_STRING(DEFAULT_TIMEOUT) ")."); - -module_param(nowayout, bool, 0); -MODULE_PARM_DESC(nowayout, - "Watchdog cannot be stopped once started (default=" - __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); - From patchwork Tue Jul 30 02:15:40 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Balantzyan X-Patchwork-Id: 11064831 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 932DA14E5 for ; Tue, 30 Jul 2019 02:16:14 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 81AB128750 for ; Tue, 30 Jul 2019 02:16:14 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7481B28764; Tue, 30 Jul 2019 02:16:14 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 191A928750 for ; Tue, 30 Jul 2019 02:16:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731153AbfG3CQF (ORCPT ); Mon, 29 Jul 2019 22:16:05 -0400 Received: from mail-pf1-f196.google.com ([209.85.210.196]:39556 "EHLO mail-pf1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730481AbfG3CQC (ORCPT ); Mon, 29 Jul 2019 22:16:02 -0400 Received: by mail-pf1-f196.google.com with SMTP id f17so24984019pfn.6; Mon, 29 Jul 2019 19:16:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=FzaH7PVhh1ba0vgranyXQGmQCp6gwkLqstIglv23EsQ=; b=LyvBSq7Lw08tXQ633RjUqWZpZn43VQW8t+28eD9ymlKdYMU1xpv9DXKYvHhHZXvEwI rxCMCp8aJCZBKhNHg1e0MvPgSxV574CcOl0jpNPjeN8TOeeacpIbJzdZkt5TMU0UWL34 k50ZjFj1jHUtn7lp3ww5c5jIj1KN9oEATWqr+AtuI7Y47AwUhihOMZ/Srs63HDwhgK2G xuZz47MLrSVuse0C3dhTNlCOjI3v06nvrEMr73mhiQDtimhsO8T7OGcLXk/LyviJI4UW Cy7qo8az3HqWjxcGAOqB8b1tSp0HOTe/m7IGwsRRa4PDmXgo2eLRsPDSaQYXvLF1YwZ5 cjKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=FzaH7PVhh1ba0vgranyXQGmQCp6gwkLqstIglv23EsQ=; b=bWAMIo0u071Cv9poiQdTwfjSrFsKD59snYMWW19EEznrwSHIO3lpwHFj1m8DeR6pz9 LQlxnHakDNnG5LI4UBgdYHcnNr1hzS6q3tEctErf+MFywy7Srj9cQdUemjv6bzzvl8pQ MrcNJ6R/qWk8iiK3q8K2o0wU1uTjUCe1cPb7XxGXBOaUpPytI7u96mLyW/+qM5/gAAsZ xcS9cyUUx5AHLKq/9eJgfXMo6OJWrK1MUgkUIsLbhv+1bsIqCt2n+ZDGHzrJc5Acs+UH QsZHQV/a7k97eXewFBtY5H4hdawrUQc6efbvPEofVtnMjUFXq7wmYzTqeb2AXYx2/s+x 4Dww== X-Gm-Message-State: APjAAAWWSwAZzRUq4RB14xyZHx34tb2GWLGlmY8TRZrqOaE++psZWDKw n6hL8Gfi1BpA1+XsnwjgA/g= X-Google-Smtp-Source: APXvYqyzqZjq9jxdFiLhWHSSW5Eg5iWQpzGeoNGFJopdLmyoTZfK/duGMg9X4ELFvax+xWwR0HFxWQ== X-Received: by 2002:a17:90a:29c5:: with SMTP id h63mr110083713pjd.83.1564452961866; Mon, 29 Jul 2019 19:16:01 -0700 (PDT) Received: from localhost.localdomain (d206-116-172-62.bchsia.telus.net. [206.116.172.62]) by smtp.gmail.com with ESMTPSA id x13sm66561133pfn.6.2019.07.29.19.16.01 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Mon, 29 Jul 2019 19:16:01 -0700 (PDT) From: Mark Balantzyan To: linux@roeck-us.net Cc: wim@linux-watchdog.org, linux-kernel@vger.kernel.org, linux-watchdog@vger.kernel.org, andrianov@ispras.ru, Mark Balantzyan Subject: [PATCH 4/4] watchdog device drivers:pc87413_wdt: Continuing revision of conversion of pc87413_wdt to use common watchdog interface, removed undeclared identifiers Date: Mon, 29 Jul 2019 19:15:40 -0700 Message-Id: <20190730021540.66579-4-mbalant3@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190730021540.66579-1-mbalant3@gmail.com> References: <20190730021540.66579-1-mbalant3@gmail.com> Sender: linux-watchdog-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-watchdog@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP There is a potential for the variable swc_base_addr in the call chain of the driver initialization function (init) to be used before initialization. This brought up the need for, by rewriting the driver to use the common watchdog interface, ensuring to have all resources in place. This patch addresses this need by rewriting into common watchdog interface utilization for the driver. Signed-off-by: Mark Balantzyan --- drivers/watchdog/pc87413_wdt.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/watchdog/pc87413_wdt.c b/drivers/watchdog/pc87413_wdt.c index bc6c4e19..6863145a 100644 --- a/drivers/watchdog/pc87413_wdt.c +++ b/drivers/watchdog/pc87413_wdt.c @@ -370,7 +370,6 @@ reboot_unreg: static void __exit pc87413_exit(void) { watchdog_unregister_device(&pc87413wdt_wdd); - unregister_reboot_notifier(&pc87413_notifier); release_region(swc_base_addr, 0x20); pr_info("watchdog component driver removed\n");