All of lore.kernel.org
 help / color / mirror / Atom feed
From: Matthias Brugger <matthias.bgg@gmail.com>
To: "Nícolas F. R. A. Prado" <nfraprado@collabora.com>
Cc: "Nancy.Lin" <nancy.lin@mediatek.com>,
	Rob Herring <robh+dt@kernel.org>,
	Chun-Kuang Hu <chunkuang.hu@kernel.org>,
	Philipp Zabel <p.zabel@pengutronix.de>,
	wim@linux-watchdog.org,
	AngeloGioacchino Del Regno
	<angelogioacchino.delregno@collabora.com>,
	linux@roeck-us.net, David Airlie <airlied@linux.ie>,
	Daniel Vetter <daniel@ffwll.ch>,
	Nathan Chancellor <nathan@kernel.org>,
	Nick Desaulniers <ndesaulniers@google.com>,
	"jason-jh . lin" <jason-jh.lin@mediatek.com>,
	Yongqiang Niu <yongqiang.niu@mediatek.com>,
	devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-mediatek@lists.infradead.org,
	dri-devel@lists.freedesktop.org, llvm@lists.linux.dev,
	singo.chang@mediatek.com,
	Project_Global_Chrome_Upstream_Group@mediatek.com
Subject: Re: [PATCH v28 05/11] soc: mediatek: refine code to use mtk_mmsys_update_bits API
Date: Thu, 10 Nov 2022 14:12:01 +0100	[thread overview]
Message-ID: <aa7cab9c-8fe2-b42e-84ba-1aeb79d50190@gmail.com> (raw)
In-Reply-To: <20221108194351.u63k4mqzq3bkhpl7@notapiano>



On 08/11/2022 20:43, Nícolas F. R. A. Prado wrote:
> On Tue, Nov 08, 2022 at 06:37:19PM +0100, Matthias Brugger wrote:
>>
>>
>> On 07/11/2022 08:22, Nancy.Lin wrote:
>>> Simplify code for update  mmsys reg.
>>>
>>> Signed-off-by: Nancy.Lin <nancy.lin@mediatek.com>
>>> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
>>> Reviewed-by: CK Hu <ck.hu@mediatek.com>
>>> Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
>>> Tested-by: Bo-Chen Chen <rex-bc.chen@mediatek.com>
>>> Reviewed-by: Nícolas F. R. A. Prado <nfraprado@collabora.com>
>>> ---
>>>    drivers/soc/mediatek/mtk-mmsys.c | 45 ++++++++++++--------------------
>>>    1 file changed, 16 insertions(+), 29 deletions(-)
>>>
>>> diff --git a/drivers/soc/mediatek/mtk-mmsys.c b/drivers/soc/mediatek/mtk-mmsys.c
>>> index 9a327eb5d9d7..73c8bd27e6ae 100644
>>> --- a/drivers/soc/mediatek/mtk-mmsys.c
>>> +++ b/drivers/soc/mediatek/mtk-mmsys.c
>>> @@ -99,22 +99,27 @@ struct mtk_mmsys {
>>>    	struct reset_controller_dev rcdev;
>>>    };
>>> +static void mtk_mmsys_update_bits(struct mtk_mmsys *mmsys, u32 offset, u32 mask, u32 val)
>>> +{
>>> +	u32 tmp;
>>> +
>>> +	tmp = readl_relaxed(mmsys->regs + offset);
>>> +	tmp = (tmp & ~mask) | (val & mask);
>>
>> I'm not sure about the change in the implementation of
>> mtk_mmsys_update_bits(). Nicolas tried to explain it to me on IRC but I
>> wasn't totally convincing. As we have to go for at least another round of
>> this patches, I'd like to get a clear understanding while it is needed that
>> val bits are set to 1 in the mask.
> 
> The point here was to make sure that mtk_mmsys_update_bits() didn't allow
> setting bits outside of the mask, since that's never what you want: the entire
> point of having a mask is to specify the bits that should be updated (and the
> ones that should be kept unchanged). So for example if you had
> 
> mask = 0x0ff0
> val  = 0x00ff
> 
> the previous implementation would happily overwrite the 4 least significant bits
> on the destination register, despite them not being present in the mask, which
> is wrong.
> 
> This wrong behavior could easily lead to hard to trace bugs as soon as a badly
> formatted/wrong val is passed and an unrelated bit updated due to the mask being
> ignored.
> 
> For reference, _regmap_update_bits() does the same masking of the value [1].
> 
> That said, given that this function already existed and was just being moved,
> it would've been cleaner to make this change in a separate commit.
> 

Would have been better, but we can leave it as it.

Regards,
Matthias

> [1] https://elixir.bootlin.com/linux/latest/source/drivers/base/regmap/regmap.c#L3122
> 
> Thanks,
> Nícolas
> 
>>
>> Regards,
>> Matthias
>>
>>> +	writel_relaxed(tmp, mmsys->regs + offset);
>>> +}
> [..]
>>> -static void mtk_mmsys_update_bits(struct mtk_mmsys *mmsys, u32 offset, u32 mask, u32 val)
>>> -{
>>> -	u32 tmp;
>>> -
>>> -	tmp = readl_relaxed(mmsys->regs + offset);
>>> -	tmp = (tmp & ~mask) | val;
>>> -	writel_relaxed(tmp, mmsys->regs + offset);
>>> -}
>>> -
> [..]


