* [PATCH v5 0/2] tpm_ffa_crb: add support direct message request v2 @ 2025-04-15 18:50 Yeoreum Yun 2025-04-15 18:50 ` [PATCH v5 1/2] tpm_ffa_crb: access tpm service over FF-A " Yeoreum Yun 2025-04-15 18:50 ` [PATCH v5 2/2] tpm_crb_ffa: use dev_xx() macro to print log Yeoreum Yun 0 siblings, 2 replies; 6+ messages in thread From: Yeoreum Yun @ 2025-04-15 18:50 UTC (permalink / raw) To: peterhuewe, jarkko, jgg, sudeep.holla, stuart.yoder, sgarzare Cc: linux-integrity, linux-kernel, Yeoreum Yun This patch supports to access TPM crb buffer accsess over FF-A via direct message request v2 ABI and include small fix. Since v4: - rewokring with commit message. - https://lore.kernel.org/all/20250415075712.2157073-1-yeoreum.yun@arm.com/ Since v3: - replace pr_xxx() usage to dev_xx() to print log. - https://lore.kernel.org/all/20250412054721.1647439-1-yeoreum.yun@arm.com/ Since v2: - rewokring commit message - https://lore.kernel.org/all/20250411090856.1417021-1-yeoreum.yun@arm.com/ Since v1: - Fix indentation. - https://lore.kernel.org/all/20250410110701.1244965-1-yeoreum.yun@arm.com/ Yeoreum Yun (2): tpm_ffa_crb: access tpm service over FF-A direct message request v2 tpm_crb_ffa: use dev_xx() macro to print log drivers/char/tpm/tpm_crb_ffa.c | 63 ++++++++++++++++++++++++---------- 1 file changed, 44 insertions(+), 19 deletions(-) -- LEVI:{C3F47F37-75D8-414A-A8BA-3980EC8A46D7} ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v5 1/2] tpm_ffa_crb: access tpm service over FF-A direct message request v2 2025-04-15 18:50 [PATCH v5 0/2] tpm_ffa_crb: add support direct message request v2 Yeoreum Yun @ 2025-04-15 18:50 ` Yeoreum Yun 2025-04-30 15:51 ` Jarkko Sakkinen 2025-04-15 18:50 ` [PATCH v5 2/2] tpm_crb_ffa: use dev_xx() macro to print log Yeoreum Yun 1 sibling, 1 reply; 6+ messages in thread From: Yeoreum Yun @ 2025-04-15 18:50 UTC (permalink / raw) To: peterhuewe, jarkko, jgg, sudeep.holla, stuart.yoder, sgarzare Cc: linux-integrity, linux-kernel, Yeoreum Yun For secure partition with multi service, tpm_ffa_crb can access tpm service with direct message request v2 interface according to chapter 3.3, TPM Service Command Response Buffer Interface Over FF-A specificationi v1.0 BET. This patch reflects this spec to access tpm service over FF-A direct message request v2 ABI. Acked-by: Sudeep Holla <sudeep.holla@arm.com> Signed-off-by: Yeoreum Yun <yeoreum.yun@arm.com> --- drivers/char/tpm/tpm_crb_ffa.c | 55 ++++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 15 deletions(-) diff --git a/drivers/char/tpm/tpm_crb_ffa.c b/drivers/char/tpm/tpm_crb_ffa.c index 3169a87a56b6..fed775cf53ab 100644 --- a/drivers/char/tpm/tpm_crb_ffa.c +++ b/drivers/char/tpm/tpm_crb_ffa.c @@ -105,7 +105,10 @@ struct tpm_crb_ffa { u16 minor_version; /* lock to protect sending of FF-A messages: */ struct mutex msg_data_lock; - struct ffa_send_direct_data direct_msg_data; + union { + struct ffa_send_direct_data direct_msg_data; + struct ffa_send_direct_data2 direct_msg_data2; + }; }; static struct tpm_crb_ffa *tpm_crb_ffa; @@ -185,18 +188,34 @@ static int __tpm_crb_ffa_send_recieve(unsigned long func_id, msg_ops = tpm_crb_ffa->ffa_dev->ops->msg_ops; - memset(&tpm_crb_ffa->direct_msg_data, 0x00, - sizeof(struct ffa_send_direct_data)); - - tpm_crb_ffa->direct_msg_data.data1 = func_id; - tpm_crb_ffa->direct_msg_data.data2 = a0; - tpm_crb_ffa->direct_msg_data.data3 = a1; - tpm_crb_ffa->direct_msg_data.data4 = a2; + if (ffa_partition_supports_direct_req2_recv(tpm_crb_ffa->ffa_dev)) { + memset(&tpm_crb_ffa->direct_msg_data2, 0x00, + sizeof(struct ffa_send_direct_data2)); + + tpm_crb_ffa->direct_msg_data2.data[0] = func_id; + tpm_crb_ffa->direct_msg_data2.data[1] = a0; + tpm_crb_ffa->direct_msg_data2.data[2] = a1; + tpm_crb_ffa->direct_msg_data2.data[3] = a2; + + ret = msg_ops->sync_send_receive2(tpm_crb_ffa->ffa_dev, + &tpm_crb_ffa->direct_msg_data2); + if (!ret) + ret = tpm_crb_ffa_to_linux_errno(tpm_crb_ffa->direct_msg_data2.data[0]); + } else { + memset(&tpm_crb_ffa->direct_msg_data, 0x00, + sizeof(struct ffa_send_direct_data)); + + tpm_crb_ffa->direct_msg_data.data1 = func_id; + tpm_crb_ffa->direct_msg_data.data2 = a0; + tpm_crb_ffa->direct_msg_data.data3 = a1; + tpm_crb_ffa->direct_msg_data.data4 = a2; + + ret = msg_ops->sync_send_receive(tpm_crb_ffa->ffa_dev, + &tpm_crb_ffa->direct_msg_data); + if (!ret) + ret = tpm_crb_ffa_to_linux_errno(tpm_crb_ffa->direct_msg_data.data1); + } - ret = msg_ops->sync_send_receive(tpm_crb_ffa->ffa_dev, - &tpm_crb_ffa->direct_msg_data); - if (!ret) - ret = tpm_crb_ffa_to_linux_errno(tpm_crb_ffa->direct_msg_data.data1); return ret; } @@ -231,8 +250,13 @@ int tpm_crb_ffa_get_interface_version(u16 *major, u16 *minor) rc = __tpm_crb_ffa_send_recieve(CRB_FFA_GET_INTERFACE_VERSION, 0x00, 0x00, 0x00); if (!rc) { - *major = CRB_FFA_MAJOR_VERSION(tpm_crb_ffa->direct_msg_data.data2); - *minor = CRB_FFA_MINOR_VERSION(tpm_crb_ffa->direct_msg_data.data2); + if (ffa_partition_supports_direct_req2_recv(tpm_crb_ffa->ffa_dev)) { + *major = CRB_FFA_MAJOR_VERSION(tpm_crb_ffa->direct_msg_data2.data[1]); + *minor = CRB_FFA_MINOR_VERSION(tpm_crb_ffa->direct_msg_data2.data[1]); + } else { + *major = CRB_FFA_MAJOR_VERSION(tpm_crb_ffa->direct_msg_data.data2); + *minor = CRB_FFA_MINOR_VERSION(tpm_crb_ffa->direct_msg_data.data2); + } } return rc; @@ -277,7 +301,8 @@ static int tpm_crb_ffa_probe(struct ffa_device *ffa_dev) tpm_crb_ffa = ERR_PTR(-ENODEV); // set tpm_crb_ffa so we can detect probe failure - if (!ffa_partition_supports_direct_recv(ffa_dev)) { + if (!ffa_partition_supports_direct_recv(ffa_dev) && + !ffa_partition_supports_direct_req2_recv(ffa_dev)) { pr_err("TPM partition doesn't support direct message receive.\n"); return -EINVAL; } -- LEVI:{C3F47F37-75D8-414A-A8BA-3980EC8A46D7} ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v5 1/2] tpm_ffa_crb: access tpm service over FF-A direct message request v2 2025-04-15 18:50 ` [PATCH v5 1/2] tpm_ffa_crb: access tpm service over FF-A " Yeoreum Yun @ 2025-04-30 15:51 ` Jarkko Sakkinen 0 siblings, 0 replies; 6+ messages in thread From: Jarkko Sakkinen @ 2025-04-30 15:51 UTC (permalink / raw) To: Yeoreum Yun Cc: peterhuewe, jgg, sudeep.holla, stuart.yoder, sgarzare, linux-integrity, linux-kernel On Tue, Apr 15, 2025 at 07:50:12PM +0100, Yeoreum Yun wrote: > For secure partition with multi service, tpm_ffa_crb can access tpm > service with direct message request v2 interface according to chapter 3.3, > TPM Service Command Response Buffer Interface Over FF-A specificationi v1.0 BET. > > This patch reflects this spec to access tpm service over > FF-A direct message request v2 ABI. > > Acked-by: Sudeep Holla <sudeep.holla@arm.com> > Signed-off-by: Yeoreum Yun <yeoreum.yun@arm.com> > --- > drivers/char/tpm/tpm_crb_ffa.c | 55 ++++++++++++++++++++++++---------- > 1 file changed, 40 insertions(+), 15 deletions(-) > > diff --git a/drivers/char/tpm/tpm_crb_ffa.c b/drivers/char/tpm/tpm_crb_ffa.c > index 3169a87a56b6..fed775cf53ab 100644 > --- a/drivers/char/tpm/tpm_crb_ffa.c > +++ b/drivers/char/tpm/tpm_crb_ffa.c > @@ -105,7 +105,10 @@ struct tpm_crb_ffa { > u16 minor_version; > /* lock to protect sending of FF-A messages: */ > struct mutex msg_data_lock; > - struct ffa_send_direct_data direct_msg_data; > + union { > + struct ffa_send_direct_data direct_msg_data; > + struct ffa_send_direct_data2 direct_msg_data2; > + }; > }; > > static struct tpm_crb_ffa *tpm_crb_ffa; > @@ -185,18 +188,34 @@ static int __tpm_crb_ffa_send_recieve(unsigned long func_id, > > msg_ops = tpm_crb_ffa->ffa_dev->ops->msg_ops; > > - memset(&tpm_crb_ffa->direct_msg_data, 0x00, > - sizeof(struct ffa_send_direct_data)); > - > - tpm_crb_ffa->direct_msg_data.data1 = func_id; > - tpm_crb_ffa->direct_msg_data.data2 = a0; > - tpm_crb_ffa->direct_msg_data.data3 = a1; > - tpm_crb_ffa->direct_msg_data.data4 = a2; > + if (ffa_partition_supports_direct_req2_recv(tpm_crb_ffa->ffa_dev)) { > + memset(&tpm_crb_ffa->direct_msg_data2, 0x00, > + sizeof(struct ffa_send_direct_data2)); > + > + tpm_crb_ffa->direct_msg_data2.data[0] = func_id; > + tpm_crb_ffa->direct_msg_data2.data[1] = a0; > + tpm_crb_ffa->direct_msg_data2.data[2] = a1; > + tpm_crb_ffa->direct_msg_data2.data[3] = a2; > + > + ret = msg_ops->sync_send_receive2(tpm_crb_ffa->ffa_dev, > + &tpm_crb_ffa->direct_msg_data2); > + if (!ret) > + ret = tpm_crb_ffa_to_linux_errno(tpm_crb_ffa->direct_msg_data2.data[0]); > + } else { > + memset(&tpm_crb_ffa->direct_msg_data, 0x00, > + sizeof(struct ffa_send_direct_data)); > + > + tpm_crb_ffa->direct_msg_data.data1 = func_id; > + tpm_crb_ffa->direct_msg_data.data2 = a0; > + tpm_crb_ffa->direct_msg_data.data3 = a1; > + tpm_crb_ffa->direct_msg_data.data4 = a2; > + > + ret = msg_ops->sync_send_receive(tpm_crb_ffa->ffa_dev, > + &tpm_crb_ffa->direct_msg_data); > + if (!ret) > + ret = tpm_crb_ffa_to_linux_errno(tpm_crb_ffa->direct_msg_data.data1); > + } > > - ret = msg_ops->sync_send_receive(tpm_crb_ffa->ffa_dev, > - &tpm_crb_ffa->direct_msg_data); > - if (!ret) > - ret = tpm_crb_ffa_to_linux_errno(tpm_crb_ffa->direct_msg_data.data1); > > return ret; > } > @@ -231,8 +250,13 @@ int tpm_crb_ffa_get_interface_version(u16 *major, u16 *minor) > > rc = __tpm_crb_ffa_send_recieve(CRB_FFA_GET_INTERFACE_VERSION, 0x00, 0x00, 0x00); > if (!rc) { > - *major = CRB_FFA_MAJOR_VERSION(tpm_crb_ffa->direct_msg_data.data2); > - *minor = CRB_FFA_MINOR_VERSION(tpm_crb_ffa->direct_msg_data.data2); > + if (ffa_partition_supports_direct_req2_recv(tpm_crb_ffa->ffa_dev)) { > + *major = CRB_FFA_MAJOR_VERSION(tpm_crb_ffa->direct_msg_data2.data[1]); > + *minor = CRB_FFA_MINOR_VERSION(tpm_crb_ffa->direct_msg_data2.data[1]); > + } else { > + *major = CRB_FFA_MAJOR_VERSION(tpm_crb_ffa->direct_msg_data.data2); > + *minor = CRB_FFA_MINOR_VERSION(tpm_crb_ffa->direct_msg_data.data2); > + } > } > > return rc; > @@ -277,7 +301,8 @@ static int tpm_crb_ffa_probe(struct ffa_device *ffa_dev) > > tpm_crb_ffa = ERR_PTR(-ENODEV); // set tpm_crb_ffa so we can detect probe failure > > - if (!ffa_partition_supports_direct_recv(ffa_dev)) { > + if (!ffa_partition_supports_direct_recv(ffa_dev) && > + !ffa_partition_supports_direct_req2_recv(ffa_dev)) { > pr_err("TPM partition doesn't support direct message receive.\n"); > return -EINVAL; > } > -- > LEVI:{C3F47F37-75D8-414A-A8BA-3980EC8A46D7} > > Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org> BR, Jarkko ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v5 2/2] tpm_crb_ffa: use dev_xx() macro to print log 2025-04-15 18:50 [PATCH v5 0/2] tpm_ffa_crb: add support direct message request v2 Yeoreum Yun 2025-04-15 18:50 ` [PATCH v5 1/2] tpm_ffa_crb: access tpm service over FF-A " Yeoreum Yun @ 2025-04-15 18:50 ` Yeoreum Yun 2025-04-16 9:08 ` Stefano Garzarella 2025-04-30 15:51 ` Jarkko Sakkinen 1 sibling, 2 replies; 6+ messages in thread From: Yeoreum Yun @ 2025-04-15 18:50 UTC (permalink / raw) To: peterhuewe, jarkko, jgg, sudeep.holla, stuart.yoder, sgarzare Cc: linux-integrity, linux-kernel, Yeoreum Yun Instead of pr_xxx() macro, use dev_xxx() to print log. This patch changes some error log level to warn log level when the tpm_crb_ffa secure partition doesn't support properly but system can run without it. (i.e) unsupport of direct message ABI or unsupported ABI version Signed-off-by: Yeoreum Yun <yeoreum.yun@arm.com> --- drivers/char/tpm/tpm_crb_ffa.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/char/tpm/tpm_crb_ffa.c b/drivers/char/tpm/tpm_crb_ffa.c index fed775cf53ab..66b38b2cbdd5 100644 --- a/drivers/char/tpm/tpm_crb_ffa.c +++ b/drivers/char/tpm/tpm_crb_ffa.c @@ -303,7 +303,7 @@ static int tpm_crb_ffa_probe(struct ffa_device *ffa_dev) if (!ffa_partition_supports_direct_recv(ffa_dev) && !ffa_partition_supports_direct_req2_recv(ffa_dev)) { - pr_err("TPM partition doesn't support direct message receive.\n"); + dev_warn(&ffa_dev->dev, "partition doesn't support direct message receive.\n"); return -EINVAL; } @@ -324,17 +324,17 @@ static int tpm_crb_ffa_probe(struct ffa_device *ffa_dev) rc = tpm_crb_ffa_get_interface_version(&tpm_crb_ffa->major_version, &tpm_crb_ffa->minor_version); if (rc) { - pr_err("failed to get crb interface version. rc:%d", rc); + dev_err(&ffa_dev->dev, "failed to get crb interface version. rc:%d\n", rc); goto out; } - pr_info("ABI version %u.%u", tpm_crb_ffa->major_version, + dev_info(&ffa_dev->dev, "ABI version %u.%u\n", tpm_crb_ffa->major_version, tpm_crb_ffa->minor_version); if (tpm_crb_ffa->major_version != CRB_FFA_VERSION_MAJOR || (tpm_crb_ffa->minor_version > 0 && tpm_crb_ffa->minor_version < CRB_FFA_VERSION_MINOR)) { - pr_err("Incompatible ABI version"); + dev_warn(&ffa_dev->dev, "Incompatible ABI version\n"); goto out; } -- LEVI:{C3F47F37-75D8-414A-A8BA-3980EC8A46D7} ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v5 2/2] tpm_crb_ffa: use dev_xx() macro to print log 2025-04-15 18:50 ` [PATCH v5 2/2] tpm_crb_ffa: use dev_xx() macro to print log Yeoreum Yun @ 2025-04-16 9:08 ` Stefano Garzarella 2025-04-30 15:51 ` Jarkko Sakkinen 1 sibling, 0 replies; 6+ messages in thread From: Stefano Garzarella @ 2025-04-16 9:08 UTC (permalink / raw) To: Yeoreum Yun Cc: peterhuewe, jarkko, jgg, sudeep.holla, stuart.yoder, linux-integrity, linux-kernel On Tue, Apr 15, 2025 at 07:50:13PM +0100, Yeoreum Yun wrote: >Instead of pr_xxx() macro, use dev_xxx() to print log. >This patch changes some error log level to warn log level when >the tpm_crb_ffa secure partition doesn't support properly but >system can run without it. >(i.e) unsupport of direct message ABI or unsupported ABI version > >Signed-off-by: Yeoreum Yun <yeoreum.yun@arm.com> >--- > drivers/char/tpm/tpm_crb_ffa.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) LGTM! Reviewed-by: Stefano Garzarella <sgarzare@redhat.com> > >diff --git a/drivers/char/tpm/tpm_crb_ffa.c b/drivers/char/tpm/tpm_crb_ffa.c >index fed775cf53ab..66b38b2cbdd5 100644 >--- a/drivers/char/tpm/tpm_crb_ffa.c >+++ b/drivers/char/tpm/tpm_crb_ffa.c >@@ -303,7 +303,7 @@ static int tpm_crb_ffa_probe(struct ffa_device *ffa_dev) > > if (!ffa_partition_supports_direct_recv(ffa_dev) && > !ffa_partition_supports_direct_req2_recv(ffa_dev)) { >- pr_err("TPM partition doesn't support direct message receive.\n"); >+ dev_warn(&ffa_dev->dev, "partition doesn't support direct message receive.\n"); > return -EINVAL; > } > >@@ -324,17 +324,17 @@ static int tpm_crb_ffa_probe(struct ffa_device *ffa_dev) > rc = tpm_crb_ffa_get_interface_version(&tpm_crb_ffa->major_version, > &tpm_crb_ffa->minor_version); > if (rc) { >- pr_err("failed to get crb interface version. rc:%d", rc); >+ dev_err(&ffa_dev->dev, "failed to get crb interface version. rc:%d\n", rc); > goto out; > } > >- pr_info("ABI version %u.%u", tpm_crb_ffa->major_version, >+ dev_info(&ffa_dev->dev, "ABI version %u.%u\n", tpm_crb_ffa->major_version, > tpm_crb_ffa->minor_version); > > if (tpm_crb_ffa->major_version != CRB_FFA_VERSION_MAJOR || > (tpm_crb_ffa->minor_version > 0 && > tpm_crb_ffa->minor_version < CRB_FFA_VERSION_MINOR)) { >- pr_err("Incompatible ABI version"); >+ dev_warn(&ffa_dev->dev, "Incompatible ABI version\n"); > goto out; > } > >-- >LEVI:{C3F47F37-75D8-414A-A8BA-3980EC8A46D7} > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v5 2/2] tpm_crb_ffa: use dev_xx() macro to print log 2025-04-15 18:50 ` [PATCH v5 2/2] tpm_crb_ffa: use dev_xx() macro to print log Yeoreum Yun 2025-04-16 9:08 ` Stefano Garzarella @ 2025-04-30 15:51 ` Jarkko Sakkinen 1 sibling, 0 replies; 6+ messages in thread From: Jarkko Sakkinen @ 2025-04-30 15:51 UTC (permalink / raw) To: Yeoreum Yun Cc: peterhuewe, jgg, sudeep.holla, stuart.yoder, sgarzare, linux-integrity, linux-kernel On Tue, Apr 15, 2025 at 07:50:13PM +0100, Yeoreum Yun wrote: > Instead of pr_xxx() macro, use dev_xxx() to print log. > This patch changes some error log level to warn log level when > the tpm_crb_ffa secure partition doesn't support properly but > system can run without it. > (i.e) unsupport of direct message ABI or unsupported ABI version > > Signed-off-by: Yeoreum Yun <yeoreum.yun@arm.com> > --- > drivers/char/tpm/tpm_crb_ffa.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/drivers/char/tpm/tpm_crb_ffa.c b/drivers/char/tpm/tpm_crb_ffa.c > index fed775cf53ab..66b38b2cbdd5 100644 > --- a/drivers/char/tpm/tpm_crb_ffa.c > +++ b/drivers/char/tpm/tpm_crb_ffa.c > @@ -303,7 +303,7 @@ static int tpm_crb_ffa_probe(struct ffa_device *ffa_dev) > > if (!ffa_partition_supports_direct_recv(ffa_dev) && > !ffa_partition_supports_direct_req2_recv(ffa_dev)) { > - pr_err("TPM partition doesn't support direct message receive.\n"); > + dev_warn(&ffa_dev->dev, "partition doesn't support direct message receive.\n"); > return -EINVAL; > } > > @@ -324,17 +324,17 @@ static int tpm_crb_ffa_probe(struct ffa_device *ffa_dev) > rc = tpm_crb_ffa_get_interface_version(&tpm_crb_ffa->major_version, > &tpm_crb_ffa->minor_version); > if (rc) { > - pr_err("failed to get crb interface version. rc:%d", rc); > + dev_err(&ffa_dev->dev, "failed to get crb interface version. rc:%d\n", rc); > goto out; > } > > - pr_info("ABI version %u.%u", tpm_crb_ffa->major_version, > + dev_info(&ffa_dev->dev, "ABI version %u.%u\n", tpm_crb_ffa->major_version, > tpm_crb_ffa->minor_version); > > if (tpm_crb_ffa->major_version != CRB_FFA_VERSION_MAJOR || > (tpm_crb_ffa->minor_version > 0 && > tpm_crb_ffa->minor_version < CRB_FFA_VERSION_MINOR)) { > - pr_err("Incompatible ABI version"); > + dev_warn(&ffa_dev->dev, "Incompatible ABI version\n"); > goto out; > } > > -- > LEVI:{C3F47F37-75D8-414A-A8BA-3980EC8A46D7} > > Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org> BR, Jarkko ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2025-04-30 15:51 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-04-15 18:50 [PATCH v5 0/2] tpm_ffa_crb: add support direct message request v2 Yeoreum Yun 2025-04-15 18:50 ` [PATCH v5 1/2] tpm_ffa_crb: access tpm service over FF-A " Yeoreum Yun 2025-04-30 15:51 ` Jarkko Sakkinen 2025-04-15 18:50 ` [PATCH v5 2/2] tpm_crb_ffa: use dev_xx() macro to print log Yeoreum Yun 2025-04-16 9:08 ` Stefano Garzarella 2025-04-30 15:51 ` Jarkko Sakkinen
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).