From: Guenter Roeck <linux@roeck-us.net>
To: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>,
linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org,
linux-watchdog@vger.kernel.org
Cc: Wim Van Sebroeck <wim@iguana.be>,
Jason Gunthorpe <jgunthorpe@obsidianresearch.com>,
Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>,
Arnd Bergmann <arnd@arndb.de>,
Daniel Lezcano <daniel.lezcano@linaro.org>,
Fabio Estevam <festevam@gmail.com>, Andrew Lunn <andrew@lunn.ch>,
Thomas Petazzoni <thomas.petazzoni@free-electrons.com>,
Gregory Clement <gregory.clement@free-electrons.com>,
Tawfik Bayouk <tawfik@marvell.com>,
Lior Amsalem <alior@marvell.com>,
Jason Cooper <jason@lakedaemon.net>
Subject: Re: [PATCH v4 07/18] watchdog: orion: Handle IRQ
Date: Sat, 25 Jan 2014 10:15:57 -0800 [thread overview]
Message-ID: <52E3FF5D.4060505@roeck-us.net> (raw)
In-Reply-To: <1390431915-5115-8-git-send-email-ezequiel.garcia@free-electrons.com>
On 01/22/2014 03:05 PM, Ezequiel Garcia wrote:
> DT-enabled where an irqchip driver for the brigde interrupt controller is
> available can handle the watchdog IRQ properly. Therefore, we request
> the interruption and add a dummy handler that merely calls panic().
>
> This is done in order to have an initial 'ack' of the interruption,
> which clears the watchdog state.
>
> Furthermore, since some platforms don't have such IRQ, this commit
> makes the interruption specification optional.
>
> Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
> ---
> .../devicetree/bindings/watchdog/marvel.txt | 2 ++
> drivers/watchdog/orion_wdt.c | 24 +++++++++++++++++++++-
> 2 files changed, 25 insertions(+), 1 deletion(-)
>
> diff --git a/Documentation/devicetree/bindings/watchdog/marvel.txt b/Documentation/devicetree/bindings/watchdog/marvel.txt
> index 5dc8d30..0731fbd 100644
> --- a/Documentation/devicetree/bindings/watchdog/marvel.txt
> +++ b/Documentation/devicetree/bindings/watchdog/marvel.txt
> @@ -7,6 +7,7 @@ Required Properties:
>
> Optional properties:
>
> +- interrupts : Contains the IRQ for watchdog expiration
> - timeout-sec : Contains the watchdog timeout in seconds
>
> Example:
> @@ -14,6 +15,7 @@ Example:
> wdt@20300 {
> compatible = "marvell,orion-wdt";
> reg = <0x20300 0x28>;
> + interrupts = <3>;
> timeout-sec = <10>;
> status = "okay";
> };
> diff --git a/drivers/watchdog/orion_wdt.c b/drivers/watchdog/orion_wdt.c
> index 2dbeee9..f5e7b17 100644
> --- a/drivers/watchdog/orion_wdt.c
> +++ b/drivers/watchdog/orion_wdt.c
> @@ -19,6 +19,7 @@
> #include <linux/platform_device.h>
> #include <linux/watchdog.h>
> #include <linux/init.h>
> +#include <linux/interrupt.h>
> #include <linux/io.h>
> #include <linux/clk.h>
> #include <linux/err.h>
> @@ -109,10 +110,16 @@ static struct watchdog_device orion_wdt = {
> .min_timeout = 1,
> };
>
> +static irqreturn_t orion_wdt_irq(int irq, void *devid)
> +{
> + panic("Watchdog Timeout");
> + return IRQ_HANDLED;
> +}
> +
> static int orion_wdt_probe(struct platform_device *pdev)
> {
> struct resource *res;
> - int ret;
> + int ret, irq;
>
> clk = devm_clk_get(&pdev->dev, NULL);
> if (IS_ERR(clk)) {
> @@ -145,6 +152,21 @@ static int orion_wdt_probe(struct platform_device *pdev)
> /* Let's make sure the watchdog is fully stopped */
> orion_wdt_stop(&orion_wdt);
>
> + /* It's important to request the IRQ once the watchdog is disabled */
s/once/only after/
> + irq = platform_get_irq(pdev, 0);
> + if (irq >= 0) {
> + /*
> + * Not all supported platforms specify an interruption for the
s/interruption/interrupt pin/ (or interrupt)
Nitpicks, so
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
WARNING: multiple messages have this Message-ID (diff)
From: linux@roeck-us.net (Guenter Roeck)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4 07/18] watchdog: orion: Handle IRQ
Date: Sat, 25 Jan 2014 10:15:57 -0800 [thread overview]
Message-ID: <52E3FF5D.4060505@roeck-us.net> (raw)
In-Reply-To: <1390431915-5115-8-git-send-email-ezequiel.garcia@free-electrons.com>
On 01/22/2014 03:05 PM, Ezequiel Garcia wrote:
> DT-enabled where an irqchip driver for the brigde interrupt controller is
> available can handle the watchdog IRQ properly. Therefore, we request
> the interruption and add a dummy handler that merely calls panic().
>
> This is done in order to have an initial 'ack' of the interruption,
> which clears the watchdog state.
>
> Furthermore, since some platforms don't have such IRQ, this commit
> makes the interruption specification optional.
>
> Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
> ---
> .../devicetree/bindings/watchdog/marvel.txt | 2 ++
> drivers/watchdog/orion_wdt.c | 24 +++++++++++++++++++++-
> 2 files changed, 25 insertions(+), 1 deletion(-)
>
> diff --git a/Documentation/devicetree/bindings/watchdog/marvel.txt b/Documentation/devicetree/bindings/watchdog/marvel.txt
> index 5dc8d30..0731fbd 100644
> --- a/Documentation/devicetree/bindings/watchdog/marvel.txt
> +++ b/Documentation/devicetree/bindings/watchdog/marvel.txt
> @@ -7,6 +7,7 @@ Required Properties:
>
> Optional properties:
>
> +- interrupts : Contains the IRQ for watchdog expiration
> - timeout-sec : Contains the watchdog timeout in seconds
>
> Example:
> @@ -14,6 +15,7 @@ Example:
> wdt at 20300 {
> compatible = "marvell,orion-wdt";
> reg = <0x20300 0x28>;
> + interrupts = <3>;
> timeout-sec = <10>;
> status = "okay";
> };
> diff --git a/drivers/watchdog/orion_wdt.c b/drivers/watchdog/orion_wdt.c
> index 2dbeee9..f5e7b17 100644
> --- a/drivers/watchdog/orion_wdt.c
> +++ b/drivers/watchdog/orion_wdt.c
> @@ -19,6 +19,7 @@
> #include <linux/platform_device.h>
> #include <linux/watchdog.h>
> #include <linux/init.h>
> +#include <linux/interrupt.h>
> #include <linux/io.h>
> #include <linux/clk.h>
> #include <linux/err.h>
> @@ -109,10 +110,16 @@ static struct watchdog_device orion_wdt = {
> .min_timeout = 1,
> };
>
> +static irqreturn_t orion_wdt_irq(int irq, void *devid)
> +{
> + panic("Watchdog Timeout");
> + return IRQ_HANDLED;
> +}
> +
> static int orion_wdt_probe(struct platform_device *pdev)
> {
> struct resource *res;
> - int ret;
> + int ret, irq;
>
> clk = devm_clk_get(&pdev->dev, NULL);
> if (IS_ERR(clk)) {
> @@ -145,6 +152,21 @@ static int orion_wdt_probe(struct platform_device *pdev)
> /* Let's make sure the watchdog is fully stopped */
> orion_wdt_stop(&orion_wdt);
>
> + /* It's important to request the IRQ once the watchdog is disabled */
s/once/only after/
> + irq = platform_get_irq(pdev, 0);
> + if (irq >= 0) {
> + /*
> + * Not all supported platforms specify an interruption for the
s/interruption/interrupt pin/ (or interrupt)
Nitpicks, so
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
WARNING: multiple messages have this Message-ID (diff)
From: Guenter Roeck <linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
To: Ezequiel Garcia
<ezequiel.garcia-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-watchdog-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Cc: Wim Van Sebroeck <wim-IQzOog9fTRqzQB+pC5nmwQ@public.gmane.org>,
Jason Gunthorpe
<jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>,
Sebastian Hesselbarth
<sebastian.hesselbarth-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org>,
Daniel Lezcano
<daniel.lezcano-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
Fabio Estevam <festevam-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
Andrew Lunn <andrew-g2DYL2Zd6BY@public.gmane.org>,
Thomas Petazzoni
<thomas.petazzoni-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>,
Gregory Clement
<gregory.clement-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>,
Tawfik Bayouk <tawfik-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org>,
Lior Amsalem <alior-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org>,
Jason Cooper <jason-NLaQJdtUoK4Be96aLqz0jA@public.gmane.org>
Subject: Re: [PATCH v4 07/18] watchdog: orion: Handle IRQ
Date: Sat, 25 Jan 2014 10:15:57 -0800 [thread overview]
Message-ID: <52E3FF5D.4060505@roeck-us.net> (raw)
In-Reply-To: <1390431915-5115-8-git-send-email-ezequiel.garcia-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
On 01/22/2014 03:05 PM, Ezequiel Garcia wrote:
> DT-enabled where an irqchip driver for the brigde interrupt controller is
> available can handle the watchdog IRQ properly. Therefore, we request
> the interruption and add a dummy handler that merely calls panic().
>
> This is done in order to have an initial 'ack' of the interruption,
> which clears the watchdog state.
>
> Furthermore, since some platforms don't have such IRQ, this commit
> makes the interruption specification optional.
>
> Signed-off-by: Ezequiel Garcia <ezequiel.garcia-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
> ---
> .../devicetree/bindings/watchdog/marvel.txt | 2 ++
> drivers/watchdog/orion_wdt.c | 24 +++++++++++++++++++++-
> 2 files changed, 25 insertions(+), 1 deletion(-)
>
> diff --git a/Documentation/devicetree/bindings/watchdog/marvel.txt b/Documentation/devicetree/bindings/watchdog/marvel.txt
> index 5dc8d30..0731fbd 100644
> --- a/Documentation/devicetree/bindings/watchdog/marvel.txt
> +++ b/Documentation/devicetree/bindings/watchdog/marvel.txt
> @@ -7,6 +7,7 @@ Required Properties:
>
> Optional properties:
>
> +- interrupts : Contains the IRQ for watchdog expiration
> - timeout-sec : Contains the watchdog timeout in seconds
>
> Example:
> @@ -14,6 +15,7 @@ Example:
> wdt@20300 {
> compatible = "marvell,orion-wdt";
> reg = <0x20300 0x28>;
> + interrupts = <3>;
> timeout-sec = <10>;
> status = "okay";
> };
> diff --git a/drivers/watchdog/orion_wdt.c b/drivers/watchdog/orion_wdt.c
> index 2dbeee9..f5e7b17 100644
> --- a/drivers/watchdog/orion_wdt.c
> +++ b/drivers/watchdog/orion_wdt.c
> @@ -19,6 +19,7 @@
> #include <linux/platform_device.h>
> #include <linux/watchdog.h>
> #include <linux/init.h>
> +#include <linux/interrupt.h>
> #include <linux/io.h>
> #include <linux/clk.h>
> #include <linux/err.h>
> @@ -109,10 +110,16 @@ static struct watchdog_device orion_wdt = {
> .min_timeout = 1,
> };
>
> +static irqreturn_t orion_wdt_irq(int irq, void *devid)
> +{
> + panic("Watchdog Timeout");
> + return IRQ_HANDLED;
> +}
> +
> static int orion_wdt_probe(struct platform_device *pdev)
> {
> struct resource *res;
> - int ret;
> + int ret, irq;
>
> clk = devm_clk_get(&pdev->dev, NULL);
> if (IS_ERR(clk)) {
> @@ -145,6 +152,21 @@ static int orion_wdt_probe(struct platform_device *pdev)
> /* Let's make sure the watchdog is fully stopped */
> orion_wdt_stop(&orion_wdt);
>
> + /* It's important to request the IRQ once the watchdog is disabled */
s/once/only after/
> + irq = platform_get_irq(pdev, 0);
> + if (irq >= 0) {
> + /*
> + * Not all supported platforms specify an interruption for the
s/interruption/interrupt pin/ (or interrupt)
Nitpicks, so
Reviewed-by: Guenter Roeck <linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2014-01-25 18:15 UTC|newest]
Thread overview: 126+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-22 23:04 [PATCH v4 00/18] Armada 370/XP watchdog support Ezequiel Garcia
2014-01-22 23:04 ` Ezequiel Garcia
2014-01-22 23:04 ` Ezequiel Garcia
2014-01-22 23:04 ` [PATCH v4 01/18] ARM: Introduce atomic MMIO modify Ezequiel Garcia
2014-01-22 23:04 ` Ezequiel Garcia
2014-01-22 23:04 ` Ezequiel Garcia
2014-01-25 20:32 ` Jason Cooper
2014-01-25 20:32 ` Jason Cooper
2014-01-25 20:32 ` Jason Cooper
2014-01-22 23:04 ` [PATCH v4 02/18] clocksource: orion: Use atomic access for shared registers Ezequiel Garcia
2014-01-22 23:04 ` Ezequiel Garcia
2014-01-22 23:04 ` Ezequiel Garcia
2014-01-22 23:05 ` [PATCH v4 03/18] watchdog: orion: Add clock error handling Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-25 18:12 ` Guenter Roeck
2014-01-25 18:12 ` Guenter Roeck
2014-01-25 18:12 ` Guenter Roeck
2014-01-22 23:05 ` [PATCH v4 04/18] watchdog: orion: Use atomic access for shared registers Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-25 18:12 ` Guenter Roeck
2014-01-25 18:12 ` Guenter Roeck
2014-01-25 18:12 ` Guenter Roeck
2014-01-22 23:05 ` [PATCH v4 05/18] watchdog: orion: Remove unused macros Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-25 18:13 ` Guenter Roeck
2014-01-25 18:13 ` Guenter Roeck
2014-01-25 18:13 ` Guenter Roeck
2014-01-22 23:05 ` [PATCH v4 06/18] watchdog: orion: Make sure the watchdog is initially stopped Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-25 18:13 ` Guenter Roeck
2014-01-25 18:13 ` Guenter Roeck
2014-01-25 18:13 ` Guenter Roeck
2014-01-22 23:05 ` [PATCH v4 07/18] watchdog: orion: Handle IRQ Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-25 18:15 ` Guenter Roeck [this message]
2014-01-25 18:15 ` Guenter Roeck
2014-01-25 18:15 ` Guenter Roeck
2014-01-26 8:04 ` Thomas Petazzoni
2014-01-26 8:04 ` Thomas Petazzoni
2014-01-26 8:04 ` Thomas Petazzoni
2014-01-26 13:14 ` Ezequiel Garcia
2014-01-26 13:14 ` Ezequiel Garcia
2014-01-26 13:14 ` Ezequiel Garcia
2014-01-26 14:57 ` Thomas Petazzoni
2014-01-26 14:57 ` Thomas Petazzoni
2014-01-26 14:57 ` Thomas Petazzoni
2014-01-22 23:05 ` [PATCH v4 08/18] watchdog: orion: Make RSTOUT register a separate resource Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-25 18:19 ` Guenter Roeck
2014-01-25 18:19 ` Guenter Roeck
2014-01-25 18:19 ` Guenter Roeck
2014-01-26 13:20 ` Ezequiel Garcia
2014-01-26 13:20 ` Ezequiel Garcia
2014-01-26 13:20 ` Ezequiel Garcia
2014-01-26 8:17 ` Thomas Petazzoni
2014-01-26 8:17 ` Thomas Petazzoni
2014-01-26 8:17 ` Thomas Petazzoni
2014-01-26 13:18 ` Ezequiel Garcia
2014-01-26 13:18 ` Ezequiel Garcia
2014-01-26 13:18 ` Ezequiel Garcia
2014-01-22 23:05 ` [PATCH v4 09/18] watchdog: orion: Remove unneeded BRIDGE_CAUSE clear Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-25 18:20 ` Guenter Roeck
2014-01-25 18:20 ` Guenter Roeck
2014-01-25 18:20 ` Guenter Roeck
2014-01-22 23:05 ` [PATCH v4 10/18] watchdog: orion: Introduce an orion_watchdog device structure Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-25 18:21 ` Guenter Roeck
2014-01-25 18:21 ` Guenter Roeck
2014-01-25 18:21 ` Guenter Roeck
2014-01-22 23:05 ` [PATCH v4 11/18] watchdog: orion: Introduce per-compatible of_device_id data Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-25 18:23 ` Guenter Roeck
2014-01-25 18:23 ` Guenter Roeck
2014-01-25 18:23 ` Guenter Roeck
2014-01-22 23:05 ` [PATCH v4 12/18] watchdog: orion: Add per-compatible clock initialization Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-25 18:24 ` Guenter Roeck
2014-01-25 18:24 ` Guenter Roeck
2014-01-25 18:24 ` Guenter Roeck
2014-01-22 23:05 ` [PATCH v4 13/18] watchdog: orion: Add per-compatible watchdog start implementation Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-25 18:24 ` Guenter Roeck
2014-01-25 18:24 ` Guenter Roeck
2014-01-25 18:24 ` Guenter Roeck
2014-01-22 23:05 ` [PATCH v4 14/18] watchdog: orion: Add support for Armada 370 and Armada XP SoC Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-25 18:25 ` Guenter Roeck
2014-01-25 18:25 ` Guenter Roeck
2014-01-25 18:25 ` Guenter Roeck
2014-01-22 23:05 ` [PATCH v4 15/18] ARM: mvebu: Enable Armada 370/XP watchdog in the devicetree Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-22 23:05 ` [PATCH v4 16/18] ARM: kirkwood: Add RSTOUT 'reg' entry to devicetree Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-22 23:05 ` [PATCH v4 17/18] watchdog: orion: Enable the build on ARCH_MVEBU Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-22 23:05 ` [PATCH v4 18/18] ARM: mvebu: Enable watchdog support in defconfig Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-22 23:05 ` Ezequiel Garcia
2014-01-23 22:40 ` [PATCH v4 00/18] Armada 370/XP watchdog support Sebastian Hesselbarth
2014-01-23 22:40 ` Sebastian Hesselbarth
2014-01-23 22:40 ` Sebastian Hesselbarth
2014-01-25 17:09 ` Ezequiel Garcia
2014-01-25 17:09 ` Ezequiel Garcia
2014-01-25 17:09 ` Ezequiel Garcia
2014-01-27 14:49 ` Ezequiel Garcia
2014-01-27 14:49 ` Ezequiel Garcia
2014-01-27 14:49 ` Ezequiel Garcia
2014-01-25 16:57 ` Ezequiel Garcia
2014-01-25 16:57 ` Ezequiel Garcia
2014-01-25 16:57 ` Ezequiel Garcia
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=52E3FF5D.4060505@roeck-us.net \
--to=linux@roeck-us.net \
--cc=alior@marvell.com \
--cc=andrew@lunn.ch \
--cc=arnd@arndb.de \
--cc=daniel.lezcano@linaro.org \
--cc=devicetree@vger.kernel.org \
--cc=ezequiel.garcia@free-electrons.com \
--cc=festevam@gmail.com \
--cc=gregory.clement@free-electrons.com \
--cc=jason@lakedaemon.net \
--cc=jgunthorpe@obsidianresearch.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-watchdog@vger.kernel.org \
--cc=sebastian.hesselbarth@gmail.com \
--cc=tawfik@marvell.com \
--cc=thomas.petazzoni@free-electrons.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.