* [dpdk-stable] [PATCH 1/6] crypto/dpaa2_sec: fix session clear [not found] <20190327114407.13697-1-akhil.goyal@nxp.com> @ 2019-03-27 11:53 ` Akhil Goyal 2019-03-27 11:53 ` [dpdk-stable] [PATCH 2/6] crypto/dpaa2_sec: fix offset calculation for gcm Akhil Goyal 2019-03-27 11:53 ` [dpdk-stable] [PATCH 5/6] crypto/dpaa_sec: fix session qp attach/detach Akhil Goyal 2 siblings, 0 replies; 6+ messages in thread From: Akhil Goyal @ 2019-03-27 11:53 UTC (permalink / raw) To: dev; +Cc: Hemant Agrawal, Akhil Goyal, stable private data should be cleared instead of the complete session Fixes: 8d1f3a5d751b ("crypto/dpaa2_sec: support crypto operation") Cc: stable@dpdk.org Signed-off-by: Akhil Goyal <akhil.goyal@nxp.com> --- drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c b/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c index c2c22515d..d955ffc45 100644 --- a/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c +++ b/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c @@ -2912,7 +2912,7 @@ dpaa2_sec_sym_session_clear(struct rte_cryptodev *dev, rte_free(s->ctxt); rte_free(s->cipher_key.data); rte_free(s->auth_key.data); - memset(sess, 0, sizeof(dpaa2_sec_session)); + memset(s, 0, sizeof(dpaa2_sec_session)); struct rte_mempool *sess_mp = rte_mempool_from_obj(sess_priv); set_sym_session_private_data(sess, index, NULL); rte_mempool_put(sess_mp, sess_priv); -- 2.17.1 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [dpdk-stable] [PATCH 2/6] crypto/dpaa2_sec: fix offset calculation for gcm [not found] <20190327114407.13697-1-akhil.goyal@nxp.com> 2019-03-27 11:53 ` [dpdk-stable] [PATCH 1/6] crypto/dpaa2_sec: fix session clear Akhil Goyal @ 2019-03-27 11:53 ` Akhil Goyal 2019-03-27 11:53 ` [dpdk-stable] [PATCH 5/6] crypto/dpaa_sec: fix session qp attach/detach Akhil Goyal 2 siblings, 0 replies; 6+ messages in thread From: Akhil Goyal @ 2019-03-27 11:53 UTC (permalink / raw) To: dev; +Cc: Hemant Agrawal, Akhil Goyal, stable In case of gcm, output buffer should have aad space before the actual buffer which needs to be written. CAAM will not write into the aad anything, it will skip auth_only_len (aad) and write the buffer afterwards. Fixes: 37f96eb01bce ("crypto/dpaa2_sec: support scatter gather") Cc: stable@dpdk.org Signed-off-by: Akhil Goyal <akhil.goyal@nxp.com> --- drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c b/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c index d955ffc45..7e762d4b8 100644 --- a/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c +++ b/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c @@ -236,8 +236,8 @@ build_authenc_gcm_sg_fd(dpaa2_sec_session *sess, /* Configure Output SGE for Encap/Decap */ DPAA2_SET_FLE_ADDR(sge, DPAA2_MBUF_VADDR_TO_IOVA(mbuf)); - DPAA2_SET_FLE_OFFSET(sge, mbuf->data_off + sym_op->aead.data.offset - - auth_only_len); + DPAA2_SET_FLE_OFFSET(sge, mbuf->data_off + + RTE_ALIGN_CEIL(auth_only_len, 16) - auth_only_len); sge->length = mbuf->data_len - sym_op->aead.data.offset + auth_only_len; mbuf = mbuf->next; @@ -400,8 +400,8 @@ build_authenc_gcm_fd(dpaa2_sec_session *sess, /* Configure Output SGE for Encap/Decap */ DPAA2_SET_FLE_ADDR(sge, DPAA2_MBUF_VADDR_TO_IOVA(dst)); - DPAA2_SET_FLE_OFFSET(sge, sym_op->aead.data.offset + - dst->data_off - auth_only_len); + DPAA2_SET_FLE_OFFSET(sge, dst->data_off + + RTE_ALIGN_CEIL(auth_only_len, 16) - auth_only_len); sge->length = sym_op->aead.data.length + auth_only_len; if (sess->dir == DIR_ENC) { -- 2.17.1 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [dpdk-stable] [PATCH 5/6] crypto/dpaa_sec: fix session qp attach/detach [not found] <20190327114407.13697-1-akhil.goyal@nxp.com> 2019-03-27 11:53 ` [dpdk-stable] [PATCH 1/6] crypto/dpaa2_sec: fix session clear Akhil Goyal 2019-03-27 11:53 ` [dpdk-stable] [PATCH 2/6] crypto/dpaa2_sec: fix offset calculation for gcm Akhil Goyal @ 2019-03-27 11:53 ` Akhil Goyal 2019-04-25 16:24 ` [dpdk-stable] [dpdk-dev] " Kevin Traynor 2 siblings, 1 reply; 6+ messages in thread From: Akhil Goyal @ 2019-03-27 11:53 UTC (permalink / raw) To: dev; +Cc: Hemant Agrawal, Akhil Goyal, stable session inq and qp are assigned for each core from which the packets arrive. This was not correctly handled while supporting multiple sessions per queue pair. This patch fixes the attach and detach of queues for each core. Fixes: e79416d10fa3 ("crypto/dpaa_sec: support multiple sessions per queue pair") Cc: stable@dpdk.org Signed-off-by: Akhil Goyal <akhil.goyal@nxp.com> --- drivers/crypto/dpaa_sec/dpaa_sec.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/drivers/crypto/dpaa_sec/dpaa_sec.c b/drivers/crypto/dpaa_sec/dpaa_sec.c index cb99be4e1..8305f19a3 100644 --- a/drivers/crypto/dpaa_sec/dpaa_sec.c +++ b/drivers/crypto/dpaa_sec/dpaa_sec.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-3-Clause * * Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved. - * Copyright 2017-2018 NXP + * Copyright 2017-2019 NXP * */ @@ -1940,13 +1940,13 @@ dpaa_sec_attach_rxq(struct dpaa_sec_dev_private *qi) { unsigned int i; - for (i = 0; i < qi->max_nb_sessions; i++) { + for (i = 0; i < qi->max_nb_sessions * MAX_DPAA_CORES; i++) { if (qi->inq_attach[i] == 0) { qi->inq_attach[i] = 1; return &qi->inq[i]; } } - DPAA_SEC_WARN("All ses session in use %x", qi->max_nb_sessions); + DPAA_SEC_WARN("All session in use %u", qi->max_nb_sessions); return NULL; } @@ -2115,7 +2115,7 @@ dpaa_sec_sym_session_clear(struct rte_cryptodev *dev, struct rte_cryptodev_sym_session *sess) { struct dpaa_sec_dev_private *qi = dev->data->dev_private; - uint8_t index = dev->driver_id; + uint8_t index = dev->driver_id, i; void *sess_priv = get_sym_session_private_data(sess, index); PMD_INIT_FUNC_TRACE(); @@ -2125,9 +2125,12 @@ dpaa_sec_sym_session_clear(struct rte_cryptodev *dev, if (sess_priv) { struct rte_mempool *sess_mp = rte_mempool_from_obj(sess_priv); - if (s->inq[rte_lcore_id() % MAX_DPAA_CORES]) - dpaa_sec_detach_rxq(qi, - s->inq[rte_lcore_id() % MAX_DPAA_CORES]); + for (i = 0; i < MAX_DPAA_CORES; i++) { + if (s->inq[i]) + dpaa_sec_detach_rxq(qi, s->inq[i]); + s->inq[i] = NULL; + s->qp[i] = NULL; + } rte_free(s->cipher_key.data); rte_free(s->auth_key.data); memset(s, 0, sizeof(dpaa_sec_session)); -- 2.17.1 ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [dpdk-stable] [dpdk-dev] [PATCH 5/6] crypto/dpaa_sec: fix session qp attach/detach 2019-03-27 11:53 ` [dpdk-stable] [PATCH 5/6] crypto/dpaa_sec: fix session qp attach/detach Akhil Goyal @ 2019-04-25 16:24 ` Kevin Traynor 2019-04-25 17:42 ` Kevin Traynor 0 siblings, 1 reply; 6+ messages in thread From: Kevin Traynor @ 2019-04-25 16:24 UTC (permalink / raw) To: Akhil Goyal, dev; +Cc: Hemant Agrawal, stable On 27/03/2019 11:53, Akhil Goyal wrote: > session inq and qp are assigned for each core from which the > packets arrive. This was not correctly handled while supporting > multiple sessions per queue pair. > This patch fixes the attach and detach of queues for each core. > > Fixes: e79416d10fa3 ("crypto/dpaa_sec: support multiple sessions per queue pair") > Cc: stable@dpdk.org Hi, this will not backport to 18.11 branch as: 4e694fe51171dcdbe94019189a0240833b45c943 Author: Akhil Goyal <akhil.goyal@nxp.com> Date: Wed Jan 9 15:14:17 2019 +0000 crypto/dpaa_sec: support same session flows on multi-cores was added after 18.11 and dpaa_sec_sym_session_clear() is quite different. Please send a backport of the bugfix for 18.11 branch, or let me know if it's not needed. thanks, Kevin. > Signed-off-by: Akhil Goyal <akhil.goyal@nxp.com> > --- > drivers/crypto/dpaa_sec/dpaa_sec.c | 17 ++++++++++------- > 1 file changed, 10 insertions(+), 7 deletions(-) > > diff --git a/drivers/crypto/dpaa_sec/dpaa_sec.c b/drivers/crypto/dpaa_sec/dpaa_sec.c > index cb99be4e1..8305f19a3 100644 > --- a/drivers/crypto/dpaa_sec/dpaa_sec.c > +++ b/drivers/crypto/dpaa_sec/dpaa_sec.c > @@ -1,7 +1,7 @@ > /* SPDX-License-Identifier: BSD-3-Clause > * > * Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved. > - * Copyright 2017-2018 NXP > + * Copyright 2017-2019 NXP > * > */ > > @@ -1940,13 +1940,13 @@ dpaa_sec_attach_rxq(struct dpaa_sec_dev_private *qi) > { > unsigned int i; > > - for (i = 0; i < qi->max_nb_sessions; i++) { > + for (i = 0; i < qi->max_nb_sessions * MAX_DPAA_CORES; i++) { > if (qi->inq_attach[i] == 0) { > qi->inq_attach[i] = 1; > return &qi->inq[i]; > } > } > - DPAA_SEC_WARN("All ses session in use %x", qi->max_nb_sessions); > + DPAA_SEC_WARN("All session in use %u", qi->max_nb_sessions); > > return NULL; > } > @@ -2115,7 +2115,7 @@ dpaa_sec_sym_session_clear(struct rte_cryptodev *dev, > struct rte_cryptodev_sym_session *sess) > { > struct dpaa_sec_dev_private *qi = dev->data->dev_private; > - uint8_t index = dev->driver_id; > + uint8_t index = dev->driver_id, i; > void *sess_priv = get_sym_session_private_data(sess, index); > > PMD_INIT_FUNC_TRACE(); > @@ -2125,9 +2125,12 @@ dpaa_sec_sym_session_clear(struct rte_cryptodev *dev, > if (sess_priv) { > struct rte_mempool *sess_mp = rte_mempool_from_obj(sess_priv); > > - if (s->inq[rte_lcore_id() % MAX_DPAA_CORES]) > - dpaa_sec_detach_rxq(qi, > - s->inq[rte_lcore_id() % MAX_DPAA_CORES]); > + for (i = 0; i < MAX_DPAA_CORES; i++) { > + if (s->inq[i]) > + dpaa_sec_detach_rxq(qi, s->inq[i]); > + s->inq[i] = NULL; > + s->qp[i] = NULL; > + } > rte_free(s->cipher_key.data); > rte_free(s->auth_key.data); > memset(s, 0, sizeof(dpaa_sec_session)); > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [dpdk-stable] [dpdk-dev] [PATCH 5/6] crypto/dpaa_sec: fix session qp attach/detach 2019-04-25 16:24 ` [dpdk-stable] [dpdk-dev] " Kevin Traynor @ 2019-04-25 17:42 ` Kevin Traynor 2019-04-26 7:14 ` [dpdk-stable] [EXT] " Hemant Agrawal 0 siblings, 1 reply; 6+ messages in thread From: Kevin Traynor @ 2019-04-25 17:42 UTC (permalink / raw) To: Akhil Goyal, dev; +Cc: Hemant Agrawal, stable On 25/04/2019 17:24, Kevin Traynor wrote: > On 27/03/2019 11:53, Akhil Goyal wrote: >> session inq and qp are assigned for each core from which the >> packets arrive. This was not correctly handled while supporting >> multiple sessions per queue pair. >> This patch fixes the attach and detach of queues for each core. >> >> Fixes: e79416d10fa3 ("crypto/dpaa_sec: support multiple sessions per queue pair") >> Cc: stable@dpdk.org > > Hi, this will not backport to 18.11 branch as: > 4e694fe51171dcdbe94019189a0240833b45c943 > Author: Akhil Goyal <akhil.goyal@nxp.com> > Date: Wed Jan 9 15:14:17 2019 +0000 > > crypto/dpaa_sec: support same session flows on multi-cores > > was added after 18.11 and dpaa_sec_sym_session_clear() is quite > different. Please send a backport of the bugfix for 18.11 branch, or let > me know if it's not needed. > > thanks, > Kevin. > >> Signed-off-by: Akhil Goyal <akhil.goyal@nxp.com> >> --- >> drivers/crypto/dpaa_sec/dpaa_sec.c | 17 ++++++++++------- >> 1 file changed, 10 insertions(+), 7 deletions(-) >> >> diff --git a/drivers/crypto/dpaa_sec/dpaa_sec.c b/drivers/crypto/dpaa_sec/dpaa_sec.c >> index cb99be4e1..8305f19a3 100644 >> --- a/drivers/crypto/dpaa_sec/dpaa_sec.c >> +++ b/drivers/crypto/dpaa_sec/dpaa_sec.c >> @@ -1,7 +1,7 @@ >> /* SPDX-License-Identifier: BSD-3-Clause >> * >> * Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved. >> - * Copyright 2017-2018 NXP >> + * Copyright 2017-2019 NXP >> * >> */ >> >> @@ -1940,13 +1940,13 @@ dpaa_sec_attach_rxq(struct dpaa_sec_dev_private *qi) >> { >> unsigned int i; >> >> - for (i = 0; i < qi->max_nb_sessions; i++) { >> + for (i = 0; i < qi->max_nb_sessions * MAX_DPAA_CORES; i++) { >> if (qi->inq_attach[i] == 0) { Btw, without knowing the crypto code, the use of max_nb_sessions in for loops with fixed size arrays being indexed looks suspect to me. In the snippet above unsigned char inq_attach[RTE_DPAA_MAX_RX_QUEUE]; which means inq_attach[4096] At least in one place I can see .max_nb_sessions = MRVL_PMD_DEFAULT_MAX_NB_SESSIONS which makes max_nb_sessions=2048, while MAX_DPAA_CORES=4 >> qi->inq_attach[i] = 1; >> return &qi->inq[i]; >> } >> } >> - DPAA_SEC_WARN("All ses session in use %x", qi->max_nb_sessions); >> + DPAA_SEC_WARN("All session in use %u", qi->max_nb_sessions); >> >> return NULL; >> } >> @@ -2115,7 +2115,7 @@ dpaa_sec_sym_session_clear(struct rte_cryptodev *dev, >> struct rte_cryptodev_sym_session *sess) >> { >> struct dpaa_sec_dev_private *qi = dev->data->dev_private; >> - uint8_t index = dev->driver_id; >> + uint8_t index = dev->driver_id, i; >> void *sess_priv = get_sym_session_private_data(sess, index); >> >> PMD_INIT_FUNC_TRACE(); >> @@ -2125,9 +2125,12 @@ dpaa_sec_sym_session_clear(struct rte_cryptodev *dev, >> if (sess_priv) { >> struct rte_mempool *sess_mp = rte_mempool_from_obj(sess_priv); >> >> - if (s->inq[rte_lcore_id() % MAX_DPAA_CORES]) >> - dpaa_sec_detach_rxq(qi, >> - s->inq[rte_lcore_id() % MAX_DPAA_CORES]); >> + for (i = 0; i < MAX_DPAA_CORES; i++) { >> + if (s->inq[i]) >> + dpaa_sec_detach_rxq(qi, s->inq[i]); >> + s->inq[i] = NULL; >> + s->qp[i] = NULL; >> + } >> rte_free(s->cipher_key.data); >> rte_free(s->auth_key.data); >> memset(s, 0, sizeof(dpaa_sec_session)); >> > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [dpdk-stable] [EXT] Re: [dpdk-dev] [PATCH 5/6] crypto/dpaa_sec: fix session qp attach/detach 2019-04-25 17:42 ` Kevin Traynor @ 2019-04-26 7:14 ` Hemant Agrawal 0 siblings, 0 replies; 6+ messages in thread From: Hemant Agrawal @ 2019-04-26 7:14 UTC (permalink / raw) To: Kevin Traynor, Akhil Goyal, dev; +Cc: stable Hi Kevin, Thanks we will look into it. Regards, Hemant > -----Original Message----- > From: Kevin Traynor <ktraynor@redhat.com> > Sent: Thursday, April 25, 2019 11:13 PM > To: Akhil Goyal <akhil.goyal@nxp.com>; dev@dpdk.org > Cc: Hemant Agrawal <hemant.agrawal@nxp.com>; stable@dpdk.org > Subject: [EXT] Re: [dpdk-dev] [PATCH 5/6] crypto/dpaa_sec: fix session qp > attach/detach > Importance: High > > Caution: EXT Email > > On 25/04/2019 17:24, Kevin Traynor wrote: > > On 27/03/2019 11:53, Akhil Goyal wrote: > >> session inq and qp are assigned for each core from which the packets > >> arrive. This was not correctly handled while supporting multiple > >> sessions per queue pair. > >> This patch fixes the attach and detach of queues for each core. > >> > >> Fixes: e79416d10fa3 ("crypto/dpaa_sec: support multiple sessions per > >> queue pair") > >> Cc: stable@dpdk.org > > > > Hi, this will not backport to 18.11 branch as: > > 4e694fe51171dcdbe94019189a0240833b45c943 > > Author: Akhil Goyal <akhil.goyal@nxp.com> > > Date: Wed Jan 9 15:14:17 2019 +0000 > > > > crypto/dpaa_sec: support same session flows on multi-cores > > > > was added after 18.11 and dpaa_sec_sym_session_clear() is quite > > different. Please send a backport of the bugfix for 18.11 branch, or > > let me know if it's not needed. > > > > thanks, > > Kevin. > > > >> Signed-off-by: Akhil Goyal <akhil.goyal@nxp.com> > >> --- > >> drivers/crypto/dpaa_sec/dpaa_sec.c | 17 ++++++++++------- > >> 1 file changed, 10 insertions(+), 7 deletions(-) > >> > >> diff --git a/drivers/crypto/dpaa_sec/dpaa_sec.c > >> b/drivers/crypto/dpaa_sec/dpaa_sec.c > >> index cb99be4e1..8305f19a3 100644 > >> --- a/drivers/crypto/dpaa_sec/dpaa_sec.c > >> +++ b/drivers/crypto/dpaa_sec/dpaa_sec.c > >> @@ -1,7 +1,7 @@ > >> /* SPDX-License-Identifier: BSD-3-Clause > >> * > >> * Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved. > >> - * Copyright 2017-2018 NXP > >> + * Copyright 2017-2019 NXP > >> * > >> */ > >> > >> @@ -1940,13 +1940,13 @@ dpaa_sec_attach_rxq(struct > >> dpaa_sec_dev_private *qi) { > >> unsigned int i; > >> > >> - for (i = 0; i < qi->max_nb_sessions; i++) { > >> + for (i = 0; i < qi->max_nb_sessions * MAX_DPAA_CORES; i++) { > >> if (qi->inq_attach[i] == 0) { > > Btw, without knowing the crypto code, the use of max_nb_sessions in for > loops with fixed size arrays being indexed looks suspect to me. In the snippet > above > > unsigned char inq_attach[RTE_DPAA_MAX_RX_QUEUE]; > which means inq_attach[4096] > > At least in one place I can see > .max_nb_sessions = MRVL_PMD_DEFAULT_MAX_NB_SESSIONS which > makes max_nb_sessions=2048, while MAX_DPAA_CORES=4 > > >> qi->inq_attach[i] = 1; > >> return &qi->inq[i]; > >> } > >> } > >> - DPAA_SEC_WARN("All ses session in use %x", qi->max_nb_sessions); > >> + DPAA_SEC_WARN("All session in use %u", qi->max_nb_sessions); > >> > >> return NULL; > >> } > >> @@ -2115,7 +2115,7 @@ dpaa_sec_sym_session_clear(struct > rte_cryptodev *dev, > >> struct rte_cryptodev_sym_session *sess) { > >> struct dpaa_sec_dev_private *qi = dev->data->dev_private; > >> - uint8_t index = dev->driver_id; > >> + uint8_t index = dev->driver_id, i; > >> void *sess_priv = get_sym_session_private_data(sess, index); > >> > >> PMD_INIT_FUNC_TRACE(); > >> @@ -2125,9 +2125,12 @@ dpaa_sec_sym_session_clear(struct > rte_cryptodev *dev, > >> if (sess_priv) { > >> struct rte_mempool *sess_mp = > >> rte_mempool_from_obj(sess_priv); > >> > >> - if (s->inq[rte_lcore_id() % MAX_DPAA_CORES]) > >> - dpaa_sec_detach_rxq(qi, > >> - s->inq[rte_lcore_id() % MAX_DPAA_CORES]); > >> + for (i = 0; i < MAX_DPAA_CORES; i++) { > >> + if (s->inq[i]) > >> + dpaa_sec_detach_rxq(qi, s->inq[i]); > >> + s->inq[i] = NULL; > >> + s->qp[i] = NULL; > >> + } > >> rte_free(s->cipher_key.data); > >> rte_free(s->auth_key.data); > >> memset(s, 0, sizeof(dpaa_sec_session)); > >> > > ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2019-04-26 7:14 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <20190327114407.13697-1-akhil.goyal@nxp.com> 2019-03-27 11:53 ` [dpdk-stable] [PATCH 1/6] crypto/dpaa2_sec: fix session clear Akhil Goyal 2019-03-27 11:53 ` [dpdk-stable] [PATCH 2/6] crypto/dpaa2_sec: fix offset calculation for gcm Akhil Goyal 2019-03-27 11:53 ` [dpdk-stable] [PATCH 5/6] crypto/dpaa_sec: fix session qp attach/detach Akhil Goyal 2019-04-25 16:24 ` [dpdk-stable] [dpdk-dev] " Kevin Traynor 2019-04-25 17:42 ` Kevin Traynor 2019-04-26 7:14 ` [dpdk-stable] [EXT] " Hemant Agrawal
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).