All of lore.kernel.org
 help / color / mirror / Atom feed
From: Preeti U Murthy <preeti@linux.vnet.ibm.com>
To: Nicolas Pitre <nicolas.pitre@linaro.org>
Cc: Olof Johansson <olof@lixom.net>,
	Russell King <linux@arm.linux.org.uk>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Paul Mundt <lethal@linux-sh.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	Daniel Lezcano <daniel.lezcano@linaro.org>,
	linaro-kernel@lists.linaro.org, linux-pm@vger.kernel.org,
	linux-sh@vger.kernel.org, linux-kernel@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v2 1/6] idle: move the cpuidle entry point to the generic idle loop
Date: Thu, 30 Jan 2014 11:20:17 +0530	[thread overview]
Message-ID: <52E9E819.4040002@linux.vnet.ibm.com> (raw)
In-Reply-To: <alpine.LFD.2.11.1401300021530.1652@knanqh.ubzr>

Hi Nicolas,

On 01/30/2014 10:58 AM, Nicolas Pitre wrote:
> On Thu, 30 Jan 2014, Preeti U Murthy wrote:
> 
>> Hi Nicolas,
>>
>> On 01/30/2014 02:01 AM, Nicolas Pitre wrote:
>>> On Wed, 29 Jan 2014, Nicolas Pitre wrote:
>>>
>>>> In order to integrate cpuidle with the scheduler, we must have a better
>>>> proximity in the core code with what cpuidle is doing and not delegate
>>>> such interaction to arch code.
>>>>
>>>> Architectures implementing arch_cpu_idle() should simply enter
>>>> a cheap idle mode in the absence of a proper cpuidle driver.
>>>>
>>>> Signed-off-by: Nicolas Pitre <nico@linaro.org>
>>>> Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
>>>
>>> As mentioned in my reply to Olof's comment on patch #5/6, here's a new 
>>> version of this patch adding the safety local_irq_enable() to the core 
>>> code.
>>>
>>> ----- >8
>>>
>>> From: Nicolas Pitre <nicolas.pitre@linaro.org>
>>> Subject: idle: move the cpuidle entry point to the generic idle loop
>>>
>>> In order to integrate cpuidle with the scheduler, we must have a better
>>> proximity in the core code with what cpuidle is doing and not delegate
>>> such interaction to arch code.
>>>
>>> Architectures implementing arch_cpu_idle() should simply enter
>>> a cheap idle mode in the absence of a proper cpuidle driver.
>>>
>>> In both cases i.e. whether it is a cpuidle driver or the default
>>> arch_cpu_idle(), the calling convention expects IRQs to be disabled
>>> on entry and enabled on exit. There is a warning in place already but
>>> let's add a forced IRQ enable here as well.  This will allow for
>>> removing the forced IRQ enable some implementations do locally and 
>>
>> Why would this patch allow for removing the forced IRQ enable that are
>> being done on some archs in arch_cpu_idle()? Isn't this patch expecting
>> the default arch_cpu_idle() to have re-enabled the interrupts after
>> exiting from the default idle state? Its supposed to only catch faulty
>> cpuidle drivers that haven't enabled IRQs on exit from idle state but
>> are expected to have done so, isn't it?
> 
> Exact.  However x86 currently does this:
> 
> 	if (cpuidle_idle_call())
> 	        x86_idle();
> 	else
> 	        local_irq_enable();
> 
> So whenever cpuidle_idle_call() is successful then IRQs are 
> unconditionally enabled whether or not the underlying cpuidle driver has 
> properly done it or not.  And the reason is that some of the x86 cpuidle 
> do fail to enable IRQs before returning.
> 
> So the idea is to get rid of this unconditional IRQ enabling and let the 
> core issue a warning instead (as well as enabling IRQs to allow the 
> system to run).

Oh ok, thank you for clarifying this:)

Regards
Preeti U Murthy
> 
> 
> Nicolas
> 


