stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, Rajat Jain <rajatja@google.com>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Ulf Hansson <ulf.hansson@linaro.org>
Subject: [PATCH 4.19 019/110] mmc: sdhci-pci: Try "cd" for card-detect lookup before using NULL
Date: Thu, 29 Nov 2018 15:11:50 +0100	[thread overview]
Message-ID: <20181129135922.029116103@linuxfoundation.org> (raw)
In-Reply-To: <20181129135921.231283053@linuxfoundation.org>

4.19-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Rajat Jain <rajatja@google.com>

commit cdcefe6bd9df754f528ffc339d3cc143cea4ddf6 upstream.

Problem:

The card detect IRQ does not work with modern BIOS (that want
to use _DSD to provide the card detect GPIO to the driver).

Details:

The mmc core provides the mmc_gpiod_request_cd() API to let host drivers
request the gpio descriptor for the "card detect" pin.
This pin is specified in the ACPI for the SDHC device:

 * Either as a resource using _CRS. This is a method used by legacy BIOS.
   (The driver needs to tell which resource index).

 * Or as a named property ("cd-gpios"/"cd-gpio") in _DSD (which internally
   points to an entry in _CRS). This way, the driver can lookup using a
   string. This is what modern BIOS prefer to use.

This API finally results in a call to the following code:

struct gpio_desc *acpi_find_gpio(..., const char *con_id,...)
{
...
   /* Lookup gpio (using "<con_id>-gpio") in the _DSD */
...
   if (!acpi_can_fallback_to_crs(adev, con_id))
          return ERR_PTR(-ENOENT);
...
   /* Falling back to _CRS is allowed, Lookup gpio in the _CRS */
...
}

Note that this means that if the ACPI has _DSD properties, the kernel
will never use _CRS for the lookup (Because acpi_can_fallback_to_crs()
will always be false for any device hat has _DSD entries).

The SDHCI driver is thus currently broken on a modern BIOS, even if
BIOS provides both _CRS (for index based lookup) and _DSD entries (for
string based lookup). Ironically, none of these will be used for the
lookup currently because:

* Since the con_id is NULL, acpi_find_gpio() does not find a matching
  entry in DSDT. (The _DSDT entry has the property name = "cd-gpios")

* Because ACPI contains DSDT entries, thus acpi_can_fallback_to_crs()
  returns false (because device properties have been populated from
  _DSD), thus the _CRS is never used for the lookup.

Fix:

Try "cd" for lookup in the _DSD before falling back to using NULL so
as to try looking up in the _CRS.

I've tested this patch successfully with both Legacy BIOS (that
provide only _CRS method) as well as modern BIOS (that provide both
_CRS and _DSD). Also the use of "cd" appears to be fairly consistent
across other users of this API (other MMC host controller drivers).

Link: https://lkml.org/lkml/2018/9/25/1113
Signed-off-by: Rajat Jain <rajatja@google.com>
Acked-by: Adrian Hunter <adrian.hunter@intel.com>
Fixes: f10e4bf6632b ("gpio: acpi: Even more tighten up ACPI GPIO lookups")
Cc: stable@vger.kernel.org
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/mmc/host/sdhci-pci-core.c |    7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

