DPDK patches and discussions
 help / color / mirror / Atom feed
From: Marcin Baran <marcinx.baran@intel.com>
To: dev@dpdk.org, bruce.richardson@intel.com, ray.kinsella@intel.com
Cc: Marcin Baran <marcinx.baran@intel.com>
Subject: [dpdk-dev] [PATCH 5/8] lib: remove dead code from timer
Date: Mon, 30 Sep 2019 11:21:36 +0200	[thread overview]
Message-ID: <20190930092139.2440-5-marcinx.baran@intel.com> (raw)
In-Reply-To: <20190930092139.2440-1-marcinx.baran@intel.com>

After updating ABI policy old and unused
code needs to be removed and all libraries
symbols version should be set to v20.

Signed-off-by: Marcin Baran <marcinx.baran@intel.com>
---
 lib/librte_timer/rte_timer.c | 85 +++---------------------------------
 lib/librte_timer/rte_timer.h | 15 -------
 2 files changed, 5 insertions(+), 95 deletions(-)

diff --git a/lib/librte_timer/rte_timer.c b/lib/librte_timer/rte_timer.c
index 34c864b60..de6959b80 100644
--- a/lib/librte_timer/rte_timer.c
+++ b/lib/librte_timer/rte_timer.c
@@ -68,9 +68,6 @@ static struct rte_timer_data *rte_timer_data_arr;
 static const uint32_t default_data_id;
 static uint32_t rte_timer_subsystem_initialized;
 
-/* For maintaining older interfaces for a period */
-static struct rte_timer_data default_timer_data;
-
 /* when debug is enabled, store some statistics */
 #ifdef RTE_LIBRTE_TIMER_DEBUG
 #define __TIMER_STAT_ADD(priv_timer, name, n) do {			\
@@ -131,21 +128,6 @@ rte_timer_data_dealloc(uint32_t id)
 	return 0;
 }
 
-void
-rte_timer_subsystem_init_v20(void)
-{
-	unsigned lcore_id;
-	struct priv_timer *priv_timer = default_timer_data.priv_timer;
-
-	/* since priv_timer is static, it's zeroed by default, so only init some
-	 * fields.
-	 */
-	for (lcore_id = 0; lcore_id < RTE_MAX_LCORE; lcore_id ++) {
-		rte_spinlock_init(&priv_timer[lcore_id].list_lock);
-		priv_timer[lcore_id].prev_lcore = lcore_id;
-	}
-}
-
 /* Init the timer library. Allocate an array of timer data structs in shared
  * memory, and allocate the zeroth entry for use with original timer
  * APIs. Since the intersection of the sets of lcore ids in primary and
@@ -153,7 +135,7 @@ rte_timer_subsystem_init_v20(void)
  * multiple processes.
  */
 int
-rte_timer_subsystem_init_v1905(void)
+rte_timer_subsystem_init(void)
 {
 	const struct rte_memzone *mz;
 	struct rte_timer_data *data;
@@ -208,9 +190,6 @@ rte_timer_subsystem_init_v1905(void)
 
 	return 0;
 }
-MAP_STATIC_SYMBOL(int rte_timer_subsystem_init(void),
-		  rte_timer_subsystem_init_v1905);
-BIND_DEFAULT_SYMBOL(rte_timer_subsystem_init, _v1905, 20.0);
 
 void
 rte_timer_subsystem_finalize(void)