WARNING: multiple messages have this Message-ID (diff)
From: Matthias Brugger <matthias.bgg@gmail.com>
To: "Nícolas F. R. A. Prado" <nfraprado@collabora.com>
Cc: "Nancy.Lin" <nancy.lin@mediatek.com>,
	Rob Herring <robh+dt@kernel.org>,
	Chun-Kuang Hu <chunkuang.hu@kernel.org>,
	Philipp Zabel <p.zabel@pengutronix.de>,
	wim@linux-watchdog.org,
	AngeloGioacchino Del Regno
	<angelogioacchino.delregno@collabora.com>,
	linux@roeck-us.net, David Airlie <airlied@linux.ie>,
	Daniel Vetter <daniel@ffwll.ch>,
	Nathan Chancellor <nathan@kernel.org>,
	Nick Desaulniers <ndesaulniers@google.com>,
	"jason-jh . lin" <jason-jh.lin@mediatek.com>,
	Yongqiang Niu <yongqiang.niu@mediatek.com>,
	devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-mediatek@lists.infradead.org,
	dri-devel@lists.freedesktop.org, llvm@lists.linux.dev,
	singo.chang@mediatek.com,
	Project_Global_Chrome_Upstream_Group@mediatek.com
Subject: Re: [PATCH v28 05/11] soc: mediatek: refine code to use mtk_mmsys_update_bits API
Date: Thu, 10 Nov 2022 14:12:01 +0100	[thread overview]
Message-ID: <aa7cab9c-8fe2-b42e-84ba-1aeb79d50190@gmail.com> (raw)
In-Reply-To: <20221108194351.u63k4mqzq3bkhpl7@notapiano>