WARNING: multiple messages have this Message-ID (diff)
From: Preeti U Murthy <preeti@linux.vnet.ibm.com>
To: linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v2 1/6] idle: move the cpuidle entry point to the generic idle loop
Date: Thu, 30 Jan 2014 05:53:57 +0000	[thread overview]
Message-ID: <52E9E819.4040002@linux.vnet.ibm.com> (raw)
In-Reply-To: <alpine.LFD.2.11.1401300021530.1652@knanqh.ubzr>

Hi Nicolas,

On 01/30/2014 10:58 AM, Nicolas Pitre wrote:
> On Thu, 30 Jan 2014, Preeti U Murthy wrote:
> 
>> Hi Nicolas,
>>
>> On 01/30/2014 02:01 AM, Nicolas Pitre wrote:
>>> On Wed, 29 Jan 2014, Nicolas Pitre wrote:
>>>
>>>> In order to integrate cpuidle with the scheduler, we must have a better
>>>> proximity in the core code with what cpuidle is doing and not delegate
>>>> such interaction to arch code.
>>>>
>>>> Architectures implementing arch_cpu_idle() should simply enter
>>>> a cheap idle mode in the absence of a proper cpuidle driver.
>>>>
>>>> Signed-off-by: Nicolas Pitre <nico@linaro.org>
>>>> Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
>>>
>>> As mentioned in my reply to Olof's comment on patch #5/6, here's a new 
>>> version of this patch adding the safety local_irq_enable() to the core 
>>> code.
>>>
>>> ----- >8
>>>
>>> From: Nicolas Pitre <nicolas.pitre@linaro.org>
>>> Subject: idle: move the cpuidle entry point to the generic idle loop
>>>
>>> In order to integrate cpuidle with the scheduler, we must have a better
>>> proximity in the core code with what cpuidle is doing and not delegate
>>> such interaction to arch code.
>>>
>>> Architectures implementing arch_cpu_idle() should simply enter
>>> a cheap idle mode in the absence of a proper cpuidle driver.
>>>
>>> In both cases i.e. whether it is a cpuidle driver or the default
>>> arch_cpu_idle(), the calling convention expects IRQs to be disabled
>>> on entry and enabled on exit. There is a warning in place already but
>>> let's add a forced IRQ enable here as well.  This will allow for
>>> removing the forced IRQ enable some implementations do locally and 
>>
>> Why would this patch allow for removing the forced IRQ enable that are
>> being done on some archs in arch_cpu_idle()? Isn't this patch expecting
>> the default arch_cpu_idle() to have re-enabled the interrupts after
>> exiting from the default idle state? Its supposed to only catch faulty
>> cpuidle drivers that haven't enabled IRQs on exit from idle state but
>> are expected to have done so, isn't it?
> 
> Exact.  However x86 currently does this:
> 
> 	if (cpuidle_idle_call())
> 	        x86_idle();
> 	else
> 	        local_irq_enable();
> 
> So whenever cpuidle_idle_call() is successful then IRQs are 
> unconditionally enabled whether or not the underlying cpuidle driver has 
> properly done it or not.  And the reason is that some of the x86 cpuidle 
> do fail to enable IRQs before returning.
> 
> So the idea is to get rid of this unconditional IRQ enabling and let the 
> core issue a warning instead (as well as enabling IRQs to allow the 
> system to run).

Oh ok, thank you for clarifying this:)

Regards
Preeti U Murthy
> 
> 
> Nicolas
> 


WARNING: multiple messages have this Message-ID (diff)
From: Preeti U Murthy <preeti@linux.vnet.ibm.com>
To: Nicolas Pitre <nicolas.pitre@linaro.org>
Cc: linaro-kernel@lists.linaro.org,
	Russell King <linux@arm.linux.org.uk>,
	linux-pm@vger.kernel.org, Peter Zijlstra <peterz@infradead.org>,
	Daniel Lezcano <daniel.lezcano@linaro.org>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	linux-kernel@vger.kernel.org, Paul Mundt <lethal@linux-sh.org>,
	linux-sh@vger.kernel.org, Olof Johansson <olof@lixom.net>,
	Thomas Gleixner <tglx@linutronix.de>,
	linuxppc-dev@lists.ozlabs.org, Ingo Molnar <mingo@redhat.com>,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v2 1/6] idle: move the cpuidle entry point to the generic idle loop
