From: kbuild test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: [lpieralisi-pci:pci/hv 5/5] drivers/pci/controller/pci-hyperv.c:2101:26: sparse: sparse: incorrect type in assignment (different base types)
Date: Fri, 06 Mar 2020 04:56:56 +0800 [thread overview]
Message-ID: <202003060450.XCFTCBiZ%lkp@intel.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 19117 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/lpieralisi/pci.git pci/hv
head: d0e3c3fdf000bacd3fb11c6eb97a38ca27fe915c
commit: d0e3c3fdf000bacd3fb11c6eb97a38ca27fe915c [5/5] PCI: hv: Replace zero-length array with flexible-array member
reproduce:
# apt-get install sparse
# sparse version: v0.6.1-174-g094d5a94-dirty
git checkout d0e3c3fdf000bacd3fb11c6eb97a38ca27fe915c
make ARCH=x86_64 allmodconfig
make C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__'
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>
sparse warnings: (new ones prefixed by >>)
drivers/pci/controller/pci-hyperv.c:974:5: sparse: sparse: symbol 'hv_read_config_block' was not declared. Should it be static?
drivers/pci/controller/pci-hyperv.c:1054:5: sparse: sparse: symbol 'hv_write_config_block' was not declared. Should it be static?
drivers/pci/controller/pci-hyperv.c:1123:5: sparse: sparse: symbol 'hv_register_block_invalidate' was not declared. Should it be static?
>> drivers/pci/controller/pci-hyperv.c:2101:26: sparse: sparse: incorrect type in assignment (different base types)
>> drivers/pci/controller/pci-hyperv.c:2101:26: sparse: expected struct hv_pcidev_description *new_desc
>> drivers/pci/controller/pci-hyperv.c:2101:26: sparse: got struct pci_function_description *
drivers/pci/controller/pci-hyperv.c:2293:28: sparse: sparse: no member 'flags' in struct pci_function_description
drivers/pci/controller/pci-hyperv.c:2294:28: sparse: sparse: no member 'virtual_numa_node' in struct pci_function_description
vim +2101 drivers/pci/controller/pci-hyperv.c
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2029
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2030 /**
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2031 * pci_devices_present_work() - Handle new list of child devices
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2032 * @work: Work struct embedded in struct hv_dr_work
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2033 *
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2034 * "Bus Relations" is the Windows term for "children of this
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2035 * bus." The terminology is preserved here for people trying to
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2036 * debug the interaction between Hyper-V and Linux. This
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2037 * function is called when the parent partition reports a list
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2038 * of functions that should be observed under this PCI Express
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2039 * port (bus).
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2040 *
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2041 * This function updates the list, and must tolerate being
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2042 * called multiple times with the same information. The typical
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2043 * number of child devices is one, with very atypical cases
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2044 * involving three or four, so the algorithms used here can be
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2045 * simple and inefficient.
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2046 *
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2047 * It must also treat the omission of a previously observed device as
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2048 * notification that the device no longer exists.
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2049 *
021ad274d7dc31 drivers/pci/host/pci-hyperv.c Dexuan Cui 2018-03-15 2050 * Note that this function is serialized with hv_eject_device_work(),
021ad274d7dc31 drivers/pci/host/pci-hyperv.c Dexuan Cui 2018-03-15 2051 * because both are pushed to the ordered workqueue hbus->wq.
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2052 */
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2053 static void pci_devices_present_work(struct work_struct *work)
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2054 {
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2055 u32 child_no;
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2056 bool found;
981e3ed0791edc drivers/pci/controller/pci-hyperv.c Long Li 2020-02-25 2057 struct hv_pcidev_description *new_desc;
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2058 struct hv_pci_dev *hpdev;
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2059 struct hv_pcibus_device *hbus;
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2060 struct list_head removed;
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2061 struct hv_dr_work *dr_wrk;
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2062 struct hv_dr_state *dr = NULL;
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2063 unsigned long flags;
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2064
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2065 dr_wrk = container_of(work, struct hv_dr_work, wrk);
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2066 hbus = dr_wrk->bus;
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2067 kfree(dr_wrk);
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2068
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2069 INIT_LIST_HEAD(&removed);
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2070
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2071 /* Pull this off the queue and process it if it was the last one. */
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2072 spin_lock_irqsave(&hbus->device_list_lock, flags);
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2073 while (!list_empty(&hbus->dr_list)) {
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2074 dr = list_first_entry(&hbus->dr_list, struct hv_dr_state,
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2075 list_entry);
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2076 list_del(&dr->list_entry);
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2077
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2078 /* Throw this away if the list still has stuff in it. */
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2079 if (!list_empty(&hbus->dr_list)) {
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2080 kfree(dr);
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2081 continue;
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2082 }
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2083 }
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2084 spin_unlock_irqrestore(&hbus->device_list_lock, flags);
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2085
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2086 if (!dr) {
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2087 put_hvpcibus(hbus);
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2088 return;
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2089 }
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2090
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2091 /* First, mark all existing children as reported missing. */
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2092 spin_lock_irqsave(&hbus->device_list_lock, flags);
5b8db8f66e08fa drivers/pci/host/pci-hyperv.c Stephen Hemminger 2018-05-23 2093 list_for_each_entry(hpdev, &hbus->children, list_entry) {
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2094 hpdev->reported_missing = true;
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2095 }
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2096 spin_unlock_irqrestore(&hbus->device_list_lock, flags);
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2097
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2098 /* Next, add back any reported devices. */
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2099 for (child_no = 0; child_no < dr->device_count; child_no++) {
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2100 found = false;
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 @2101 new_desc = &dr->func[child_no];
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2102
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2103 spin_lock_irqsave(&hbus->device_list_lock, flags);
5b8db8f66e08fa drivers/pci/host/pci-hyperv.c Stephen Hemminger 2018-05-23 2104 list_for_each_entry(hpdev, &hbus->children, list_entry) {
5b8db8f66e08fa drivers/pci/host/pci-hyperv.c Stephen Hemminger 2018-05-23 2105 if ((hpdev->desc.win_slot.slot == new_desc->win_slot.slot) &&
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2106 (hpdev->desc.v_id == new_desc->v_id) &&
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2107 (hpdev->desc.d_id == new_desc->d_id) &&
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2108 (hpdev->desc.ser == new_desc->ser)) {
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2109 hpdev->reported_missing = false;
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2110 found = true;
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2111 }
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2112 }
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2113 spin_unlock_irqrestore(&hbus->device_list_lock, flags);
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2114
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2115 if (!found) {
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2116 hpdev = new_pcichild_device(hbus, new_desc);
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2117 if (!hpdev)
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2118 dev_err(&hbus->hdev->device,
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2119 "couldn't record a child device.\n");
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2120 }
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2121 }
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2122
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2123 /* Move missing children to a list on the stack. */
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2124 spin_lock_irqsave(&hbus->device_list_lock, flags);
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2125 do {
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2126 found = false;
5b8db8f66e08fa drivers/pci/host/pci-hyperv.c Stephen Hemminger 2018-05-23 2127 list_for_each_entry(hpdev, &hbus->children, list_entry) {
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2128 if (hpdev->reported_missing) {
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2129 found = true;
8c99e120ffcabc drivers/pci/host/pci-hyperv.c Stephen Hemminger 2018-05-23 2130 put_pcichild(hpdev);
4f1cb01a789258 drivers/pci/host/pci-hyperv.c Wei Yongjun 2016-07-28 2131 list_move_tail(&hpdev->list_entry, &removed);
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2132 break;
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2133 }
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2134 }
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2135 } while (found);
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2136 spin_unlock_irqrestore(&hbus->device_list_lock, flags);
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2137
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2138 /* Delete everything that should no longer exist. */
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2139 while (!list_empty(&removed)) {
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2140 hpdev = list_first_entry(&removed, struct hv_pci_dev,
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2141 list_entry);
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2142 list_del(&hpdev->list_entry);
340d455699400f drivers/pci/controller/pci-hyperv.c Dexuan Cui 2019-03-04 2143
340d455699400f drivers/pci/controller/pci-hyperv.c Dexuan Cui 2019-03-04 2144 if (hpdev->pci_slot)
340d455699400f drivers/pci/controller/pci-hyperv.c Dexuan Cui 2019-03-04 2145 pci_destroy_slot(hpdev->pci_slot);
340d455699400f drivers/pci/controller/pci-hyperv.c Dexuan Cui 2019-03-04 2146
8c99e120ffcabc drivers/pci/host/pci-hyperv.c Stephen Hemminger 2018-05-23 2147 put_pcichild(hpdev);
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2148 }
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2149
d3a78d8bf759d8 drivers/pci/host/pci-hyperv.c Long Li 2017-03-23 2150 switch (hbus->state) {
d3a78d8bf759d8 drivers/pci/host/pci-hyperv.c Long Li 2017-03-23 2151 case hv_pcibus_installed:
d3a78d8bf759d8 drivers/pci/host/pci-hyperv.c Long Li 2017-03-23 2152 /*
d3a78d8bf759d8 drivers/pci/host/pci-hyperv.c Long Li 2017-03-23 2153 * Tell the core to rescan bus
d3a78d8bf759d8 drivers/pci/host/pci-hyperv.c Long Li 2017-03-23 2154 * because there may have been changes.
d3a78d8bf759d8 drivers/pci/host/pci-hyperv.c Long Li 2017-03-23 2155 */
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2156 pci_lock_rescan_remove();
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2157 pci_scan_child_bus(hbus->pci_bus);
ae685159fb7cdb drivers/pci/controller/pci-hyperv.c Long Li 2020-02-25 2158 hv_pci_assign_numa_node(hbus);
a15f2c08c70811 drivers/pci/controller/pci-hyperv.c Stephen Hemminger 2018-09-14 2159 hv_pci_assign_slots(hbus);
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2160 pci_unlock_rescan_remove();
d3a78d8bf759d8 drivers/pci/host/pci-hyperv.c Long Li 2017-03-23 2161 break;
d3a78d8bf759d8 drivers/pci/host/pci-hyperv.c Long Li 2017-03-23 2162
d3a78d8bf759d8 drivers/pci/host/pci-hyperv.c Long Li 2017-03-23 2163 case hv_pcibus_init:
d3a78d8bf759d8 drivers/pci/host/pci-hyperv.c Long Li 2017-03-23 2164 case hv_pcibus_probed:
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2165 survey_child_resources(hbus);
d3a78d8bf759d8 drivers/pci/host/pci-hyperv.c Long Li 2017-03-23 2166 break;
d3a78d8bf759d8 drivers/pci/host/pci-hyperv.c Long Li 2017-03-23 2167
d3a78d8bf759d8 drivers/pci/host/pci-hyperv.c Long Li 2017-03-23 2168 default:
d3a78d8bf759d8 drivers/pci/host/pci-hyperv.c Long Li 2017-03-23 2169 break;
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2170 }
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2171
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2172 put_hvpcibus(hbus);
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2173 kfree(dr);
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2174 }
4daace0d8ce851 drivers/pci/host/pci-hyperv.c Jake Oshins 2016-02-16 2175
:::::: The code at line 2101 was first introduced by commit
:::::: 4daace0d8ce851f8f8f91563c835e3000c954d5e PCI: hv: Add paravirtual PCI front-end for Microsoft Hyper-V VMs
:::::: TO: Jake Oshins <jakeo@microsoft.com>
:::::: CC: Bjorn Helgaas <bhelgaas@google.com>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
next reply other threads:[~2020-03-05 20:56 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-05 20:56 kbuild test robot [this message]
2020-03-05 23:30 ` [lpieralisi-pci:pci/hv 5/5] drivers/pci/controller/pci-hyperv.c:2101:26: sparse: sparse: incorrect type in assignment (different base types) Dexuan Cui
[not found] <HK0P153MB02738BCFE37BCCB900F0BE71BFE20@HK0P153MB0273.APCP153.PROD.OUTLOOK.COM>
2020-03-06 10:47 ` Lorenzo Pieralisi
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=202003060450.XCFTCBiZ%lkp@intel.com \
--to=lkp@intel.com \
--cc=kbuild-all@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: 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.