On 08/11/2022 20:43, Nícolas F. R. A. Prado wrote:
> On Tue, Nov 08, 2022 at 06:37:19PM +0100, Matthias Brugger wrote:
>>
>>
>> On 07/11/2022 08:22, Nancy.Lin wrote:
>>> Simplify code for update  mmsys reg.
>>>
>>> Signed-off-by: Nancy.Lin <nancy.lin@mediatek.com>
>>> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
>>> Reviewed-by: CK Hu <ck.hu@mediatek.com>
>>> Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
>>> Tested-by: Bo-Chen Chen <rex-bc.chen@mediatek.com>
>>> Reviewed-by: Nícolas F. R. A. Prado <nfraprado@collabora.com>
>>> ---
>>>    drivers/soc/mediatek/mtk-mmsys.c | 45 ++++++++++++--------------------
>>>    1 file changed, 16 insertions(+), 29 deletions(-)
>>>
>>> diff --git a/drivers/soc/mediatek/mtk-mmsys.c b/drivers/soc/mediatek/mtk-mmsys.c
>>> index 9a327eb5d9d7..73c8bd27e6ae 100644
>>> --- a/drivers/soc/mediatek/mtk-mmsys.c
>>> +++ b/drivers/soc/mediatek/mtk-mmsys.c
>>> @@ -99,22 +99,27 @@ struct mtk_mmsys {
>>>    	struct reset_controller_dev rcdev;
>>>    };
>>> +static void mtk_mmsys_update_bits(struct mtk_mmsys *mmsys, u32 offset, u32 mask, u32 val)
>>> +{
>>> +	u32 tmp;
>>> +
>>> +	tmp = readl_relaxed(mmsys->regs + offset);
>>> +	tmp = (tmp & ~mask) | (val & mask);
>>
>> I'm not sure about the change in the implementation of
>> mtk_mmsys_update_bits(). Nicolas tried to explain it to me on IRC but I
>> wasn't totally convincing. As we have to go for at least another round of
>> this patches, I'd like to get a clear understanding while it is needed that
>> val bits are set to 1 in the mask.
> 
> The point here was to make sure that mtk_mmsys_update_bits() didn't allow
> setting bits outside of the mask, since that's never what you want: the entire
> point of having a mask is to specify the bits that should be updated (and the
> ones that should be kept unchanged). So for example if you had
> 
> mask = 0x0ff0
> val  = 0x00ff
> 
> the previous implementation would happily overwrite the 4 least significant bits
> on the destination register, despite them not being present in the mask, which
> is wrong.
> 
> This wrong behavior could easily lead to hard to trace bugs as soon as a badly
> formatted/wrong val is passed and an unrelated bit updated due to the mask being
> ignored.
> 
> For reference, _regmap_update_bits() does the same masking of the value [1].
> 
> That said, given that this function already existed and was just being moved,
> it would've been cleaner to make this change in a separate commit.
> 

Would have been better, but we can leave it as it.

Regards,
Matthias

> [1] https://elixir.bootlin.com/linux/latest/source/drivers/base/regmap/regmap.c#L3122
> 
> Thanks,
> Nícolas
> 
>>
>> Regards,
>> Matthias
>>
>>> +	writel_relaxed(tmp, mmsys->regs + offset);
>>> +}
> [..]
>>> -static void mtk_mmsys_update_bits(struct mtk_mmsys *mmsys, u32 offset, u32 mask, u32 val)
>>> -{
>>> -	u32 tmp;
>>> -
>>> -	tmp = readl_relaxed(mmsys->regs + offset);
>>> -	tmp = (tmp & ~mask) | val;
>>> -	writel_relaxed(tmp, mmsys->regs + offset);
>>> -}
>>> -
> [..]

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

WARNING: multiple messages have this Message-ID (diff)
From: Matthias Brugger <matthias.bgg@gmail.com>
To: "Nícolas F. R. A. Prado" <nfraprado@collabora.com>
Cc: Chun-Kuang Hu <chunkuang.hu@kernel.org>,
	Project_Global_Chrome_Upstream_Group@mediatek.com,
	devicetree@vger.kernel.org, David Airlie <airlied@linux.ie>,
	"jason-jh . lin" <jason-jh.lin@mediatek.com>,
	dri-devel@lists.freedesktop.org, llvm@lists.linux.dev,
	Nick Desaulniers <ndesaulniers@google.com>,
	linux-kernel@vger.kernel.org, Rob Herring <robh+dt@kernel.org>,
	Yongqiang Niu <yongqiang.niu@mediatek.com>,
	Nathan Chancellor <nathan@kernel.org>,
	"Nancy.Lin" <nancy.lin@mediatek.com>,
	linux-mediatek@lists.infradead.org,
	linux-arm-kernel@lists.infradead.org, wim@linux-watchdog.org,
	singo.chang@mediatek.com, linux@roeck-us.net,
	AngeloGioacchino Del Regno
	<angelogioacchino.delregno@collabora.com>
