From: Borislav Petkov <bp-Gina5bIWoIWzQB+pC5nmwQ@public.gmane.org>
To: Linux EFI <linux-efi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Cc: Matt Fleming
<matt-HNK1S37rvNbeXh+fF434Mdi2O/JbrIOy@public.gmane.org>,
Matthew Garrett <mjg59-1xO5oi07KQx4cg9Nei1l7Q@public.gmane.org>,
X86 ML <x86-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
LKML <linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Borislav Petkov <bp-l3A5Bk7waGM@public.gmane.org>
Subject: [PATCH -v2 1/4] efi: Convert runtime services function ptrs
Date: Mon, 17 Jun 2013 19:50:13 +0200 [thread overview]
Message-ID: <1371491416-11037-2-git-send-email-bp@alien8.de> (raw)
In-Reply-To: <1371491416-11037-1-git-send-email-bp-Gina5bIWoIWzQB+pC5nmwQ@public.gmane.org>
From: Borislav Petkov <bp-l3A5Bk7waGM@public.gmane.org>
... to void * like the boot services and lose all the void * casts. No
functionality change.
Signed-off-by: Borislav Petkov <bp-l3A5Bk7waGM@public.gmane.org>
---
arch/x86/boot/compressed/eboot.c | 2 +-
arch/x86/include/asm/efi.h | 28 ++++++++++++++--------------
include/linux/efi.h | 28 ++++++++++++++--------------
3 files changed, 29 insertions(+), 29 deletions(-)
diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c
index 35ee62fccf98..4060c8daf05e 100644
--- a/arch/x86/boot/compressed/eboot.c
+++ b/arch/x86/boot/compressed/eboot.c
@@ -266,7 +266,7 @@ static efi_status_t setup_efi_vars(struct boot_params *params)
while (data && data->next)
data = (struct setup_data *)(unsigned long)data->next;
- status = efi_call_phys4((void *)sys_table->runtime->query_variable_info,
+ status = efi_call_phys4(sys_table->runtime->query_variable_info,
EFI_VARIABLE_NON_VOLATILE |
EFI_VARIABLE_BOOTSERVICE_ACCESS |
EFI_VARIABLE_RUNTIME_ACCESS, &store_size,
diff --git a/arch/x86/include/asm/efi.h b/arch/x86/include/asm/efi.h
index 2fb5d5884e23..5b33686b6995 100644
--- a/arch/x86/include/asm/efi.h
+++ b/arch/x86/include/asm/efi.h
@@ -52,40 +52,40 @@ extern u64 efi_call6(void *fp, u64 arg1, u64 arg2, u64 arg3,
u64 arg4, u64 arg5, u64 arg6);
#define efi_call_phys0(f) \
- efi_call0((void *)(f))
+ efi_call0((f))
#define efi_call_phys1(f, a1) \
- efi_call1((void *)(f), (u64)(a1))
+ efi_call1((f), (u64)(a1))
#define efi_call_phys2(f, a1, a2) \
- efi_call2((void *)(f), (u64)(a1), (u64)(a2))
+ efi_call2((f), (u64)(a1), (u64)(a2))
#define efi_call_phys3(f, a1, a2, a3) \
- efi_call3((void *)(f), (u64)(a1), (u64)(a2), (u64)(a3))
+ efi_call3((f), (u64)(a1), (u64)(a2), (u64)(a3))
#define efi_call_phys4(f, a1, a2, a3, a4) \
- efi_call4((void *)(f), (u64)(a1), (u64)(a2), (u64)(a3), \
+ efi_call4((f), (u64)(a1), (u64)(a2), (u64)(a3), \
(u64)(a4))
#define efi_call_phys5(f, a1, a2, a3, a4, a5) \
- efi_call5((void *)(f), (u64)(a1), (u64)(a2), (u64)(a3), \
+ efi_call5((f), (u64)(a1), (u64)(a2), (u64)(a3), \
(u64)(a4), (u64)(a5))
#define efi_call_phys6(f, a1, a2, a3, a4, a5, a6) \
- efi_call6((void *)(f), (u64)(a1), (u64)(a2), (u64)(a3), \
+ efi_call6((f), (u64)(a1), (u64)(a2), (u64)(a3), \
(u64)(a4), (u64)(a5), (u64)(a6))
#define efi_call_virt0(f) \
- efi_call0((void *)(efi.systab->runtime->f))
+ efi_call0((efi.systab->runtime->f))
#define efi_call_virt1(f, a1) \
- efi_call1((void *)(efi.systab->runtime->f), (u64)(a1))
+ efi_call1((efi.systab->runtime->f), (u64)(a1))
#define efi_call_virt2(f, a1, a2) \
- efi_call2((void *)(efi.systab->runtime->f), (u64)(a1), (u64)(a2))
+ efi_call2((efi.systab->runtime->f), (u64)(a1), (u64)(a2))
#define efi_call_virt3(f, a1, a2, a3) \
- efi_call3((void *)(efi.systab->runtime->f), (u64)(a1), (u64)(a2), \
+ efi_call3((efi.systab->runtime->f), (u64)(a1), (u64)(a2), \
(u64)(a3))
#define efi_call_virt4(f, a1, a2, a3, a4) \
- efi_call4((void *)(efi.systab->runtime->f), (u64)(a1), (u64)(a2), \
+ efi_call4((efi.systab->runtime->f), (u64)(a1), (u64)(a2), \
(u64)(a3), (u64)(a4))
#define efi_call_virt5(f, a1, a2, a3, a4, a5) \
- efi_call5((void *)(efi.systab->runtime->f), (u64)(a1), (u64)(a2), \
+ efi_call5((efi.systab->runtime->f), (u64)(a1), (u64)(a2), \
(u64)(a3), (u64)(a4), (u64)(a5))
#define efi_call_virt6(f, a1, a2, a3, a4, a5, a6) \
- efi_call6((void *)(efi.systab->runtime->f), (u64)(a1), (u64)(a2), \
+ efi_call6((efi.systab->runtime->f), (u64)(a1), (u64)(a2), \
(u64)(a3), (u64)(a4), (u64)(a5), (u64)(a6))
extern void __iomem *efi_ioremap(unsigned long addr, unsigned long size,
diff --git a/include/linux/efi.h b/include/linux/efi.h
index 2bc0ad78d058..21ae6b3c0359 100644
--- a/include/linux/efi.h
+++ b/include/linux/efi.h
@@ -287,20 +287,20 @@ typedef struct {
typedef struct {
efi_table_hdr_t hdr;
- unsigned long get_time;
- unsigned long set_time;
- unsigned long get_wakeup_time;
- unsigned long set_wakeup_time;
- unsigned long set_virtual_address_map;
- unsigned long convert_pointer;
- unsigned long get_variable;
- unsigned long get_next_variable;
- unsigned long set_variable;
- unsigned long get_next_high_mono_count;
- unsigned long reset_system;
- unsigned long update_capsule;
- unsigned long query_capsule_caps;
- unsigned long query_variable_info;
+ void *get_time;
+ void *set_time;
+ void *get_wakeup_time;
+ void *set_wakeup_time;
+ void *set_virtual_address_map;
+ void *convert_pointer;
+ void *get_variable;
+ void *get_next_variable;
+ void *set_variable;
+ void *get_next_high_mono_count;
+ void *reset_system;
+ void *update_capsule;
+ void *query_capsule_caps;
+ void *query_variable_info;
} efi_runtime_services_t;
typedef efi_status_t efi_get_time_t (efi_time_t *tm, efi_time_cap_t *tc);
--
1.8.3
WARNING: multiple messages have this Message-ID (diff)
From: Borislav Petkov <bp@alien8.de>
To: Linux EFI <linux-efi@vger.kernel.org>
Cc: Matt Fleming <matt@console-pimps.org>,
Matthew Garrett <mjg59@srcf.ucam.org>, X86 ML <x86@kernel.org>,
LKML <linux-kernel@vger.kernel.org>, Borislav Petkov <bp@suse.de>
Subject: [PATCH -v2 1/4] efi: Convert runtime services function ptrs
Date: Mon, 17 Jun 2013 19:50:13 +0200 [thread overview]
Message-ID: <1371491416-11037-2-git-send-email-bp@alien8.de> (raw)
In-Reply-To: <1371491416-11037-1-git-send-email-bp@alien8.de>
From: Borislav Petkov <bp@suse.de>
... to void * like the boot services and lose all the void * casts. No
functionality change.
Signed-off-by: Borislav Petkov <bp@suse.de>
---
arch/x86/boot/compressed/eboot.c | 2 +-
arch/x86/include/asm/efi.h | 28 ++++++++++++++--------------
include/linux/efi.h | 28 ++++++++++++++--------------
3 files changed, 29 insertions(+), 29 deletions(-)
diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c
index 35ee62fccf98..4060c8daf05e 100644
--- a/arch/x86/boot/compressed/eboot.c
+++ b/arch/x86/boot/compressed/eboot.c
@@ -266,7 +266,7 @@ static efi_status_t setup_efi_vars(struct boot_params *params)
while (data && data->next)
data = (struct setup_data *)(unsigned long)data->next;
- status = efi_call_phys4((void *)sys_table->runtime->query_variable_info,
+ status = efi_call_phys4(sys_table->runtime->query_variable_info,
EFI_VARIABLE_NON_VOLATILE |
EFI_VARIABLE_BOOTSERVICE_ACCESS |
EFI_VARIABLE_RUNTIME_ACCESS, &store_size,
diff --git a/arch/x86/include/asm/efi.h b/arch/x86/include/asm/efi.h
index 2fb5d5884e23..5b33686b6995 100644
--- a/arch/x86/include/asm/efi.h
+++ b/arch/x86/include/asm/efi.h
@@ -52,40 +52,40 @@ extern u64 efi_call6(void *fp, u64 arg1, u64 arg2, u64 arg3,
u64 arg4, u64 arg5, u64 arg6);
#define efi_call_phys0(f) \
- efi_call0((void *)(f))
+ efi_call0((f))
#define efi_call_phys1(f, a1) \
- efi_call1((void *)(f), (u64)(a1))
+ efi_call1((f), (u64)(a1))
#define efi_call_phys2(f, a1, a2) \
- efi_call2((void *)(f), (u64)(a1), (u64)(a2))
+ efi_call2((f), (u64)(a1), (u64)(a2))
#define efi_call_phys3(f, a1, a2, a3) \
- efi_call3((void *)(f), (u64)(a1), (u64)(a2), (u64)(a3))
+ efi_call3((f), (u64)(a1), (u64)(a2), (u64)(a3))
#define efi_call_phys4(f, a1, a2, a3, a4) \
- efi_call4((void *)(f), (u64)(a1), (u64)(a2), (u64)(a3), \
+ efi_call4((f), (u64)(a1), (u64)(a2), (u64)(a3), \
(u64)(a4))
#define efi_call_phys5(f, a1, a2, a3, a4, a5) \
- efi_call5((void *)(f), (u64)(a1), (u64)(a2), (u64)(a3), \
+ efi_call5((f), (u64)(a1), (u64)(a2), (u64)(a3), \
(u64)(a4), (u64)(a5))
#define efi_call_phys6(f, a1, a2, a3, a4, a5, a6) \
- efi_call6((void *)(f), (u64)(a1), (u64)(a2), (u64)(a3), \
+ efi_call6((f), (u64)(a1), (u64)(a2), (u64)(a3), \
(u64)(a4), (u64)(a5), (u64)(a6))
#define efi_call_virt0(f) \
- efi_call0((void *)(efi.systab->runtime->f))
+ efi_call0((efi.systab->runtime->f))
#define efi_call_virt1(f, a1) \
- efi_call1((void *)(efi.systab->runtime->f), (u64)(a1))
+ efi_call1((efi.systab->runtime->f), (u64)(a1))
#define efi_call_virt2(f, a1, a2) \
- efi_call2((void *)(efi.systab->runtime->f), (u64)(a1), (u64)(a2))
+ efi_call2((efi.systab->runtime->f), (u64)(a1), (u64)(a2))
#define efi_call_virt3(f, a1, a2, a3) \
- efi_call3((void *)(efi.systab->runtime->f), (u64)(a1), (u64)(a2), \
+ efi_call3((efi.systab->runtime->f), (u64)(a1), (u64)(a2), \
(u64)(a3))
#define efi_call_virt4(f, a1, a2, a3, a4) \
- efi_call4((void *)(efi.systab->runtime->f), (u64)(a1), (u64)(a2), \
+ efi_call4((efi.systab->runtime->f), (u64)(a1), (u64)(a2), \
(u64)(a3), (u64)(a4))
#define efi_call_virt5(f, a1, a2, a3, a4, a5) \
- efi_call5((void *)(efi.systab->runtime->f), (u64)(a1), (u64)(a2), \
+ efi_call5((efi.systab->runtime->f), (u64)(a1), (u64)(a2), \
(u64)(a3), (u64)(a4), (u64)(a5))
#define efi_call_virt6(f, a1, a2, a3, a4, a5, a6) \
- efi_call6((void *)(efi.systab->runtime->f), (u64)(a1), (u64)(a2), \
+ efi_call6((efi.systab->runtime->f), (u64)(a1), (u64)(a2), \
(u64)(a3), (u64)(a4), (u64)(a5), (u64)(a6))
extern void __iomem *efi_ioremap(unsigned long addr, unsigned long size,
diff --git a/include/linux/efi.h b/include/linux/efi.h
index 2bc0ad78d058..21ae6b3c0359 100644
--- a/include/linux/efi.h
+++ b/include/linux/efi.h
@@ -287,20 +287,20 @@ typedef struct {
typedef struct {
efi_table_hdr_t hdr;
- unsigned long get_time;
- unsigned long set_time;
- unsigned long get_wakeup_time;
- unsigned long set_wakeup_time;
- unsigned long set_virtual_address_map;
- unsigned long convert_pointer;
- unsigned long get_variable;
- unsigned long get_next_variable;
- unsigned long set_variable;
- unsigned long get_next_high_mono_count;
- unsigned long reset_system;
- unsigned long update_capsule;
- unsigned long query_capsule_caps;
- unsigned long query_variable_info;
+ void *get_time;
+ void *set_time;
+ void *get_wakeup_time;
+ void *set_wakeup_time;
+ void *set_virtual_address_map;
+ void *convert_pointer;
+ void *get_variable;
+ void *get_next_variable;
+ void *set_variable;
+ void *get_next_high_mono_count;
+ void *reset_system;
+ void *update_capsule;
+ void *query_capsule_caps;
+ void *query_variable_info;
} efi_runtime_services_t;
typedef efi_status_t efi_get_time_t (efi_time_t *tm, efi_time_cap_t *tc);
--
1.8.3
next prev parent reply other threads:[~2013-06-17 17:50 UTC|newest]
Thread overview: 91+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-17 17:50 [PATCH -v2 0/4] EFI 1:1 mapping Borislav Petkov
[not found] ` <1371491416-11037-1-git-send-email-bp-Gina5bIWoIWzQB+pC5nmwQ@public.gmane.org>
2013-06-17 17:50 ` Borislav Petkov [this message]
2013-06-17 17:50 ` [PATCH -v2 1/4] efi: Convert runtime services function ptrs Borislav Petkov
2013-06-20 18:15 ` [PATCH] [IA64] sim: Add casts to avoid assignment warnings Luck, Tony
2013-06-20 23:43 ` Tony Luck
2013-06-21 10:26 ` Fleming, Matt
2013-06-19 12:52 ` [PATCH -v2 0/4] EFI 1:1 mapping Ingo Molnar
2013-06-19 12:52 ` Ingo Molnar
[not found] ` <20130619125243.GD11209-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-06-19 13:02 ` Borislav Petkov
2013-06-19 13:02 ` Borislav Petkov
[not found] ` <20130619130225.GA28311-fF5Pk5pvG8Y@public.gmane.org>
2013-06-19 13:04 ` Ingo Molnar
2013-06-19 13:04 ` Ingo Molnar
[not found] ` <20130619130434.GB24957-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-06-19 13:25 ` Borislav Petkov
2013-06-19 13:25 ` Borislav Petkov
2013-06-19 16:08 ` Matthew Garrett
2013-06-19 16:08 ` Matthew Garrett
[not found] ` <20130619160804.GB27832-1xO5oi07KQx4cg9Nei1l7Q@public.gmane.org>
2013-06-19 16:18 ` Borislav Petkov
2013-06-19 16:18 ` Borislav Petkov
[not found] ` <20130619161827.GF28300-fF5Pk5pvG8Y@public.gmane.org>
2013-06-19 16:21 ` Matthew Garrett
2013-06-19 16:21 ` Matthew Garrett
2013-06-19 16:38 ` Borislav Petkov
[not found] ` <20130619163804.GG28300-fF5Pk5pvG8Y@public.gmane.org>
2013-06-19 16:48 ` Matthew Garrett
2013-06-19 16:48 ` Matthew Garrett
[not found] ` <20130619164822.GA28240-1xO5oi07KQx4cg9Nei1l7Q@public.gmane.org>
2013-06-19 16:59 ` Borislav Petkov
2013-06-19 16:59 ` Borislav Petkov
[not found] ` <20130619165902.GH28300-fF5Pk5pvG8Y@public.gmane.org>
2013-06-20 21:26 ` H. Peter Anvin
2013-06-20 21:26 ` H. Peter Anvin
2013-06-21 6:34 ` Matt Fleming
2013-06-21 6:34 ` Matt Fleming
2013-06-19 16:50 ` James Bottomley
2013-06-20 9:13 ` Ingo Molnar
2013-06-20 9:13 ` Ingo Molnar
[not found] ` <20130620091321.GB6811-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-06-20 9:15 ` Matthew Garrett
2013-06-20 9:15 ` Matthew Garrett
2013-06-20 9:22 ` Ingo Molnar
[not found] ` <20130620092237.GA6943-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-06-20 9:33 ` Borislav Petkov
2013-06-20 9:33 ` Borislav Petkov
2013-06-20 9:44 ` Matthew Garrett
[not found] ` <20130620094446.GA17882-1xO5oi07KQx4cg9Nei1l7Q@public.gmane.org>
2013-06-20 14:33 ` Jiri Kosina
2013-06-20 14:33 ` Jiri Kosina
2013-06-20 14:53 ` James Bottomley
2013-06-20 14:53 ` James Bottomley
2013-06-20 16:29 ` Matthew Garrett
2013-06-20 16:29 ` Matthew Garrett
[not found] ` <20130620162916.GA25727-1xO5oi07KQx4cg9Nei1l7Q@public.gmane.org>
2013-06-20 16:44 ` Jiri Kosina
2013-06-20 16:44 ` Jiri Kosina
[not found] ` <alpine.LRH.2.00.1306201843430.3478-1ReQVI26iDCaZKY3DrU6dA@public.gmane.org>
2013-06-20 16:53 ` Matthew Garrett
2013-06-20 16:53 ` Matthew Garrett
2013-06-20 16:46 ` James Bottomley
2013-06-20 16:46 ` James Bottomley
2013-06-20 16:54 ` Matthew Garrett
2013-06-20 16:54 ` Matthew Garrett
2013-06-20 17:01 ` Borislav Petkov
2013-06-20 17:12 ` Matthew Garrett
[not found] ` <20130620171210.GA26593-1xO5oi07KQx4cg9Nei1l7Q@public.gmane.org>
2013-06-20 18:08 ` Borislav Petkov
2013-06-20 18:08 ` Borislav Petkov
2013-06-20 18:10 ` Matthew Garrett
[not found] ` <20130620181015.GA27833-1xO5oi07KQx4cg9Nei1l7Q@public.gmane.org>
2013-06-20 18:14 ` Borislav Petkov
2013-06-20 18:14 ` Borislav Petkov
2013-06-20 18:17 ` Matthew Garrett
[not found] ` <20130620181731.GA27960-1xO5oi07KQx4cg9Nei1l7Q@public.gmane.org>
2013-06-20 18:47 ` Borislav Petkov
2013-06-20 18:47 ` Borislav Petkov
[not found] ` <20130620184736.GC19877-fF5Pk5pvG8Y@public.gmane.org>
2013-06-20 22:35 ` H. Peter Anvin
2013-06-20 22:35 ` H. Peter Anvin
[not found] ` <51C383AC.4060706-YMNOUZJC4hwAvxtiuMwx3w@public.gmane.org>
2013-06-21 7:23 ` Borislav Petkov
2013-06-21 7:23 ` Borislav Petkov
[not found] ` <20130621072356.GA22006-fF5Pk5pvG8Y@public.gmane.org>
2013-06-21 10:05 ` H. Peter Anvin
2013-06-21 10:05 ` H. Peter Anvin
[not found] ` <ca8f8134-24d9-4f96-8876-e24892efc849-2ueSQiBKiTY7tOexoI0I+QC/G2K4zDHf@public.gmane.org>
2013-06-21 14:21 ` Borislav Petkov
2013-06-21 14:21 ` Borislav Petkov
[not found] ` <20130621142101.GG22006-fF5Pk5pvG8Y@public.gmane.org>
2013-06-21 16:42 ` H. Peter Anvin
2013-06-21 16:42 ` H. Peter Anvin
[not found] ` <51C4827B.7090208-YMNOUZJC4hwAvxtiuMwx3w@public.gmane.org>
2013-07-02 7:29 ` Pavel Machek
2013-07-02 7:29 ` Pavel Machek
2013-06-19 16:05 ` Matthew Garrett
2013-06-19 16:05 ` Matthew Garrett
2013-06-19 17:25 ` H. Peter Anvin
2013-06-19 17:25 ` H. Peter Anvin
[not found] ` <51C1E996.9070209-YMNOUZJC4hwAvxtiuMwx3w@public.gmane.org>
2013-06-19 17:37 ` Borislav Petkov
2013-06-19 17:37 ` Borislav Petkov
[not found] ` <20130619173721.GI28300-fF5Pk5pvG8Y@public.gmane.org>
2013-06-19 17:38 ` H. Peter Anvin
2013-06-19 17:38 ` H. Peter Anvin
[not found] ` <51C1EC90.9030802-YMNOUZJC4hwAvxtiuMwx3w@public.gmane.org>
2013-06-19 17:50 ` Borislav Petkov
2013-06-19 17:50 ` Borislav Petkov
2013-06-17 17:50 ` [PATCH -v2 2/4] x86, cpa: Map in an arbitrary pgd Borislav Petkov
2013-06-17 17:50 ` [PATCH -v2 3/4] x86, efi: Add an efi= kernel command line parameter Borislav Petkov
2013-06-17 17:50 ` [PATCH -v2 4/4] x86, efi: Map runtime services 1:1 Borislav Petkov
[not found] ` <1371491416-11037-5-git-send-email-bp-Gina5bIWoIWzQB+pC5nmwQ@public.gmane.org>
2013-06-21 11:56 ` Matt Fleming
2013-06-21 11:56 ` Matt Fleming
2013-07-03 6:19 ` joeyli
2013-07-03 6:19 ` joeyli
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=1371491416-11037-2-git-send-email-bp@alien8.de \
--to=bp-gina5biwoiwzqb+pc5nmwq@public.gmane.org \
--cc=bp-l3A5Bk7waGM@public.gmane.org \
--cc=linux-efi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=matt-HNK1S37rvNbeXh+fF434Mdi2O/JbrIOy@public.gmane.org \
--cc=mjg59-1xO5oi07KQx4cg9Nei1l7Q@public.gmane.org \
--cc=x86-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.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.