@@ -551,41 +530,13 @@ __rte_timer_reset(struct rte_timer *tim, uint64_t expire,
 
 /* Reset and start the timer associated with the timer handle tim */
 int
-rte_timer_reset_v20(struct rte_timer *tim, uint64_t ticks,
-		    enum rte_timer_type type, unsigned int tim_lcore,
-		    rte_timer_cb_t fct, void *arg)
-{
-	uint64_t cur_time = rte_get_timer_cycles();
-	uint64_t period;
-
-	if (unlikely((tim_lcore != (unsigned)LCORE_ID_ANY) &&
-			!(rte_lcore_is_enabled(tim_lcore) ||
-			  rte_lcore_has_role(tim_lcore, ROLE_SERVICE))))
-		return -1;
-
-	if (type == PERIODICAL)
-		period = ticks;
-	else
-		period = 0;
-
-	return __rte_timer_reset(tim,  cur_time + ticks, period, tim_lcore,
-			  fct, arg, 0, &default_timer_data);
-}
-
-int
-rte_timer_reset_v1905(struct rte_timer *tim, uint64_t ticks,
+rte_timer_reset(struct rte_timer *tim, uint64_t ticks,
 		      enum rte_timer_type type, unsigned int tim_lcore,
 		      rte_timer_cb_t fct, void *arg)
 {
 	return rte_timer_alt_reset(default_data_id, tim, ticks, type,
 				   tim_lcore, fct, arg);
 }
-MAP_STATIC_SYMBOL(int rte_timer_reset(struct rte_timer *tim, uint64_t ticks,
-				      enum rte_timer_type type,
-				      unsigned int tim_lcore,
-				      rte_timer_cb_t fct, void *arg),
-		  rte_timer_reset_v1905);
-BIND_DEFAULT_SYMBOL(rte_timer_reset, _v1905, 20.0);
 
 int
 rte_timer_alt_reset(uint32_t timer_data_id, struct rte_timer *tim,
@@ -656,19 +607,10 @@ __rte_timer_stop(struct rte_timer *tim, int local_is_locked,
 
 /* Stop the timer associated with the timer handle tim */
 int
-rte_timer_stop_v20(struct rte_timer *tim)
-{
-	return __rte_timer_stop(tim, 0, &default_timer_data);
-}
-
-int
-rte_timer_stop_v1905(struct rte_timer *tim)
+rte_timer_stop(struct rte_timer *tim)
 {
 	return rte_timer_alt_stop(default_data_id, tim);
 }
-MAP_STATIC_SYMBOL(int rte_timer_stop(struct rte_timer *tim),
-		  rte_timer_stop_v1905);
-BIND_DEFAULT_SYMBOL(rte_timer_stop, _v1905, 20.0);
 
 int
 rte_timer_alt_stop(uint32_t timer_data_id, struct rte_timer *tim)
@@ -814,14 +756,8 @@ __rte_timer_manage(struct rte_timer_data *timer_data)
 	priv_timer[lcore_id].running_tim = NULL;
 }
 
-void
-rte_timer_manage_v20(void)
-{
-	__rte_timer_manage(&default_timer_data);
-}
-
 int
-rte_timer_manage_v1905(void)
+rte_timer_manage(void)
 {
 	struct rte_timer_data *timer_data;
 
@@ -831,8 +767,6 @@ rte_timer_manage_v1905(void)
 
 	return 0;
 }
-MAP_STATIC_SYMBOL(int rte_timer_manage(void), rte_timer_manage_v1905);
-BIND_DEFAULT_SYMBOL(rte_timer_manage, _v1905, 20.0);
 
 int
 rte_timer_alt_manage(uint32_t timer_data_id,
@@ -1070,20 +1004,11 @@ __rte_timer_dump_stats(struct rte_timer_data *timer_data __rte_unused, FILE *f)
 #endif
 }
 
-void
-rte_timer_dump_stats_v20(FILE *f)
-{
-	__rte_timer_dump_stats(&default_timer_data, f);
-}
-
 int
-rte_timer_dump_stats_v1905(FILE *f)
+rte_timer_dump_stats(FILE *f)
 {
 	return rte_timer_alt_dump_stats(default_data_id, f);
 }
-MAP_STATIC_SYMBOL(int rte_timer_dump_stats(FILE *f),
-		  rte_timer_dump_stats_v1905);
-BIND_DEFAULT_SYMBOL(rte_timer_dump_stats, _v1905, 20.0);
 
 int
 rte_timer_alt_dump_stats(uint32_t timer_data_id __rte_unused, FILE *f)
diff --git a/lib/librte_timer/rte_timer.h b/lib/librte_timer/rte_timer.h
index 05d287d8f..9dc5fc309 100644
--- a/lib/librte_timer/rte_timer.h
+++ b/lib/librte_timer/rte_timer.h
@@ -181,8 +181,6 @@ int rte_timer_data_dealloc(uint32_t id);
  *      subsystem
  */
 int rte_timer_subsystem_init(void);
-int rte_timer_subsystem_init_v1905(void);
-void rte_timer_subsystem_init_v20(void);
 
 /**
  * @warning
@@ -250,13 +248,6 @@ void rte_timer_init(struct rte_timer *tim);
 int rte_timer_reset(struct rte_timer *tim, uint64_t ticks,
 		    enum rte_timer_type type, unsigned tim_lcore,
 		    rte_timer_cb_t fct, void *arg);
-int rte_timer_reset_v1905(struct rte_timer *tim, uint64_t ticks,
-			  enum rte_timer_type type, unsigned int tim_lcore,
-			  rte_timer_cb_t fct, void *arg);
-int rte_timer_reset_v20(struct rte_timer *tim, uint64_t ticks,
-			enum rte_timer_type type, unsigned int tim_lcore,
-			rte_timer_cb_t fct, void *arg);
-
 
 /**
  * Loop until rte_timer_reset() succeeds.
@@ -313,8 +304,6 @@ rte_timer_reset_sync(struct rte_timer *tim, uint64_t ticks,
  *   - (-1): The timer is in the RUNNING or CONFIG state.
  */
 int rte_timer_stop(struct rte_timer *tim);
-int rte_timer_stop_v1905(struct rte_timer *tim);
-int rte_timer_stop_v20(struct rte_timer *tim);
 
 /**
  * Loop until rte_timer_stop() succeeds.
@@ -358,8 +347,6 @@ int rte_timer_pending(struct rte_timer *tim);
  *   - -EINVAL: timer subsystem not yet initialized
  */
 int rte_timer_manage(void);
-int rte_timer_manage_v1905(void);
-void rte_timer_manage_v20(void);
 
 /**
  * Dump statistics about timers.
@@ -371,8 +358,6 @@ void rte_timer_manage_v20(void);
  *   - -EINVAL: timer subsystem not yet initialized
  */
 int rte_timer_dump_stats(FILE *f);
-int rte_timer_dump_stats_v1905(FILE *f);
-void rte_timer_dump_stats_v20(FILE *f);
 
 /**
  * @warning
-- 
2.22.0.windows.1


  parent reply	other threads:[~2019-09-30  9:23 UTC|newest]

Thread overview: 131+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-30  9:21 [dpdk-dev] [PATCH 1/8] config: change ABI versioning for global Marcin Baran
2019-09-30  9:21 ` [dpdk-dev] [PATCH 2/8] buildtools: scripts for updating symbols abi version Marcin Baran
2019-09-30  9:21 ` [dpdk-dev] [PATCH 3/8] buildtools: add ABI versioning check script Marcin Baran
2019-09-30 10:27   ` Bruce Richardson
2019-09-30  9:21 ` [dpdk-dev] [PATCH 4/8] build: change ABI version to 20.0 Marcin Baran
2019-09-30  9:21 ` Marcin Baran [this message]
2019-09-30  9:21 ` [dpdk-dev] [PATCH 6/8] lib: remove dead code from lpm Marcin Baran
2019-09-30  9:21 ` [dpdk-dev] [PATCH 7/8] lib: remove dead code from distributor Marcin Baran
2019-09-30  9:21 ` [dpdk-dev] [PATCH 8/8] lib: change function suffix in distributor Marcin Baran
2019-10-16 12:43 ` [dpdk-dev] [PATCH v2 00/10] Implement the new ABI policy and add helper scripts Anatoly Burakov
2019-10-16 17:03   ` [dpdk-dev] [PATCH v3 0/9] " Anatoly Burakov
2019-10-17  8:50     ` Bruce Richardson
2019-10-17 14:31     ` [dpdk-dev] [PATCH v4 00/10] " Anatoly Burakov
2019-10-24  9:46       ` [dpdk-dev] [PATCH v5 " Anatoly Burakov
2019-11-06 16:54         ` [dpdk-dev] [PATCH v6 " Anatoly Burakov
2019-11-08 16:25           ` [dpdk-dev] [PATCH v7 " Anatoly Burakov
2019-11-20 17:23             ` [dpdk-dev] [PATCH v8 00/12] " Anatoly Burakov
2019-11-20 20:17               ` Thomas Monjalon
2019-11-20 22:13                 ` David Marchand
2019-11-21 10:22                   ` Burakov, Anatoly
2019-11-21 13:24                 ` Kinsella, Ray
2019-11-20 17:23             ` [dpdk-dev] [PATCH v8 01/12] config: change ABI versioning to global Anatoly Burakov
2019-11-20 19:51               ` David Marchand
2019-11-20 22:01                 ` David Marchand
2019-11-20 17:23             ` [dpdk-dev] [PATCH v8 02/12] config: remove CONFIG_RTE_MAJOR_ABI option Anatoly Burakov
2019-11-20 17:23             ` [dpdk-dev] [PATCH v8 03/12] build: remove individual library versions Anatoly Burakov
2019-11-20 19:35               ` David Marchand
2019-11-20 17:23             ` [dpdk-dev] [PATCH v8 04/12] buildtools: add script for updating symbols abi version Anatoly Burakov
2019-11-20 20:05               ` David Marchand
2019-11-20 17:23             ` [dpdk-dev] [PATCH v8 05/12] buildtools: add ABI update shell script Anatoly Burakov
2019-11-20 17:23             ` [dpdk-dev] [PATCH v8 06/12] timer: remove deprecated code Anatoly Burakov
2019-11-20 17:23             ` [dpdk-dev] [PATCH v8 07/12] lpm: " Anatoly Burakov
2019-11-20 17:23             ` [dpdk-dev] [PATCH v8 08/12] distributor: " Anatoly Burakov
2019-11-20 17:23             ` [dpdk-dev] [PATCH v8 09/12] distributor: rename v2.0 ABI to _single suffix Anatoly Burakov
2019-11-20 17:23             ` [dpdk-dev] [PATCH v8 10/12] drivers/octeontx: add missing public symbol Anatoly Burakov
2019-11-20 17:23             ` [dpdk-dev] [PATCH v8 11/12] build: change ABI version to 20.0 Anatoly Burakov
2019-11-20 20:47               ` David Marchand
2019-11-20 17:23             ` [dpdk-dev] [PATCH v8 12/12] buildtools: add ABI versioning check script Anatoly Burakov
2019-11-08 16:25           ` [dpdk-dev] [PATCH v7 01/10] config: change ABI versioning to global Anatoly Burakov
2019-11-19 13:53             ` Thomas Monjalon
2019-11-19 15:48               ` Burakov, Anatoly
2019-11-20 12:10             ` Kinsella, Ray
2019-11-20 13:31               ` Thomas Monjalon
2019-11-20 14:10                 ` Kinsella, Ray
2019-11-08 16:25           ` [dpdk-dev] [PATCH v7 02/10] buildtools: add script for updating symbols abi version Anatoly Burakov
2019-11-19 14:01             ` Thomas Monjalon
2019-11-19 15:38               ` Burakov, Anatoly
2019-11-19 16:05                 ` Thomas Monjalon
2019-11-08 16:25           ` [dpdk-dev] [PATCH v7 03/10] buildtools: add ABI update shell script Anatoly Burakov
2019-11-19 17:38             ` Thomas Monjalon
2019-11-20 11:50               ` Burakov, Anatoly
2019-11-08 16:25           ` [dpdk-dev] [PATCH v7 04/10] timer: remove deprecated code Anatoly Burakov
2019-11-19 21:42             ` David Marchand
2019-11-08 16:25           ` [dpdk-dev] [PATCH v7 05/10] lpm: " Anatoly Burakov
2019-11-19 21:43             ` David Marchand
2019-11-08 16:25           ` [dpdk-dev] [PATCH v7 06/10] distributor: " Anatoly Burakov
2019-11-08 16:25           ` [dpdk-dev] [PATCH v7 07/10] distributor: rename v2.0 ABI to _single suffix Anatoly Burakov
2019-11-08 16:25           ` [dpdk-dev] [PATCH v7 08/10] drivers/octeontx: add missing public symbol Anatoly Burakov
2019-11-08 16:25           ` [dpdk-dev] [PATCH v7 09/10] build: change ABI version to 20.0 Anatoly Burakov
2019-11-19 17:46             ` Thomas Monjalon
2019-11-19 21:50             ` David Marchand
2019-11-22  7:07               ` Sachin Saxena
2019-11-08 16:25           ` [dpdk-dev] [PATCH v7 10/10] buildtools: add ABI versioning check script Anatoly Burakov
2019-11-19 18:16             ` Thomas Monjalon
2019-11-06 16:54         ` [dpdk-dev] [PATCH v6 01/10] config: change ABI versioning to global Anatoly Burakov
2019-11-06 16:54         ` [dpdk-dev] [PATCH v6 02/10] buildtools: add script for updating symbols abi version Anatoly Burakov
2019-11-06 16:54         ` [dpdk-dev] [PATCH v6 03/10] buildtools: add ABI update shell script Anatoly Burakov
2019-11-06 16:54         ` [dpdk-dev] [PATCH v6 04/10] timer: remove deprecated code Anatoly Burakov
2019-11-06 16:54         ` [dpdk-dev] [PATCH v6 05/10] lpm: " Anatoly Burakov
2019-11-06 16:54         ` [dpdk-dev] [PATCH v6 06/10] distributor: " Anatoly Burakov
2019-11-06 16:54         ` [dpdk-dev] [PATCH v6 07/10] distributor: rename v2.0 ABI to _single suffix Anatoly Burakov
2019-11-06 16:54         ` [dpdk-dev] [PATCH v6 08/10] drivers/octeontx: add missing public symbol Anatoly Burakov
2019-11-06 16:54         ` [dpdk-dev] [PATCH v6 09/10] build: change ABI version to 20.0 Anatoly Burakov
2019-11-06 16:54         ` [dpdk-dev] [PATCH v6 10/10] buildtools: add ABI versioning check script Anatoly Burakov
2019-10-24  9:46       ` [dpdk-dev] [PATCH v5 01/10] config: change ABI versioning to global Anatoly Burakov
2019-11-05 11:05         ` David Marchand
2019-11-05 13:50           ` Bruce Richardson
2019-10-24  9:46       ` [dpdk-dev] [PATCH v5 02/10] buildtools: add script for updating symbols abi version Anatoly Burakov
2019-11-06 15:38         ` David Marchand
2019-10-24  9:46       ` [dpdk-dev] [PATCH v5 03/10] buildtools: add ABI update shell script Anatoly Burakov
2019-10-24  9:46       ` [dpdk-dev] [PATCH v5 04/10] timer: remove deprecated code Anatoly Burakov
2019-10-24  9:46       ` [dpdk-dev] [PATCH v5 05/10] lpm: " Anatoly Burakov
2019-10-24  9:46       ` [dpdk-dev] [PATCH v5 06/10] distributor: " Anatoly Burakov
2019-10-24  9:46       ` [dpdk-dev] [PATCH v5 07/10] distributor: rename v2.0 ABI to _single suffix Anatoly Burakov
2019-10-24  9:46       ` [dpdk-dev] [PATCH v5 08/10] drivers/octeontx: add missing public symbol Anatoly Burakov
2019-10-24  9:46       ` [dpdk-dev] [PATCH v5 09/10] build: change ABI version to 20.0 Anatoly Burakov
2019-10-24  9:46       ` [dpdk-dev] [PATCH v5 10/10] buildtools: add ABI versioning check script Anatoly Burakov
2019-10-17 14:31     ` [dpdk-dev] [PATCH v4 01/10] config: change ABI versioning to global Anatoly Burakov
2019-10-17 14:31     ` [dpdk-dev] [PATCH v4 02/10] buildtools: add script for updating symbols abi version Anatoly Burakov
2019-10-17 14:31     ` [dpdk-dev] [PATCH v4 03/10] buildtools: add ABI update shell script Anatoly Burakov
2019-10-17 14:31     ` [dpdk-dev] [PATCH v4 04/10] timer: remove deprecated code Anatoly Burakov
2019-10-17 21:04       ` Carrillo, Erik G
2019-10-21 13:24       ` Kevin Traynor
2019-10-24  9:07         ` Burakov, Anatoly
2019-10-17 14:31     ` [dpdk-dev] [PATCH v4 05/10] lpm: " Anatoly Burakov
2019-10-17 14:31     ` [dpdk-dev] [PATCH v4 06/10] distributor: " Anatoly Burakov
2019-10-17 15:59       ` Hunt, David
2019-10-17 14:31     ` [dpdk-dev] [PATCH v4 07/10] distributor: rename v2.0 ABI to _single suffix Anatoly Burakov
2019-10-17 16:00       ` Hunt, David
2019-10-17 14:31     ` [dpdk-dev] [PATCH v4 08/10] drivers/octeontx: add missing public symbol Anatoly Burakov
2019-10-17 14:31     ` [dpdk-dev] [PATCH v4 09/10] build: change ABI version to 20.0 Anatoly Burakov
2019-10-17 14:32     ` [dpdk-dev] [PATCH v4 10/10] buildtools: add ABI versioning check script Anatoly Burakov
2019-10-16 17:03   ` [dpdk-dev] [PATCH v3 1/9] config: change ABI versioning to global Anatoly Burakov
2019-10-17  8:44     ` Bruce Richardson
2019-10-17 10:25       ` Burakov, Anatoly
2019-10-17 14:09       ` Luca Boccassi
2019-10-17 14:12         ` Bruce Richardson
2019-10-18 10:07         ` Kevin Traynor
2019-10-16 17:03   ` [dpdk-dev] [PATCH v3 2/9] buildtools: add script for updating symbols abi version Anatoly Burakov
2019-10-16 17:03   ` [dpdk-dev] [PATCH v3 3/9] buildtools: add ABI update shell script Anatoly Burakov
2019-10-16 17:03   ` [dpdk-dev] [PATCH v3 4/9] timer: remove deprecated code Anatoly Burakov
2019-10-16 17:03   ` [dpdk-dev] [PATCH v3 5/9] lpm: " Anatoly Burakov
2019-10-16 17:03   ` [dpdk-dev] [PATCH v3 6/9] distributor: " Anatoly Burakov
2019-10-17 10:53     ` Hunt, David
2019-10-16 17:03   ` [dpdk-dev] [PATCH v3 7/9] drivers/octeontx: add missing public symbol Anatoly Burakov
2019-10-16 17:03   ` [dpdk-dev] [PATCH v3 8/9] build: change ABI version to 20.0 Anatoly Burakov
2019-10-16 17:03   ` [dpdk-dev] [PATCH v3 9/9] buildtools: add ABI versioning check script Anatoly Burakov
2019-10-16 12:43 ` [dpdk-dev] [PATCH v2 01/10] config: change ABI versioning for global Anatoly Burakov
2019-10-16 13:22   ` Bruce Richardson
2019-10-16 12:43 ` [dpdk-dev] [PATCH v2 02/10] buildtools: add script for updating symbols abi version Anatoly Burakov
2019-10-16 13:25   ` Bruce Richardson
2019-10-16 12:43 ` [dpdk-dev] [PATCH v2 03/10] buildtools: add ABI update shell script Anatoly Burakov
2019-10-16 13:33   ` Bruce Richardson
2019-10-16 12:43 ` [dpdk-dev] [PATCH v2 04/10] timer: remove deprecated code Anatoly Burakov
2019-10-16 12:43 ` [dpdk-dev] [PATCH v2 05/10] lpm: " Anatoly Burakov
2019-10-16 12:43 ` [dpdk-dev] [PATCH v2 06/10] distributor: " Anatoly Burakov
2019-10-16 12:43 ` [dpdk-dev] [PATCH v2 07/10] lib: change function suffix in distributor Anatoly Burakov
2019-10-16 13:18   ` Hunt, David
2019-10-16 12:43 ` [dpdk-dev] [PATCH v2 08/10] drivers/octeontx: add missing public symbol Anatoly Burakov
2019-10-16 12:43 ` [dpdk-dev] [PATCH v2 09/10] build: change ABI version to 20.0 Anatoly Burakov
2019-10-16 12:43 ` [dpdk-dev] [PATCH v2 10/10] buildtools: add ABI versioning check script Anatoly Burakov

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=20190930092139.2440-5-marcinx.baran@intel.com \
    --to=marcinx.baran@intel.com \
    --cc=bruce.richardson@intel.com \
    --cc=dev@dpdk.org \
    --cc=ray.kinsella@intel.com \
    /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).