--- a/drivers/mmc/host/sdhci-pci-core.c
+++ b/drivers/mmc/host/sdhci-pci-core.c
@@ -1762,8 +1762,13 @@ static struct sdhci_pci_slot *sdhci_pci_
 		device_init_wakeup(&pdev->dev, true);
 
 	if (slot->cd_idx >= 0) {
-		ret = mmc_gpiod_request_cd(host->mmc, NULL, slot->cd_idx,
+		ret = mmc_gpiod_request_cd(host->mmc, "cd", slot->cd_idx,
 					   slot->cd_override_level, 0, NULL);
+		if (ret && ret != -EPROBE_DEFER)
+			ret = mmc_gpiod_request_cd(host->mmc, NULL,
+						   slot->cd_idx,
+						   slot->cd_override_level,
+						   0, NULL);
 		if (ret == -EPROBE_DEFER)
 			goto remove;
 

  parent reply	other threads:[~2018-11-30  1:35 UTC|newest]

Thread overview: 143+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-29 14:11 [PATCH 4.19 000/110] 4.19.6-stable review Greg Kroah-Hartman
2018-11-29 14:11 ` [PATCH 4.19 001/110] HID: steam: remove input device when a hid client is running Greg Kroah-Hartman
2018-11-29 14:11 ` [PATCH 4.19 002/110] efi/libstub: arm: support building with clang Greg Kroah-Hartman
2018-11-29 14:11 ` [PATCH 4.19 003/110] usb: core: Fix hub port connection events lost Greg Kroah-Hartman
2018-11-29 14:11 ` [PATCH 4.19 004/110] usb: dwc3: gadget: fix ISOC TRB type on unaligned transfers Greg Kroah-Hartman
2018-11-29 14:11 ` [PATCH 4.19 005/110] usb: dwc3: gadget: Properly check last unaligned/zero chain TRB Greg Kroah-Hartman
2018-11-29 14:11 ` [PATCH 4.19 006/110] usb: dwc3: core: Clean up ULPI device Greg Kroah-Hartman
2018-11-29 14:11 ` [PATCH 4.19 007/110] usb: dwc3: Fix NULL pointer exception in dwc3_pci_remove() Greg Kroah-Hartman
2018-11-29 14:11 ` [PATCH 4.19 008/110] xhci: Fix leaking USB3 shared_hcd at xhci removal Greg Kroah-Hartman
2018-11-29 14:11 ` [PATCH 4.19 009/110] xhci: handle port status events for removed USB3 hcd Greg Kroah-Hartman
2018-11-29 14:11 ` [PATCH 4.19 010/110] xhci: Add check for invalid byte size error when UAS devices are connected Greg Kroah-Hartman
2018-11-29 14:11 ` [PATCH 4.19 011/110] usb: xhci: fix uninitialized completion when USB3 port got wrong status Greg Kroah-Hartman
2018-11-29 14:11 ` [PATCH 4.19 012/110] usb: xhci: fix timeout for transition from RExit to U0 Greg Kroah-Hartman
2018-11-29 14:11 ` [PATCH 4.19 013/110] xhci: Add quirk to workaround the errata seen on Cavium Thunder-X2 Soc Greg Kroah-Hartman
2018-11-29 14:11 ` [PATCH 4.19 014/110] usb: xhci: Prevent bus suspend if a port connect change or polling state is detected Greg Kroah-Hartman
2018-12-11 10:51   ` Thomas Zeitlhofer
2018-12-12 22:53   ` Thomas Zeitlhofer
2018-12-13  7:36     ` Greg Kroah-Hartman
2018-12-13 12:24       ` Mathias Nyman
2018-12-13 20:53         ` Thomas Zeitlhofer
2018-11-29 14:11 ` [PATCH 4.19 015/110] ALSA: oss: Use kvzalloc() for local buffer allocations Greg Kroah-Hartman
2018-11-29 14:11 ` [PATCH 4.19 016/110] MAINTAINERS: Add Sasha as a stable branch maintainer Greg Kroah-Hartman
2018-11-29 14:11 ` [PATCH 4.19 017/110] Documentation/security-bugs: Clarify treatment of embargoed information Greg Kroah-Hartman
2018-11-29 14:11 ` [PATCH 4.19 018/110] Documentation/security-bugs: Postpone fix publication in exceptional cases Greg Kroah-Hartman
2018-11-29 14:11 ` Greg Kroah-Hartman [this message]
2018-11-29 14:11 ` [PATCH 4.19 020/110] mmc: sdhci-pci: Workaround GLK firmware failing to restore the tuning value Greg Kroah-Hartman
2018-11-29 14:11 ` [PATCH 4.19 021/110] gpio: dont free unallocated ida on gpiochip_add_data_with_key() error path Greg Kroah-Hartman
2018-11-29 14:11 ` [PATCH 4.19 022/110] iwlwifi: fix wrong WGDS_WIFI_DATA_SIZE Greg Kroah-Hartman
2018-11-29 14:11 ` [PATCH 4.19 023/110] iwlwifi: mvm: support sta_statistics() even on older firmware Greg Kroah-Hartman
2018-11-29 14:11 ` [PATCH 4.19 024/110] iwlwifi: mvm: fix regulatory domain update when the firmware starts Greg Kroah-Hartman
2018-11-29 14:11 ` [PATCH 4.19 025/110] iwlwifi: mvm: dont use SAR Geo if basic SAR is not used Greg Kroah-Hartman
2018-11-29 14:11 ` [PATCH 4.19 026/110] brcmfmac: fix reporting support for 160 MHz channels Greg Kroah-Hartman
2018-11-29 14:11 ` [PATCH 4.19 027/110] opp: ti-opp-supply: Dynamically update u_volt_min Greg Kroah-Hartman
2018-11-29 14:11 ` [PATCH 4.19 028/110] opp: ti-opp-supply: Correct the supply in _get_optimal_vdd_voltage call Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 029/110] tools/power/cpupower: fix compilation with STATIC=true Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 030/110] v9fs_dir_readdir: fix double-free on p9stat_read error Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 031/110] selinux: Add __GFP_NOWARN to allocation at str_read() Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 032/110] Input: synaptics - avoid using uninitialized variable when probing Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 033/110] bfs: add sanity check at bfs_fill_super() Greg Kroah-Hartman
2018-11-29 15:23   ` Tigran Aivazian
2018-11-29 16:07     ` Greg KH
2018-11-29 16:55       ` Tigran Aivazian
2018-11-29 17:10         ` Greg KH
2018-11-29 17:31           ` Tigran Aivazian
2018-12-02 18:57             ` [PATCH 4.19.6] BFS: static inode bitmap and extra sanity checking Tigran Aivazian
2018-12-02 20:13               ` Greg KH
2018-12-02 20:21                 ` Tigran Aivazian
2018-12-03  6:47                   ` Greg KH
2018-12-02 20:19               ` Sasha Levin
2018-11-29 14:12 ` [PATCH 4.19 034/110] sctp: clear the transport of some out_chunk_list chunks in sctp_assoc_rm_peer Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 035/110] gfs2: Dont leave s_fs_info pointing to freed memory in init_sbd Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 036/110] llc: do not use sk_eat_skb() Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 037/110] mm: dont warn about large allocations for slab Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 038/110] mm/memory.c: recheck page table entry with page table lock held Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 039/110] tcp: do not release socket ownership in tcp_close() Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 040/110] drm/fb-helper: Blacklist writeback when adding connectors to fbdev Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 041/110] drm/amdgpu: Add missing firmware entry for HAINAN Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 042/110] drm/vc4: Set ->legacy_cursor_update to false when doing non-async updates Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 043/110] drm/amdgpu: Fix oops when pp_funcs->switch_power_profile is unset Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 044/110] drm/i915: Disable LP3 watermarks on all SNB machines Greg Kroah-Hartman
2018-12-05 21:39   ` Ville Syrjälä
2018-12-06  7:28     ` Greg Kroah-Hartman
2018-12-07 17:01       ` Ville Syrjälä
2018-12-11 14:04         ` Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 045/110] drm/ast: change resolution may cause screen blurred Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 046/110] drm/ast: fixed cursor may disappear sometimes Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 047/110] drm/ast: Remove existing framebuffers before loading driver Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 048/110] can: flexcan: Unlock the MB unconditionally Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 049/110] can: dev: can_get_echo_skb(): factor out non sending code to __can_get_echo_skb() Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 050/110] can: dev: __can_get_echo_skb(): replace struct can_frame by canfd_frame to access frame length Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 051/110] can: dev: __can_get_echo_skb(): Dont crash the kernel if can_priv::echo_skb is accessed out of bounds Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 052/110] can: dev: __can_get_echo_skb(): print error message, if trying to echo non existing skb Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 053/110] can: rx-offload: introduce can_rx_offload_get_echo_skb() and can_rx_offload_queue_sorted() functions Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 054/110] can: rx-offload: rename can_rx_offload_irq_queue_err_skb() to can_rx_offload_queue_tail() Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 055/110] can: flexcan: use can_rx_offload_queue_sorted() for flexcan_irq_bus_*() Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 056/110] can: flexcan: handle tx-complete CAN frames via rx-offload infrastructure Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 057/110] can: raw: check for CAN FD capable netdev in raw_sendmsg() Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 058/110] can: hi311x: Use level-triggered interrupt Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 059/110] can: flexcan: Always use last mailbox for TX Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 060/110] can: flexcan: remove not needed struct flexcan_priv::tx_mb and struct flexcan_priv::tx_mb_idx Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 061/110] ACPICA: AML interpreter: add region addresses in global list during initialization Greg Kroah-Hartman
2018-12-14 17:03   ` Jeremy Cline
2018-12-14 17:42     ` Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 062/110] IB/hfi1: Eliminate races in the SDMA send error path Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 063/110] fsnotify: generalize handling of extra event flags Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 064/110] fanotify: fix handling of events on child sub-directory Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 065/110] pinctrl: meson: fix pinconf bias disable Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 066/110] pinctrl: meson: fix gxbb ao pull register bits Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 067/110] pinctrl: meson: fix gxl " Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 068/110] pinctrl: meson: fix meson8 " Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 069/110] pinctrl: meson: fix meson8b " Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 070/110] tools/testing/nvdimm: Fix the array size for dimm devices Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 071/110] scsi: lpfc: fix remoteport access Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 072/110] scsi: hisi_sas: Remove set but not used variable dq_list Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 073/110] KVM: PPC: Move and undef TRACE_INCLUDE_PATH/FILE Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 074/110] cpufreq: imx6q: add return value check for voltage scale Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 075/110] rtc: cmos: Do not export alarm rtc_ops when we do not support alarms Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 076/110] rtc: pcf2127: fix a kmemleak caused in pcf2127_i2c_gather_write Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 077/110] crypto: simd - correctly take reqsize of wrapped skcipher into account Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 078/110] floppy: fix race condition in __floppy_read_block_0() Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 079/110] powerpc/io: Fix the IO workarounds code to work with Radix Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 080/110] sched/fair: Fix cpu_util_wake() for execl type workloads Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 081/110] perf/x86/intel/uncore: Add more IMC PCI IDs for KabyLake and CoffeeLake CPUs Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 082/110] ARM: make lookup_processor_type() non-__init Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 083/110] ARM: clean up per-processor check_bugs method call Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 084/110] ARM: add PROC_VTABLE and PROC_TABLE macros Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 085/110] ARM: spectre-v2: per-CPU vtables to work around big.Little systems Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 086/110] block: copy ioprio in __bio_clone_fast() and bounce Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 087/110] SUNRPC: Fix a bogus get/put in generic_key_to_expire() Greg Kroah-Hartman
2018-11-29 14:12 ` [PATCH 4.19 088/110] riscv: add missing vdso_install target Greg Kroah-Hartman
2018-11-29 14:13 ` [PATCH 4.19 089/110] RISC-V: Silence some module warnings on 32-bit Greg Kroah-Hartman
2018-11-29 14:13 ` [PATCH 4.19 090/110] drm/amdgpu: fix bug with IH ring setup Greg Kroah-Hartman
2018-11-29 14:13 ` [PATCH 4.19 091/110] kdb: Use strscpy with destination buffer size Greg Kroah-Hartman
2018-11-29 14:13 ` [PATCH 4.19 092/110] NFSv4: Fix an Oops during delegation callbacks Greg Kroah-Hartman
2018-11-29 14:13 ` [PATCH 4.19 093/110] powerpc/numa: Suppress "VPHN is not supported" messages Greg Kroah-Hartman
2018-11-29 14:13 ` [PATCH 4.19 094/110] efi/arm: Revert deferred unmap of early memmap mapping Greg Kroah-Hartman
2018-11-29 14:13 ` [PATCH 4.19 095/110] z3fold: fix possible reclaim races Greg Kroah-Hartman
2018-11-29 14:13 ` [PATCH 4.19 096/110] mm, memory_hotplug: check zone_movable in has_unmovable_pages Greg Kroah-Hartman
2018-11-29 14:13 ` [PATCH 4.19 097/110] tmpfs: make lseek(SEEK_DATA/SEK_HOLE) return ENXIO with a negative offset Greg Kroah-Hartman
2018-11-29 14:13 ` [PATCH 4.19 098/110] mm, page_alloc: check for max order in hot path Greg Kroah-Hartman
2018-11-29 14:13 ` [PATCH 4.19 099/110] dax: Avoid losing wakeup in dax_lock_mapping_entry Greg Kroah-Hartman
2018-11-29 14:13 ` [PATCH 4.19 100/110] include/linux/pfn_t.h: force ~ to be parsed as an unary operator Greg Kroah-Hartman
2018-11-29 14:13 ` [PATCH 4.19 101/110] tty: wipe buffer Greg Kroah-Hartman
2018-11-29 14:13 ` [PATCH 4.19 102/110] tty: wipe buffer if not echoing data Greg Kroah-Hartman
2018-11-29 14:13 ` [PATCH 4.19 103/110] gfs2: Fix iomap buffer head reference counting bug Greg Kroah-Hartman
2018-11-29 14:13 ` [PATCH 4.19 104/110] rcu: Make need_resched() respond to urgent RCU-QS needs Greg Kroah-Hartman
2018-11-29 14:13 ` [PATCH 4.19 105/110] media: ov5640: Re-work MIPI startup sequence Greg Kroah-Hartman
2018-11-29 14:13 ` [PATCH 4.19 106/110] media: ov5640: Fix timings setup code Greg Kroah-Hartman
2018-11-29 14:13 ` [PATCH 4.19 107/110] media: ov5640: fix exposure regression Greg Kroah-Hartman
2018-11-29 14:13 ` [PATCH 4.19 108/110] media: ov5640: fix auto gain & exposure when changing mode Greg Kroah-Hartman
2018-11-29 14:13 ` [PATCH 4.19 109/110] media: ov5640: fix wrong binning value in exposure calculation Greg Kroah-Hartman
2018-11-29 14:13 ` [PATCH 4.19 110/110] media: ov5640: fix auto controls values when switching to manual mode Greg Kroah-Hartman
2018-11-29 18:11 ` [PATCH 4.19 000/110] 4.19.6-stable review kernelci.org bot
2018-11-29 20:36 ` shuah
2018-11-30  7:15   ` Greg Kroah-Hartman
2018-11-29 22:24 ` Harsh Shandilya
2018-11-30  7:17   ` Greg Kroah-Hartman
2018-11-30 15:06     ` Harsh Shandilya
2018-11-30  8:52 ` Naresh Kamboju
2018-11-30 10:37   ` Greg Kroah-Hartman
2018-11-30 15:29 ` Greg Kroah-Hartman
2018-11-30 22:29 ` Guenter Roeck
2018-12-01  8:23   ` Greg Kroah-Hartman

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=20181129135922.029116103@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=adrian.hunter@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rajatja@google.com \
    --cc=stable@vger.kernel.org \
    --cc=ulf.hansson@linaro.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).