public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Al Viro <viro@ZenIV.linux.org.uk>
To: Jeff Dike <jdike@addtoit.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
	Harvey Harrison <harvey.harrison@gmail.com>,
	Paul Mackerras <paulus@samba.org>, Takashi Iwai <tiwai@suse.de>,
	linux-kernel@vger.kernel.org
Subject: Re: Moving include/asm-* [was: Re: Moving sound/* to drivers/ ?]
Date: Thu, 22 May 2008 06:26:07 +0100	[thread overview]
Message-ID: <20080522052607.GY28946@ZenIV.linux.org.uk> (raw)
In-Reply-To: <20080522042059.GA17173@c2.user-mode-linux.org>

On Thu, May 22, 2008 at 12:20:59AM -0400, Jeff Dike wrote:
> On Wed, May 21, 2008 at 06:29:43PM -0700, Linus Torvalds wrote:
> > > 
> > > What about say, sparc64 that has a lot of #include <asm-sparc/foo.h>
> > 
> > Ahh, I didn't realize people did that.
> > 
> > I assume (but am too lazy to check) that UML probably does something 
> > similar for its arch-specific stuff.
> 
> Not quite - there's the include/asm-um/arch link, which points to
> ../asm-foo and a bunch of #include <asm/arch/foo.h>.  Same idea though.

It's a bit worse, though - there is target-dependent stuff in arch/um/include
*and* in include/asm-um; the latter is done in a very painful way - see
include/asm-um/module-i386.h and include/asm-um/module-x86_64.h, etc. and
logics that creates a symlink for each of those.

Is there any reason why module.h is not simply

#include <sysdep/module.h>

with these suckers sitting in arch/um/include/sysdep-{i386,x86_64}/ resp.?
Something like this:

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 arch/um/Makefile                                   |   17 +----------------
 .../um/include/sysdep-i386/archparam.h             |    0 
 .../um/include/sysdep-i386/elf.h                   |    0 
 .../um/include/sysdep-i386/host_ldt.h              |    0 
 .../um/include/sysdep-i386/module.h                |    0 
 .../um/include/sysdep-i386/processor.h             |    2 +-
 .../um/include/sysdep-i386/ptrace-full.h           |    0 
 .../um/include/sysdep-i386/sigcontext-full.h       |    2 +-
 .../um/include/sysdep-i386/system.h                |    0 
 .../um/include/sysdep-i386/vm-flags.h              |    0 
 .../um/include/sysdep-ppc/archparam.h              |    0 
 .../elf-ppc.h => arch/um/include/sysdep-ppc/elf.h  |    0 
 .../um/include/sysdep-ppc/processor.h              |    0 
 .../um/include/sysdep-ppc/sigcontext-full.h        |    2 +-
 .../um/include/sysdep-ppc/system.h                 |    0 
 .../um/include/sysdep-x86_64/archparam.h           |    0 
 .../um/include/sysdep-x86_64/elf.h                 |    0 
 .../um/include/sysdep-x86_64/host_ldt.h            |    0 
 .../um/include/sysdep-x86_64/module.h              |    0 
 .../um/include/sysdep-x86_64/processor.h           |    0 
 .../um/include/sysdep-x86_64/ptrace-full.h         |    2 +-
 .../um/include/sysdep-x86_64/sigcontext-full.h     |    2 +-
 .../um/include/sysdep-x86_64/system.h              |    0 
 .../um/include/sysdep-x86_64/vm-flags.h            |    0 
 include/asm-um/elf.h                               |    1 +
 include/asm-um/fixmap.h                            |    2 +-
 include/asm-um/hw_irq.h                            |    2 +-
 include/asm-um/ldt.h                               |    2 +-
 include/asm-um/module.h                            |    1 +
 include/asm-um/processor.h                         |    1 +
 include/asm-um/ptrace.h                            |    1 +
 include/asm-um/sigcontext-generic.h                |    6 ------
 include/asm-um/sigcontext.h                        |    1 +
 include/asm-um/string.h                            |    2 +-
 include/asm-um/system.h                            |    1 +
 include/asm-um/vm-flags.h                          |    1 +
 36 files changed, 17 insertions(+), 31 deletions(-)
 rename include/asm-um/archparam-i386.h => arch/um/include/sysdep-i386/archparam.h (100%)
 rename include/asm-um/elf-i386.h => arch/um/include/sysdep-i386/elf.h (100%)
 rename include/asm-um/host_ldt-i386.h => arch/um/include/sysdep-i386/host_ldt.h (100%)
 rename include/asm-um/module-i386.h => arch/um/include/sysdep-i386/module.h (100%)
 rename include/asm-um/processor-i386.h => arch/um/include/sysdep-i386/processor.h (98%)
 rename include/asm-um/ptrace-i386.h => arch/um/include/sysdep-i386/ptrace-full.h (100%)
 rename include/asm-um/sigcontext-i386.h => arch/um/include/sysdep-i386/sigcontext-full.h (66%)
 rename include/asm-um/system-i386.h => arch/um/include/sysdep-i386/system.h (100%)
 rename include/asm-um/vm-flags-i386.h => arch/um/include/sysdep-i386/vm-flags.h (100%)
 rename include/asm-um/archparam-ppc.h => arch/um/include/sysdep-ppc/archparam.h (100%)
 rename include/asm-um/elf-ppc.h => arch/um/include/sysdep-ppc/elf.h (100%)
 rename include/asm-um/processor-ppc.h => arch/um/include/sysdep-ppc/processor.h (100%)
 rename include/asm-um/sigcontext-ppc.h => arch/um/include/sysdep-ppc/sigcontext-full.h (76%)
 rename include/asm-um/system-ppc.h => arch/um/include/sysdep-ppc/system.h (100%)
 rename include/asm-um/archparam-x86_64.h => arch/um/include/sysdep-x86_64/archparam.h (100%)
 rename include/asm-um/elf-x86_64.h => arch/um/include/sysdep-x86_64/elf.h (100%)
 rename include/asm-um/host_ldt-x86_64.h => arch/um/include/sysdep-x86_64/host_ldt.h (100%)
 rename include/asm-um/module-x86_64.h => arch/um/include/sysdep-x86_64/module.h (100%)
 rename include/asm-um/processor-x86_64.h => arch/um/include/sysdep-x86_64/processor.h (100%)
 rename include/asm-um/ptrace-x86_64.h => arch/um/include/sysdep-x86_64/ptrace-full.h (98%)
 rename include/asm-um/sigcontext-x86_64.h => arch/um/include/sysdep-x86_64/sigcontext-full.h (93%)
 rename include/asm-um/system-x86_64.h => arch/um/include/sysdep-x86_64/system.h (100%)
 rename include/asm-um/vm-flags-x86_64.h => arch/um/include/sysdep-x86_64/vm-flags.h (100%)
 create mode 100644 include/asm-um/elf.h
 create mode 100644 include/asm-um/module.h
 create mode 100644 include/asm-um/processor.h
 create mode 100644 include/asm-um/ptrace.h
 delete mode 100644 include/asm-um/sigcontext-generic.h
 create mode 100644 include/asm-um/sigcontext.h
 create mode 100644 include/asm-um/system.h
 create mode 100644 include/asm-um/vm-flags.h

diff --git a/arch/um/Makefile b/arch/um/Makefile
index dbeab15..4dd57c9 100644
--- a/arch/um/Makefile
+++ b/arch/um/Makefile
@@ -18,18 +18,13 @@ core-y			+= $(ARCH_DIR)/kernel/		\
 			   $(ARCH_DIR)/drivers/		\
 			   $(ARCH_DIR)/os-$(OS)/
 
-# Have to precede the include because the included Makefiles reference them.
-SYMLINK_HEADERS := archparam.h system.h sigcontext.h processor.h ptrace.h \
-	module.h vm-flags.h elf.h host_ldt.h
-SYMLINK_HEADERS := $(foreach header,$(SYMLINK_HEADERS),include/asm-um/$(header))
-
 # XXX: The "os" symlink is only used by arch/um/include/os.h, which includes
 # ../os/include/file.h
 #
 # These are cleaned up during mrproper. Please DO NOT fix it again, this is
 # the Correct Thing(tm) to do!
 ARCH_SYMLINKS = include/asm-um/arch $(ARCH_DIR)/include/sysdep $(ARCH_DIR)/os \
-	$(SYMLINK_HEADERS) $(ARCH_DIR)/include/uml-config.h
+	$(ARCH_DIR)/include/uml-config.h
 
 MODE_INCLUDE	+= -I$(srctree)/$(ARCH_DIR)/include/skas
 
@@ -143,16 +138,6 @@ archclean:
 	@find . \( -name '*.bb' -o -name '*.bbg' -o -name '*.da' \
 		-o -name '*.gcov' \) -type f -print | xargs rm -f
 
-$(SYMLINK_HEADERS):
-	@echo '  SYMLINK $@'
-ifneq ($(KBUILD_SRC),)
-	$(Q)mkdir -p $(objtree)/include/asm-um
-	$(Q)ln -fsn $(srctree)/include/asm-um/$(basename $(notdir $@))-$(SUBARCH)$(suffix $@) $@
-else
-	$(Q)cd $(srctree)/$(dir $@) ; \
-	ln -sf $(basename $(notdir $@))-$(SUBARCH)$(suffix $@) $(notdir $@)
-endif
-
 include/asm-um/arch:
 	@echo '  SYMLINK $@'
 ifneq ($(KBUILD_SRC),)
diff --git a/include/asm-um/archparam-i386.h b/arch/um/include/sysdep-i386/archparam.h
similarity index 100%
rename from include/asm-um/archparam-i386.h
rename to arch/um/include/sysdep-i386/archparam.h
diff --git a/include/asm-um/elf-i386.h b/arch/um/include/sysdep-i386/elf.h
similarity index 100%
rename from include/asm-um/elf-i386.h
rename to arch/um/include/sysdep-i386/elf.h
diff --git a/include/asm-um/host_ldt-i386.h b/arch/um/include/sysdep-i386/host_ldt.h
similarity index 100%
rename from include/asm-um/host_ldt-i386.h
rename to arch/um/include/sysdep-i386/host_ldt.h
diff --git a/include/asm-um/module-i386.h b/arch/um/include/sysdep-i386/module.h
similarity index 100%
rename from include/asm-um/module-i386.h
rename to arch/um/include/sysdep-i386/module.h
diff --git a/include/asm-um/processor-i386.h b/arch/um/include/sysdep-i386/processor.h
similarity index 98%
rename from include/asm-um/processor-i386.h
rename to arch/um/include/sysdep-i386/processor.h
index a2b7fe1..64c1978 100644
--- a/include/asm-um/processor-i386.h
+++ b/arch/um/include/sysdep-i386/processor.h
@@ -7,7 +7,7 @@
 #define __UM_PROCESSOR_I386_H
 
 #include "linux/string.h"
-#include "asm/host_ldt.h"
+#include "sysdep/host_ldt.h"
 #include "asm/segment.h"
 
 extern int host_has_cmov;
diff --git a/include/asm-um/ptrace-i386.h b/arch/um/include/sysdep-i386/ptrace-full.h
similarity index 100%
rename from include/asm-um/ptrace-i386.h
rename to arch/um/include/sysdep-i386/ptrace-full.h
diff --git a/include/asm-um/sigcontext-i386.h b/arch/um/include/sysdep-i386/sigcontext-full.h
similarity index 66%
rename from include/asm-um/sigcontext-i386.h
rename to arch/um/include/sysdep-i386/sigcontext-full.h
index b88333f..588d58c 100644
--- a/include/asm-um/sigcontext-i386.h
+++ b/arch/um/include/sysdep-i386/sigcontext-full.h
@@ -1,6 +1,6 @@
 #ifndef __UM_SIGCONTEXT_I386_H
 #define __UM_SIGCONTEXT_I386_H
 
-#include "asm/sigcontext-generic.h"
+#include <asm/arch/sigcontext.h>
 
 #endif
diff --git a/include/asm-um/system-i386.h b/arch/um/include/sysdep-i386/system.h
similarity index 100%
rename from include/asm-um/system-i386.h
rename to arch/um/include/sysdep-i386/system.h
diff --git a/include/asm-um/vm-flags-i386.h b/arch/um/include/sysdep-i386/vm-flags.h
similarity index 100%
rename from include/asm-um/vm-flags-i386.h
rename to arch/um/include/sysdep-i386/vm-flags.h
diff --git a/include/asm-um/archparam-ppc.h b/arch/um/include/sysdep-ppc/archparam.h
similarity index 100%
rename from include/asm-um/archparam-ppc.h
rename to arch/um/include/sysdep-ppc/archparam.h
diff --git a/include/asm-um/elf-ppc.h b/arch/um/include/sysdep-ppc/elf.h
similarity index 100%
rename from include/asm-um/elf-ppc.h
rename to arch/um/include/sysdep-ppc/elf.h
diff --git a/include/asm-um/processor-ppc.h b/arch/um/include/sysdep-ppc/processor.h
similarity index 100%
rename from include/asm-um/processor-ppc.h
rename to arch/um/include/sysdep-ppc/processor.h
diff --git a/include/asm-um/sigcontext-ppc.h b/arch/um/include/sysdep-ppc/sigcontext-full.h
similarity index 76%
rename from include/asm-um/sigcontext-ppc.h
rename to arch/um/include/sysdep-ppc/sigcontext-full.h
index 2467f20..c02555d 100644
--- a/include/asm-um/sigcontext-ppc.h
+++ b/arch/um/include/sysdep-ppc/sigcontext-full.h
@@ -3,7 +3,7 @@
 
 #define pt_regs sys_pt_regs
 
-#include "asm/sigcontext-generic.h"
+#include <asm/arch/sigcontext.h>
 
 #undef pt_regs
 
diff --git a/include/asm-um/system-ppc.h b/arch/um/include/sysdep-ppc/system.h
similarity index 100%
rename from include/asm-um/system-ppc.h
rename to arch/um/include/sysdep-ppc/system.h
diff --git a/include/asm-um/archparam-x86_64.h b/arch/um/include/sysdep-x86_64/archparam.h
similarity index 100%
rename from include/asm-um/archparam-x86_64.h
rename to arch/um/include/sysdep-x86_64/archparam.h
diff --git a/include/asm-um/elf-x86_64.h b/arch/um/include/sysdep-x86_64/elf.h
similarity index 100%
rename from include/asm-um/elf-x86_64.h
rename to arch/um/include/sysdep-x86_64/elf.h
diff --git a/include/asm-um/host_ldt-x86_64.h b/arch/um/include/sysdep-x86_64/host_ldt.h
similarity index 100%
rename from include/asm-um/host_ldt-x86_64.h
rename to arch/um/include/sysdep-x86_64/host_ldt.h
diff --git a/include/asm-um/module-x86_64.h b/arch/um/include/sysdep-x86_64/module.h
similarity index 100%
rename from include/asm-um/module-x86_64.h
rename to arch/um/include/sysdep-x86_64/module.h
diff --git a/include/asm-um/processor-x86_64.h b/arch/um/include/sysdep-x86_64/processor.h
similarity index 100%
rename from include/asm-um/processor-x86_64.h
rename to arch/um/include/sysdep-x86_64/processor.h
diff --git a/include/asm-um/ptrace-x86_64.h b/arch/um/include/sysdep-x86_64/ptrace-full.h
similarity index 98%
rename from include/asm-um/ptrace-x86_64.h
rename to arch/um/include/sysdep-x86_64/ptrace-full.h
index 4c47535..4dacb69 100644
--- a/include/asm-um/ptrace-x86_64.h
+++ b/arch/um/include/sysdep-x86_64/ptrace-full.h
@@ -9,7 +9,7 @@
 
 #include "linux/compiler.h"
 #include "asm/errno.h"
-#include "asm/host_ldt.h"
+#include "sysdep/host_ldt.h"
 
 #define __FRAME_OFFSETS /* Needed to get the R* macros */
 #include "asm/ptrace-generic.h"
diff --git a/include/asm-um/sigcontext-x86_64.h b/arch/um/include/sysdep-x86_64/sigcontext-full.h
similarity index 93%
rename from include/asm-um/sigcontext-x86_64.h
rename to arch/um/include/sysdep-x86_64/sigcontext-full.h
index b600e0b..b8a0d68 100644
--- a/include/asm-um/sigcontext-x86_64.h
+++ b/arch/um/include/sysdep-x86_64/sigcontext-full.h
@@ -6,7 +6,7 @@
 #ifndef __UM_SIGCONTEXT_X86_64_H
 #define __UM_SIGCONTEXT_X86_64_H
 
-#include "asm/sigcontext-generic.h"
+#include <asm/arch/sigcontext.h>
 
 #endif
 
diff --git a/include/asm-um/system-x86_64.h b/arch/um/include/sysdep-x86_64/system.h
similarity index 100%
rename from include/asm-um/system-x86_64.h
rename to arch/um/include/sysdep-x86_64/system.h
diff --git a/include/asm-um/vm-flags-x86_64.h b/arch/um/include/sysdep-x86_64/vm-flags.h
similarity index 100%
rename from include/asm-um/vm-flags-x86_64.h
rename to arch/um/include/sysdep-x86_64/vm-flags.h
diff --git a/include/asm-um/elf.h b/include/asm-um/elf.h
new file mode 100644
index 0000000..8ea111f
--- /dev/null
+++ b/include/asm-um/elf.h
@@ -0,0 +1 @@
+#include <sysdep/elf.h>
diff --git a/include/asm-um/fixmap.h b/include/asm-um/fixmap.h
index 9d2be52..a846653 100644
--- a/include/asm-um/fixmap.h
+++ b/include/asm-um/fixmap.h
@@ -4,7 +4,7 @@
 #include <asm/processor.h>
 #include <asm/system.h>
 #include <asm/kmap_types.h>
-#include <asm/archparam.h>
+#include <sysdep/archparam.h>
 #include <asm/page.h>
 
 /*
diff --git a/include/asm-um/hw_irq.h b/include/asm-um/hw_irq.h
index 1cf84cf..f2feb14 100644
--- a/include/asm-um/hw_irq.h
+++ b/include/asm-um/hw_irq.h
@@ -2,6 +2,6 @@
 #define _ASM_UM_HW_IRQ_H
 
 #include "asm/irq.h"
-#include "asm/archparam.h"
+#include <sysdep/archparam.h>
 
 #endif
diff --git a/include/asm-um/ldt.h b/include/asm-um/ldt.h
index 52af512..a7f999a 100644
--- a/include/asm-um/ldt.h
+++ b/include/asm-um/ldt.h
@@ -9,7 +9,7 @@
 #define __ASM_LDT_H
 
 #include <linux/mutex.h>
-#include "asm/host_ldt.h"
+#include <sysdep/host_ldt.h>
 
 extern void ldt_host_info(void);
 
diff --git a/include/asm-um/module.h b/include/asm-um/module.h
new file mode 100644
index 0000000..4b3bdf0
--- /dev/null
+++ b/include/asm-um/module.h
@@ -0,0 +1 @@
+#include <sysdep/module.h>
diff --git a/include/asm-um/processor.h b/include/asm-um/processor.h
new file mode 100644
index 0000000..476d55f
--- /dev/null
+++ b/include/asm-um/processor.h
@@ -0,0 +1 @@
+#include <sysdep/processor.h>
diff --git a/include/asm-um/ptrace.h b/include/asm-um/ptrace.h
new file mode 100644
index 0000000..8530714
--- /dev/null
+++ b/include/asm-um/ptrace.h
@@ -0,0 +1 @@
+#include <sysdep/ptrace-full.h>
diff --git a/include/asm-um/sigcontext-generic.h b/include/asm-um/sigcontext-generic.h
deleted file mode 100644
index 1645870..0000000
--- a/include/asm-um/sigcontext-generic.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef __UM_SIGCONTEXT_GENERIC_H
-#define __UM_SIGCONTEXT_GENERIC_H
-
-#include "asm/arch/sigcontext.h"
-
-#endif
diff --git a/include/asm-um/sigcontext.h b/include/asm-um/sigcontext.h
new file mode 100644
index 0000000..f05c67e
--- /dev/null
+++ b/include/asm-um/sigcontext.h
@@ -0,0 +1 @@
+#include <sysdep/sigcontext-full.h>
diff --git a/include/asm-um/string.h b/include/asm-um/string.h
index 9a0571f..9ca64af 100644
--- a/include/asm-um/string.h
+++ b/include/asm-um/string.h
@@ -2,6 +2,6 @@
 #define __UM_STRING_H
 
 #include "asm/arch/string.h"
-#include "asm/archparam.h"
+#include <sysdep/archparam.h>
 
 #endif
diff --git a/include/asm-um/system.h b/include/asm-um/system.h
new file mode 100644
index 0000000..ad45077
--- /dev/null
+++ b/include/asm-um/system.h
@@ -0,0 +1 @@
+#include <sysdep/system.h>
diff --git a/include/asm-um/vm-flags.h b/include/asm-um/vm-flags.h
new file mode 100644
index 0000000..dd5a8a6
--- /dev/null
+++ b/include/asm-um/vm-flags.h
@@ -0,0 +1 @@
+#include <sysdep/vm-flags.h>
-- 
1.5.3.GIT


  reply	other threads:[~2008-05-22  5:26 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-05-21 21:20 Moving sound/* to drivers/ ? Takashi Iwai
2008-05-21 21:44 ` Linus Torvalds
2008-05-21 21:54   ` Sam Ravnborg
2008-05-21 21:58   ` [alsa-devel] " Rene Herman
2008-05-21 22:08     ` Rene Herman
2008-05-21 23:21   ` Moving include/asm-* [was: Re: Moving sound/* to drivers/ ?] Paul Mackerras
2008-05-21 23:51     ` Linus Torvalds
2008-05-22  0:56       ` Al Viro
2008-05-22  1:20         ` Linus Torvalds
2008-05-22  1:23           ` Moving include/asm-* David Miller
2008-05-22  8:09             ` Andreas Schwab
2008-05-22 16:12               ` David Miller
2008-05-22 16:32                 ` Andreas Schwab
2008-05-22 17:43                   ` David Miller
2008-05-22  1:23           ` Moving include/asm-* [was: Re: Moving sound/* to drivers/ ?] Harvey Harrison
2008-05-22  1:25             ` Moving include/asm-* David Miller
2008-05-22  1:29             ` Moving include/asm-* [was: Re: Moving sound/* to drivers/ ?] Linus Torvalds
2008-05-22  1:36               ` Al Viro
2008-05-22  4:20               ` Jeff Dike
2008-05-22  5:26                 ` Al Viro [this message]
2008-05-22 16:27                   ` Jeff Dike
2008-05-22 17:18                   ` Sam Ravnborg
2008-05-22  1:30           ` Al Viro
2008-05-22 22:52             ` Arnd Bergmann
2008-05-21 22:05 ` [alsa-devel] Moving sound/* to drivers/ ? Timur Tabi
2008-05-21 22:23 ` Adrian Bunk
2008-05-22  8:22   ` Takashi Iwai
2008-05-21 23:37 ` Jeff Garzik
2008-05-21 23:53   ` Rene Herman
2008-05-22  6:26     ` Jaroslav Kysela
2008-05-22  7:12       ` Sam Ravnborg
2008-05-22  7:20         ` Jaroslav Kysela
2008-05-22  8:11       ` Rene Herman
2008-05-22  8:27     ` Takashi Iwai
2008-05-22  8:55       ` Jan Engelhardt
2008-05-22 15:04         ` Linus Torvalds
2008-05-22 15:50           ` Jan Engelhardt
2008-05-22 16:40           ` Rene Herman
2008-05-22  9:57       ` Rene Herman
2008-05-22 14:22       ` Adrian Bunk

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=20080522052607.GY28946@ZenIV.linux.org.uk \
    --to=viro@zeniv.linux.org.uk \
    --cc=harvey.harrison@gmail.com \
    --cc=jdike@addtoit.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=paulus@samba.org \
    --cc=tiwai@suse.de \
    --cc=torvalds@linux-foundation.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