All of lore.kernel.org
 help / color / mirror / Atom feed
From: Guenter Roeck <linux@roeck-us.net>
To: Tomas Winkler <tomas.winkler@intel.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Wim Van Sebroeck <wim@iguana.be>
Cc: Alexander Usyskin <alexander.usyskin@intel.com>,
	linux-watchdog@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [char-misc-next 4/7] watchdog: mei_wdt: add status debugfs entry
Date: Fri, 18 Dec 2015 08:43:01 -0800	[thread overview]
Message-ID: <56743795.6090700@roeck-us.net> (raw)
In-Reply-To: <1450363780-30008-5-git-send-email-tomas.winkler@intel.com>

On 12/17/2015 06:49 AM, Tomas Winkler wrote:
> Add entry for dumping current watchdog internal state
>
> Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
> ---
>   drivers/watchdog/mei_wdt.c | 84 ++++++++++++++++++++++++++++++++++++++++++++++
>   1 file changed, 84 insertions(+)
>
> diff --git a/drivers/watchdog/mei_wdt.c b/drivers/watchdog/mei_wdt.c
> index 3c97deb70d90..a3f1c1613c32 100644
> --- a/drivers/watchdog/mei_wdt.c
> +++ b/drivers/watchdog/mei_wdt.c
> @@ -16,6 +16,7 @@
>   #include <linux/slab.h>
>   #include <linux/interrupt.h>
>   #include <linux/watchdog.h>
> +#include <linux/debugfs.h>
>
>   #include <linux/uuid.h>
>   #include <linux/mei_cl_bus.h>
> @@ -54,6 +55,19 @@ enum mei_wdt_state {
>   	MEI_WDT_STOPPING,
>   };
>
> +#if IS_ENABLED(CONFIG_DEBUG_FS)
> +static const char *mei_wdt_state_str(enum mei_wdt_state state)
> +{
> +	switch (state) {
> +	case MEI_WDT_IDLE: return "IDLE";
> +	case MEI_WDT_START: return "START";
> +	case MEI_WDT_RUNNING: return "RUNNING";
> +	case MEI_WDT_STOPPING: return "STOPPING";
> +	default: return "unknown";

Doesn't this cause checkpatch warnings ?

> +	}
> +}
> +#endif /* CONFIG_DEBUG_FS */
> +

Can you move this conditional code into the other #ifdef block below ?

Thanks,
Guenter

