From: Sylwester Nawrocki <snawrocki@kernel.org> To: Lukasz Stelmach <l.stelmach@samsung.com> Cc: Kukjin Kim <kgene@kernel.org>, Krzysztof Kozlowski <krzk@kernel.org>, Andi Shyti <andi@etezian.org>, Mark Brown <broonie@kernel.org>, linux-spi@vger.kernel.org, linux-samsung-soc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, m.szyprowski@samsung.com, b.zolnierkie@samsung.com Subject: Re: [PATCH v2 6/9] spi: spi-s3c64xx: Check return values Date: Thu, 3 Sep 2020 13:18:43 +0200 [thread overview] Message-ID: <a3e1e8d8-8ad8-6807-6317-caf79f44e91d@kernel.org> (raw) In-Reply-To: <dleftjmu27s0y8.fsf%l.stelmach@samsung.com> On 9/3/20 10:45, Lukasz Stelmach wrote: > It was <2020-09-02 śro 10:14>, when Sylwester Nawrocki wrote: >> On 9/1/20 17:21, Lukasz Stelmach wrote: >>> It was <2020-08-25 wto 21:06>, when Sylwester Nawrocki wrote: >>>> On 8/21/20 18:13, Łukasz Stelmach wrote: >>>>> Check return values in prepare_dma() and s3c64xx_spi_config() and >>>>> propagate errors upwards. >>>>> >>>>> Signed-off-by: Łukasz Stelmach<l.stelmach@samsung.com> >>>>> --- >>>>> drivers/spi/spi-s3c64xx.c | 47 ++++++++++++++++++++++++++++++++------- >>>>> 1 file changed, 39 insertions(+), 8 deletions(-) >>>> >>>>> @@ -298,12 +299,24 @@ static void prepare_dma(struct s3c64xx_spi_dma_data *dma, >>>>> desc = dmaengine_prep_slave_sg(dma->ch, sgt->sgl, sgt->nents, >>>>> dma->direction, DMA_PREP_INTERRUPT); >>>>> + if (!desc) { >>>>> + dev_err(&sdd->pdev->dev, "unable to prepare %s scatterlist", >>>>> + dma->direction == DMA_DEV_TO_MEM ? "rx" : "tx"); >>>>> + return -ENOMEM; >>>>> + } >>>>> desc->callback = s3c64xx_spi_dmacb; >>>>> desc->callback_param = dma; >>>>> dma->cookie = dmaengine_submit(desc); >>>>> + ret = dma_submit_error(dma->cookie); >>>>> + if (ret) { >>>>> + dev_err(&sdd->pdev->dev, "DMA submission failed"); >>>>> + return -EIO; >>>> >>>> Just return the error value from dma_submit_error() here? >>>> >>> >>> --8<---------------cut here---------------start------------->8--- >>> static inline int dma_submit_error(dma_cookie_t cookie) >>> { >>> return cookie < 0 ? cookie : 0; >>> >>> } >>> --8<---------------cut here---------------end--------------->8--- >>> >>> Not quite meaningful IMHO, is it? >> >> dma_submit_error() returns 0 or an error code, I think it makes sense >> to propagate that error code rather than replacing it with -EIO. > > It is not an error code that d_s_e() returns it is a value returned by > dma_cookie_assign() called from within the tx_submit() operation of a > DMA driver. > > --8<---------------cut here---------------start------------->8--- > static inline dma_cookie_t dma_cookie_assign(struct > dma_async_tx_descriptor *tx) > { > struct dma_chan *chan = tx->chan; > dma_cookie_t cookie; > > cookie = chan->cookie + 1; > if (cookie < DMA_MIN_COOKIE) > cookie = DMA_MIN_COOKIE; > tx->cookie = chan->cookie = cookie; > > return cookie; > } > --8<---------------cut here---------------end--------------->8--- > > Yes, a non-zero value returned by d_s_e() indicates an error but it > definitely isn't one of error codes from errno*.h. I guess we can end that discussion at this point and keep your patch as is, I just followed comment at the dma_submit_error() function: "if dma_cookie_t is >0 it's a DMA request cookie, <0 it's an error code" AFAICS dma_cookie_assign() always returns value > 0 and dma_submit_error() only returns the cookie if its value is < 0 so in consequence d_s_e() will be always returning 0 in your case (PL330 DMAC)? The below commit, likely a result of static code analysis, might be a confirmation. It could also explain why some drivers overwrite the return value of d_s_e() and some just pass it up to the callers. --------------------------------8<------------------------------------ commit 71ea148370f8b6c745a8a42f6fd983cf5ebade18 Author: Dan Carpenter <dan.carpenter@oracle.com> Date: Sat Aug 10 10:46:50 2013 +0300 dmaengine: make dma_submit_error() return an error code The problem here is that the dma_xfer() functions in drivers/ata/pata_arasan_cf.c and drivers/mtd/nand/fsmc_nand.c expect dma_submit_error() to return an error code so they return 1 when they intended to return a negative. So far as I can tell, none of the ->tx_submit() functions ever do return error codes so this patch should have no effect in the current code. I also changed it from a define to an inline. Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Dan Williams <djbw@fb.com> diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h index cb286b1a..b3ba7e4 100644 --- a/include/linux/dmaengine.h +++ b/include/linux/dmaengine.h @@ -38,7 +38,10 @@ typedef s32 dma_cookie_t; #define DMA_MIN_COOKIE 1 #define DMA_MAX_COOKIE INT_MAX -#define dma_submit_error(cookie) ((cookie) < 0 ? 1 : 0) +static inline int dma_submit_error(dma_cookie_t cookie) +{ + return cookie < 0 ? cookie : 0; +} --------------------------------8<------------------------------------
WARNING: multiple messages have this Message-ID (diff)
From: Sylwester Nawrocki <snawrocki@kernel.org> To: Lukasz Stelmach <l.stelmach@samsung.com> Cc: linux-samsung-soc@vger.kernel.org, b.zolnierkie@samsung.com, linux-kernel@vger.kernel.org, Krzysztof Kozlowski <krzk@kernel.org>, linux-spi@vger.kernel.org, Mark Brown <broonie@kernel.org>, Kukjin Kim <kgene@kernel.org>, Andi Shyti <andi@etezian.org>, linux-arm-kernel@lists.infradead.org, m.szyprowski@samsung.com Subject: Re: [PATCH v2 6/9] spi: spi-s3c64xx: Check return values Date: Thu, 3 Sep 2020 13:18:43 +0200 [thread overview] Message-ID: <a3e1e8d8-8ad8-6807-6317-caf79f44e91d@kernel.org> (raw) In-Reply-To: <dleftjmu27s0y8.fsf%l.stelmach@samsung.com> On 9/3/20 10:45, Lukasz Stelmach wrote: > It was <2020-09-02 śro 10:14>, when Sylwester Nawrocki wrote: >> On 9/1/20 17:21, Lukasz Stelmach wrote: >>> It was <2020-08-25 wto 21:06>, when Sylwester Nawrocki wrote: >>>> On 8/21/20 18:13, Łukasz Stelmach wrote: >>>>> Check return values in prepare_dma() and s3c64xx_spi_config() and >>>>> propagate errors upwards. >>>>> >>>>> Signed-off-by: Łukasz Stelmach<l.stelmach@samsung.com> >>>>> --- >>>>> drivers/spi/spi-s3c64xx.c | 47 ++++++++++++++++++++++++++++++++------- >>>>> 1 file changed, 39 insertions(+), 8 deletions(-) >>>> >>>>> @@ -298,12 +299,24 @@ static void prepare_dma(struct s3c64xx_spi_dma_data *dma, >>>>> desc = dmaengine_prep_slave_sg(dma->ch, sgt->sgl, sgt->nents, >>>>> dma->direction, DMA_PREP_INTERRUPT); >>>>> + if (!desc) { >>>>> + dev_err(&sdd->pdev->dev, "unable to prepare %s scatterlist", >>>>> + dma->direction == DMA_DEV_TO_MEM ? "rx" : "tx"); >>>>> + return -ENOMEM; >>>>> + } >>>>> desc->callback = s3c64xx_spi_dmacb; >>>>> desc->callback_param = dma; >>>>> dma->cookie = dmaengine_submit(desc); >>>>> + ret = dma_submit_error(dma->cookie); >>>>> + if (ret) { >>>>> + dev_err(&sdd->pdev->dev, "DMA submission failed"); >>>>> + return -EIO; >>>> >>>> Just return the error value from dma_submit_error() here? >>>> >>> >>> --8<---------------cut here---------------start------------->8--- >>> static inline int dma_submit_error(dma_cookie_t cookie) >>> { >>> return cookie < 0 ? cookie : 0; >>> >>> } >>> --8<---------------cut here---------------end--------------->8--- >>> >>> Not quite meaningful IMHO, is it? >> >> dma_submit_error() returns 0 or an error code, I think it makes sense >> to propagate that error code rather than replacing it with -EIO. > > It is not an error code that d_s_e() returns it is a value returned by > dma_cookie_assign() called from within the tx_submit() operation of a > DMA driver. > > --8<---------------cut here---------------start------------->8--- > static inline dma_cookie_t dma_cookie_assign(struct > dma_async_tx_descriptor *tx) > { > struct dma_chan *chan = tx->chan; > dma_cookie_t cookie; > > cookie = chan->cookie + 1; > if (cookie < DMA_MIN_COOKIE) > cookie = DMA_MIN_COOKIE; > tx->cookie = chan->cookie = cookie; > > return cookie; > } > --8<---------------cut here---------------end--------------->8--- > > Yes, a non-zero value returned by d_s_e() indicates an error but it > definitely isn't one of error codes from errno*.h. I guess we can end that discussion at this point and keep your patch as is, I just followed comment at the dma_submit_error() function: "if dma_cookie_t is >0 it's a DMA request cookie, <0 it's an error code" AFAICS dma_cookie_assign() always returns value > 0 and dma_submit_error() only returns the cookie if its value is < 0 so in consequence d_s_e() will be always returning 0 in your case (PL330 DMAC)? The below commit, likely a result of static code analysis, might be a confirmation. It could also explain why some drivers overwrite the return value of d_s_e() and some just pass it up to the callers. --------------------------------8<------------------------------------ commit 71ea148370f8b6c745a8a42f6fd983cf5ebade18 Author: Dan Carpenter <dan.carpenter@oracle.com> Date: Sat Aug 10 10:46:50 2013 +0300 dmaengine: make dma_submit_error() return an error code The problem here is that the dma_xfer() functions in drivers/ata/pata_arasan_cf.c and drivers/mtd/nand/fsmc_nand.c expect dma_submit_error() to return an error code so they return 1 when they intended to return a negative. So far as I can tell, none of the ->tx_submit() functions ever do return error codes so this patch should have no effect in the current code. I also changed it from a define to an inline. Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Dan Williams <djbw@fb.com> diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h index cb286b1a..b3ba7e4 100644 --- a/include/linux/dmaengine.h +++ b/include/linux/dmaengine.h @@ -38,7 +38,10 @@ typedef s32 dma_cookie_t; #define DMA_MIN_COOKIE 1 #define DMA_MAX_COOKIE INT_MAX -#define dma_submit_error(cookie) ((cookie) < 0 ? 1 : 0) +static inline int dma_submit_error(dma_cookie_t cookie) +{ + return cookie < 0 ? cookie : 0; +} --------------------------------8<------------------------------------ _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2020-09-03 11:37 UTC|newest] Thread overview: 100+ messages / expand[flat|nested] mbox.gz Atom feed top [not found] <CGME20200821161404eucas1p20577160d1bff2e8f5cae7403e93716ab@eucas1p2.samsung.com> 2020-08-21 16:13 ` [PATCH v2 0/9] Some fixes for spi-s3c64xx Łukasz Stelmach 2020-08-21 16:13 ` Łukasz Stelmach [not found] ` <CGME20200821161405eucas1p1d43a5970c6a26389cd506aab5f986bc8@eucas1p1.samsung.com> 2020-08-21 16:13 ` [PATCH v2 1/9] spi: spi-s3c64xx: swap s3c64xx_spi_set_cs() and s3c64xx_enable_datapath() Łukasz Stelmach 2020-08-21 16:13 ` Łukasz Stelmach 2020-08-22 12:01 ` Krzysztof Kozlowski 2020-08-22 12:01 ` Krzysztof Kozlowski [not found] ` <CGME20200821161405eucas1p20aad659cd41bc4f56d5123d3c63394f0@eucas1p2.samsung.com> 2020-08-21 16:13 ` [PATCH v2 2/9] spi: spi-s3s64xx: Add S3C64XX_SPI_QUIRK_CS_AUTO for Exynos3250 Łukasz Stelmach 2020-08-21 16:13 ` Łukasz Stelmach 2020-08-22 12:02 ` Krzysztof Kozlowski 2020-08-22 12:02 ` Krzysztof Kozlowski [not found] ` <CGME20200821161405eucas1p19280babcd73926b5c22a48830f5fecd7@eucas1p1.samsung.com> 2020-08-21 16:13 ` [PATCH v2 3/9] spi: spi-s3c64xx: Report more information when errors occur Łukasz Stelmach 2020-08-21 16:13 ` Łukasz Stelmach 2020-08-22 12:03 ` Krzysztof Kozlowski 2020-08-22 12:03 ` Krzysztof Kozlowski [not found] ` <CGME20200821161406eucas1p2be3221183a855afd0213f8ce58bd8942@eucas1p2.samsung.com> 2020-08-21 16:13 ` [PATCH v2 4/9] spi: spi-s3c64xx: Rename S3C64XX_SPI_SLAVE_* to S3C64XX_SPI_CS_* Łukasz Stelmach 2020-08-21 16:13 ` Łukasz Stelmach [not found] ` <CGME20200821161406eucas1p121553719d4e9cc020d2c557a69000f0c@eucas1p1.samsung.com> 2020-08-21 16:13 ` [PATCH v2 5/9] spi: spi-s3c64xx: Fix doc comment for struct s3c64xx_spi_driver_data Łukasz Stelmach 2020-08-21 16:13 ` Łukasz Stelmach 2020-08-22 12:26 ` Krzysztof Kozlowski 2020-08-22 12:26 ` Krzysztof Kozlowski [not found] ` <CGME20200821161407eucas1p116af63a668bdbb75fa974589e5f6139f@eucas1p1.samsung.com> 2020-08-21 16:13 ` [PATCH v2 6/9] spi: spi-s3c64xx: Check return values Łukasz Stelmach 2020-08-21 16:13 ` Łukasz Stelmach 2020-08-22 12:37 ` Krzysztof Kozlowski 2020-08-22 12:37 ` Krzysztof Kozlowski 2020-08-25 19:06 ` Sylwester Nawrocki 2020-08-25 19:06 ` Sylwester Nawrocki [not found] ` <CGME20200901152113eucas1p2977046b7a5b4c5a519f88870d658698a@eucas1p2.samsung.com> 2020-09-01 15:21 ` Lukasz Stelmach 2020-09-01 15:21 ` Lukasz Stelmach 2020-09-02 8:14 ` Sylwester Nawrocki 2020-09-02 8:14 ` Sylwester Nawrocki [not found] ` <CGME20200903084555eucas1p2f40375edb325107b68966fd52198b220@eucas1p2.samsung.com> 2020-09-03 8:45 ` Lukasz Stelmach 2020-09-03 8:45 ` Lukasz Stelmach 2020-09-03 11:18 ` Sylwester Nawrocki [this message] 2020-09-03 11:18 ` Sylwester Nawrocki [not found] ` <CGME20200821161407eucas1p249e4833b8839f717cc2a496ab43bb8a2@eucas1p2.samsung.com> 2020-08-21 16:13 ` [PATCH v2 7/9] spi: spi-s3c64xx: Ensure cur_speed holds actual clock value Łukasz Stelmach 2020-08-21 16:13 ` Łukasz Stelmach 2020-08-22 12:43 ` Krzysztof Kozlowski 2020-08-22 12:43 ` Krzysztof Kozlowski 2020-08-22 14:52 ` Tomasz Figa 2020-08-22 14:52 ` Tomasz Figa 2020-08-22 15:18 ` Krzysztof Kozlowski 2020-08-22 15:18 ` Krzysztof Kozlowski 2020-08-22 15:20 ` Tomasz Figa 2020-08-22 15:20 ` Tomasz Figa [not found] ` <CGME20200824131716eucas1p16a3fde52aa765e7cd6584d4733762047@eucas1p1.samsung.com> 2020-08-24 13:17 ` Lukasz Stelmach 2020-08-24 13:17 ` Lukasz Stelmach 2020-08-24 13:21 ` Tomasz Figa 2020-08-24 13:21 ` Tomasz Figa [not found] ` <CGME20200825090211eucas1p1b63191fa778a775e33169ba2c1d3b74b@eucas1p1.samsung.com> 2020-08-25 9:01 ` Lukasz Stelmach 2020-08-25 9:01 ` Lukasz Stelmach 2020-08-25 15:11 ` Tomasz Figa 2020-08-25 15:11 ` Tomasz Figa [not found] ` <CGME20200825154611eucas1p284be8779ab484e675af071afef28376b@eucas1p2.samsung.com> 2020-08-25 15:45 ` Lukasz Stelmach 2020-08-25 15:45 ` Lukasz Stelmach 2020-08-22 14:54 ` Tomasz Figa 2020-08-22 14:54 ` Tomasz Figa [not found] ` <CGME20200821161407eucas1p23a283ac117d4381e087e9bacec537665@eucas1p2.samsung.com> 2020-08-21 16:14 ` [PATCH v2 8/9] spi: spi-s3c64xx: Increase transfer timeout Łukasz Stelmach 2020-08-21 16:14 ` Łukasz Stelmach 2020-08-22 12:43 ` Krzysztof Kozlowski 2020-08-22 12:43 ` Krzysztof Kozlowski [not found] ` <CGME20200821161408eucas1p196aa4b954b3d19ad1b89a48dbbe41fbc@eucas1p1.samsung.com> 2020-08-21 16:14 ` [PATCH v2 9/9] spi: spi-s3c64xx: Turn on interrupts upon resume Łukasz Stelmach 2020-08-21 16:14 ` Łukasz Stelmach 2020-08-22 12:44 ` Krzysztof Kozlowski 2020-08-22 12:44 ` Krzysztof Kozlowski [not found] ` <CGME20201001152246eucas1p1ee289b8a85b707f7496355c081623796@eucas1p1.samsung.com> 2020-10-01 15:21 ` [PATCH v2 RESEND 0/9] Some fixes for spi-s3c64xx Łukasz Stelmach 2020-10-01 15:21 ` Łukasz Stelmach [not found] ` <CGME20201001152246eucas1p1b4155ab4f06a39cc88f205b4a7cd47f9@eucas1p1.samsung.com> 2020-10-01 15:21 ` [PATCH v2 RESEND 1/9] spi: spi-s3c64xx: swap s3c64xx_spi_set_cs() and s3c64xx_enable_datapath() Łukasz Stelmach 2020-10-01 15:21 ` Łukasz Stelmach [not found] ` <CGME20201001152246eucas1p2fb22ab55c276d76c4508142842c90ab8@eucas1p2.samsung.com> 2020-10-01 15:21 ` [PATCH v2 RESEND 2/9] spi: spi-s3s64xx: Add S3C64XX_SPI_QUIRK_CS_AUTO for Exynos3250 Łukasz Stelmach 2020-10-01 15:21 ` Łukasz Stelmach 2020-10-01 19:04 ` Krzysztof Kozlowski 2020-10-01 19:04 ` Krzysztof Kozlowski [not found] ` <CGME20201002101408eucas1p121c21cde5e644992078978d9bf1c5194@eucas1p1.samsung.com> 2020-10-02 10:13 ` Lukasz Stelmach 2020-10-02 10:13 ` Lukasz Stelmach [not found] ` <CGME20201001152247eucas1p2b6b1cc61b9b175b0a621609cd58effbd@eucas1p2.samsung.com> 2020-10-01 15:21 ` [PATCH v2 RESEND 3/9] spi: spi-s3c64xx: Check return values Łukasz Stelmach 2020-10-01 15:21 ` Łukasz Stelmach [not found] ` <CGME20201001152247eucas1p2afff5b5b73f78d7c5111ac1c800e718a@eucas1p2.samsung.com> 2020-10-01 15:21 ` [PATCH v2 RESEND 4/9] spi: spi-s3c64xx: Report more information when errors occur Łukasz Stelmach 2020-10-01 15:21 ` Łukasz Stelmach [not found] ` <CGME20201001152248eucas1p10219600aaa0df6e030d2493b2aefbe92@eucas1p1.samsung.com> 2020-10-01 15:21 ` [PATCH v2 RESEND 5/9] spi: spi-s3c64xx: Rename S3C64XX_SPI_SLAVE_* to S3C64XX_SPI_CS_* Łukasz Stelmach 2020-10-01 15:21 ` Łukasz Stelmach [not found] ` <CGME20201001152248eucas1p12f71c21a5873b6360e4b38efebb50271@eucas1p1.samsung.com> 2020-10-01 15:21 ` [PATCH v2 RESEND 6/9] spi: spi-s3c64xx: Fix doc comment for struct s3c64xx_spi_driver_data Łukasz Stelmach 2020-10-01 15:21 ` Łukasz Stelmach [not found] ` <CGME20201001152248eucas1p132a63f588f62d902879322ebadd67173@eucas1p1.samsung.com> 2020-10-01 15:21 ` [PATCH v2 RESEND 7/9] spi: spi-s3c64xx: Ensure cur_speed holds actual clock value Łukasz Stelmach 2020-10-01 15:21 ` Łukasz Stelmach 2020-10-01 19:12 ` Krzysztof Kozlowski 2020-10-01 19:12 ` Krzysztof Kozlowski [not found] ` <CGME20201001152249eucas1p1c3bbe7b2a677affe4e1a1e4d469f94c8@eucas1p1.samsung.com> 2020-10-01 15:21 ` [PATCH v2 RESEND 8/9] spi: spi-s3c64xx: Increase transfer timeout Łukasz Stelmach 2020-10-01 15:21 ` Łukasz Stelmach [not found] ` <CGME20201001152249eucas1p165b78adf542a48b38b49cb5e00500e26@eucas1p1.samsung.com> 2020-10-01 15:21 ` [PATCH v2 RESEND 9/9] spi: spi-s3c64xx: Turn on interrupts upon resume Łukasz Stelmach 2020-10-01 15:21 ` Łukasz Stelmach 2020-10-01 16:13 ` [PATCH v2 RESEND 0/9] Some fixes for spi-s3c64xx Mark Brown 2020-10-01 16:13 ` Mark Brown [not found] ` <CGME20201001182315eucas1p1b1fc9d5d0ea91db6e56e92d5cf2583e5@eucas1p1.samsung.com> 2020-10-01 18:23 ` Lukasz Stelmach 2020-10-01 18:23 ` Lukasz Stelmach 2020-10-01 19:02 ` Krzysztof Kozlowski 2020-10-01 19:02 ` Krzysztof Kozlowski 2020-10-01 19:43 ` Mark Brown 2020-10-01 19:43 ` Mark Brown 2020-10-02 6:18 ` Krzysztof Kozlowski 2020-10-02 6:18 ` Krzysztof Kozlowski
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=a3e1e8d8-8ad8-6807-6317-caf79f44e91d@kernel.org \ --to=snawrocki@kernel.org \ --cc=andi@etezian.org \ --cc=b.zolnierkie@samsung.com \ --cc=broonie@kernel.org \ --cc=kgene@kernel.org \ --cc=krzk@kernel.org \ --cc=l.stelmach@samsung.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-samsung-soc@vger.kernel.org \ --cc=linux-spi@vger.kernel.org \ --cc=m.szyprowski@samsung.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: linkBe 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.