Subject: Re: [PATCH v28 05/11] soc: mediatek: refine code to use mtk_mmsys_update_bits API
Date: Thu, 10 Nov 2022 14:12:01 +0100	[thread overview]
Message-ID: <aa7cab9c-8fe2-b42e-84ba-1aeb79d50190@gmail.com> (raw)
In-Reply-To: <20221108194351.u63k4mqzq3bkhpl7@notapiano>



On 08/11/2022 20:43, Nícolas F. R. A. Prado wrote:
> On Tue, Nov 08, 2022 at 06:37:19PM +0100, Matthias Brugger wrote:
>>
>>
>> On 07/11/2022 08:22, Nancy.Lin wrote:
>>> Simplify code for update  mmsys reg.
>>>
>>> Signed-off-by: Nancy.Lin <nancy.lin@mediatek.com>
>>> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
>>> Reviewed-by: CK Hu <ck.hu@mediatek.com>
>>> Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
>>> Tested-by: Bo-Chen Chen <rex-bc.chen@mediatek.com>
>>> Reviewed-by: Nícolas F. R. A. Prado <nfraprado@collabora.com>
>>> ---
>>>    drivers/soc/mediatek/mtk-mmsys.c | 45 ++++++++++++--------------------
>>>    1 file changed, 16 insertions(+), 29 deletions(-)
>>>
>>> diff --git a/drivers/soc/mediatek/mtk-mmsys.c b/drivers/soc/mediatek/mtk-mmsys.c
>>> index 9a327eb5d9d7..73c8bd27e6ae 100644
>>> --- a/drivers/soc/mediatek/mtk-mmsys.c
>>> +++ b/drivers/soc/mediatek/mtk-mmsys.c
>>> @@ -99,22 +99,27 @@ struct mtk_mmsys {
>>>    	struct reset_controller_dev rcdev;
>>>    };
>>> +static void mtk_mmsys_update_bits(struct mtk_mmsys *mmsys, u32 offset, u32 mask, u32 val)
>>> +{
>>> +	u32 tmp;
>>> +
>>> +	tmp = readl_relaxed(mmsys->regs + offset);
>>> +	tmp = (tmp & ~mask) | (val & mask);
>>
>> I'm not sure about the change in the implementation of
>> mtk_mmsys_update_bits(). Nicolas tried to explain it to me on IRC but I
>> wasn't totally convincing. As we have to go for at least another round of
>> this patches, I'd like to get a clear understanding while it is needed that
>> val bits are set to 1 in the mask.
> 
> The point here was to make sure that mtk_mmsys_update_bits() didn't allow
> setting bits outside of the mask, since that's never what you want: the entire
> point of having a mask is to specify the bits that should be updated (and the
> ones that should be kept unchanged). So for example if you had
> 
> mask = 0x0ff0
> val  = 0x00ff
> 
> the previous implementation would happily overwrite the 4 least significant bits
> on the destination register, despite them not being present in the mask, which
> is wrong.
> 
> This wrong behavior could easily lead to hard to trace bugs as soon as a badly
> formatted/wrong val is passed and an unrelated bit updated due to the mask being
> ignored.
> 
> For reference, _regmap_update_bits() does the same masking of the value [1].
> 
> That said, given that this function already existed and was just being moved,
> it would've been cleaner to make this change in a separate commit.
> 

Would have been better, but we can leave it as it.

Regards,
Matthias

> [1] https://elixir.bootlin.com/linux/latest/source/drivers/base/regmap/regmap.c#L3122
> 
> Thanks,
> Nícolas
> 
>>
>> Regards,
>> Matthias
>>
>>> +	writel_relaxed(tmp, mmsys->regs + offset);
>>> +}
> [..]
>>> -static void mtk_mmsys_update_bits(struct mtk_mmsys *mmsys, u32 offset, u32 mask, u32 val)
>>> -{
>>> -	u32 tmp;
>>> -
>>> -	tmp = readl_relaxed(mmsys->regs + offset);
>>> -	tmp = (tmp & ~mask) | val;
>>> -	writel_relaxed(tmp, mmsys->regs + offset);
>>> -}
>>> -
> [..]

  reply	other threads:[~2022-11-10 13:12 UTC|newest]

