mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Luis Henriques <luis.henriques@canonical.com>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org,
	kernel-team@lists.ubuntu.com
Cc: George Spelvin <linux@horizon.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Luis Henriques <luis.henriques@canonical.com>
Subject: [PATCH 046/139] pps: Add pps_lookup_dev() function
Date: Thu, 28 Feb 2013 14:43:16 +0000	[thread overview]
Message-ID: <1362062689-2567-47-git-send-email-luis.henriques@canonical.com> (raw)
In-Reply-To: <1362062689-2567-1-git-send-email-luis.henriques@canonical.com>

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

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

From: George Spelvin <linux@horizon.com>

commit 513b032c98b4b9414aa4e9b4a315cb1bf0380101 upstream.

The PPS serial line discipline wants to attach a PPS device to a tty
without changing the tty code to add a struct pps_device * pointer.

Since the number of PPS devices in a typical system is generally very low
(n=1 is by far the most common), it's practical to search the entire list
of allocated pps devices.  (We capture the timestamp before the lookup,
so the timing isn't affected.)

It is a bit ugly that this function, which is part of the in-kernel
PPS API, has to be in pps.c as opposed to kapi,c, but that's not
something that affects users.

Signed-off-by: George Spelvin <linux@horizon.com>
Acked-by: Rodolfo Giometti <giometti@enneenne.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
---
 drivers/pps/pps.c          | 33 +++++++++++++++++++++++++++++++++
 include/linux/pps_kernel.h | 17 ++++++++++++++---
 2 files changed, 47 insertions(+), 3 deletions(-)

diff --git a/drivers/pps/pps.c b/drivers/pps/pps.c
index 98fbe62..c50a556 100644
--- a/drivers/pps/pps.c
+++ b/drivers/pps/pps.c
@@ -350,11 +350,44 @@ free_idr:
 
 void pps_unregister_cdev(struct pps_device *pps)
 {
+	pps->lookup_cookie = NULL;
 	device_destroy(pps_class, pps->dev->devt);
 	cdev_del(&pps->cdev);
 }
 
 /*
+ * Look up a pps device by magic cookie.
+ * The cookie is usually a pointer to some enclosing device, but this
+ * code doesn't care; you should never be dereferencing it.
+ *
+ * This is a bit of a kludge that is currently used only by the PPS
+ * serial line discipline.  It may need to be tweaked when a second user
+ * is found.
+ *
+ * There is no function interface for setting the lookup_cookie field.
+ * It's initialized to NULL when the pps device is created, and if a
+ * client wants to use it, just fill it in afterward.
+ *
+ * The cookie is automatically set to NULL in pps_unregister_source()
+ * so that it will not be used again, even if the pps device cannot
+ * be removed from the idr due to pending references holding the minor
+ * number in use.
+ */
+struct pps_device *pps_lookup_dev(void const *cookie)
+{
+	struct pps_device *pps;
+	unsigned id;
+
+	rcu_read_lock();
+	idr_for_each_entry(&pps_idr, pps, id)
+		if (cookie == pps->lookup_cookie)
+			break;
+	rcu_read_unlock();
+	return pps;
+}
+EXPORT_SYMBOL(pps_lookup_dev);
+
+/*
  * Module stuff
  */
 
diff --git a/include/linux/pps_kernel.h b/include/linux/pps_kernel.h
index 9404854..ce2ab3d 100644
--- a/include/linux/pps_kernel.h
+++ b/include/linux/pps_kernel.h
@@ -43,7 +43,7 @@ struct pps_source_info {
 			int event, void *data);	/* PPS echo function */
 
 	struct module *owner;
-	struct device *dev;
+	struct device *dev;		/* Parent device for device_create */
 };
 
 struct pps_event_time {
@@ -69,6 +69,7 @@ struct pps_device {
 	wait_queue_head_t queue;		/* PPS event queue */
 
 	unsigned int id;			/* PPS source unique ID */
+	void const *lookup_cookie;		/* pps_lookup_dev only */
 	struct cdev cdev;
 	struct device *dev;
 	struct fasync_struct *async_queue;	/* fasync method */
@@ -82,16 +83,26 @@ struct pps_device {
 extern struct device_attribute pps_attrs[];
 
 /*
+ * Internal functions.
+ *
+ * These are not actually part of the exported API, but this is a
+ * convenient header file to put them in.
+ */
+
+extern int pps_register_cdev(struct pps_device *pps);
+extern void pps_unregister_cdev(struct pps_device *pps);
+
+/*
  * Exported functions
  */
 
 extern struct pps_device *pps_register_source(
 		struct pps_source_info *info, int default_params);
 extern void pps_unregister_source(struct pps_device *pps);
-extern int pps_register_cdev(struct pps_device *pps);
-extern void pps_unregister_cdev(struct pps_device *pps);
 extern void pps_event(struct pps_device *pps,
 		struct pps_event_time *ts, int event, void *data);
+/* Look up a pps device by magic cookie */
+struct pps_device *pps_lookup_dev(void const *cookie);
 
 static inline void timespec_to_pps_ktime(struct pps_ktime *kt,
 		struct timespec ts)
-- 
1.8.1.2


  parent reply	other threads:[~2013-02-28 14:47 UTC|newest]

Thread overview: 140+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-02-28 14:42 [ 3.5.y.z extended stable ] Linux 3.5.7.7 stable review Luis Henriques
2013-02-28 14:42 ` [PATCH 001/139] genirq: Avoid deadlock in spurious handling Luis Henriques
2013-02-28 14:42 ` [PATCH 002/139] KVM: s390: Handle hosts not supporting s390-virtio Luis Henriques
2013-02-28 14:42 ` [PATCH 003/139] rc: unlock on error in show_protocols() Luis Henriques
2013-02-28 14:42 ` [PATCH 004/139] v4l: Reset subdev v4l2_dev field to NULL if registration fails Luis Henriques
2013-02-28 14:42 ` [PATCH 005/139] powerpc/eeh: Fix crash when adding a device in a slot with DDW Luis Henriques
2013-02-28 14:42 ` [PATCH 006/139] pcmcia/vrc4171: Add missing spinlock init Luis Henriques
2013-02-28 14:42 ` [PATCH 007/139] USB: DWC3: Generate interrupt on each TRB as default option Luis Henriques
2013-02-28 14:42 ` [PATCH 008/139] usb: dwc3: gadget: fix skip LINK_TRB on ISOC Luis Henriques
2013-02-28 14:42 ` [PATCH 009/139] usb: dwc3: gadget: req->queued must be forced to false in cleanup Luis Henriques
2013-02-28 14:42 ` [PATCH 010/139] Purge existing TLB entries in set_pte_at and ptep_set_wrprotect Luis Henriques
2013-02-28 14:42 ` [PATCH 011/139] ARM: PXA3xx: program the CSMSADRCFG register Luis Henriques
2013-02-28 14:42 ` [PATCH 012/139] ab8500-chargalg: Only root should have write permission on sysfs file Luis Henriques
2013-02-28 14:42 ` [PATCH 013/139] USB: option: add and update Alcatel modems Luis Henriques
2013-02-28 14:42 ` [PATCH 014/139] uprobes/powerpc: Add dependency on single step emulation Luis Henriques
2013-02-28 14:42 ` [PATCH 015/139] drivers/video: fsl-diu-fb: fix pixel formats for 24 and 16 bpp Luis Henriques
2013-02-28 14:42 ` [PATCH 016/139] s390/kvm: Fix store status for ACRS/FPRS Luis Henriques
2013-02-28 14:42 ` [PATCH 017/139] staging: comedi: disallow COMEDI_DEVCONFIG on non-board minors Luis Henriques
2013-02-28 14:42 ` [PATCH 018/139] tty: Prevent deadlock in n_gsm driver Luis Henriques
2013-02-28 14:42 ` [PATCH 019/139] ALSA: usb-audio: fix Roland A-PRO support Luis Henriques
2013-02-28 14:42 ` [PATCH 020/139] x86-32, mm: Rip out x86_32 NUMA remapping code Luis Henriques
2013-02-28 14:42 ` [PATCH 021/139] x86-32, mm: Remove reference to resume_map_numa_kva() Luis Henriques
2013-02-28 14:42 ` [PATCH 022/139] x86-32, mm: Remove reference to alloc_remap() Luis Henriques
2013-02-28 14:42 ` [PATCH 023/139] ALSA: hda - Release assigned pin/cvt at error path of hdmi_pcm_open() Luis Henriques
2013-02-28 14:42 ` [PATCH 024/139] ab8500_btemp: Demote initcall sequence Luis Henriques
2013-02-28 14:42 ` [PATCH 025/139] Driver core: treat unregistered bus_types as having no devices Luis Henriques
2013-02-28 14:42 ` [PATCH 026/139] ALSA: aloop: Fix Oops while PM resume Luis Henriques
2013-02-28 14:42 ` [PATCH 027/139] ASoC: wm2200: correct IN2L and IN3L digital mute Luis Henriques
2013-02-28 14:42 ` [PATCH 028/139] tty: set_termios/set_termiox should not return -EINTR Luis Henriques
2013-02-28 14:42 ` [PATCH 029/139] ARM: i.MX25: clk: parent per5_clk to AHB clock Luis Henriques
2013-02-28 14:43 ` [PATCH 030/139] hrtimer: Prevent hrtimer_enqueue_reprogram race Luis Henriques
2013-02-28 14:43 ` [PATCH 031/139] staging: comedi: check s->async for poll(), read() and write() Luis Henriques
2013-02-28 14:43 ` [PATCH 032/139] ACPI: Add DMI entry for Sony VGN-FW41E_H Luis Henriques
2013-02-28 14:43 ` [PATCH 033/139] timeconst.pl: Eliminate Perl warning Luis Henriques
2013-02-28 14:43 ` [PATCH 034/139] p54usb: corrected USB ID for T-Com Sinus 154 data II Luis Henriques
2013-02-28 14:43 ` [PATCH 035/139] rtlwifi: rtl8192cu: Fix NULL dereference BUG when using new_id Luis Henriques
2013-02-28 14:43 ` [PATCH 036/139] rtlwifi: rtl8192cu: Add new USB ID Luis Henriques
2013-02-28 14:43 ` [PATCH 037/139] USB: storage: properly handle the endian issues of idProduct Luis Henriques
2013-02-28 14:43 ` [PATCH 038/139] ALSA: rme32.c irq enabling after spin_lock_irq Luis Henriques
2013-02-28 14:43 ` [PATCH 039/139] ALSA: ali5451: remove irq enabling in pointer callback Luis Henriques
2013-02-28 14:43 ` [PATCH 040/139] ARM: 7643/1: sched: correct update_sched_clock() Luis Henriques
2013-02-28 14:43 ` [PATCH 041/139] ALSA: hda - Workaround for silent output on Sony Vaio VGC-LN51JGB with ALC889 Luis Henriques
2013-02-28 14:43 ` [PATCH 042/139] x86: Hyper-V: register clocksource only if its advertised Luis Henriques
2013-02-28 14:43 ` [PATCH 043/139] USB: option: add Yota / Megafon M100-1 4g modem Luis Henriques
2013-02-28 14:43 ` [PATCH 044/139] USB: serial: fix null-pointer dereferences on disconnect Luis Henriques
2013-02-28 14:43 ` [PATCH 045/139] idr: idr_for_each_entry() macro Luis Henriques
2013-02-28 14:43 ` Luis Henriques [this message]
2013-02-28 14:43 ` [PATCH 047/139] pps: Use pps_lookup_dev to reduce ldisc coupling Luis Henriques
2013-02-28 14:43 ` [PATCH 048/139] pps: Fix a use-after free bug when unregistering a source Luis Henriques
2013-02-28 14:43 ` [PATCH 049/139] USB: option: add Huawei "ACM" devices using protocol = vendor Luis Henriques
2013-02-28 14:43 ` [PATCH 050/139] ARM: samsung: fix assembly syntax for new gas Luis Henriques
2013-02-28 14:43 ` [PATCH 051/139] USB: ehci-omap: Don't free gpios that we didn't request Luis Henriques
2013-02-28 14:43 ` [PATCH 052/139] USB: ehci-omap: Fix autoloading of module Luis Henriques
2013-02-28 14:43 ` [PATCH 053/139] USB: usb-storage: unusual_devs update for Super TOP SATA bridge Luis Henriques
2013-02-28 14:43 ` [PATCH 054/139] perf tools: Fix build with bison 2.3 and older Luis Henriques
2013-02-28 14:43 ` [PATCH 055/139] serial: imx: Fix recursive locking bug Luis Henriques
2013-02-28 14:43 ` [PATCH 056/139] posix-cpu-timers: Fix nanosleep task_struct leak Luis Henriques
2013-02-28 14:43 ` [PATCH 057/139] drivercore: Fix ordering between deferred_probe and exiting initcalls Luis Henriques
2013-02-28 14:43 ` [PATCH 058/139] NFSv4.1: Don't decode skipped layoutgets Luis Henriques
2013-02-28 14:43 ` [PATCH 059/139] umount oops when remove blocklayoutdriver first Luis Henriques
2013-02-28 14:43 ` [PATCH 060/139] HID: wiimote: fix nunchuck button parser Luis Henriques
2013-02-28 14:43 ` [PATCH 061/139] cgroup: fix exit() vs rmdir() race Luis Henriques
2013-02-28 14:43 ` [PATCH 062/139] cpuset: fix cpuset_print_task_mems_allowed() vs rename() race Luis Henriques
2013-02-28 14:43 ` [PATCH 063/139] rtlwifi: usb: allocate URB control message setup_packet and data buffer separately Luis Henriques
2013-02-28 14:43 ` [PATCH 064/139] b43: Increase number of RX DMA slots Luis Henriques
2013-02-28 14:43 ` [PATCH 065/139] futex: Revert "futex: Mark get_robust_list as deprecated" Luis Henriques
2013-02-28 14:43 ` [PATCH 066/139] NLM: Ensure that we resend all pending blocking locks after a reclaim Luis Henriques
2013-02-28 14:43 ` [PATCH 067/139] ALSA: hda - hdmi: ELD shouldn't be valid after unplug Luis Henriques
2013-02-28 14:43 ` [PATCH 068/139] xen: close evtchn port if binding to irq fails Luis Henriques
2013-02-28 14:43 ` [PATCH 069/139] xen: Send spinlock IPI to all waiters Luis Henriques
2013-02-28 14:43 ` [PATCH 070/139] ALSA: usb: Fix Processing Unit Descriptor parsers Luis Henriques
2013-02-28 14:43 ` [PATCH 071/139] inotify: remove broken mask checks causing unmount to be EINVAL Luis Henriques
2013-02-28 14:43 ` [PATCH 072/139] fs/block_dev.c: page cache wrongly left invalidated after revalidate_disk() Luis Henriques
2013-02-28 14:43 ` [PATCH 073/139] ocfs2: unlock super lock if lockres refresh failed Luis Henriques
2013-02-28 14:43 ` [PATCH 074/139] drivers/video/backlight/adp88?0_bl.c: fix resume Luis Henriques
2013-02-28 14:43 ` [PATCH 075/139] powerpc/kexec: Disable hard IRQ before kexec Luis Henriques
2013-02-28 14:43 ` [PATCH 076/139] mm: mmu_notifier: have mmu_notifiers use a global SRCU so they may safely schedule Luis Henriques
2013-02-28 14:43 ` [PATCH 077/139] mm: mmu_notifier: make the mmu_notifier srcu static Luis Henriques
2013-02-28 14:43 ` [PATCH 078/139] mmu_notifier_unregister NULL Pointer deref and multiple ->release() callouts Luis Henriques
2013-02-28 14:43 ` [PATCH 079/139] mm/fadvise.c: drain all pagevecs if POSIX_FADV_DONTNEED fails to discard all pages Luis Henriques
2013-02-28 14:43 ` [PATCH 080/139] tmpfs: fix use-after-free of mempolicy object Luis Henriques
2013-02-28 14:43 ` [PATCH 081/139] dca: check against empty dca_domains list before unregister provider Luis Henriques
2013-02-28 14:43 ` [PATCH 082/139] ext4: return ENOMEM if sb_getblk() fails Luis Henriques
2013-02-28 14:43 ` [PATCH 083/139] ext4: check bh in ext4_read_block_bitmap() Luis Henriques
2013-02-28 14:43 ` [PATCH 084/139] quota: autoload the quota_v2 module for QFMT_VFS_V1 quota format Luis Henriques
2013-02-28 14:43 ` [PATCH 085/139] ext4: fix possible use-after-free with AIO Luis Henriques
2013-02-28 14:43 ` [PATCH 086/139] drm/i915: Fix CAGF for HSW Luis Henriques
2013-02-28 14:43 ` [PATCH 087/139] ext4: fix race in ext4_mb_add_n_trim() Luis Henriques
2013-02-28 14:43 ` [PATCH 088/139] UBIFS: fix use of freed ubifs_orphan objects Luis Henriques
2013-02-28 14:43 ` [PATCH 089/139] UBIFS: fix double free of " Luis Henriques
2013-02-28 14:44 ` [PATCH 090/139] drm/radeon/dce6: fix display powergating Luis Henriques
2013-02-28 14:44 ` [PATCH 091/139] vgacon/vt: clear buffer attributes when we load a 512 character font (v2) Luis Henriques
2013-02-28 14:44 ` [PATCH 092/139] fbcon: don't lose the console font across generic->chip driver switch Luis Henriques
2013-02-28 14:44 ` [PATCH 093/139] drm/usb: bind driver to correct device Luis Henriques
2013-02-28 14:44 ` [PATCH 094/139] drm/udl: make usage as a console safer Luis Henriques
2013-02-28 14:44 ` [PATCH 095/139] drm/udl: disable fb_defio by default Luis Henriques
2013-02-28 14:44 ` [PATCH 096/139] fb: rework locking to fix lock ordering on takeover Luis Henriques
2013-02-28 14:44 ` [PATCH 097/139] fb: Yet another band-aid for fixing lockdep mess Luis Henriques
2013-02-28 14:44 ` [PATCH 098/139] Revert "drm: Add EDID_QUIRK_FORCE_REDUCED_BLANKING for ASUS VW222S" Luis Henriques
2013-02-28 14:44 ` [PATCH 099/139] ext4: fix xattr block allocation/release with bigalloc Luis Henriques
2013-02-28 14:44 ` [PATCH 100/139] target: Fix lookup of dynamic NodeACLs during cached demo-mode operation Luis Henriques
2013-02-28 14:44 ` [PATCH 101/139] target: Add missing mapped_lun bounds checking during make_mappedlun setup Luis Henriques
2013-02-28 14:44 ` [PATCH 102/139] ftrace: Call ftrace cleanup module notifier after all other notifiers Luis Henriques
2013-02-28 14:44 ` [PATCH 103/139] drm: don't add inferred modes for monitors that don't support them Luis Henriques
2013-02-28 14:44 ` [PATCH 104/139] drm/i915: disable shared panel fitter for pipe Luis Henriques
2013-02-28 14:44 ` [PATCH 105/139] drm: Fill depth/bits_per_pixel for C8 format Luis Henriques
2013-02-28 14:44 ` [PATCH 106/139] drm: Use C8 instead of RGB332 when determining the format from depth/bpp Luis Henriques
2013-02-28 14:44 ` [PATCH 107/139] drm/i915: add missing \n to UTS_RELEASE in the error_state Luis Henriques
2013-02-28 14:44 ` [PATCH 108/139] drm/i915: Set i9xx sdvo clock limits according to specifications Luis Henriques
2013-02-28 14:44 ` [PATCH 109/139] drm/i915: inverted brightness quirk for Acer Aspire 4736Z Luis Henriques
2013-02-28 14:44 ` [PATCH 110/139] intel/iommu: force writebuffer-flush quirk on Gen 4 Chipsets Luis Henriques
2013-02-28 14:44 ` [PATCH 111/139] drm/radeon: remove overzealous warning in hdmi handling Luis Henriques
2013-02-28 14:44 ` [PATCH 112/139] x86, efi: Make "noefi" really disable EFI runtime serivces Luis Henriques
2013-02-28 14:44 ` [PATCH 113/139] posix-timer: Don't call idr_find() with out-of-range ID Luis Henriques
2013-02-28 14:44 ` [PATCH 114/139] ext4: fix free clusters calculation in bigalloc filesystem Luis Henriques
2013-02-28 14:44 ` [PATCH 115/139] fs: Fix possible use-after-free with AIO Luis Henriques
2013-02-28 14:44 ` [PATCH 116/139] mmc: sdhci-esdhc-imx: fix host version read Luis Henriques
2013-02-28 14:44 ` [PATCH 117/139] b43: Fix lockdep splat on module unload Luis Henriques
2013-02-28 14:44 ` [PATCH 118/139] ocfs2: fix possible use-after-free with AIO Luis Henriques
2013-02-28 14:44 ` [PATCH 119/139] x86/xen: don't assume %ds is usable in xen_iret for 32-bit PVOPS Luis Henriques
2013-02-28 14:44 ` [PATCH 120/139] igb: Remove artificial restriction on RQDPC stat reading Luis Henriques
2013-02-28 14:44 ` [PATCH 121/139] ptrace/x86: Introduce set_task_blockstep() helper Luis Henriques
2013-02-28 14:44 ` [PATCH 122/139] ptrace/x86: Partly fix set_task_blockstep()->update_debugctlmsr() logic Luis Henriques
2013-02-28 14:44 ` [PATCH 123/139] sunvdc: Fix off-by-one in generic_request() Luis Henriques
2013-02-28 14:44 ` [PATCH 124/139] sparc64: Fix gfp_flags setting in tsb_grow() Luis Henriques
2013-02-28 14:44 ` [PATCH 125/139] xen-pciback: rate limit error messages from xen_pcibk_enable_msi{,x}() Luis Henriques
2013-02-28 14:44 ` [PATCH 126/139] bridge: set priority of STP packets Luis Henriques
2013-02-28 14:44 ` [PATCH 127/139] xen-netback: correctly return errors from netbk_count_requests() Luis Henriques
2013-02-28 14:44 ` [PATCH 128/139] xen-netback: cancel the credit timer when taking the vif down Luis Henriques
2013-02-28 14:44 ` [PATCH 129/139] net: fix a compile error when SOCK_REFCNT_DEBUG is enabled Luis Henriques
2013-02-28 14:44 ` [PATCH 130/139] ipv4: fix a bug in ping_err() Luis Henriques
2013-02-28 14:44 ` [PATCH 131/139] ipv6: use a stronger hash for tcp Luis Henriques
2013-02-28 14:44 ` [PATCH 132/139] sock_diag: Fix out-of-bounds access to sock_diag_handlers[] Luis Henriques
2013-02-28 14:44 ` [PATCH 133/139] ARM: 7635/1: versatile: fix the PCI IRQ regression Luis Henriques
2013-02-28 14:44 ` [PATCH 134/139] net: fix infinite loop in __skb_recv_datagram() Luis Henriques
2013-02-28 14:44 ` [PATCH 135/139] staging: vt6656: Fix URB submitted while active warning Luis Henriques
2013-02-28 14:44 ` [PATCH 136/139] vlan: adjust vlan_set_encap_proto() for its callers Luis Henriques
2013-02-28 14:44 ` [PATCH 137/139] gpio/ich: Add missing spinlock init Luis Henriques
2013-02-28 14:44 ` [PATCH 138/139] staging: comedi: ni_labpc: set up command4 register *after* command3 Luis Henriques
2013-02-28 14:44 ` [PATCH 139/139] staging: comedi: ni_labpc: correct differential channel sequence for AI commands Luis Henriques

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=1362062689-2567-47-git-send-email-luis.henriques@canonical.com \
    --to=luis.henriques@canonical.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=kernel-team@lists.ubuntu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@horizon.com \
    --cc=stable@vger.kernel.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

all inboxes | Powered by JetHome®