From: Guenter Roeck <linux@roeck-us.net>
To: fu.wei@linaro.org, Suravee.Suthikulpanit@amd.com,
linaro-acpi@lists.linaro.org, linux-watchdog@vger.kernel.org,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-doc@vger.kernel.org
Cc: tekkamanninja@gmail.com, graeme.gregory@linaro.org,
al.stone@linaro.org, hanjun.guo@linaro.org, timur@codeaurora.org,
ashwin.chaugule@linaro.org, arnd@arndb.de,
vgandhi@codeaurora.org, wim@iguana.be, jcm@redhat.com,
leo.duran@amd.com, corbet@lwn.net, mark.rutland@arm.com
Subject: Re: [PATCH v2 5/7] Watchdog: introduce "pretimeout" into framework
Date: Thu, 21 May 2015 03:11:55 -0700 [thread overview]
Message-ID: <555DAF6B.7000201@roeck-us.net> (raw)
In-Reply-To: <1432197156-16947-6-git-send-email-fu.wei@linaro.org>
On 05/21/2015 01:32 AM, fu.wei@linaro.org wrote:
> From: Fu Wei <fu.wei@linaro.org>
>
> Also update Documentation/watchdog/watchdog-kernel-api.txt to
> introduce:
> (1)the new elements in the watchdog_device and watchdog_ops struct;
> (2)the new API "watchdog_init_timeouts".
>
> Reasons:
> (1)kernel already has two watchdog drivers are using "pretimeout":
> drivers/char/ipmi/ipmi_watchdog.c
> drivers/watchdog/kempld_wdt.c(but the definition is different)
> (2)some other dirvers are going to use this: ARM SBSA Generic Watchdog
>
drivers
> Signed-off-by: Fu Wei <fu.wei@linaro.org>
> ---
> Documentation/watchdog/watchdog-kernel-api.txt | 62 ++++++++++++---
> drivers/watchdog/watchdog_core.c | 103 +++++++++++++++++++------
> drivers/watchdog/watchdog_dev.c | 48 ++++++++++++
> include/linux/watchdog.h | 30 ++++++-
> 4 files changed, 208 insertions(+), 35 deletions(-)
>
> diff --git a/Documentation/watchdog/watchdog-kernel-api.txt b/Documentation/watchdog/watchdog-kernel-api.txt
> index a0438f3..43900df 100644
> --- a/Documentation/watchdog/watchdog-kernel-api.txt
> +++ b/Documentation/watchdog/watchdog-kernel-api.txt
> @@ -49,6 +49,9 @@ struct watchdog_device {
> unsigned int timeout;
> unsigned int min_timeout;
> unsigned int max_timeout;
> + unsigned int pretimeout;
> + unsigned int min_pretimeout;
> + unsigned int max_pretimeout;
> void *driver_data;
> struct mutex lock;
> unsigned long status;
> @@ -70,6 +73,9 @@ It contains following fields:
> * timeout: the watchdog timer's timeout value (in seconds).
> * min_timeout: the watchdog timer's minimum timeout value (in seconds).
> * max_timeout: the watchdog timer's maximum timeout value (in seconds).
> +* pretimeout: the watchdog timer's pretimeout value (in seconds).
> +* min_pretimeout: the watchdog timer's minimum pretimeout value (in seconds).
> +* max_pretimeout: the watchdog timer's maximum pretimeout value (in seconds).
> * bootstatus: status of the device after booting (reported with watchdog
> WDIOF_* status bits).
> * driver_data: a pointer to the drivers private data of a watchdog device.
> @@ -92,6 +98,7 @@ struct watchdog_ops {
> int (*ping)(struct watchdog_device *);
> unsigned int (*status)(struct watchdog_device *);
> int (*set_timeout)(struct watchdog_device *, unsigned int);
> + int (*set_pretimeout)(struct watchdog_device *, unsigned int);
> unsigned int (*get_timeleft)(struct watchdog_device *);
> void (*ref)(struct watchdog_device *);
> void (*unref)(struct watchdog_device *);
> @@ -153,9 +160,19 @@ they are supported. These optional routines/operations are:
> and -EIO for "could not write value to the watchdog". On success this
> routine should set the timeout value of the watchdog_device to the
> achieved timeout value (which may be different from the requested one
> - because the watchdog does not necessarily has a 1 second resolution).
> + because the watchdog does not necessarily has a 1 second resolution;
> + If the driver supports pretimeout, then the timeout value must be greater
> + than that).
> (Note: the WDIOF_SETTIMEOUT needs to be set in the options field of the
> watchdog's info structure).
> +* set_pretimeout: this routine checks and changes the pretimeout of the
> + watchdog timer device. It returns 0 on success, -EINVAL for "parameter out of
> + range" and -EIO for "could not write value to the watchdog". On success this
> + routine should set the pretimeout value of the watchdog_device to the
> + achieved pretimeout value (which may be different from the requested one
> + because the watchdog does not necessarily has a 1 second resolution).
> + (Note: the WDIOF_PRETIMEOUT needs to be set in the options field of the
> + watchdog's info structure).
> * get_timeleft: this routines returns the time that's left before a reset.
> * ref: the operation that calls kref_get on the kref of a dynamically
> allocated watchdog_device struct.
> @@ -213,14 +230,41 @@ The watchdog_get_drvdata function allows you to retrieve driver specific data.
> The argument of this function is the watchdog device where you want to retrieve
> data from. The function returns the pointer to the driver specific data.
>
> -To initialize the timeout field, the following function can be used:
> +To initialize the timeout and pretimeout fields, the following function can be
> +used:
>
> -extern int watchdog_init_timeout(struct watchdog_device *wdd,
> - unsigned int timeout_parm, struct device *dev);
I think this API should still be listed here. Drivers not supporting pretimeout
can and should still use it.
> +extern int watchdog_init_timeouts(struct watchdog_device *wdd,
> + unsigned int pretimeout_parm,
> + unsigned int timeout_parm,
> + void (*update_limits)(struct watchdog_device *),
> + struct device *dev);
>
> -The watchdog_init_timeout function allows you to initialize the timeout field
> -using the module timeout parameter or by retrieving the timeout-sec property from
> -the device tree (if the module timeout parameter is invalid). Best practice is
> -to set the default timeout value as timeout value in the watchdog_device and
> -then use this function to set the user "preferred" timeout value.
> +The watchdog_init_timeouts function allows you to initialize the pretimeout and
> +timeout fields using the module pretimeout and timeout parameter or by
> +retrieving the elements in the timeout-sec property(the first element is for
> +timeout, the second one is for pretimeout) from the device tree(if the module
> +pretimeout and timeout parameter are invalid).
> +Normally, the pretimeout value will affect the limitation of timeout, and it
> +is also hardware related. So you can write a function in your driver to update
> +the limitation of timeout, according to the pretimeout value. Then pass the
> +function pointer by the update_limits parameter. If you driver doesn't
> +need this adjustment, just pass NULL to the update_limits parameter.
Is there a reason to believe that the update_limits function is necessary and
can not be handled by the set_pretimeout and set_timeout driver functions,
or possibly by the driver itself after calling watchdog_init_timeouts() ?
> +Most of watchdog timers have not pretimeout as the warning signal. They just
> +reset the system, once the timeout watch period expires. In this case, we can
> +pass 0 to the pretimeout_parm, and pass NULL to the update_limits. Or use the
> +old API: watchdog_init_timeout(see below)
> +Best practice is to set the default pretimeout and timeout value as pretimeout
> +and timeout value in the watchdog_device and then use this function to set the
> +user "preferred" pretimeout value.
> This routine returns zero on success and a negative errno code for failure.
> +
> +For backward compatibility, we also support the timeout initialization API:
> +
Why only for backward compatibility ? Why (try to) force new drivers which don't
support pretimeout to use the new API function ?
> +static inline int watchdog_init_timeout(struct watchdog_device *wdd,
> + unsigned int timeout_parm,
> + struct device *dev);
> +
> +Because of the introduction of pretimeout and watchdog_init_timeouts, this
> +function has become a small wrapper function of watchdog_init_timeouts.
The last sentence is irrelevant; how watchdog_init_timeout() is implemented
is an implementation detail, not part of the API.
> +
> +
Empty lines at end of file will cause whitespace errors on merge. Doesn't checkpatch
complain about this ?
> diff --git a/drivers/watchdog/watchdog_core.c b/drivers/watchdog/watchdog_core.c
> index cec9b55..460796e 100644
> --- a/drivers/watchdog/watchdog_core.c
> +++ b/drivers/watchdog/watchdog_core.c
> @@ -43,60 +43,115 @@
> static DEFINE_IDA(watchdog_ida);
> static struct class *watchdog_class;
>
> -static void watchdog_check_min_max_timeout(struct watchdog_device *wdd)
> +static void watchdog_check_min_max_timeouts(struct watchdog_device *wdd)
> {
> /*
> - * Check that we have valid min and max timeout values, if
> - * not reset them both to 0 (=not used or unknown)
> + * Check that we have valid min and max pretimeout and timeout values,
> + * if not reset them both to 0 (=not used or unknown)
> */
> + if (wdd->min_pretimeout > wdd->max_pretimeout) {
> + pr_info("Invalid min and max pretimeout, resetting to 0!\n");
Please drop the "!" at the end. While used in the old code, it is unnecessary
and often frowned upon nowadays.
> + wdd->min_pretimeout = 0;
> + wdd->max_pretimeout = 0;
> + }
> if (wdd->min_timeout > wdd->max_timeout) {
> pr_info("Invalid min and max timeout values, resetting to 0!\n");
> wdd->min_timeout = 0;
> wdd->max_timeout = 0;
> }
> + /*
> + * Check that we have valid min and max timeout values,
> + * if not reset them both to pretimeout limits
> + */
> + if (wdd->min_pretimeout && wdd->min_timeout < wdd->min_pretimeout) {
> + pr_info("Invalid min timeout, resetting to min pretimeout!\n");
> + wdd->min_timeout = wdd->min_pretimeout;
> + }
> + if (wdd->max_pretimeout && wdd->max_timeout < wdd->max_pretimeout) {
> + pr_info("Invalid max timeout, resetting to max pretimeout!\n");
> + wdd->max_timeout = wdd->max_pretimeout;
> + }
> }
>
> /**
> - * watchdog_init_timeout() - initialize the timeout field
> + * watchdog_init_timeouts() - initialize the pretimeout and timeout field
> + * @pretimeout_parm: pretimeout module parameter
> * @timeout_parm: timeout module parameter
> * @dev: Device that stores the timeout-sec property
> *
> - * Initialize the timeout field of the watchdog_device struct with either the
> - * timeout module parameter (if it is valid value) or the timeout-sec property
> - * (only if it is a valid value and the timeout_parm is out of bounds).
> - * If none of them are valid then we keep the old value (which should normally
> - * be the default timeout value.
> + * Initialize the pretimeout and timeout field of the watchdog_device struct
> + * with either the pretimeout and timeout module parameter (if it is valid
> + * value) or the timeout-sec property (only if it is a valid value and the
> + * pretimeout_parm and timeout_parm is out of bounds). If none of them are
> + * valid then we keep the old value (which should normally be the default
> + * timeout value.
valid, then we keep ... default timeout value).
> *
> * A zero is returned on success and -EINVAL for failure.
> */
> -int watchdog_init_timeout(struct watchdog_device *wdd,
> - unsigned int timeout_parm, struct device *dev)
> +int watchdog_init_timeouts(struct watchdog_device *wdd,
> + unsigned int pretimeout_parm,
> + unsigned int timeout_parm,
> + void (*update_limits)(struct watchdog_device *),
> + struct device *dev)
> {
> - unsigned int t = 0;
> + unsigned int timeout = 0, pretimeout = 0;
> + const __be32 *ppretimeout;
> int ret = 0;
> + struct property *timeout_sec;
> + int length;
>
> - watchdog_check_min_max_timeout(wdd);
> + watchdog_check_min_max_timeouts(wdd);
>
> - /* try to get the timeout module parameter first */
> - if (!watchdog_timeout_invalid(wdd, timeout_parm) && timeout_parm) {
> - wdd->timeout = timeout_parm;
> - return ret;
> + /* try to get the timeout and pretimeout module parameter first */
> + if (pretimeout_parm) {
> + if (!watchdog_pretimeout_invalid(wdd, pretimeout_parm)) {
> + wdd->pretimeout = pretimeout_parm;
> + if (update_limits)
> + update_limits(wdd);
> + } else {
> + pr_warn("Invalid pretimeout parameter!\n");
We didn't have all this noise earlier. Can we keep it that way ?
> + ret = -EINVAL;
> + }
> }
> - if (timeout_parm)
> +
> + if (timeout_parm) {
> + if (!watchdog_timeout_invalid(wdd, timeout_parm)) {
> + wdd->timeout = timeout_parm;
> + return ret;
> + }
> + pr_warn("Invalid timeout parameter!\n");
> ret = -EINVAL;
> + }
>
> /* try to get the timeout_sec property */
> if (dev == NULL || dev->of_node == NULL)
> return ret;
> - of_property_read_u32(dev->of_node, "timeout-sec", &t);
> - if (!watchdog_timeout_invalid(wdd, t) && t)
> - wdd->timeout = t;
> - else
> +
> + timeout_sec = of_find_property(dev->of_node, "timeout-sec", &length);
> + if (timeout_sec) {
> + ppretimeout = of_prop_next_u32(timeout_sec, NULL, &timeout);
Could you just use of_property_read_u32_array() and pass length as parameter ?
> + if (length == 2) {
> + of_prop_next_u32(timeout_sec, ppretimeout, &pretimeout);
> + if (!watchdog_pretimeout_invalid(wdd, pretimeout) &&
> + pretimeout) {
> + wdd->pretimeout = pretimeout;
> + if (update_limits)
> + update_limits(wdd);
> + } else {
> + ret = -EINVAL;
> + }
> + }
> + if (!watchdog_timeout_invalid(wdd, timeout) && timeout)
> + wdd->timeout = timeout;
> + else
> + ret = -EINVAL;
> + } else {
> ret = -EINVAL;
> + }
>
> return ret;
> }
> -EXPORT_SYMBOL_GPL(watchdog_init_timeout);
> +EXPORT_SYMBOL_GPL(watchdog_init_timeouts);
>
> /**
> * watchdog_register_device() - register a watchdog device
> @@ -119,7 +174,7 @@ int watchdog_register_device(struct watchdog_device *wdd)
> if (wdd->ops->start == NULL || wdd->ops->stop == NULL)
> return -EINVAL;
>
> - watchdog_check_min_max_timeout(wdd);
> + watchdog_check_min_max_timeouts(wdd);
>
> /*
> * Note: now that all watchdog_device data has been verified, we
> diff --git a/drivers/watchdog/watchdog_dev.c b/drivers/watchdog/watchdog_dev.c
> index 6aaefba..b519257 100644
> --- a/drivers/watchdog/watchdog_dev.c
> +++ b/drivers/watchdog/watchdog_dev.c
> @@ -218,6 +218,38 @@ out_timeout:
> }
>
> /*
> + * watchdog_set_pretimeout: set the watchdog timer pretimeout
> + * @wddev: the watchdog device to set the timeout for
> + * @pretimeout: pretimeout to set in seconds
> + */
> +
> +static int watchdog_set_pretimeout(struct watchdog_device *wddev,
> + unsigned int pretimeout)
> +{
> + int err;
> +
> + if (!wddev->ops->set_pretimeout ||
> + !(wddev->info->options & WDIOF_PRETIMEOUT))
> + return -EOPNOTSUPP;
> +
> + if (watchdog_pretimeout_invalid(wddev, pretimeout))
> + return -EINVAL;
> +
> + mutex_lock(&wddev->lock);
> +
> + if (test_bit(WDOG_UNREGISTERED, &wddev->status)) {
> + err = -ENODEV;
> + goto out_pretimeout;
> + }
> +
> + err = wddev->ops->set_pretimeout(wddev, pretimeout);
> +
> +out_pretimeout:
> + mutex_unlock(&wddev->lock);
> + return err;
> +}
> +
> +/*
> * watchdog_get_timeleft: wrapper to get the time left before a reboot
> * @wddev: the watchdog device to get the remaining time from
> * @timeleft: the time that's left
> @@ -388,6 +420,22 @@ static long watchdog_ioctl(struct file *file, unsigned int cmd,
> if (wdd->timeout == 0)
> return -EOPNOTSUPP;
> return put_user(wdd->timeout, p);
> + case WDIOC_SETPRETIMEOUT:
> + if (get_user(val, p))
> + return -EFAULT;
> + err = watchdog_set_pretimeout(wdd, val);
> + if (err < 0)
> + return err;
> + /* If the watchdog is active then we send a keepalive ping
> + * to make sure that the watchdog keep's running (and if
> + * possible that it takes the new timeout) */
Please use the standard multi-line comment format.
> + watchdog_ping(wdd);
> + /* Fall */
> + case WDIOC_GETPRETIMEOUT:
> + /* timeout == 0 means that we don't use the pretimeout */
pretimeout == 0 means ...
"use" or "know" ?
> + if (wdd->pretimeout == 0)
> + return -EOPNOTSUPP;
> + return put_user(wdd->pretimeout, p);
> case WDIOC_GETTIMELEFT:
> err = watchdog_get_timeleft(wdd, &val);
> if (err)
> diff --git a/include/linux/watchdog.h b/include/linux/watchdog.h
> index a746bf5..df430a3 100644
> --- a/include/linux/watchdog.h
> +++ b/include/linux/watchdog.h
> @@ -25,6 +25,7 @@ struct watchdog_device;
> * @ping: The routine that sends a keepalive ping to the watchdog device.
> * @status: The routine that shows the status of the watchdog device.
> * @set_timeout:The routine for setting the watchdog devices timeout value.
> + * @set_pretimeout:The routine for setting the watchdog devices pretimeout value
> * @get_timeleft:The routine that get's the time that's left before a reset.
> * @ref: The ref operation for dyn. allocated watchdog_device structs
> * @unref: The unref operation for dyn. allocated watchdog_device structs
> @@ -44,6 +45,7 @@ struct watchdog_ops {
> int (*ping)(struct watchdog_device *);
> unsigned int (*status)(struct watchdog_device *);
> int (*set_timeout)(struct watchdog_device *, unsigned int);
> + int (*set_pretimeout)(struct watchdog_device *, unsigned int);
> unsigned int (*get_timeleft)(struct watchdog_device *);
> void (*ref)(struct watchdog_device *);
> void (*unref)(struct watchdog_device *);
> @@ -62,6 +64,9 @@ struct watchdog_ops {
> * @timeout: The watchdog devices timeout value.
> * @min_timeout:The watchdog devices minimum timeout value.
> * @max_timeout:The watchdog devices maximum timeout value.
> + * @pretimeout: The watchdog devices pretimeout value.
> + * @min_pretimeout:The watchdog devices minimum pretimeout value.
> + * @max_pretimeout:The watchdog devices maximum pretimeout value.
> * @driver-data:Pointer to the drivers private data.
> * @lock: Lock for watchdog core internal use only.
> * @status: Field that contains the devices internal status bits.
> @@ -86,6 +91,9 @@ struct watchdog_device {
> unsigned int timeout;
> unsigned int min_timeout;
> unsigned int max_timeout;
> + unsigned int pretimeout;
> + unsigned int min_pretimeout;
> + unsigned int max_pretimeout;
> void *driver_data;
> struct mutex lock;
> unsigned long status;
> @@ -120,6 +128,14 @@ static inline bool watchdog_timeout_invalid(struct watchdog_device *wdd, unsigne
> (t < wdd->min_timeout || t > wdd->max_timeout));
> }
>
> +/* Use the following function to check if a pretimeout value is invalid */
> +static inline bool watchdog_pretimeout_invalid(struct watchdog_device *wdd,
> + unsigned int t)
> +{
> + return ((wdd->max_pretimeout != 0) &&
Please drop the unnecessary ( ).
> + (t < wdd->min_pretimeout || t > wdd->max_pretimeout));
> +}
> +
> /* Use the following functions to manipulate watchdog driver specific data */
> static inline void watchdog_set_drvdata(struct watchdog_device *wdd, void *data)
> {
> @@ -132,11 +148,21 @@ static inline void *watchdog_get_drvdata(struct watchdog_device *wdd)
> }
>
> /* drivers/watchdog/watchdog_core.c */
> -extern int watchdog_init_timeout(struct watchdog_device *wdd,
> - unsigned int timeout_parm, struct device *dev);
> +extern int watchdog_init_timeouts(struct watchdog_device *wdd,
> + unsigned int pretimeout_parm,
> + unsigned int timeout_parm,
> + void (*update_limits)(struct watchdog_device *),
> + struct device *dev);
> extern int watchdog_register_device(struct watchdog_device *);
> extern void watchdog_unregister_device(struct watchdog_device *);
>
> +static inline int watchdog_init_timeout(struct watchdog_device *wdd,
> + unsigned int timeout_parm,
> + struct device *dev)
> +{
> + return watchdog_init_timeouts(wdd, 0, timeout_parm, NULL, dev);
> +}
> +
> #ifdef CONFIG_HARDLOCKUP_DETECTOR
> void watchdog_nmi_disable_all(void);
> void watchdog_nmi_enable_all(void);
>
next prev parent reply other threads:[~2015-05-21 10:12 UTC|newest]
Thread overview: 312+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <=fu.wei@linaro.org>
2015-05-15 11:08 ` [PATCH 0/6] Watchdog: introdouce ARM SBSA watchdog driver fu.wei
2015-05-15 11:08 ` [PATCH 1/6] Documentation: add sbsa-gwdt.txt documentation fu.wei
2015-05-15 14:06 ` Arnd Bergmann
2015-05-15 14:14 ` Fu Wei
2015-05-16 10:29 ` Fu Wei
2015-05-15 11:08 ` [PATCH 2/6] ARM64: add SBSA Generic Watchdog device node in foundation-v8.dts fu.wei
2015-05-15 11:08 ` [PATCH 3/6] ARM64: add SBSA Generic Watchdog device node in amd-seattle-soc.dtsi fu.wei
2015-05-15 14:07 ` [Linaro-acpi] [PATCH 0/6] Watchdog: introdouce ARM SBSA watchdog driver Arnd Bergmann
2015-05-16 10:33 ` Fu Wei
2015-05-15 11:24 ` [PATCH 4/6] Watchdog: introdouce "pretimeout" into framework fu.wei
2015-05-15 11:24 ` [PATCH 5/6] Watchdog: introdouce ARM SBSA watchdog driver fu.wei
2015-05-15 13:57 ` Arnd Bergmann
2015-05-16 12:01 ` Fu Wei
2015-05-16 12:26 ` Timur Tabi
2015-05-15 22:57 ` Guenter Roeck
2015-05-18 17:38 ` Fu Wei
2015-05-15 11:24 ` [PATCH 6/6] ACPI: import watchdog info of GTDT into platform device fu.wei
2015-05-15 13:33 ` [PATCH 4/6] Watchdog: introdouce "pretimeout" into framework Guenter Roeck
2015-05-15 13:49 ` Fu Wei
2015-05-15 13:55 ` Timur Tabi
2015-05-15 17:59 ` Guenter Roeck
2015-05-15 18:01 ` Guenter Roeck
2015-05-18 17:22 ` Fu Wei
2015-05-15 14:04 ` Arnd Bergmann
2015-05-18 17:19 ` Fu Wei
2015-05-18 17:23 ` Guenter Roeck
2015-05-18 17:39 ` Fu Wei
2015-05-18 20:03 ` Arnd Bergmann
2015-05-18 20:14 ` Guenter Roeck
2015-05-19 1:12 ` Fu Wei
2015-05-21 8:32 ` [PATCH v2 0/7] Watchdog: introduce ARM SBSA watchdog driver fu.wei
2015-05-21 8:32 ` [PATCH v2 1/7] clocksource: export "arch_timer_get_rate" for the other drivers fu.wei
2015-05-22 14:02 ` Hanjun Guo
2015-05-22 14:09 ` Timur Tabi
2015-05-22 15:16 ` Guenter Roeck
2015-05-22 16:22 ` Timur Tabi
2015-05-21 8:32 ` [PATCH v2 2/7] Documentation: add sbsa-gwdt.txt documentation fu.wei
2015-05-21 8:32 ` [PATCH v2 3/7] ARM64: add SBSA Generic Watchdog device node in foundation-v8.dts fu.wei
2015-05-21 8:45 ` Arnd Bergmann
2015-05-21 8:49 ` Fu Wei
2015-05-21 8:32 ` [PATCH v2 4/7] ARM64: add SBSA Generic Watchdog device node in amd-seattle-soc.dtsi fu.wei
2015-05-21 20:33 ` Suravee Suthikulpanit
2015-05-21 8:32 ` [PATCH v2 5/7] Watchdog: introduce "pretimeout" into framework fu.wei
2015-05-21 9:04 ` Guenter Roeck
2015-05-21 10:05 ` Fu Wei
2015-05-21 10:17 ` Guenter Roeck
2015-05-21 10:50 ` Fu Wei
2015-05-21 13:28 ` Guenter Roeck
2015-05-21 10:11 ` Guenter Roeck [this message]
2015-05-21 15:32 ` Guenter Roeck
2015-05-22 5:17 ` Fu Wei
2015-05-25 3:09 ` Fu Wei
2015-05-22 6:30 ` Timo Kokkonen
2015-05-22 8:23 ` Fu Wei
2015-05-22 8:59 ` Timo Kokkonen
2015-05-22 10:46 ` Fu Wei
2015-05-22 12:14 ` Timo Kokkonen
2015-05-22 13:37 ` Guenter Roeck
2015-05-22 13:23 ` Guenter Roeck
2015-05-22 14:38 ` Fu Wei
2015-05-22 15:05 ` Guenter Roeck
2015-05-24 16:17 ` Fu Wei
2015-05-21 8:32 ` [PATCH v2 6/7] Watchdog: introduce ARM SBSA watchdog driver fu.wei
2015-05-21 10:34 ` Guenter Roeck
2015-05-21 11:08 ` Fu Wei
2015-05-21 15:18 ` Guenter Roeck
2015-05-21 15:46 ` Fu Wei
2015-05-21 15:59 ` Guenter Roeck
2015-05-21 16:12 ` Fu Wei
2015-05-21 16:33 ` Timur Tabi
2015-05-22 5:05 ` Fu Wei
2015-05-21 13:09 ` Timur Tabi
2015-05-21 15:28 ` Guenter Roeck
2015-05-25 3:43 ` Fu Wei
2015-05-25 3:46 ` Timur Tabi
2015-05-25 4:11 ` Fu Wei
2015-05-21 15:42 ` Timur Tabi
2015-05-23 16:28 ` Fu Wei
2015-05-23 16:50 ` Fu Wei
2015-05-23 19:40 ` Timur Tabi
2015-05-23 20:01 ` Guenter Roeck
2015-05-23 20:27 ` Timur Tabi
2015-05-23 20:44 ` Guenter Roeck
2015-05-24 10:50 ` Fu Wei
2015-05-24 10:15 ` Fu Wei
2015-05-24 14:15 ` Guenter Roeck
2015-05-24 15:50 ` Fu Wei
2015-05-24 16:23 ` Guenter Roeck
2015-05-24 16:47 ` Fu Wei
2015-05-24 16:58 ` Guenter Roeck
2015-05-24 17:04 ` Fu Wei
2015-05-24 15:02 ` Timur Tabi
2015-05-24 16:04 ` Fu Wei
2015-05-24 16:13 ` Timur Tabi
2015-05-24 16:29 ` Guenter Roeck
2015-05-24 16:33 ` Fu Wei
2015-05-24 16:44 ` Timur Tabi
2015-05-24 16:50 ` Guenter Roeck
2015-05-24 16:52 ` Fu Wei
2015-05-24 17:19 ` Timur Tabi
2015-05-24 17:23 ` Fu Wei
2015-05-24 17:32 ` Guenter Roeck
2015-05-24 17:47 ` Timur Tabi
2015-05-25 2:03 ` Fu Wei
2015-05-25 2:00 ` Fu Wei
2015-05-24 16:29 ` Fu Wei
2015-05-22 14:50 ` Hanjun Guo
2015-05-22 14:55 ` Arnd Bergmann
2015-05-22 15:01 ` Guenter Roeck
2015-05-22 15:18 ` Hanjun Guo
2015-05-22 15:24 ` [Linaro-acpi] " Arnd Bergmann
2015-05-22 16:19 ` Timur Tabi
2015-05-22 20:13 ` Arnd Bergmann
2015-05-22 20:17 ` Timur Tabi
2015-05-23 7:25 ` Fu Wei
2015-05-22 16:19 ` Timur Tabi
2015-05-23 14:47 ` Fu Wei
2015-05-22 16:18 ` Timur Tabi
2015-05-23 15:08 ` Timur Tabi
2015-05-23 17:26 ` Fu Wei
2015-05-23 18:35 ` Guenter Roeck
2015-05-23 18:37 ` Timur Tabi
2015-05-23 19:03 ` Fu Wei
2015-05-23 19:51 ` Guenter Roeck
2015-05-24 9:58 ` Fu Wei
2015-05-24 14:06 ` Guenter Roeck
2015-05-24 15:06 ` Timur Tabi
2015-05-24 15:37 ` Fu Wei
2015-05-23 18:40 ` Timur Tabi
2015-05-23 19:14 ` Fu Wei
2015-05-23 19:21 ` Timur Tabi
2015-05-21 8:32 ` [PATCH v2 7/7] ACPI: import watchdog info of GTDT into platform device fu.wei
2015-05-22 15:38 ` Hanjun Guo
2015-05-23 19:46 ` Timur Tabi
2015-05-21 8:46 ` [Linaro-acpi] [PATCH v2 0/7] Watchdog: introduce ARM SBSA watchdog driver Arnd Bergmann
2015-05-21 9:01 ` Fu Wei
2015-05-21 20:36 ` Suravee Suthikulpanit
2015-05-22 5:08 ` Fu Wei
2015-05-25 10:03 ` [PATCH v3 0/6] " fu.wei
2015-05-25 10:03 ` [PATCH v3 1/6] Documentation: add sbsa-gwdt.txt documentation fu.wei
2015-05-25 10:03 ` [PATCH v3 2/6] ARM64: add SBSA Generic Watchdog device node in foundation-v8.dts fu.wei
2015-05-25 10:03 ` [PATCH v3 3/6] ARM64: add SBSA Generic Watchdog device node in amd-seattle-soc.dtsi fu.wei
2015-05-25 10:03 ` [PATCH v3 4/6] Watchdog: introdouce "pretimeout" into framework fu.wei
2015-05-25 19:28 ` Guenter Roeck
2015-05-25 10:03 ` [PATCH v3 5/6] Watchdog: introduce ARM SBSA watchdog driver fu.wei
2015-05-25 19:39 ` Guenter Roeck
2015-05-29 9:11 ` Fu Wei
2015-05-29 14:54 ` Guenter Roeck
2015-05-29 15:05 ` Fu Wei
2015-05-26 16:50 ` Timur Tabi
2015-05-29 10:17 ` Fu Wei
2015-05-29 13:28 ` Timur Tabi
2015-05-29 14:32 ` Fu Wei
2015-05-29 15:46 ` Timur Tabi
2015-05-29 17:53 ` Fu Wei
2015-05-29 18:27 ` Timur Tabi
2015-05-29 22:10 ` Guenter Roeck
2015-06-01 7:50 ` Fu Wei
2015-05-25 10:03 ` [PATCH v3 6/6] ACPI: import watchdog info of GTDT into platform device fu.wei
2015-05-26 8:28 ` Hanjun Guo
2015-05-26 16:35 ` Timur Tabi
2015-05-26 18:24 ` Guenter Roeck
2015-05-27 3:01 ` Hanjun Guo
2015-05-27 3:08 ` Timur Tabi
2015-05-26 12:28 ` Will Deacon
2015-05-26 15:02 ` Ashwin Chaugule
2015-05-26 15:18 ` Will Deacon
2015-05-26 15:35 ` Ashwin Chaugule
2015-05-26 15:36 ` Guenter Roeck
2015-05-26 16:27 ` Fu Wei
2015-05-27 10:44 ` Will Deacon
2015-05-29 11:13 ` Fu Wei
2015-06-02 4:05 ` [PATCH v4 0/7] Watchdog: introduce ARM SBSA watchdog driver fu.wei
2015-06-02 4:05 ` [PATCH v4 1/7] Documentation: add sbsa-gwdt.txt documentation fu.wei
2015-06-02 4:05 ` [PATCH v4 2/7] ARM64: add SBSA Generic Watchdog device node in foundation-v8.dts fu.wei
2015-06-02 4:05 ` [PATCH v4 3/7] ARM64: add SBSA Generic Watchdog device node in amd-seattle-soc.dtsi fu.wei
2015-06-02 4:05 ` [PATCH v4 4/7] Watchdog: introdouce "pretimeout" into framework fu.wei
2015-06-02 16:12 ` Guenter Roeck
2015-06-08 16:44 ` Fu Wei
2015-06-02 4:05 ` [PATCH v4 5/7] Watchdog: introduce ARM SBSA watchdog driver fu.wei
2015-06-02 15:32 ` Timur Tabi
2015-06-02 15:37 ` Guenter Roeck
2015-06-02 16:55 ` Fu Wei
2015-06-02 17:07 ` Guenter Roeck
2015-06-08 16:05 ` Fu Wei
2015-06-08 18:26 ` Guenter Roeck
2015-06-09 3:59 ` Fu Wei
2015-06-09 4:37 ` Guenter Roeck
2015-06-09 6:37 ` Fu Wei
2015-06-09 8:04 ` Guenter Roeck
2015-06-09 10:46 ` Fu Wei
2015-06-09 16:22 ` Guenter Roeck
2015-06-09 16:29 ` Timur Tabi
2015-06-09 16:45 ` Guenter Roeck
2015-06-09 16:53 ` Timur Tabi
2015-06-10 3:41 ` Fu Wei
2015-06-10 4:20 ` Fu Wei
2015-06-10 14:22 ` Timur Tabi
2015-06-10 14:36 ` Fu Wei
2015-06-10 14:41 ` Fu Wei
2015-06-10 15:38 ` Fu Wei
2015-06-10 17:54 ` Fu Wei
2015-06-11 0:22 ` Timur Tabi
2015-06-11 3:00 ` Fu Wei
2015-06-11 3:45 ` Timur Tabi
2015-06-11 5:13 ` Guenter Roeck
2015-06-11 5:33 ` Fu Wei
2015-06-11 5:32 ` Fu Wei
2015-06-02 17:21 ` Timur Tabi
2015-06-03 18:16 ` Timur Tabi
2015-06-03 18:25 ` Guenter Roeck
2015-06-03 18:53 ` Timur Tabi
2015-06-03 19:29 ` Arnd Bergmann
2015-09-10 22:45 ` Jon Masters
2015-09-14 4:21 ` Pratyush Anand
2015-09-14 15:27 ` Fu Wei
2015-09-14 8:51 ` Catalin Marinas
2015-09-15 3:16 ` Fu Wei
2015-06-08 16:10 ` Fu Wei
2015-06-02 4:05 ` [PATCH v4 6/7] ACPI: add GTDT table parse driver into ACPI driver fu.wei
2015-06-02 4:05 ` [PATCH v4 7/7] clocksource: simplify ACPI code in arm_arch_timer.c fu.wei
2015-06-10 13:41 ` [PATCH v5 0/8] Watchdog: introduce ARM SBSA watchdog driver fu.wei
2015-06-10 13:41 ` [PATCH v5 1/8] Documentation: add sbsa-gwdt.txt documentation fu.wei
2015-06-10 13:41 ` [PATCH v5 2/8] ARM64: add SBSA Generic Watchdog device node in foundation-v8.dts fu.wei
2015-06-10 13:41 ` [PATCH v5 3/8] ARM64: add SBSA Generic Watchdog device node in amd-seattle-soc.dtsi fu.wei
2015-06-10 13:41 ` [PATCH v5 4/8] Watchdog: introdouce "pretimeout" into framework fu.wei
2015-06-10 16:21 ` Guenter Roeck
2015-06-11 11:22 ` Fu Wei
2015-06-11 16:38 ` Guenter Roeck
2015-06-10 13:41 ` [PATCH v5 5/8] Watchdog: introduce ARM SBSA watchdog driver fu.wei
2015-06-10 13:41 ` [PATCH v5 6/8] ACPI: add GTDT table parse driver into ACPI driver fu.wei
2015-06-10 13:41 ` [PATCH v5 7/8] Watchdog: enable ACPI GTDT support for ARM SBSA watchdog driver fu.wei
2015-06-10 13:41 ` [PATCH v5 8/8] clocksource: simplify ACPI code in arm_arch_timer.c fu.wei
2015-06-10 17:47 ` [PATCH non-pretimeout 0/7] Watchdog: introduce ARM SBSA watchdog driver fu.wei
2015-06-10 17:47 ` [PATCH non-pretimeout 1/7] Documentation: add sbsa-gwdt.txt documentation fu.wei
2015-06-10 17:47 ` [PATCH non-pretimeout 2/7] ARM64: add SBSA Generic Watchdog device node in foundation-v8.dts fu.wei
2015-06-10 17:47 ` [PATCH non-pretimeout 3/7] ARM64: add SBSA Generic Watchdog device node in amd-seattle-soc.dtsi fu.wei
2015-06-12 20:54 ` Timur Tabi
2015-06-14 10:05 ` Fu Wei
2015-06-14 13:17 ` Timur Tabi
2015-06-14 13:57 ` Guenter Roeck
2015-06-15 11:00 ` Fu Wei
2015-06-10 17:47 ` [PATCH non-pretimeout 4/7] Watchdog: introduce ARM SBSA watchdog driver fu.wei
2015-06-11 5:33 ` Guenter Roeck
2015-06-11 5:44 ` Fu Wei
2015-06-11 5:49 ` Guenter Roeck
2015-06-11 5:59 ` Fu Wei
2015-06-11 16:28 ` [non-pretimeout,4/7] " Guenter Roeck
2015-06-23 13:26 ` Fu Wei
2015-06-23 15:21 ` Guenter Roeck
2015-06-23 16:17 ` Fu Wei
2015-06-23 16:43 ` Guenter Roeck
2015-06-23 17:01 ` Fu Wei
2015-06-12 3:57 ` [PATCH non-pretimeout 4/7] " Timur Tabi
2015-06-14 10:15 ` Fu Wei
2015-06-10 17:47 ` [PATCH non-pretimeout 5/7] ACPI: add GTDT table parse driver into ACPI driver fu.wei
2015-06-11 11:14 ` Hanjun Guo
2015-06-10 17:47 ` [PATCH non-pretimeout 6/7] Watchdog: enable ACPI GTDT support for ARM SBSA watchdog driver fu.wei
2015-06-12 13:16 ` Timur Tabi
2015-06-10 17:47 ` [PATCH non-pretimeout 7/7] clocksource: simplify ACPI code in arm_arch_timer.c fu.wei
2015-06-23 14:16 ` [PATCH v6 0/8] Watchdog: introduce ARM SBSA watchdog driver fu.wei
2015-06-23 14:16 ` [PATCH v6 1/8] Documentation: add sbsa-gwdt.txt documentation fu.wei
2015-07-14 14:49 ` Rob Herring
2015-07-14 15:48 ` Fu Wei
2015-07-15 12:52 ` Fu Wei
2015-06-23 14:16 ` [PATCH v6 2/8] ARM64: add SBSA Generic Watchdog device node in foundation-v8.dts fu.wei
2015-06-23 14:16 ` [PATCH v6 3/8] ARM64: add SBSA Generic Watchdog device node in amd-seattle-soc.dtsi fu.wei
2015-06-23 14:16 ` [PATCH v6 4/8] Watchdog: introdouce "pretimeout" into framework fu.wei
2015-06-29 16:53 ` [PATCH v6 0/8] Watchdog: introduce ARM SBSA watchdog driver Fu Wei
2015-06-29 19:16 ` Guenter Roeck
2015-06-30 23:47 ` Fu Wei
2015-07-13 9:09 ` Fu Wei
2015-07-13 15:34 ` Guenter Roeck
2015-07-14 0:42 ` Fu Wei
2015-06-23 15:59 ` [PATCH v6 5/8] " fu.wei
2015-06-23 15:59 ` [PATCH v6 6/8] ACPI: add GTDT table parse driver into ACPI driver fu.wei
2015-07-23 8:32 ` Fu Wei
2015-06-23 15:59 ` [PATCH v6 7/8] Watchdog: enable ACPI GTDT support for ARM SBSA watchdog driver fu.wei
2015-06-23 15:59 ` [PATCH v6 8/8] clocksource: simplify ACPI code in arm_arch_timer.c fu.wei
2015-08-24 17:01 ` [PATCH v7 0/8] Watchdog: introduce ARM SBSA watchdog driver fu.wei
2015-08-24 17:01 ` [PATCH v7 1/8] Documentation: add sbsa-gwdt.txt documentation fu.wei
2015-08-24 17:01 ` [PATCH v7 2/8] ARM64: add SBSA Generic Watchdog device node in foundation-v8.dts fu.wei
2015-09-15 8:43 ` Dave Young
2015-09-15 9:44 ` Pratyush Anand
2015-09-15 10:23 ` Fu Wei
2015-09-15 10:15 ` Fu Wei
2015-08-24 17:01 ` [PATCH v7 3/8] ARM64: add SBSA Generic Watchdog device node in amd-seattle-soc.dtsi fu.wei
2015-08-24 17:01 ` [PATCH v7 4/8] Watchdog: introdouce "pretimeout" into framework fu.wei
2015-08-24 17:01 ` [PATCH v7 5/8] Watchdog: introduce ARM SBSA watchdog driver fu.wei
2015-09-10 22:29 ` Jon Masters
2015-09-11 2:05 ` Guenter Roeck
2015-09-11 2:50 ` Guenter Roeck
2015-09-14 17:11 ` Fu Wei
2015-09-15 8:38 ` Dave Young
2015-09-15 10:07 ` Fu Wei
2015-09-16 1:57 ` Dave Young
2015-10-13 8:34 ` Fu Wei
2015-08-24 17:01 ` [PATCH v7 6/8] ACPI: add GTDT table parse driver into ACPI driver fu.wei
2015-08-24 17:01 ` [PATCH v7 7/8] Watchdog: enable ACPI GTDT support for ARM SBSA watchdog driver fu.wei
2015-08-24 17:01 ` [PATCH v7 8/8] clocksource: simplify ACPI code in arm_arch_timer.c fu.wei
2015-08-24 17:50 ` Thomas Gleixner
2015-08-25 17:19 ` Fu Wei
2015-08-25 19:17 ` Thomas Gleixner
2015-08-27 12:02 ` Hanjun Guo
2015-08-27 12:08 ` Thomas Gleixner
2015-08-27 12:28 ` Hanjun Guo
2015-08-27 13:36 ` Hanjun Guo
2015-08-27 13:40 ` Thomas Gleixner
2015-08-27 13:51 ` Fu Wei
2015-09-14 18:05 ` Marc Zyngier
2015-09-30 17:13 ` [PATCH v7 0/8] Watchdog: introduce ARM SBSA watchdog driver Pratyush Anand
2015-09-30 17:22 ` Fu Wei
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=555DAF6B.7000201@roeck-us.net \
--to=linux@roeck-us.net \
--cc=Suravee.Suthikulpanit@amd.com \
--cc=al.stone@linaro.org \
--cc=arnd@arndb.de \
--cc=ashwin.chaugule@linaro.org \
--cc=corbet@lwn.net \
--cc=devicetree@vger.kernel.org \
--cc=fu.wei@linaro.org \
--cc=graeme.gregory@linaro.org \
--cc=hanjun.guo@linaro.org \
--cc=jcm@redhat.com \
--cc=leo.duran@amd.com \
--cc=linaro-acpi@lists.linaro.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-watchdog@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=tekkamanninja@gmail.com \
--cc=timur@codeaurora.org \
--cc=vgandhi@codeaurora.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).