From: Tomasz Figa <tfiga@chromium.org> To: Vivek Gautam <vivek.gautam@codeaurora.org> Cc: Mark Rutland <mark.rutland@arm.com>, devicetree@vger.kernel.org, linux-pm@vger.kernel.org, David Airlie <airlied@linux.ie>, Will Deacon <will.deacon@arm.com>, "Rafael J. Wysocki" <rjw@rjwysocki.net>, "list@263.net:IOMMU DRIVERS <iommu@lists.linux-foundation.org>, Joerg Roedel <joro@8bytes.org>, " <iommu@lists.linux-foundation.org>, dri-devel <dri-devel@lists.freedesktop.org>, linux-kernel@vger.kernel.org, Rob Herring <robh+dt@kernel.org>, Greg KH <gregkh@linuxfoundation.org>, freedreno@lists.freedesktop.org, Robin Murphy <robin.murphy@arm.com>, sboyd@codeaurora.org, linux-arm-msm@vger.kernel.org Subject: Re: [PATCH v7 2/6] iommu/arm-smmu: Add pm_runtime/sleep ops Date: Tue, 13 Feb 2018 17:03:48 +0900 [thread overview] Message-ID: <CAAFQd5B2u8RL-tdB3qgPxVUcXnsBSEhXRBZWxqO-w6rYKAiOtg@mail.gmail.com> (raw) In-Reply-To: <1517999482-17317-3-git-send-email-vivek.gautam@codeaurora.org> Hi Vivek, Thanks for the patch. Please see some comments inline. On Wed, Feb 7, 2018 at 7:31 PM, Vivek Gautam <vivek.gautam@codeaurora.org> wrote: > From: Sricharan R <sricharan@codeaurora.org> > > The smmu needs to be functional only when the respective > master's using it are active. The device_link feature > helps to track such functional dependencies, so that the > iommu gets powered when the master device enables itself > using pm_runtime. So by adapting the smmu driver for > runtime pm, above said dependency can be addressed. > > This patch adds the pm runtime/sleep callbacks to the > driver and also the functions to parse the smmu clocks > from DT and enable them in resume/suspend. > > Signed-off-by: Sricharan R <sricharan@codeaurora.org> > Signed-off-by: Archit Taneja <architt@codeaurora.org> > [vivek: Clock rework to request bulk of clocks] > Signed-off-by: Vivek Gautam <vivek.gautam@codeaurora.org> > --- > drivers/iommu/arm-smmu.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++-- > 1 file changed, 54 insertions(+), 2 deletions(-) > > diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c > index 69e7c60792a8..9e2f917e16c2 100644 > --- a/drivers/iommu/arm-smmu.c > +++ b/drivers/iommu/arm-smmu.c > @@ -48,6 +48,7 @@ > #include <linux/of_iommu.h> > #include <linux/pci.h> > #include <linux/platform_device.h> > +#include <linux/pm_runtime.h> > #include <linux/slab.h> > #include <linux/spinlock.h> > > @@ -205,6 +206,8 @@ struct arm_smmu_device { > u32 num_global_irqs; > u32 num_context_irqs; > unsigned int *irqs; > + struct clk_bulk_data *clocks; > + int num_clks; nit: Perhaps "num_clocks" to be consistent with "clocks"? > > u32 cavium_id_base; /* Specific to Cavium */ > > @@ -1897,10 +1900,12 @@ static int arm_smmu_device_cfg_probe(struct arm_smmu_device *smmu) > struct arm_smmu_match_data { > enum arm_smmu_arch_version version; > enum arm_smmu_implementation model; > + const char * const *clks; > + int num_clks; nit: Perhaps s/clks/clocks/ here or s/clocks/clks/ in struct arm_smmu_device? > }; > > #define ARM_SMMU_MATCH_DATA(name, ver, imp) \ > -static struct arm_smmu_match_data name = { .version = ver, .model = imp } > +static const struct arm_smmu_match_data name = { .version = ver, .model = imp } > > ARM_SMMU_MATCH_DATA(smmu_generic_v1, ARM_SMMU_V1, GENERIC_SMMU); > ARM_SMMU_MATCH_DATA(smmu_generic_v2, ARM_SMMU_V2, GENERIC_SMMU); > @@ -2001,6 +2006,7 @@ static int arm_smmu_device_dt_probe(struct platform_device *pdev, > data = of_device_get_match_data(dev); > smmu->version = data->version; > smmu->model = data->model; > + smmu->num_clks = data->num_clks; > > parse_driver_options(smmu); > > @@ -2039,6 +2045,28 @@ static void arm_smmu_bus_init(void) > #endif > } > > +static int arm_smmu_init_clks(struct arm_smmu_device *smmu) > +{ > + int i; > + int num = smmu->num_clks; > + const struct arm_smmu_match_data *data; > + > + if (num < 1) > + return 0; > + > + smmu->clocks = devm_kcalloc(smmu->dev, num, > + sizeof(*smmu->clocks), GFP_KERNEL); > + if (!smmu->clocks) > + return -ENOMEM; > + > + data = of_device_get_match_data(smmu->dev); > + > + for (i = 0; i < num; i++) > + smmu->clocks[i].id = data->clks[i]; I'd argue that arm_smmu_device_dt_probe() is a better place for all the code above, since this function is called regardless of whether the device is probed from DT or not. Going further, arm_smmu_device_acpi_probe() could fill smmu->num_clks and ->clocks using ACPI-like way (as opposed to OF match data) if necessary. Best regards, Tomasz _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
WARNING: multiple messages have this Message-ID (diff)
From: Tomasz Figa <tfiga@chromium.org> To: Vivek Gautam <vivek.gautam@codeaurora.org> Cc: "list@263.net:IOMMU DRIVERS <iommu@lists.linux-foundation.org>, Joerg Roedel <joro@8bytes.org>," <joro@8bytes.org>, Rob Herring <robh+dt@kernel.org>, Mark Rutland <mark.rutland@arm.com>, "Rafael J. Wysocki" <rjw@rjwysocki.net>, Robin Murphy <robin.murphy@arm.com>, Will Deacon <will.deacon@arm.com>, Rob Clark <robdclark@gmail.com>, "list@263.net:IOMMU DRIVERS <iommu@lists.linux-foundation.org>, Joerg Roedel <joro@8bytes.org>," <iommu@lists.linux-foundation.org>, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, dri-devel <dri-devel@lists.freedesktop.org>, freedreno@lists.freedesktop.org, David Airlie <airlied@linux.ie>, Greg KH <gregkh@linuxfoundation.org>, sboyd@codeaurora.org, linux-arm-msm@vger.kernel.org Subject: Re: [PATCH v7 2/6] iommu/arm-smmu: Add pm_runtime/sleep ops Date: Tue, 13 Feb 2018 17:03:48 +0900 [thread overview] Message-ID: <CAAFQd5B2u8RL-tdB3qgPxVUcXnsBSEhXRBZWxqO-w6rYKAiOtg@mail.gmail.com> (raw) In-Reply-To: <1517999482-17317-3-git-send-email-vivek.gautam@codeaurora.org> Hi Vivek, Thanks for the patch. Please see some comments inline. On Wed, Feb 7, 2018 at 7:31 PM, Vivek Gautam <vivek.gautam@codeaurora.org> wrote: > From: Sricharan R <sricharan@codeaurora.org> > > The smmu needs to be functional only when the respective > master's using it are active. The device_link feature > helps to track such functional dependencies, so that the > iommu gets powered when the master device enables itself > using pm_runtime. So by adapting the smmu driver for > runtime pm, above said dependency can be addressed. > > This patch adds the pm runtime/sleep callbacks to the > driver and also the functions to parse the smmu clocks > from DT and enable them in resume/suspend. > > Signed-off-by: Sricharan R <sricharan@codeaurora.org> > Signed-off-by: Archit Taneja <architt@codeaurora.org> > [vivek: Clock rework to request bulk of clocks] > Signed-off-by: Vivek Gautam <vivek.gautam@codeaurora.org> > --- > drivers/iommu/arm-smmu.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++-- > 1 file changed, 54 insertions(+), 2 deletions(-) > > diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c > index 69e7c60792a8..9e2f917e16c2 100644 > --- a/drivers/iommu/arm-smmu.c > +++ b/drivers/iommu/arm-smmu.c > @@ -48,6 +48,7 @@ > #include <linux/of_iommu.h> > #include <linux/pci.h> > #include <linux/platform_device.h> > +#include <linux/pm_runtime.h> > #include <linux/slab.h> > #include <linux/spinlock.h> > > @@ -205,6 +206,8 @@ struct arm_smmu_device { > u32 num_global_irqs; > u32 num_context_irqs; > unsigned int *irqs; > + struct clk_bulk_data *clocks; > + int num_clks; nit: Perhaps "num_clocks" to be consistent with "clocks"? > > u32 cavium_id_base; /* Specific to Cavium */ > > @@ -1897,10 +1900,12 @@ static int arm_smmu_device_cfg_probe(struct arm_smmu_device *smmu) > struct arm_smmu_match_data { > enum arm_smmu_arch_version version; > enum arm_smmu_implementation model; > + const char * const *clks; > + int num_clks; nit: Perhaps s/clks/clocks/ here or s/clocks/clks/ in struct arm_smmu_device? > }; > > #define ARM_SMMU_MATCH_DATA(name, ver, imp) \ > -static struct arm_smmu_match_data name = { .version = ver, .model = imp } > +static const struct arm_smmu_match_data name = { .version = ver, .model = imp } > > ARM_SMMU_MATCH_DATA(smmu_generic_v1, ARM_SMMU_V1, GENERIC_SMMU); > ARM_SMMU_MATCH_DATA(smmu_generic_v2, ARM_SMMU_V2, GENERIC_SMMU); > @@ -2001,6 +2006,7 @@ static int arm_smmu_device_dt_probe(struct platform_device *pdev, > data = of_device_get_match_data(dev); > smmu->version = data->version; > smmu->model = data->model; > + smmu->num_clks = data->num_clks; > > parse_driver_options(smmu); > > @@ -2039,6 +2045,28 @@ static void arm_smmu_bus_init(void) > #endif > } > > +static int arm_smmu_init_clks(struct arm_smmu_device *smmu) > +{ > + int i; > + int num = smmu->num_clks; > + const struct arm_smmu_match_data *data; > + > + if (num < 1) > + return 0; > + > + smmu->clocks = devm_kcalloc(smmu->dev, num, > + sizeof(*smmu->clocks), GFP_KERNEL); > + if (!smmu->clocks) > + return -ENOMEM; > + > + data = of_device_get_match_data(smmu->dev); > + > + for (i = 0; i < num; i++) > + smmu->clocks[i].id = data->clks[i]; I'd argue that arm_smmu_device_dt_probe() is a better place for all the code above, since this function is called regardless of whether the device is probed from DT or not. Going further, arm_smmu_device_acpi_probe() could fill smmu->num_clks and ->clocks using ACPI-like way (as opposed to OF match data) if necessary. Best regards, Tomasz
next prev parent reply other threads:[~2018-02-13 8:03 UTC|newest] Thread overview: 103+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-02-07 10:31 [PATCH v7 0/6] iommu/arm-smmu: Add runtime pm/sleep support Vivek Gautam 2018-02-07 10:31 ` Vivek Gautam [not found] ` <1517999482-17317-1-git-send-email-vivek.gautam-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> 2018-02-07 10:31 ` [PATCH v7 1/6] base: power: runtime: Export pm_runtime_get/put_suppliers Vivek Gautam 2018-02-07 10:31 ` Vivek Gautam 2018-02-13 7:44 ` Tomasz Figa 2018-02-13 7:44 ` Tomasz Figa [not found] ` <CAAFQd5BmroRf-C8dQkvTKHWK1psGnNi1t7g-q=Xce6KjrGTsdw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2018-02-13 12:00 ` Robin Murphy 2018-02-13 12:00 ` Robin Murphy 2018-02-13 12:54 ` Tomasz Figa 2018-02-13 12:54 ` Tomasz Figa 2018-02-13 13:37 ` Robin Murphy 2018-02-13 13:37 ` Robin Murphy 2018-02-07 10:31 ` [PATCH v7 2/6] iommu/arm-smmu: Add pm_runtime/sleep ops Vivek Gautam 2018-02-07 10:31 ` Vivek Gautam 2018-02-13 8:03 ` Tomasz Figa [this message] 2018-02-13 8:03 ` Tomasz Figa [not found] ` <CAAFQd5B2u8RL-tdB3qgPxVUcXnsBSEhXRBZWxqO-w6rYKAiOtg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2018-02-13 10:25 ` Vivek Gautam 2018-02-13 10:25 ` Vivek Gautam 2018-02-14 3:45 ` Tomasz Figa 2018-02-14 3:45 ` Tomasz Figa 2018-02-07 10:31 ` [PATCH v7 3/6] iommu/arm-smmu: Invoke pm_runtime during probe, add/remove device Vivek Gautam 2018-02-07 10:31 ` Vivek Gautam 2018-02-13 8:24 ` Tomasz Figa 2018-02-13 8:24 ` Tomasz Figa [not found] ` <CAAFQd5DxYhkK61VDAesby6bT+FtG2nqsbHQRvxkhrsSS0KWtog-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2018-02-13 12:57 ` Robin Murphy 2018-02-13 12:57 ` Robin Murphy [not found] ` <906051dd-8898-ec6f-5ad4-3f37716292cf-5wv7dgnIgG8@public.gmane.org> 2018-02-13 13:52 ` Tomasz Figa 2018-02-13 13:52 ` Tomasz Figa [not found] ` <CAAFQd5DJtQYPg5S3Ep2bK27+D5rQiKuA-uPfMDUon3FudmGF0w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2018-02-14 8:24 ` Vivek Gautam 2018-02-14 8:24 ` Vivek Gautam 2018-02-14 8:28 ` Vivek Gautam 2018-02-14 8:28 ` Vivek Gautam [not found] ` <1517999482-17317-4-git-send-email-vivek.gautam-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> 2018-02-22 23:52 ` Jordan Crouse 2018-02-22 23:52 ` Jordan Crouse [not found] ` <20180222235200.GA18743-9PYrDHPZ2Orvke4nUoYGnHL1okKdlPRT@public.gmane.org> 2018-02-23 10:36 ` Vivek Gautam 2018-02-23 10:36 ` Vivek Gautam [not found] ` <CAFp+6iGQ5Vckui14Jb=V0uk_Pjes95hOxo=KBijR4yxPeDDzFg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2018-02-23 15:40 ` [Freedreno] " Jordan Crouse 2018-02-23 15:40 ` Jordan Crouse [not found] ` <20180223154048.GB18743-9PYrDHPZ2Orvke4nUoYGnHL1okKdlPRT@public.gmane.org> 2018-02-23 17:43 ` Vivek Gautam 2018-02-23 17:43 ` [Freedreno] " Vivek Gautam 2018-02-07 10:31 ` [PATCH v7 4/6] iommu/arm-smmu: Add the device_link between masters and smmu Vivek Gautam 2018-02-07 10:31 ` Vivek Gautam 2018-02-13 8:31 ` Tomasz Figa 2018-02-13 8:31 ` Tomasz Figa [not found] ` <CAAFQd5BQAs9=N27_Z0pJNSrndFY3vFin2KBP44UtiW+tMXy5nQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2018-02-13 10:14 ` Vivek Gautam 2018-02-13 10:14 ` Vivek Gautam 2018-02-07 10:31 ` [PATCH v7 5/6] iommu/arm-smmu: Add support for qcom, smmu-v2 variant Vivek Gautam 2018-02-07 10:31 ` [PATCH v7 5/6] iommu/arm-smmu: Add support for qcom,smmu-v2 variant Vivek Gautam 2018-02-09 10:57 ` [PATCH v8 " Vivek Gautam 2018-02-13 8:57 ` Tomasz Figa 2018-02-13 8:57 ` Tomasz Figa 2018-02-07 10:31 ` [PATCH v7 6/6] drm/msm: iommu: Replace runtime calls with runtime suppliers Vivek Gautam 2018-02-07 10:31 ` Vivek Gautam 2018-02-13 9:10 ` Tomasz Figa 2018-02-13 9:10 ` Tomasz Figa [not found] ` <CAAFQd5AjopiX6fDgD+mO+-+d0yj-swEnVCNvccWRBSMO+XVJkA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2018-02-13 16:42 ` Jordan Crouse 2018-02-13 16:42 ` Jordan Crouse 2018-02-14 3:31 ` Tomasz Figa [not found] ` <CAAFQd5CjQRFATfh-mRQv5J=WefYuxBVTkk=Ju09FoqA-Or5Cvg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2018-02-14 15:48 ` Jordan Crouse 2018-02-14 15:48 ` Jordan Crouse [not found] ` <20180214154850.GA25422-9PYrDHPZ2Orvke4nUoYGnHL1okKdlPRT@public.gmane.org> 2018-02-14 16:12 ` [Freedreno] " Rob Clark 2018-02-14 16:12 ` Rob Clark 2018-02-15 4:09 ` Tomasz Figa 2018-02-15 4:09 ` Tomasz Figa [not found] ` <CAAFQd5C-9mbd3hDSvz10a1oiO0--FT-L4EpsAYcALxxUvk6Fjg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2018-02-15 14:14 ` Rob Clark 2018-02-15 14:14 ` [Freedreno] " Rob Clark 2018-02-13 18:03 ` Rob Clark 2018-02-13 18:03 ` Rob Clark 2018-02-14 1:59 ` Tomasz Figa 2018-02-14 1:59 ` Tomasz Figa [not found] ` <CAAFQd5BKRumpEfAKNF_RKS-ZZ8D671DfOz4vB2+w1SV3aG9NxQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2018-02-14 2:13 ` Rob Clark 2018-02-14 2:13 ` Rob Clark [not found] ` <CAF6AEGuNZJKtwGZ5mLfqNND2jtU+HYM11UONfAtVTzoM0QVpdg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2018-02-14 3:01 ` Tomasz Figa 2018-02-14 3:01 ` Tomasz Figa [not found] ` <CAAFQd5BZJ1G0RG32hYErNzPRvisBhhiSNCBsjbzfm0WzO=DnsQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2018-02-14 4:17 ` Vivek Gautam 2018-02-14 4:17 ` Vivek Gautam [not found] ` <CAFp+6iHaycK=CcE1S15EeuMkaw8LnW0ebptU0hM6tUtWdeEOtA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2018-02-14 5:38 ` Tomasz Figa 2018-02-14 5:38 ` Tomasz Figa [not found] ` <CAAFQd5Afj-Bj+3wHwmF2tT7y=46EsYEtO_mXfY6stXBgHutEUg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2018-02-14 9:13 ` Vivek Gautam 2018-02-14 9:13 ` Vivek Gautam [not found] ` <CAFp+6iGX6pr+MdPSSHHG=qOnhHky_8OHiDqAcJ9UudEUv=JMHg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2018-02-14 9:16 ` Tomasz Figa 2018-02-14 9:16 ` Tomasz Figa [not found] ` <CAAFQd5DiwAugGnPOTw0+XrEfef9x-n-vx59JFuXpNawjiXHwCw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2018-02-14 10:33 ` Vivek Gautam 2018-02-14 10:33 ` Vivek Gautam [not found] ` <CAFp+6iEW0faeHDfzN_F1bRrHGcVo3sPCk4HSY=t9dnEvHkDkYw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2018-02-14 16:03 ` Robin Murphy 2018-02-14 16:03 ` Robin Murphy 2018-02-15 3:17 ` Tomasz Figa [not found] ` <CAAFQd5AmG1zSm+CouXOCJbs8SNGFk1-RqfU1nWGjMGJMB-qfvw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2018-02-15 4:17 ` Tomasz Figa 2018-02-15 4:17 ` Tomasz Figa [not found] ` <CAAFQd5A9B-di9svtiJbvk2hz1U1xo61rTY5vt6AD+KR5iMcG-A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2018-02-15 17:14 ` Robin Murphy 2018-02-15 17:14 ` Robin Murphy [not found] ` <7406f1ce-c2c9-a6bd-2886-5a34de45add6-5wv7dgnIgG8@public.gmane.org> 2018-02-16 0:13 ` Tomasz Figa 2018-02-16 0:13 ` Tomasz Figa [not found] ` <CAAFQd5DkLtq2w00=Zd4sMDB4QOWqi7R-zgydECJXLdTmaHty+g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2018-02-22 8:13 ` Tomasz Figa 2018-02-22 8:13 ` Tomasz Figa [not found] ` <CAAFQd5CQoDqunAunwoVo7W=QXa=ET=eJ2s_j9j+3YgAR2EGgCg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2018-02-22 13:30 ` Rob Clark 2018-02-22 13:30 ` [Freedreno] " Rob Clark 2018-02-22 13:45 ` Robin Murphy 2018-02-22 13:45 ` Robin Murphy 2018-02-22 14:12 ` Tomasz Figa 2018-02-22 14:12 ` Tomasz Figa [not found] ` <CAAFQd5CzOJ0oS8LLcKP-DgyXSXgzafg5CWPAvnR-QDPS+DZAUg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2018-02-22 17:24 ` Vivek Gautam 2018-02-22 17:24 ` Vivek Gautam
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=CAAFQd5B2u8RL-tdB3qgPxVUcXnsBSEhXRBZWxqO-w6rYKAiOtg@mail.gmail.com \ --to=tfiga@chromium.org \ --cc=airlied@linux.ie \ --cc=devicetree@vger.kernel.org \ --cc=dri-devel@lists.freedesktop.org \ --cc=freedreno@lists.freedesktop.org \ --cc=gregkh@linuxfoundation.org \ --cc=iommu@lists.linux-foundation.org \ --cc=linux-arm-msm@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-pm@vger.kernel.org \ --cc=mark.rutland@arm.com \ --cc=rjw@rjwysocki.net \ --cc=robh+dt@kernel.org \ --cc=robin.murphy@arm.com \ --cc=sboyd@codeaurora.org \ --cc=vivek.gautam@codeaurora.org \ --cc=will.deacon@arm.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.