Date: Thu, 30 Jan 2014 11:20:17 +0530	[thread overview]
Message-ID: <52E9E819.4040002@linux.vnet.ibm.com> (raw)
In-Reply-To: <alpine.LFD.2.11.1401300021530.1652@knanqh.ubzr>

Hi Nicolas,

On 01/30/2014 10:58 AM, Nicolas Pitre wrote:
> On Thu, 30 Jan 2014, Preeti U Murthy wrote:
> 
>> Hi Nicolas,
>>
>> On 01/30/2014 02:01 AM, Nicolas Pitre wrote:
>>> On Wed, 29 Jan 2014, Nicolas Pitre wrote:
>>>
>>>> In order to integrate cpuidle with the scheduler, we must have a better
>>>> proximity in the core code with what cpuidle is doing and not delegate
>>>> such interaction to arch code.
>>>>
>>>> Architectures implementing arch_cpu_idle() should simply enter
>>>> a cheap idle mode in the absence of a proper cpuidle driver.
>>>>
>>>> Signed-off-by: Nicolas Pitre <nico@linaro.org>
>>>> Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
>>>
>>> As mentioned in my reply to Olof's comment on patch #5/6, here's a new 
>>> version of this patch adding the safety local_irq_enable() to the core 
>>> code.
>>>
>>> ----- >8
>>>
>>> From: Nicolas Pitre <nicolas.pitre@linaro.org>
>>> Subject: idle: move the cpuidle entry point to the generic idle loop
>>>
>>> In order to integrate cpuidle with the scheduler, we must have a better
>>> proximity in the core code with what cpuidle is doing and not delegate
>>> such interaction to arch code.
>>>
>>> Architectures implementing arch_cpu_idle() should simply enter
>>> a cheap idle mode in the absence of a proper cpuidle driver.
>>>
>>> In both cases i.e. whether it is a cpuidle driver or the default
>>> arch_cpu_idle(), the calling convention expects IRQs to be disabled
>>> on entry and enabled on exit. There is a warning in place already but
>>> let's add a forced IRQ enable here as well.  This will allow for
>>> removing the forced IRQ enable some implementations do locally and 
>>
>> Why would this patch allow for removing the forced IRQ enable that are
>> being done on some archs in arch_cpu_idle()? Isn't this patch expecting
>> the default arch_cpu_idle() to have re-enabled the interrupts after
>> exiting from the default idle state? Its supposed to only catch faulty
>> cpuidle drivers that haven't enabled IRQs on exit from idle state but
>> are expected to have done so, isn't it?
> 
> Exact.  However x86 currently does this:
> 
> 	if (cpuidle_idle_call())
> 	        x86_idle();
> 	else
> 	        local_irq_enable();
> 
> So whenever cpuidle_idle_call() is successful then IRQs are 
> unconditionally enabled whether or not the underlying cpuidle driver has 
> properly done it or not.  And the reason is that some of the x86 cpuidle 
> do fail to enable IRQs before returning.
> 
> So the idea is to get rid of this unconditional IRQ enabling and let the 
> core issue a warning instead (as well as enabling IRQs to allow the 
> system to run).

Oh ok, thank you for clarifying this:)

Regards
Preeti U Murthy
> 
> 
> Nicolas
> 

WARNING: multiple messages have this Message-ID (diff)
From: preeti@linux.vnet.ibm.com (Preeti U Murthy)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 1/6] idle: move the cpuidle entry point to the generic idle loop
Date: Thu, 30 Jan 2014 11:20:17 +0530	[thread overview]
Message-ID: <52E9E819.4040002@linux.vnet.ibm.com> (raw)
In-Reply-To: <alpine.LFD.2.11.1401300021530.1652@knanqh.ubzr>

