From: kbuild test robot <lkp@intel.com> To: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com> Cc: kbuild-all@01.org, lorenzo.pieralisi@arm.com, robin.murphy@arm.com, jean-philippe.brucker@arm.com, will.deacon@arm.com, mark.rutland@arm.com, guohanjun@huawei.com, john.garry@huawei.com, pabba@codeaurora.org, vkilari@codeaurora.org, rruigrok@codeaurora.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linuxarm@huawei.com, neil.m.leeder@gmail.com Subject: Re: [PATCH v4 2/4] perf: add arm64 smmuv3 pmu driver Date: Sat, 20 Oct 2018 12:50:18 +0800 [thread overview] Message-ID: <201810201257.68ixwyRo%fengguang.wu@intel.com> (raw) In-Reply-To: <20181016124920.24708-3-shameerali.kolothum.thodi@huawei.com> [-- Attachment #1: Type: text/plain, Size: 7751 bytes --] Hi Neil, Thank you for the patch! Yet something to improve: [auto build test ERROR on linux-sof-driver/master] [also build test ERROR on v4.19-rc8 next-20181019] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Shameer-Kolothum/arm64-SMMUv3-PMU-driver-with-IORT-support/20181017-063949 base: https://github.com/thesofproject/linux master config: i386-allyesconfig (attached as .config) compiler: gcc-7 (Debian 7.3.0-1) 7.3.0 reproduce: # save the attached .config to linux build tree make ARCH=i386 All error/warnings (new ones prefixed by >>): drivers//perf/arm_smmuv3_pmu.c: In function 'smmu_pmu_counter_set_value': >> drivers//perf/arm_smmuv3_pmu.c:145:36: warning: left shift count >= width of type [-Wshift-count-overflow] if (smmu_pmu->counter_mask & BIT(32)) ^~ drivers//perf/arm_smmuv3_pmu.c:146:3: error: implicit declaration of function 'writeq'; did you mean 'writel'? [-Werror=implicit-function-declaration] writeq(value, smmu_pmu->reloc_base + SMMU_PMCG_EVCNTR(idx, 8)); ^~~~~~ writel drivers//perf/arm_smmuv3_pmu.c: In function 'smmu_pmu_counter_get_value': drivers//perf/arm_smmuv3_pmu.c:155:36: warning: left shift count >= width of type [-Wshift-count-overflow] if (smmu_pmu->counter_mask & BIT(32)) ^~ drivers//perf/arm_smmuv3_pmu.c:156:11: error: implicit declaration of function 'readq'; did you mean 'readl'? [-Werror=implicit-function-declaration] value = readq(smmu_pmu->reloc_base + SMMU_PMCG_EVCNTR(idx, 8)); ^~~~~ readl drivers//perf/arm_smmuv3_pmu.c: In function 'smmu_pmu_reset': >> drivers//perf/arm_smmuv3_pmu.c:607:2: error: implicit declaration of function 'writeq_relaxed'; did you mean 'seq_release'? [-Werror=implicit-function-declaration] writeq_relaxed(smmu_pmu->counter_present_mask, ^~~~~~~~~~~~~~ seq_release drivers//perf/arm_smmuv3_pmu.c: In function 'smmu_pmu_probe': >> drivers//perf/arm_smmuv3_pmu.c:666:15: error: implicit declaration of function 'readq_relaxed'; did you mean 'seq_release'? [-Werror=implicit-function-declaration] ceid_64[0] = readq_relaxed(smmu_pmu->reg_base + SMMU_PMCG_CEID0); ^~~~~~~~~~~~~ seq_release drivers//perf/arm_smmuv3_pmu.c:687:108: warning: format '%llx' expects argument of type 'long long unsigned int', but argument 4 has type 'resource_size_t {aka unsigned int}' [-Wformat=] name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "smmuv3_pmcg_%llx", ^ (res_0->start) >> SMMU_PA_SHIFT); ~~~~~~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors vim +607 drivers//perf/arm_smmuv3_pmu.c 601 602 static void smmu_pmu_reset(struct smmu_pmu *smmu_pmu) 603 { 604 smmu_pmu_disable(&smmu_pmu->pmu); 605 606 /* Disable counter and interrupt */ > 607 writeq_relaxed(smmu_pmu->counter_present_mask, 608 smmu_pmu->reg_base + SMMU_PMCG_CNTENCLR0); 609 writeq_relaxed(smmu_pmu->counter_present_mask, 610 smmu_pmu->reg_base + SMMU_PMCG_INTENCLR0); 611 writeq_relaxed(smmu_pmu->counter_present_mask, 612 smmu_pmu->reloc_base + SMMU_PMCG_OVSCLR0); 613 } 614 615 static int smmu_pmu_probe(struct platform_device *pdev) 616 { 617 struct smmu_pmu *smmu_pmu; 618 struct resource *res_0, *res_1; 619 u32 cfgr, reg_size; 620 u64 ceid_64[2]; 621 int irq, err; 622 char *name; 623 struct device *dev = &pdev->dev; 624 625 smmu_pmu = devm_kzalloc(dev, sizeof(*smmu_pmu), GFP_KERNEL); 626 if (!smmu_pmu) 627 return -ENOMEM; 628 629 smmu_pmu->dev = dev; 630 platform_set_drvdata(pdev, smmu_pmu); 631 632 smmu_pmu->pmu = (struct pmu) { 633 .task_ctx_nr = perf_invalid_context, 634 .pmu_enable = smmu_pmu_enable, 635 .pmu_disable = smmu_pmu_disable, 636 .event_init = smmu_pmu_event_init, 637 .add = smmu_pmu_event_add, 638 .del = smmu_pmu_event_del, 639 .start = smmu_pmu_event_start, 640 .stop = smmu_pmu_event_stop, 641 .read = smmu_pmu_event_read, 642 .attr_groups = smmu_pmu_attr_grps, 643 }; 644 645 res_0 = platform_get_resource(pdev, IORESOURCE_MEM, 0); 646 smmu_pmu->reg_base = devm_ioremap_resource(dev, res_0); 647 if (IS_ERR(smmu_pmu->reg_base)) 648 return PTR_ERR(smmu_pmu->reg_base); 649 650 cfgr = readl_relaxed(smmu_pmu->reg_base + SMMU_PMCG_CFGR); 651 652 /* Determine if page 1 is present */ 653 if (cfgr & SMMU_PMCG_CFGR_RELOC_CTRS) { 654 res_1 = platform_get_resource(pdev, IORESOURCE_MEM, 1); 655 smmu_pmu->reloc_base = devm_ioremap_resource(dev, res_1); 656 if (IS_ERR(smmu_pmu->reloc_base)) 657 return PTR_ERR(smmu_pmu->reloc_base); 658 } else { 659 smmu_pmu->reloc_base = smmu_pmu->reg_base; 660 } 661 662 irq = platform_get_irq(pdev, 0); 663 if (irq > 0) 664 smmu_pmu->irq = irq; 665 > 666 ceid_64[0] = readq_relaxed(smmu_pmu->reg_base + SMMU_PMCG_CEID0); 667 ceid_64[1] = readq_relaxed(smmu_pmu->reg_base + SMMU_PMCG_CEID1); 668 bitmap_from_arr32(smmu_pmu->supported_events, (u32 *)ceid_64, 669 SMMU_ARCH_MAX_EVENTS); 670 671 smmu_pmu->num_counters = FIELD_GET(SMMU_PMCG_CFGR_NCTR_MASK, cfgr) + 1; 672 smmu_pmu->counter_present_mask = GENMASK(smmu_pmu->num_counters - 1, 0); 673 674 smmu_pmu->sid_filter_global = !!(cfgr & SMMU_PMCG_CFGR_SID_FILTER_TYPE); 675 676 reg_size = FIELD_GET(SMMU_PMCG_CFGR_SIZE_MASK, cfgr); 677 smmu_pmu->counter_mask = GENMASK_ULL(reg_size, 0); 678 679 smmu_pmu_reset(smmu_pmu); 680 681 err = smmu_pmu_setup_irq(smmu_pmu); 682 if (err) { 683 dev_err(dev, "Setup irq failed, PMU @%pa\n", &res_0->start); 684 return err; 685 } 686 687 name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "smmuv3_pmcg_%llx", 688 (res_0->start) >> SMMU_PA_SHIFT); 689 if (!name) { 690 dev_err(dev, "Create name failed, PMU @%pa\n", &res_0->start); 691 return -EINVAL; 692 } 693 694 /* Pick one CPU to be the preferred one to use */ 695 smmu_pmu->on_cpu = get_cpu(); 696 WARN_ON(irq_set_affinity(smmu_pmu->irq, cpumask_of(smmu_pmu->on_cpu))); 697 698 err = cpuhp_state_add_instance_nocalls(cpuhp_state_num, 699 &smmu_pmu->node); 700 if (err) { 701 dev_err(dev, "Error %d registering hotplug, PMU @%pa\n", 702 err, &res_0->start); 703 goto out_cpuhp_err; 704 } 705 706 err = perf_pmu_register(&smmu_pmu->pmu, name, -1); 707 if (err) { 708 dev_err(dev, "Error %d registering PMU @%pa\n", 709 err, &res_0->start); 710 goto out_unregister; 711 } 712 713 put_cpu(); 714 dev_info(dev, "Registered PMU @ %pa using %d counters with %s filter settings\n", 715 &res_0->start, smmu_pmu->num_counters, 716 smmu_pmu->sid_filter_global ? "Global(Counter0)" : 717 "Individual"); 718 719 return 0; 720 721 out_unregister: 722 cpuhp_state_remove_instance_nocalls(cpuhp_state_num, &smmu_pmu->node); 723 out_cpuhp_err: 724 put_cpu(); 725 return err; 726 } 727 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation [-- Attachment #2: .config.gz --] [-- Type: application/gzip, Size: 62260 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: lkp@intel.com (kbuild test robot) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH v4 2/4] perf: add arm64 smmuv3 pmu driver Date: Sat, 20 Oct 2018 12:50:18 +0800 [thread overview] Message-ID: <201810201257.68ixwyRo%fengguang.wu@intel.com> (raw) In-Reply-To: <20181016124920.24708-3-shameerali.kolothum.thodi@huawei.com> Hi Neil, Thank you for the patch! Yet something to improve: [auto build test ERROR on linux-sof-driver/master] [also build test ERROR on v4.19-rc8 next-20181019] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Shameer-Kolothum/arm64-SMMUv3-PMU-driver-with-IORT-support/20181017-063949 base: https://github.com/thesofproject/linux master config: i386-allyesconfig (attached as .config) compiler: gcc-7 (Debian 7.3.0-1) 7.3.0 reproduce: # save the attached .config to linux build tree make ARCH=i386 All error/warnings (new ones prefixed by >>): drivers//perf/arm_smmuv3_pmu.c: In function 'smmu_pmu_counter_set_value': >> drivers//perf/arm_smmuv3_pmu.c:145:36: warning: left shift count >= width of type [-Wshift-count-overflow] if (smmu_pmu->counter_mask & BIT(32)) ^~ drivers//perf/arm_smmuv3_pmu.c:146:3: error: implicit declaration of function 'writeq'; did you mean 'writel'? [-Werror=implicit-function-declaration] writeq(value, smmu_pmu->reloc_base + SMMU_PMCG_EVCNTR(idx, 8)); ^~~~~~ writel drivers//perf/arm_smmuv3_pmu.c: In function 'smmu_pmu_counter_get_value': drivers//perf/arm_smmuv3_pmu.c:155:36: warning: left shift count >= width of type [-Wshift-count-overflow] if (smmu_pmu->counter_mask & BIT(32)) ^~ drivers//perf/arm_smmuv3_pmu.c:156:11: error: implicit declaration of function 'readq'; did you mean 'readl'? [-Werror=implicit-function-declaration] value = readq(smmu_pmu->reloc_base + SMMU_PMCG_EVCNTR(idx, 8)); ^~~~~ readl drivers//perf/arm_smmuv3_pmu.c: In function 'smmu_pmu_reset': >> drivers//perf/arm_smmuv3_pmu.c:607:2: error: implicit declaration of function 'writeq_relaxed'; did you mean 'seq_release'? [-Werror=implicit-function-declaration] writeq_relaxed(smmu_pmu->counter_present_mask, ^~~~~~~~~~~~~~ seq_release drivers//perf/arm_smmuv3_pmu.c: In function 'smmu_pmu_probe': >> drivers//perf/arm_smmuv3_pmu.c:666:15: error: implicit declaration of function 'readq_relaxed'; did you mean 'seq_release'? [-Werror=implicit-function-declaration] ceid_64[0] = readq_relaxed(smmu_pmu->reg_base + SMMU_PMCG_CEID0); ^~~~~~~~~~~~~ seq_release drivers//perf/arm_smmuv3_pmu.c:687:108: warning: format '%llx' expects argument of type 'long long unsigned int', but argument 4 has type 'resource_size_t {aka unsigned int}' [-Wformat=] name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "smmuv3_pmcg_%llx", ^ (res_0->start) >> SMMU_PA_SHIFT); ~~~~~~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors vim +607 drivers//perf/arm_smmuv3_pmu.c 601 602 static void smmu_pmu_reset(struct smmu_pmu *smmu_pmu) 603 { 604 smmu_pmu_disable(&smmu_pmu->pmu); 605 606 /* Disable counter and interrupt */ > 607 writeq_relaxed(smmu_pmu->counter_present_mask, 608 smmu_pmu->reg_base + SMMU_PMCG_CNTENCLR0); 609 writeq_relaxed(smmu_pmu->counter_present_mask, 610 smmu_pmu->reg_base + SMMU_PMCG_INTENCLR0); 611 writeq_relaxed(smmu_pmu->counter_present_mask, 612 smmu_pmu->reloc_base + SMMU_PMCG_OVSCLR0); 613 } 614 615 static int smmu_pmu_probe(struct platform_device *pdev) 616 { 617 struct smmu_pmu *smmu_pmu; 618 struct resource *res_0, *res_1; 619 u32 cfgr, reg_size; 620 u64 ceid_64[2]; 621 int irq, err; 622 char *name; 623 struct device *dev = &pdev->dev; 624 625 smmu_pmu = devm_kzalloc(dev, sizeof(*smmu_pmu), GFP_KERNEL); 626 if (!smmu_pmu) 627 return -ENOMEM; 628 629 smmu_pmu->dev = dev; 630 platform_set_drvdata(pdev, smmu_pmu); 631 632 smmu_pmu->pmu = (struct pmu) { 633 .task_ctx_nr = perf_invalid_context, 634 .pmu_enable = smmu_pmu_enable, 635 .pmu_disable = smmu_pmu_disable, 636 .event_init = smmu_pmu_event_init, 637 .add = smmu_pmu_event_add, 638 .del = smmu_pmu_event_del, 639 .start = smmu_pmu_event_start, 640 .stop = smmu_pmu_event_stop, 641 .read = smmu_pmu_event_read, 642 .attr_groups = smmu_pmu_attr_grps, 643 }; 644 645 res_0 = platform_get_resource(pdev, IORESOURCE_MEM, 0); 646 smmu_pmu->reg_base = devm_ioremap_resource(dev, res_0); 647 if (IS_ERR(smmu_pmu->reg_base)) 648 return PTR_ERR(smmu_pmu->reg_base); 649 650 cfgr = readl_relaxed(smmu_pmu->reg_base + SMMU_PMCG_CFGR); 651 652 /* Determine if page 1 is present */ 653 if (cfgr & SMMU_PMCG_CFGR_RELOC_CTRS) { 654 res_1 = platform_get_resource(pdev, IORESOURCE_MEM, 1); 655 smmu_pmu->reloc_base = devm_ioremap_resource(dev, res_1); 656 if (IS_ERR(smmu_pmu->reloc_base)) 657 return PTR_ERR(smmu_pmu->reloc_base); 658 } else { 659 smmu_pmu->reloc_base = smmu_pmu->reg_base; 660 } 661 662 irq = platform_get_irq(pdev, 0); 663 if (irq > 0) 664 smmu_pmu->irq = irq; 665 > 666 ceid_64[0] = readq_relaxed(smmu_pmu->reg_base + SMMU_PMCG_CEID0); 667 ceid_64[1] = readq_relaxed(smmu_pmu->reg_base + SMMU_PMCG_CEID1); 668 bitmap_from_arr32(smmu_pmu->supported_events, (u32 *)ceid_64, 669 SMMU_ARCH_MAX_EVENTS); 670 671 smmu_pmu->num_counters = FIELD_GET(SMMU_PMCG_CFGR_NCTR_MASK, cfgr) + 1; 672 smmu_pmu->counter_present_mask = GENMASK(smmu_pmu->num_counters - 1, 0); 673 674 smmu_pmu->sid_filter_global = !!(cfgr & SMMU_PMCG_CFGR_SID_FILTER_TYPE); 675 676 reg_size = FIELD_GET(SMMU_PMCG_CFGR_SIZE_MASK, cfgr); 677 smmu_pmu->counter_mask = GENMASK_ULL(reg_size, 0); 678 679 smmu_pmu_reset(smmu_pmu); 680 681 err = smmu_pmu_setup_irq(smmu_pmu); 682 if (err) { 683 dev_err(dev, "Setup irq failed, PMU @%pa\n", &res_0->start); 684 return err; 685 } 686 687 name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "smmuv3_pmcg_%llx", 688 (res_0->start) >> SMMU_PA_SHIFT); 689 if (!name) { 690 dev_err(dev, "Create name failed, PMU @%pa\n", &res_0->start); 691 return -EINVAL; 692 } 693 694 /* Pick one CPU to be the preferred one to use */ 695 smmu_pmu->on_cpu = get_cpu(); 696 WARN_ON(irq_set_affinity(smmu_pmu->irq, cpumask_of(smmu_pmu->on_cpu))); 697 698 err = cpuhp_state_add_instance_nocalls(cpuhp_state_num, 699 &smmu_pmu->node); 700 if (err) { 701 dev_err(dev, "Error %d registering hotplug, PMU @%pa\n", 702 err, &res_0->start); 703 goto out_cpuhp_err; 704 } 705 706 err = perf_pmu_register(&smmu_pmu->pmu, name, -1); 707 if (err) { 708 dev_err(dev, "Error %d registering PMU @%pa\n", 709 err, &res_0->start); 710 goto out_unregister; 711 } 712 713 put_cpu(); 714 dev_info(dev, "Registered PMU @ %pa using %d counters with %s filter settings\n", 715 &res_0->start, smmu_pmu->num_counters, 716 smmu_pmu->sid_filter_global ? "Global(Counter0)" : 717 "Individual"); 718 719 return 0; 720 721 out_unregister: 722 cpuhp_state_remove_instance_nocalls(cpuhp_state_num, &smmu_pmu->node); 723 out_cpuhp_err: 724 put_cpu(); 725 return err; 726 } 727 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation -------------- next part -------------- A non-text attachment was scrubbed... Name: .config.gz Type: application/gzip Size: 62260 bytes Desc: not available URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20181020/e66e68a6/attachment-0001.gz>
next prev parent reply other threads:[~2018-10-20 4:50 UTC|newest] Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-10-16 12:49 [PATCH v4 0/4] arm64 SMMUv3 PMU driver with IORT support Shameer Kolothum 2018-10-16 12:49 ` Shameer Kolothum 2018-10-16 12:49 ` Shameer Kolothum 2018-10-16 12:49 ` [PATCH v4 1/4] acpi: arm64: add iort support for PMCG Shameer Kolothum 2018-10-16 12:49 ` Shameer Kolothum 2018-10-16 12:49 ` Shameer Kolothum 2018-10-16 12:49 ` [PATCH v4 2/4] perf: add arm64 smmuv3 pmu driver Shameer Kolothum 2018-10-16 12:49 ` Shameer Kolothum 2018-10-16 12:49 ` Shameer Kolothum 2018-10-17 21:53 ` kbuild test robot 2018-10-17 21:53 ` kbuild test robot 2018-10-18 9:26 ` Shameerali Kolothum Thodi 2018-10-18 9:26 ` Shameerali Kolothum Thodi 2018-10-18 9:26 ` Shameerali Kolothum Thodi 2018-10-20 4:50 ` kbuild test robot [this message] 2018-10-20 4:50 ` kbuild test robot 2018-10-16 12:49 ` [PATCH v4 3/4] perf/smmuv3: Add MSI irq support Shameer Kolothum 2018-10-16 12:49 ` Shameer Kolothum 2018-10-16 12:49 ` Shameer Kolothum 2018-10-17 3:35 ` kbuild test robot 2018-10-17 3:35 ` kbuild test robot 2018-10-17 9:48 ` Shameerali Kolothum Thodi 2018-10-17 9:48 ` Shameerali Kolothum Thodi 2018-10-17 9:48 ` Shameerali Kolothum Thodi 2018-10-17 15:42 ` kbuild test robot 2018-10-17 15:42 ` kbuild test robot 2018-10-17 15:42 ` kbuild test robot 2018-10-16 12:49 ` [PATCH v4 4/4] perf/smmuv3_pmu: Enable HiSilicon Erratum 162001800 quirk Shameer Kolothum 2018-10-16 12:49 ` Shameer Kolothum 2018-10-16 12:49 ` Shameer Kolothum 2018-10-18 11:43 ` Robin Murphy 2018-10-18 11:43 ` Robin Murphy 2018-10-18 13:34 ` Shameerali Kolothum Thodi 2018-10-18 13:34 ` Shameerali Kolothum Thodi 2018-10-18 13:34 ` Shameerali Kolothum Thodi 2018-10-18 15:27 ` Shameerali Kolothum Thodi 2018-10-18 15:27 ` Shameerali Kolothum Thodi 2018-10-18 15:27 ` Shameerali Kolothum Thodi 2018-11-09 16:50 ` Shameerali Kolothum Thodi 2018-11-09 16:50 ` Shameerali Kolothum Thodi 2018-11-09 16:50 ` Shameerali Kolothum Thodi 2018-11-26 18:45 ` Robin Murphy 2018-11-26 18:45 ` Robin Murphy 2018-11-26 18:45 ` Robin Murphy 2018-11-27 13:23 ` Shameerali Kolothum Thodi 2018-11-27 13:23 ` Shameerali Kolothum Thodi 2018-11-27 13:23 ` Shameerali Kolothum Thodi
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=201810201257.68ixwyRo%fengguang.wu@intel.com \ --to=lkp@intel.com \ --cc=guohanjun@huawei.com \ --cc=jean-philippe.brucker@arm.com \ --cc=john.garry@huawei.com \ --cc=kbuild-all@01.org \ --cc=linux-acpi@vger.kernel.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linuxarm@huawei.com \ --cc=lorenzo.pieralisi@arm.com \ --cc=mark.rutland@arm.com \ --cc=neil.m.leeder@gmail.com \ --cc=pabba@codeaurora.org \ --cc=robin.murphy@arm.com \ --cc=rruigrok@codeaurora.org \ --cc=shameerali.kolothum.thodi@huawei.com \ --cc=vkilari@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.