Thread overview: 90+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-07  7:22 [PATCH v28 00/11] Add MediaTek SoC(vdosys1) support for mt8195 Nancy.Lin
2022-11-07  7:22 ` Nancy.Lin
2022-11-07  7:22 ` Nancy.Lin
2022-11-07  7:22 ` [PATCH v28 01/11] dt-bindings: arm: mediatek: mmsys: add vdosys1 compatible for MT8195 Nancy.Lin
2022-11-07  7:22   ` Nancy.Lin
2022-11-07  7:22   ` Nancy.Lin
2022-11-08 17:46   ` Matthias Brugger
2022-11-08 17:46     ` Matthias Brugger
2022-11-08 17:46     ` Matthias Brugger
2022-11-09  5:10     ` Jason-JH Lin (林睿祥)
2022-11-09  5:10       ` Jason-JH Lin (林睿祥)
2022-11-09  5:10       ` Jason-JH Lin (林睿祥)
2022-11-10 13:10       ` Matthias Brugger
2022-11-10 13:10         ` Matthias Brugger
2022-11-10 13:10         ` Matthias Brugger
2022-11-22 10:51         ` Nancy Lin (林欣螢)
2022-11-22 10:51           ` Nancy Lin (林欣螢)
2022-11-22 10:51           ` Nancy Lin (林欣螢)
2022-11-22 15:48           ` Matthias Brugger
2022-11-22 15:48             ` Matthias Brugger
2022-11-22 15:48             ` Matthias Brugger
2022-11-23 16:06   ` Krzysztof Kozlowski
2022-11-23 16:06     ` Krzysztof Kozlowski
2022-11-23 16:06     ` Krzysztof Kozlowski
2022-11-24  7:34     ` Nancy Lin (林欣螢)
2022-11-24  7:34       ` Nancy Lin (林欣螢)
2022-11-24  7:34       ` Nancy Lin (林欣螢)
2022-11-07  7:22 ` [PATCH v28 02/11] dt-bindings: reset: mt8195: add vdosys1 reset control bit Nancy.Lin
2022-11-07  7:22   ` Nancy.Lin
2022-11-07  7:22   ` Nancy.Lin
2022-11-07  7:22 ` [PATCH v28 03/11] soc: mediatek: add mtk-mmsys ethdr and mdp_rdma components Nancy.Lin
2022-11-07  7:22   ` Nancy.Lin
2022-11-07  7:22   ` Nancy.Lin
2022-11-07  7:22 ` [PATCH v28 04/11] soc: mediatek: add mtk-mmsys support for mt8195 vdosys1 Nancy.Lin
2022-11-07  7:22   ` Nancy.Lin
2022-11-07  7:22   ` Nancy.Lin
2022-11-08 17:46   ` Matthias Brugger
2022-11-08 17:46     ` Matthias Brugger
2022-11-08 17:46     ` Matthias Brugger
2022-11-08 19:10     ` Nícolas F. R. A. Prado
2022-11-08 19:10       ` Nícolas F. R. A. Prado
2022-11-08 19:10       ` Nícolas F. R. A. Prado
2022-11-09 11:18       ` Matthias Brugger
2022-11-09 11:18         ` Matthias Brugger
2022-11-09 11:18         ` Matthias Brugger
2022-11-07  7:22 ` [PATCH v28 05/11] soc: mediatek: refine code to use mtk_mmsys_update_bits API Nancy.Lin
2022-11-07  7:22   ` Nancy.Lin
2022-11-07  7:22   ` Nancy.Lin
2022-11-08 17:37   ` Matthias Brugger
2022-11-08 17:37     ` Matthias Brugger
2022-11-08 17:37     ` Matthias Brugger
2022-11-08 19:43     ` Nícolas F. R. A. Prado
2022-11-08 19:43       ` Nícolas F. R. A. Prado
2022-11-08 19:43       ` Nícolas F. R. A. Prado
2022-11-10 13:12       ` Matthias Brugger [this message]
2022-11-10 13:12         ` Matthias Brugger
2022-11-10 13:12         ` Matthias Brugger
2022-11-24  9:38         ` Nancy Lin (林欣螢)
2022-11-24  9:38           ` Nancy Lin (林欣螢)
2022-11-24  9:38           ` Nancy Lin (林欣螢)
2022-12-01 11:44   ` Chen-Yu Tsai
2022-12-01 11:44     ` Chen-Yu Tsai
2022-12-01 11:44     ` Chen-Yu Tsai
2022-12-27  7:54     ` Nancy Lin (林欣螢)
2022-12-27  7:54       ` Nancy Lin (林欣螢)
2022-12-27  7:54       ` Nancy Lin (林欣螢)
2022-11-07  7:22 ` [PATCH v28 06/11] soc: mediatek: add mtk-mmsys config API for mt8195 vdosys1 Nancy.Lin
2022-11-07  7:22   ` Nancy.Lin
2022-11-07  7:22   ` Nancy.Lin
2022-11-08 17:46   ` Matthias Brugger
2022-11-08 17:46     ` Matthias Brugger
2022-11-08 17:46     ` Matthias Brugger
2022-11-28  7:38     ` Nancy Lin (林欣螢)
2022-11-28  7:38       ` Nancy Lin (林欣螢)
2022-11-28  7:38       ` Nancy Lin (林欣螢)
2022-11-07  7:22 ` [PATCH v28 07/11] soc: mediatek: add cmdq support of " Nancy.Lin
2022-11-07  7:22   ` Nancy.Lin
2022-11-07  7:22   ` Nancy.Lin
2022-11-07  7:22 ` [PATCH v28 08/11] soc: mediatek: mmsys: add mmsys for support 64 reset bits Nancy.Lin
2022-11-07  7:22   ` Nancy.Lin
2022-11-07  7:22   ` Nancy.Lin
2022-11-07  7:22 ` [PATCH v28 09/11] soc: mediatek: mmsys: add reset control for MT8195 vdosys1 Nancy.Lin
2022-11-07  7:22   ` Nancy.Lin
2022-11-07  7:22   ` Nancy.Lin
2022-11-07  7:22 ` [PATCH v28 10/11] soc: mediatek: add mtk-mutex component - dp_intf1 Nancy.Lin
2022-11-07  7:22   ` Nancy.Lin
2022-11-07  7:22   ` Nancy.Lin
2022-11-07  7:22 ` [PATCH v28 11/11] soc: mediatek: add mtk-mutex support for mt8195 vdosys1 Nancy.Lin
2022-11-07  7:22   ` Nancy.Lin
2022-11-07  7:22   ` Nancy.Lin

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=aa7cab9c-8fe2-b42e-84ba-1aeb79d50190@gmail.com \
    --to=matthias.bgg@gmail.com \
    --cc=Project_Global_Chrome_Upstream_Group@mediatek.com \
    --cc=airlied@linux.ie \
    --cc=angelogioacchino.delregno@collabora.com \
    --cc=chunkuang.hu@kernel.org \
    --cc=daniel@ffwll.ch \
    --cc=devicetree@vger.kernel.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=jason-jh.lin@mediatek.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=linux@roeck-us.net \
    --cc=llvm@lists.linux.dev \
    --cc=nancy.lin@mediatek.com \
    --cc=nathan@kernel.org \
    --cc=ndesaulniers@google.com \
    --cc=nfraprado@collabora.com \
    --cc=p.zabel@pengutronix.de \
    --cc=robh+dt@kernel.org \
    --cc=singo.chang@mediatek.com \
    --cc=wim@linux-watchdog.org \
    --cc=yongqiang.niu@mediatek.com \
    /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.