Hi Nicolas,

On 01/30/2014 10:58 AM, Nicolas Pitre wrote:
> On Thu, 30 Jan 2014, Preeti U Murthy wrote:
> 
>> Hi Nicolas,
>>
>> On 01/30/2014 02:01 AM, Nicolas Pitre wrote:
>>> On Wed, 29 Jan 2014, Nicolas Pitre wrote:
>>>
>>>> In order to integrate cpuidle with the scheduler, we must have a better
>>>> proximity in the core code with what cpuidle is doing and not delegate
>>>> such interaction to arch code.
>>>>
>>>> Architectures implementing arch_cpu_idle() should simply enter
>>>> a cheap idle mode in the absence of a proper cpuidle driver.
>>>>
>>>> Signed-off-by: Nicolas Pitre <nico@linaro.org>
>>>> Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
>>>
>>> As mentioned in my reply to Olof's comment on patch #5/6, here's a new 
>>> version of this patch adding the safety local_irq_enable() to the core 
>>> code.
>>>
>>> ----- >8
>>>
>>> From: Nicolas Pitre <nicolas.pitre@linaro.org>
>>> Subject: idle: move the cpuidle entry point to the generic idle loop
>>>
>>> In order to integrate cpuidle with the scheduler, we must have a better
>>> proximity in the core code with what cpuidle is doing and not delegate
>>> such interaction to arch code.
>>>
>>> Architectures implementing arch_cpu_idle() should simply enter
>>> a cheap idle mode in the absence of a proper cpuidle driver.
>>>
>>> In both cases i.e. whether it is a cpuidle driver or the default
>>> arch_cpu_idle(), the calling convention expects IRQs to be disabled
>>> on entry and enabled on exit. There is a warning in place already but
>>> let's add a forced IRQ enable here as well.  This will allow for
>>> removing the forced IRQ enable some implementations do locally and 
>>
>> Why would this patch allow for removing the forced IRQ enable that are
>> being done on some archs in arch_cpu_idle()? Isn't this patch expecting
>> the default arch_cpu_idle() to have re-enabled the interrupts after
>> exiting from the default idle state? Its supposed to only catch faulty
>> cpuidle drivers that haven't enabled IRQs on exit from idle state but
>> are expected to have done so, isn't it?
> 
> Exact.  However x86 currently does this:
> 
> 	if (cpuidle_idle_call())
> 	        x86_idle();
> 	else
> 	        local_irq_enable();
> 
> So whenever cpuidle_idle_call() is successful then IRQs are 
> unconditionally enabled whether or not the underlying cpuidle driver has 
> properly done it or not.  And the reason is that some of the x86 cpuidle 
> do fail to enable IRQs before returning.
> 
> So the idea is to get rid of this unconditional IRQ enabling and let the 
> core issue a warning instead (as well as enabling IRQs to allow the 
> system to run).

Oh ok, thank you for clarifying this:)

Regards
Preeti U Murthy
> 
> 
> Nicolas
> 

  reply	other threads:[~2014-01-30  5:53 UTC|newest]

