From: Dan Carpenter <dan.carpenter@oracle.com> To: kbuild@lists.01.org Subject: Re: [RFC PATCH 2/2] Make cmdq_en attribute writeable Date: Mon, 15 Feb 2021 16:49:34 +0300 [thread overview] Message-ID: <20210215134934.GT2087@kadam> (raw) In-Reply-To: <20210215003249.GA12303@lupo-laptop> [-- Attachment #1: Type: text/plain, Size: 8357 bytes --] Hi Luca, url: https://github.com/0day-ci/linux/commits/Luca-Porzio/Support-temporarily-disable-of-the-CMDQ-mode/20210215-083730 base: 07f7e57c63aaa2afb4ea31edef05e08699a63a00 config: i386-randconfig-m021-20210215 (attached as .config) compiler: gcc-9 (Debian 9.3.0-15) 9.3.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> Reported-by: Dan Carpenter <dan.carpenter@oracle.com> New smatch warnings: drivers/mmc/core/mmc.c:870 mmc_cmdq_setup() error: uninitialized symbol 'err'. drivers/mmc/core/mmc.c:889 cmdq_en_store() warn: variable dereferenced before check 'card' (see line 885) vim +/err +870 drivers/mmc/core/mmc.c 07a9ce0e702520 Luca Porzio 2021-02-15 802 static int mmc_cmdq_setup(struct mmc_host *host, struct mmc_card *card) 07a9ce0e702520 Luca Porzio 2021-02-15 803 { 07a9ce0e702520 Luca Porzio 2021-02-15 804 int err; 07a9ce0e702520 Luca Porzio 2021-02-15 805 07a9ce0e702520 Luca Porzio 2021-02-15 806 /* Check HW support */ 07a9ce0e702520 Luca Porzio 2021-02-15 807 if (!card->ext_csd.cmdq_support || !(host->caps2 & MMC_CAP2_CQE)) 07a9ce0e702520 Luca Porzio 2021-02-15 808 card->force_disable_cmdq = true; 07a9ce0e702520 Luca Porzio 2021-02-15 809 07a9ce0e702520 Luca Porzio 2021-02-15 810 /* Enable/Disable CMDQ mode */ 07a9ce0e702520 Luca Porzio 2021-02-15 811 if (!card->ext_csd.cmdq_en && !card->force_disable_cmdq) { 07a9ce0e702520 Luca Porzio 2021-02-15 812 err = mmc_cmdq_enable(card); 07a9ce0e702520 Luca Porzio 2021-02-15 813 if (err && err != -EBADMSG) 07a9ce0e702520 Luca Porzio 2021-02-15 814 return err; 07a9ce0e702520 Luca Porzio 2021-02-15 815 if (err) { 07a9ce0e702520 Luca Porzio 2021-02-15 816 pr_warn("%s: Enabling CMDQ failed\n", 07a9ce0e702520 Luca Porzio 2021-02-15 817 mmc_hostname(card->host)); 07a9ce0e702520 Luca Porzio 2021-02-15 818 card->ext_csd.cmdq_support = false; 07a9ce0e702520 Luca Porzio 2021-02-15 819 card->ext_csd.cmdq_depth = 0; 07a9ce0e702520 Luca Porzio 2021-02-15 820 } 07a9ce0e702520 Luca Porzio 2021-02-15 821 07a9ce0e702520 Luca Porzio 2021-02-15 822 } else if (card->ext_csd.cmdq_en && card->force_disable_cmdq) { 07a9ce0e702520 Luca Porzio 2021-02-15 823 err = mmc_cmdq_disable(card); 07a9ce0e702520 Luca Porzio 2021-02-15 824 if (err) { 07a9ce0e702520 Luca Porzio 2021-02-15 825 pr_warn("%s: Disabling CMDQ failed, error %d\n", 07a9ce0e702520 Luca Porzio 2021-02-15 826 mmc_hostname(card->host), err); 07a9ce0e702520 Luca Porzio 2021-02-15 827 err = 0; 07a9ce0e702520 Luca Porzio 2021-02-15 828 } 07a9ce0e702520 Luca Porzio 2021-02-15 829 } "err not set on else path" 07a9ce0e702520 Luca Porzio 2021-02-15 830 07a9ce0e702520 Luca Porzio 2021-02-15 831 /* 07a9ce0e702520 Luca Porzio 2021-02-15 832 * In some cases (e.g. RPMB or mmc_test), the Command Queue must be 07a9ce0e702520 Luca Porzio 2021-02-15 833 * disabled for a time, so a flag is needed to indicate to re-enable the 07a9ce0e702520 Luca Porzio 2021-02-15 834 * Command Queue. 07a9ce0e702520 Luca Porzio 2021-02-15 835 */ 07a9ce0e702520 Luca Porzio 2021-02-15 836 card->reenable_cmdq = card->ext_csd.cmdq_en; 07a9ce0e702520 Luca Porzio 2021-02-15 837 07a9ce0e702520 Luca Porzio 2021-02-15 838 /* Enable/Disable Host CQE */ 07a9ce0e702520 Luca Porzio 2021-02-15 839 if (!card->force_disable_cmdq) { 07a9ce0e702520 Luca Porzio 2021-02-15 840 07a9ce0e702520 Luca Porzio 2021-02-15 841 if (host->cqe_ops && !host->cqe_enabled) { 07a9ce0e702520 Luca Porzio 2021-02-15 842 err = host->cqe_ops->cqe_enable(host, card); 07a9ce0e702520 Luca Porzio 2021-02-15 843 if (!err) { 07a9ce0e702520 Luca Porzio 2021-02-15 844 host->cqe_enabled = true; 07a9ce0e702520 Luca Porzio 2021-02-15 845 07a9ce0e702520 Luca Porzio 2021-02-15 846 if (card->ext_csd.cmdq_en) { 07a9ce0e702520 Luca Porzio 2021-02-15 847 pr_info("%s: Command Queue Engine enabled\n", 07a9ce0e702520 Luca Porzio 2021-02-15 848 mmc_hostname(host)); 07a9ce0e702520 Luca Porzio 2021-02-15 849 } else { 07a9ce0e702520 Luca Porzio 2021-02-15 850 host->hsq_enabled = true; 07a9ce0e702520 Luca Porzio 2021-02-15 851 pr_info("%s: Host Software Queue enabled\n", 07a9ce0e702520 Luca Porzio 2021-02-15 852 mmc_hostname(host)); 07a9ce0e702520 Luca Porzio 2021-02-15 853 } 07a9ce0e702520 Luca Porzio 2021-02-15 854 } 07a9ce0e702520 Luca Porzio 2021-02-15 855 } "err" not set on this else path either. 07a9ce0e702520 Luca Porzio 2021-02-15 856 07a9ce0e702520 Luca Porzio 2021-02-15 857 } else { 07a9ce0e702520 Luca Porzio 2021-02-15 858 07a9ce0e702520 Luca Porzio 2021-02-15 859 if (host->cqe_enabled) { 07a9ce0e702520 Luca Porzio 2021-02-15 860 host->cqe_ops->cqe_disable(host); 07a9ce0e702520 Luca Porzio 2021-02-15 861 host->cqe_enabled = false; 07a9ce0e702520 Luca Porzio 2021-02-15 862 pr_info("%s: Command Queue Engine disabled\n", 07a9ce0e702520 Luca Porzio 2021-02-15 863 mmc_hostname(host)); 07a9ce0e702520 Luca Porzio 2021-02-15 864 } 07a9ce0e702520 Luca Porzio 2021-02-15 865 07a9ce0e702520 Luca Porzio 2021-02-15 866 host->hsq_enabled = false; 07a9ce0e702520 Luca Porzio 2021-02-15 867 err = 0; 07a9ce0e702520 Luca Porzio 2021-02-15 868 } 07a9ce0e702520 Luca Porzio 2021-02-15 869 07a9ce0e702520 Luca Porzio 2021-02-15 @870 return err; 07a9ce0e702520 Luca Porzio 2021-02-15 871 } 07a9ce0e702520 Luca Porzio 2021-02-15 872 07a9ce0e702520 Luca Porzio 2021-02-15 873 07a9ce0e702520 Luca Porzio 2021-02-15 874 static ssize_t cmdq_en_show(struct device *dev, struct device_attribute *attr, char *buf) 07a9ce0e702520 Luca Porzio 2021-02-15 875 { 07a9ce0e702520 Luca Porzio 2021-02-15 876 struct mmc_card *card = mmc_dev_to_card(dev); 07a9ce0e702520 Luca Porzio 2021-02-15 877 07a9ce0e702520 Luca Porzio 2021-02-15 878 return sprintf(buf, "%d\n", card->ext_csd.cmdq_en); 07a9ce0e702520 Luca Porzio 2021-02-15 879 } 07a9ce0e702520 Luca Porzio 2021-02-15 880 07a9ce0e702520 Luca Porzio 2021-02-15 881 static ssize_t cmdq_en_store(struct device *dev, struct device_attribute *attr, 07a9ce0e702520 Luca Porzio 2021-02-15 882 const char *buf, size_t count) 07a9ce0e702520 Luca Porzio 2021-02-15 883 { 07a9ce0e702520 Luca Porzio 2021-02-15 884 struct mmc_card *card = mmc_dev_to_card(dev); 07a9ce0e702520 Luca Porzio 2021-02-15 @885 struct mmc_host *host = card->host; ^^^^^^^^^^ Dereferences "card" 07a9ce0e702520 Luca Porzio 2021-02-15 886 unsigned long enable; 07a9ce0e702520 Luca Porzio 2021-02-15 887 int err; 07a9ce0e702520 Luca Porzio 2021-02-15 888 07a9ce0e702520 Luca Porzio 2021-02-15 @889 if (!card || kstrtoul(buf, 0, &enable)) ^^^^^ Checked too late. 07a9ce0e702520 Luca Porzio 2021-02-15 890 return -EINVAL; 07a9ce0e702520 Luca Porzio 2021-02-15 891 if (!card->ext_csd.cmdq_support) 07a9ce0e702520 Luca Porzio 2021-02-15 892 return -EOPNOTSUPP; 07a9ce0e702520 Luca Porzio 2021-02-15 893 07a9ce0e702520 Luca Porzio 2021-02-15 894 enable = !!enable; 07a9ce0e702520 Luca Porzio 2021-02-15 895 if (enable == card->ext_csd.cmdq_en) 07a9ce0e702520 Luca Porzio 2021-02-15 896 return count; 07a9ce0e702520 Luca Porzio 2021-02-15 897 07a9ce0e702520 Luca Porzio 2021-02-15 898 mmc_get_card(card, NULL); 07a9ce0e702520 Luca Porzio 2021-02-15 899 card->force_disable_cmdq = !enable; 07a9ce0e702520 Luca Porzio 2021-02-15 900 err = mmc_cmdq_setup(host, card); 07a9ce0e702520 Luca Porzio 2021-02-15 901 mmc_put_card(card, NULL); 07a9ce0e702520 Luca Porzio 2021-02-15 902 07a9ce0e702520 Luca Porzio 2021-02-15 903 if (err) 07a9ce0e702520 Luca Porzio 2021-02-15 904 return err; 07a9ce0e702520 Luca Porzio 2021-02-15 905 else 07a9ce0e702520 Luca Porzio 2021-02-15 906 return count; 07a9ce0e702520 Luca Porzio 2021-02-15 907 } --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org [-- Attachment #2: config.gz --] [-- Type: application/gzip, Size: 38219 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: Dan Carpenter <dan.carpenter@oracle.com> To: kbuild-all@lists.01.org Subject: Re: [RFC PATCH 2/2] Make cmdq_en attribute writeable Date: Mon, 15 Feb 2021 16:49:34 +0300 [thread overview] Message-ID: <20210215134934.GT2087@kadam> (raw) In-Reply-To: <20210215003249.GA12303@lupo-laptop> [-- Attachment #1: Type: text/plain, Size: 8357 bytes --] Hi Luca, url: https://github.com/0day-ci/linux/commits/Luca-Porzio/Support-temporarily-disable-of-the-CMDQ-mode/20210215-083730 base: 07f7e57c63aaa2afb4ea31edef05e08699a63a00 config: i386-randconfig-m021-20210215 (attached as .config) compiler: gcc-9 (Debian 9.3.0-15) 9.3.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> Reported-by: Dan Carpenter <dan.carpenter@oracle.com> New smatch warnings: drivers/mmc/core/mmc.c:870 mmc_cmdq_setup() error: uninitialized symbol 'err'. drivers/mmc/core/mmc.c:889 cmdq_en_store() warn: variable dereferenced before check 'card' (see line 885) vim +/err +870 drivers/mmc/core/mmc.c 07a9ce0e702520 Luca Porzio 2021-02-15 802 static int mmc_cmdq_setup(struct mmc_host *host, struct mmc_card *card) 07a9ce0e702520 Luca Porzio 2021-02-15 803 { 07a9ce0e702520 Luca Porzio 2021-02-15 804 int err; 07a9ce0e702520 Luca Porzio 2021-02-15 805 07a9ce0e702520 Luca Porzio 2021-02-15 806 /* Check HW support */ 07a9ce0e702520 Luca Porzio 2021-02-15 807 if (!card->ext_csd.cmdq_support || !(host->caps2 & MMC_CAP2_CQE)) 07a9ce0e702520 Luca Porzio 2021-02-15 808 card->force_disable_cmdq = true; 07a9ce0e702520 Luca Porzio 2021-02-15 809 07a9ce0e702520 Luca Porzio 2021-02-15 810 /* Enable/Disable CMDQ mode */ 07a9ce0e702520 Luca Porzio 2021-02-15 811 if (!card->ext_csd.cmdq_en && !card->force_disable_cmdq) { 07a9ce0e702520 Luca Porzio 2021-02-15 812 err = mmc_cmdq_enable(card); 07a9ce0e702520 Luca Porzio 2021-02-15 813 if (err && err != -EBADMSG) 07a9ce0e702520 Luca Porzio 2021-02-15 814 return err; 07a9ce0e702520 Luca Porzio 2021-02-15 815 if (err) { 07a9ce0e702520 Luca Porzio 2021-02-15 816 pr_warn("%s: Enabling CMDQ failed\n", 07a9ce0e702520 Luca Porzio 2021-02-15 817 mmc_hostname(card->host)); 07a9ce0e702520 Luca Porzio 2021-02-15 818 card->ext_csd.cmdq_support = false; 07a9ce0e702520 Luca Porzio 2021-02-15 819 card->ext_csd.cmdq_depth = 0; 07a9ce0e702520 Luca Porzio 2021-02-15 820 } 07a9ce0e702520 Luca Porzio 2021-02-15 821 07a9ce0e702520 Luca Porzio 2021-02-15 822 } else if (card->ext_csd.cmdq_en && card->force_disable_cmdq) { 07a9ce0e702520 Luca Porzio 2021-02-15 823 err = mmc_cmdq_disable(card); 07a9ce0e702520 Luca Porzio 2021-02-15 824 if (err) { 07a9ce0e702520 Luca Porzio 2021-02-15 825 pr_warn("%s: Disabling CMDQ failed, error %d\n", 07a9ce0e702520 Luca Porzio 2021-02-15 826 mmc_hostname(card->host), err); 07a9ce0e702520 Luca Porzio 2021-02-15 827 err = 0; 07a9ce0e702520 Luca Porzio 2021-02-15 828 } 07a9ce0e702520 Luca Porzio 2021-02-15 829 } "err not set on else path" 07a9ce0e702520 Luca Porzio 2021-02-15 830 07a9ce0e702520 Luca Porzio 2021-02-15 831 /* 07a9ce0e702520 Luca Porzio 2021-02-15 832 * In some cases (e.g. RPMB or mmc_test), the Command Queue must be 07a9ce0e702520 Luca Porzio 2021-02-15 833 * disabled for a time, so a flag is needed to indicate to re-enable the 07a9ce0e702520 Luca Porzio 2021-02-15 834 * Command Queue. 07a9ce0e702520 Luca Porzio 2021-02-15 835 */ 07a9ce0e702520 Luca Porzio 2021-02-15 836 card->reenable_cmdq = card->ext_csd.cmdq_en; 07a9ce0e702520 Luca Porzio 2021-02-15 837 07a9ce0e702520 Luca Porzio 2021-02-15 838 /* Enable/Disable Host CQE */ 07a9ce0e702520 Luca Porzio 2021-02-15 839 if (!card->force_disable_cmdq) { 07a9ce0e702520 Luca Porzio 2021-02-15 840 07a9ce0e702520 Luca Porzio 2021-02-15 841 if (host->cqe_ops && !host->cqe_enabled) { 07a9ce0e702520 Luca Porzio 2021-02-15 842 err = host->cqe_ops->cqe_enable(host, card); 07a9ce0e702520 Luca Porzio 2021-02-15 843 if (!err) { 07a9ce0e702520 Luca Porzio 2021-02-15 844 host->cqe_enabled = true; 07a9ce0e702520 Luca Porzio 2021-02-15 845 07a9ce0e702520 Luca Porzio 2021-02-15 846 if (card->ext_csd.cmdq_en) { 07a9ce0e702520 Luca Porzio 2021-02-15 847 pr_info("%s: Command Queue Engine enabled\n", 07a9ce0e702520 Luca Porzio 2021-02-15 848 mmc_hostname(host)); 07a9ce0e702520 Luca Porzio 2021-02-15 849 } else { 07a9ce0e702520 Luca Porzio 2021-02-15 850 host->hsq_enabled = true; 07a9ce0e702520 Luca Porzio 2021-02-15 851 pr_info("%s: Host Software Queue enabled\n", 07a9ce0e702520 Luca Porzio 2021-02-15 852 mmc_hostname(host)); 07a9ce0e702520 Luca Porzio 2021-02-15 853 } 07a9ce0e702520 Luca Porzio 2021-02-15 854 } 07a9ce0e702520 Luca Porzio 2021-02-15 855 } "err" not set on this else path either. 07a9ce0e702520 Luca Porzio 2021-02-15 856 07a9ce0e702520 Luca Porzio 2021-02-15 857 } else { 07a9ce0e702520 Luca Porzio 2021-02-15 858 07a9ce0e702520 Luca Porzio 2021-02-15 859 if (host->cqe_enabled) { 07a9ce0e702520 Luca Porzio 2021-02-15 860 host->cqe_ops->cqe_disable(host); 07a9ce0e702520 Luca Porzio 2021-02-15 861 host->cqe_enabled = false; 07a9ce0e702520 Luca Porzio 2021-02-15 862 pr_info("%s: Command Queue Engine disabled\n", 07a9ce0e702520 Luca Porzio 2021-02-15 863 mmc_hostname(host)); 07a9ce0e702520 Luca Porzio 2021-02-15 864 } 07a9ce0e702520 Luca Porzio 2021-02-15 865 07a9ce0e702520 Luca Porzio 2021-02-15 866 host->hsq_enabled = false; 07a9ce0e702520 Luca Porzio 2021-02-15 867 err = 0; 07a9ce0e702520 Luca Porzio 2021-02-15 868 } 07a9ce0e702520 Luca Porzio 2021-02-15 869 07a9ce0e702520 Luca Porzio 2021-02-15 @870 return err; 07a9ce0e702520 Luca Porzio 2021-02-15 871 } 07a9ce0e702520 Luca Porzio 2021-02-15 872 07a9ce0e702520 Luca Porzio 2021-02-15 873 07a9ce0e702520 Luca Porzio 2021-02-15 874 static ssize_t cmdq_en_show(struct device *dev, struct device_attribute *attr, char *buf) 07a9ce0e702520 Luca Porzio 2021-02-15 875 { 07a9ce0e702520 Luca Porzio 2021-02-15 876 struct mmc_card *card = mmc_dev_to_card(dev); 07a9ce0e702520 Luca Porzio 2021-02-15 877 07a9ce0e702520 Luca Porzio 2021-02-15 878 return sprintf(buf, "%d\n", card->ext_csd.cmdq_en); 07a9ce0e702520 Luca Porzio 2021-02-15 879 } 07a9ce0e702520 Luca Porzio 2021-02-15 880 07a9ce0e702520 Luca Porzio 2021-02-15 881 static ssize_t cmdq_en_store(struct device *dev, struct device_attribute *attr, 07a9ce0e702520 Luca Porzio 2021-02-15 882 const char *buf, size_t count) 07a9ce0e702520 Luca Porzio 2021-02-15 883 { 07a9ce0e702520 Luca Porzio 2021-02-15 884 struct mmc_card *card = mmc_dev_to_card(dev); 07a9ce0e702520 Luca Porzio 2021-02-15 @885 struct mmc_host *host = card->host; ^^^^^^^^^^ Dereferences "card" 07a9ce0e702520 Luca Porzio 2021-02-15 886 unsigned long enable; 07a9ce0e702520 Luca Porzio 2021-02-15 887 int err; 07a9ce0e702520 Luca Porzio 2021-02-15 888 07a9ce0e702520 Luca Porzio 2021-02-15 @889 if (!card || kstrtoul(buf, 0, &enable)) ^^^^^ Checked too late. 07a9ce0e702520 Luca Porzio 2021-02-15 890 return -EINVAL; 07a9ce0e702520 Luca Porzio 2021-02-15 891 if (!card->ext_csd.cmdq_support) 07a9ce0e702520 Luca Porzio 2021-02-15 892 return -EOPNOTSUPP; 07a9ce0e702520 Luca Porzio 2021-02-15 893 07a9ce0e702520 Luca Porzio 2021-02-15 894 enable = !!enable; 07a9ce0e702520 Luca Porzio 2021-02-15 895 if (enable == card->ext_csd.cmdq_en) 07a9ce0e702520 Luca Porzio 2021-02-15 896 return count; 07a9ce0e702520 Luca Porzio 2021-02-15 897 07a9ce0e702520 Luca Porzio 2021-02-15 898 mmc_get_card(card, NULL); 07a9ce0e702520 Luca Porzio 2021-02-15 899 card->force_disable_cmdq = !enable; 07a9ce0e702520 Luca Porzio 2021-02-15 900 err = mmc_cmdq_setup(host, card); 07a9ce0e702520 Luca Porzio 2021-02-15 901 mmc_put_card(card, NULL); 07a9ce0e702520 Luca Porzio 2021-02-15 902 07a9ce0e702520 Luca Porzio 2021-02-15 903 if (err) 07a9ce0e702520 Luca Porzio 2021-02-15 904 return err; 07a9ce0e702520 Luca Porzio 2021-02-15 905 else 07a9ce0e702520 Luca Porzio 2021-02-15 906 return count; 07a9ce0e702520 Luca Porzio 2021-02-15 907 } --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org [-- Attachment #2: config.gz --] [-- Type: application/gzip, Size: 38219 bytes --]
next prev parent reply other threads:[~2021-02-15 13:49 UTC|newest] Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-02-15 0:32 [RFC PATCH 2/2] Make cmdq_en attribute writeable Luca Porzio 2021-02-15 13:49 ` Dan Carpenter [this message] 2021-02-15 13:49 ` Dan Carpenter 2021-02-17 13:04 ` kernel test robot 2021-03-02 10:46 ` Ulf Hansson 2021-03-10 8:54 ` Adrian Hunter 2021-03-14 22:33 ` [EXT] " Luca Porzio (lporzio) 2021-03-15 7:11 ` Adrian Hunter 2021-03-08 17:05 ` Ulf Hansson [not found] ` <CABhGgDPpUXPHJ49E_ku5N-fO=GWZKTdQQUGugAruG6y2=J1YgA@mail.gmail.com> 2021-03-09 15:47 ` Ulf Hansson 2021-03-14 22:26 ` [EXT] " Luca Porzio (lporzio) 2021-02-15 2:21 kernel test robot 2021-02-15 3:09 kernel test robot
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=20210215134934.GT2087@kadam \ --to=dan.carpenter@oracle.com \ --cc=kbuild@lists.01.org \ /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.