>   /**
>    * struct mei_wdt - mei watchdog driver
>    * @wdd: watchdog device
> @@ -62,6 +76,8 @@ enum mei_wdt_state {
>    * @state: watchdog internal state
>    * @cldev: mei watchdog client device
>    * @timeout: watchdog current timeout
> + *
> + * @dbgfs_dir: debugfs dir entry
>    */
>   struct mei_wdt {
>   	struct watchdog_device wdd;
> @@ -70,6 +86,10 @@ struct mei_wdt {
>   	struct mei_cl_device *cldev;
>   	enum mei_wdt_state state;
>   	u16 timeout;
> +
> +#if IS_ENABLED(CONFIG_DEBUG_FS)
> +	struct dentry *dbgfs_dir;
> +#endif /* CONFIG_DEBUG_FS */
>   };
>
>   /*
> @@ -296,6 +316,66 @@ static void mei_wdt_ops_unref(struct watchdog_device *wdd)
>   	kref_put(&wdt->refcnt, mei_wdt_release);
>   }
>
> +#if IS_ENABLED(CONFIG_DEBUG_FS)
> +
> +static ssize_t mei_dbgfs_read_state(struct file *file, char __user *ubuf,
> +				    size_t cnt, loff_t *ppos)
> +{
> +	struct mei_wdt *wdt = file->private_data;
> +	const size_t bufsz = 32;
> +	char buf[32];
> +	ssize_t pos = 0;
> +
> +	pos += scnprintf(buf + pos, bufsz - pos, "state: %s\n",
> +			 mei_wdt_state_str(wdt->state));
> +
> +	return simple_read_from_buffer(ubuf, cnt, ppos, buf, pos);
> +}
> +
> +static const struct file_operations dbgfs_fops_state = {
> +	.open = simple_open,
> +	.read = mei_dbgfs_read_state,
> +	.llseek = generic_file_llseek,
> +};
> +
> +static void dbgfs_deregister(struct mei_wdt *wdt)
> +{
> +	if (!wdt->dbgfs_dir)
> +		return;
> +	debugfs_remove_recursive(wdt->dbgfs_dir);
> +	wdt->dbgfs_dir = NULL;
> +}
> +
> +static int dbgfs_register(struct mei_wdt *wdt)
> +{
> +	struct dentry *dir, *f;
> +
> +	dir = debugfs_create_dir(KBUILD_MODNAME, NULL);
> +	if (!dir)
> +		return -ENOMEM;
> +
> +	wdt->dbgfs_dir = dir;
> +	f = debugfs_create_file("state", S_IRUSR, dir, wdt, &dbgfs_fops_state);
> +	if (!f)
> +		goto err;
> +
> +	return 0;
> +err:
> +	dbgfs_deregister(wdt);
> +	return -ENODEV;
> +}
> +
> +#else
> +
> +static inline void dbgfs_deregister(struct mei_wdt *wdt) {}
> +
> +static inline int dbgfs_register(struct mei_wdt *wdt)
> +{
> +	return 0;
> +}
> +#endif /* CONFIG_DEBUG_FS */
> +
> +
>   static const struct watchdog_ops wd_ops = {
>   	.owner       = THIS_MODULE,
>   	.start       = mei_wdt_ops_start,
> @@ -348,6 +428,8 @@ static int mei_wdt_probe(struct mei_cl_device *cldev,
>   	if (ret)
>   		goto err_disable;
>
> +	dbgfs_register(wdt);
> +
>   	return 0;
>
>   err_disable:
> @@ -367,6 +449,8 @@ static int mei_wdt_remove(struct mei_cl_device *cldev)
>
>   	kref_put(&wdt->refcnt, mei_wdt_release);
>
> +	dbgfs_deregister(wdt);
> +

This should probably come before the call to kref_put() since it uses wdt.

>   	mei_cldev_disable(cldev);
>
>   	return 0;
>


  reply	other threads:[~2015-12-18 16:43 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-17 14:49 [char-misc-next v2 0/7] mei: create proper iAMT watchdog driver Tomas Winkler
2015-12-17 14:49 ` [char-misc-next v2 1/7] mei: drop nfc leftovers from the mei driver Tomas Winkler
2015-12-17 14:49 ` [char-misc-next v2 2/7] mei: wd: drop the watchdog code from the core " Tomas Winkler
2015-12-17 14:49 ` [char-misc-next v2 3/7] watchdog: mei_wdt: implement MEI iAMT watchdog driver Tomas Winkler
2015-12-18 16:39   ` Guenter Roeck
2015-12-17 14:49 ` [char-misc-next 4/7] watchdog: mei_wdt: add status debugfs entry Tomas Winkler
2015-12-18 16:43   ` Guenter Roeck [this message]
2015-12-20  9:44     ` Winkler, Tomas
2015-12-20 10:40       ` Guenter Roeck
2015-12-20 11:54         ` Winkler, Tomas
2015-12-17 14:49 ` [char-misc-next v2 5/7] mei: bus: whitelist the watchdog client Tomas Winkler
2015-12-17 14:49 ` [char-misc-next v2 6/7] watchdog: mei_wdt: register wd device only if required Tomas Winkler
2015-12-18 16:58   ` Guenter Roeck
2015-12-20 12:23     ` Winkler, Tomas
2015-12-20 18:16       ` Guenter Roeck
2015-12-17 14:49 ` [char-misc-next v2 7/7] watchdog: mei_wdt: re-register device on event Tomas Winkler
2015-12-18 17:05   ` Guenter Roeck
2015-12-18 17:19     ` One Thousand Gnomes
2015-12-18 17:50       ` Guenter Roeck
2015-12-18 18:14         ` One Thousand Gnomes
2015-12-20 12:53           ` Winkler, Tomas
2015-12-20 12:53             ` Winkler, Tomas

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=56743795.6090700@roeck-us.net \
    --to=linux@roeck-us.net \
    --cc=alexander.usyskin@intel.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-watchdog@vger.kernel.org \
    --cc=tomas.winkler@intel.com \
    --cc=wim@iguana.be \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.