Thread overview: 128+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-01-29 17:45 [PATCH v2 0/6] setting the table for integration of cpuidle with the scheduler Nicolas Pitre
2014-01-29 17:45 ` Nicolas Pitre
2014-01-29 17:45 ` Nicolas Pitre
2014-01-29 17:45 ` Nicolas Pitre
2014-01-29 17:45 ` [PATCH v2 1/6] idle: move the cpuidle entry point to the generic idle loop Nicolas Pitre
2014-01-29 17:45   ` Nicolas Pitre
2014-01-29 17:45   ` Nicolas Pitre
2014-01-29 17:45   ` Nicolas Pitre
2014-01-29 20:31   ` Nicolas Pitre
2014-01-29 20:31     ` Nicolas Pitre
2014-01-29 20:31     ` Nicolas Pitre
2014-01-29 20:31     ` Nicolas Pitre
2014-01-30  3:38     ` Preeti U Murthy
2014-01-30  3:50       ` Preeti U Murthy
2014-01-30  3:38       ` Preeti U Murthy
2014-01-30  3:38       ` Preeti U Murthy
2014-01-30  5:28       ` Nicolas Pitre
2014-01-30  5:28         ` Nicolas Pitre
2014-01-30  5:28         ` Nicolas Pitre
2014-01-30  5:28         ` Nicolas Pitre
2014-01-30  5:50         ` Preeti U Murthy [this message]
2014-01-30  5:53           ` Preeti U Murthy
2014-01-30  5:50           ` Preeti U Murthy
2014-01-30  5:50           ` Preeti U Murthy
2014-01-30 13:44         ` Daniel Lezcano
2014-01-30 13:44           ` Daniel Lezcano
2014-01-30 13:44           ` Daniel Lezcano
2014-01-30 13:44           ` Daniel Lezcano
2014-01-30 16:07           ` Nicolas Pitre
2014-01-30 16:07             ` Nicolas Pitre
2014-01-30 16:07             ` Nicolas Pitre
2014-01-30 16:07             ` Nicolas Pitre
2014-01-30 17:28             ` Daniel Lezcano
2014-01-30 17:28               ` Daniel Lezcano
2014-01-30 17:28               ` Daniel Lezcano
2014-01-30 17:28               ` Daniel Lezcano
2014-01-30 18:06               ` Peter Zijlstra
2014-01-30 18:06                 ` Peter Zijlstra
2014-01-30 18:06                 ` Peter Zijlstra
2014-01-30 18:06                 ` Peter Zijlstra
2014-01-30 19:24               ` Nicolas Pitre
2014-01-30 19:24                 ` Nicolas Pitre
2014-01-30 19:24                 ` Nicolas Pitre
2014-01-30 19:24                 ` Nicolas Pitre
2014-02-11 12:17     ` [tip:sched/core] sched/idle: Move " tip-bot for Nicolas Pitre
2014-01-29 17:45 ` [PATCH v2 2/6] ARM: remove redundant cpuidle_idle_call() Nicolas Pitre
2014-01-29 17:45   ` Nicolas Pitre
2014-01-29 17:45   ` Nicolas Pitre
2014-01-29 17:45   ` Nicolas Pitre
2014-01-29 17:45 ` [PATCH v2 3/6] PPC: " Nicolas Pitre
2014-01-29 17:45   ` Nicolas Pitre
2014-01-29 17:45   ` Nicolas Pitre
2014-01-29 17:45   ` Nicolas Pitre
2014-01-29 17:45 ` [PATCH v2 4/6] SH: " Nicolas Pitre
2014-01-29 17:45   ` Nicolas Pitre
2014-01-29 17:45   ` Nicolas Pitre
2014-01-29 17:45   ` Nicolas Pitre
2014-01-29 17:45 ` [PATCH v2 5/6] X86: " Nicolas Pitre
2014-01-29 17:45   ` Nicolas Pitre
2014-01-29 17:45   ` Nicolas Pitre
2014-01-29 17:45   ` Nicolas Pitre
2014-01-29 19:02   ` Olof Johansson
2014-01-29 19:02     ` Olof Johansson
2014-01-29 19:02     ` Olof Johansson
2014-01-29 19:02     ` Olof Johansson
2014-01-29 20:14     ` Nicolas Pitre
2014-01-29 20:14       ` Nicolas Pitre
2014-01-29 20:14       ` Nicolas Pitre
2014-01-29 20:14       ` Nicolas Pitre
2014-01-30  9:24       ` Peter Zijlstra
2014-01-30  9:24         ` Peter Zijlstra
2014-01-30  9:24         ` Peter Zijlstra
2014-01-30  9:24         ` Peter Zijlstra
2014-01-30  9:24         ` Peter Zijlstra
2014-01-29 17:45 ` [PATCH v2 6/6] cpu/idle.c: move to sched/idle.c Nicolas Pitre
2014-01-29 17:45   ` Nicolas Pitre
2014-01-29 17:45   ` Nicolas Pitre
2014-01-29 17:45   ` Nicolas Pitre
2014-01-30 15:25   ` Peter Zijlstra
2014-01-30 15:25     ` Peter Zijlstra
2014-01-30 15:25     ` Peter Zijlstra
2014-01-30 15:25     ` Peter Zijlstra
2014-01-30 15:25     ` Peter Zijlstra
2014-01-30 16:03     ` Nicolas Pitre
2014-01-30 16:03       ` Nicolas Pitre
2014-01-30 16:03       ` Nicolas Pitre
2014-01-30 16:03       ` Nicolas Pitre
2014-01-30 16:27       ` Peter Zijlstra
2014-01-30 16:27         ` Peter Zijlstra
2014-01-30 16:27         ` Peter Zijlstra
2014-01-30 16:27         ` Peter Zijlstra
2014-01-30 16:27         ` Peter Zijlstra
2014-01-30 16:41         ` Joe Perches
2014-01-30 16:41           ` Joe Perches
2014-01-30 16:41           ` Joe Perches
2014-01-30 16:41           ` Joe Perches
2014-01-30 16:52           ` Peter Zijlstra
2014-01-30 16:52             ` Peter Zijlstra
2014-01-30 16:52             ` Peter Zijlstra
2014-01-30 16:52             ` Peter Zijlstra
2014-01-30 16:52             ` Peter Zijlstra
2014-02-06 14:09         ` Nicolas Pitre
2014-02-06 14:09           ` Nicolas Pitre
2014-02-06 14:09           ` Nicolas Pitre
2014-02-06 14:09           ` Nicolas Pitre
2014-02-06 16:43           ` Peter Zijlstra
2014-02-06 16:43             ` Peter Zijlstra
2014-02-06 16:43             ` Peter Zijlstra
2014-02-06 16:43             ` Peter Zijlstra
2014-02-07 11:09             ` Nicolas Pitre
2014-02-07 11:09               ` Nicolas Pitre
2014-02-07 11:09               ` Nicolas Pitre
2014-02-07 11:09               ` Nicolas Pitre
2014-02-07 12:32               ` Peter Zijlstra
2014-02-07 12:32                 ` Peter Zijlstra
2014-02-07 12:32                 ` Peter Zijlstra
2014-02-07 12:32                 ` Peter Zijlstra
2014-02-07 12:32                 ` Peter Zijlstra
2014-02-11 12:18       ` [tip:sched/core] sched/idle: Move cpu/idle.c " tip-bot for Nicolas Pitre
2014-01-30  9:28 ` [PATCH v2 0/6] setting the table for integration of cpuidle with the scheduler Peter Zijlstra
2014-01-30  9:28   ` Peter Zijlstra
2014-01-30  9:28   ` Peter Zijlstra
2014-01-30  9:28   ` Peter Zijlstra
2014-01-30  9:28   ` Peter Zijlstra
2014-01-30 13:31   ` Nicolas Pitre
2014-01-30 13:31     ` Nicolas Pitre
2014-01-30 13:31     ` Nicolas Pitre
2014-01-30 13:31     ` Nicolas Pitre

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=52E9E819.4040002@linux.vnet.ibm.com \
    --to=preeti@linux.vnet.ibm.com \
    --cc=benh@kernel.crashing.org \
    --cc=daniel.lezcano@linaro.org \
    --cc=lethal@linux-sh.org \
    --cc=linaro-kernel@lists.linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linux-sh@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mingo@redhat.com \
    --cc=nicolas.pitre@linaro.org \
    --cc=olof@lixom.net \
    --cc=peterz@infradead.org \
    --cc=rjw@rjwysocki.net \
    --cc=tglx@linutronix.de \
    /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.