From: Jarkko Sakkinen <jarkko@kernel.org>
To: Jason Gunthorpe <jgg@ziepe.ca>
Cc: Sumit Garg <sumit.garg@kernel.org>,
Stefano Garzarella <sgarzare@redhat.com>,
linux-kernel@vger.kernel.org, Peter Huewe <peterhuewe@gmx.de>,
linux-integrity@vger.kernel.org,
James Bottomley <James.Bottomley@hansenpartnership.com>,
Jens Wiklander <jens.wiklander@linaro.org>
Subject: Re: [PATCH 2/2] tpm/tpm_ftpm_tee: use send_recv() op
Date: Wed, 26 Mar 2025 17:58:28 +0200 [thread overview]
Message-ID: <Z-QkGUenPAMid63l@kernel.org> (raw)
In-Reply-To: <Z-QV5y1JGBDpsPuH@kernel.org>
[-- Attachment #1: Type: text/plain, Size: 1633 bytes --]
On Wed, Mar 26, 2025 at 04:57:47PM +0200, Jarkko Sakkinen wrote:
> On Wed, Mar 26, 2025 at 11:34:01AM -0300, Jason Gunthorpe wrote:
> > On Wed, Mar 26, 2025 at 02:11:12PM +0200, Jarkko Sakkinen wrote:
> >
> > > Generally speaking I don't see enough value in complicating
> > > callback interface. It's better to handle complications in
> > > the leaves (i.e. dictatorship of majority ;-) ).
> >
> > That is very much not the way most driver subsystems view the
> > world. We want to pull logical things into the core code and remove
> > them from drivers to make the drivers simpler and more robust.
> >
> > The amount of really dumb driver boiler plate that this series
> > obviously removes is exactly the sort of stuff we should be fixing by
> > improving the core code.
> >
> > The callback interface was never really sanely designed, it was just
> > built around the idea of pulling the timout processing into the core
> > code for TIS hardware. It should be revised to properly match these
> > new HW types that don't have this kind of timeout mechanism.
>
> Both TIS and CRB, which are TCG standards and they span to many
> different types of drivers and busses. I don't have the figures but
> probably they cover vast majority of the hardware.
>
> We are talking about 39 lines of reduced complexity at the cost
> of complicating branching at the top level. I doubt that there
> is either any throughput or latency issues.
>
> What is measurable benefit? The rationale is way way too abstract
> for me to cope, sorry.
E.g., here's how you can get rid of extra cruft in tpm_ftpm_tee w/o
any new callbacks.
BR, Jarkko
[-- Attachment #2: 0001-tpm-Make-chip-status-cancel-req_canceled-opt.patch --]
[-- Type: text/x-diff, Size: 3400 bytes --]
From 1125e80ea274a5ec5d5dba32bfce716ce62c5e4a Mon Sep 17 00:00:00 2001
From: Jarkko Sakkinen <jarkko@kernel.org>
Date: Wed, 26 Mar 2025 17:55:49 +0200
Subject: [PATCH] tpm: Make chip->{status,cancel,req_canceled} opt
tpm_ftpm_tee does not require chip->status, chip->cancel and
chip->req_canceled. Make them optional.
Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
---
drivers/char/tpm/tpm-interface.c | 31 ++++++++++++++++++++++++++++---
drivers/char/tpm/tpm_ftpm_tee.c | 18 ------------------
2 files changed, 28 insertions(+), 21 deletions(-)
diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c
index f62f7871edbd..10ba47a882d8 100644
--- a/drivers/char/tpm/tpm-interface.c
+++ b/drivers/char/tpm/tpm-interface.c
@@ -58,6 +58,30 @@ unsigned long tpm_calc_ordinal_duration(struct tpm_chip *chip, u32 ordinal)
}
EXPORT_SYMBOL_GPL(tpm_calc_ordinal_duration);
+static void tpm_chip_cancel(struct tpm_chip *chip)
+{
+ if (!chip->ops->cancel)
+ return;
+
+ chip->ops->cancel(chip);
+}
+
+static u8 tpm_chip_status(struct tpm_chip *chip)
+{
+ if (!chip->ops->status)
+ return 0;
+
+ return chip->ops->status(chip);
+}
+
+static bool tpm_chip_req_canceled(struct tpm_chip *chip, u8 status)
+{
+ if (!chip->ops->req_canceled)
+ return false;
+
+ return chip->ops->req_canceled(chip, status);
+}
+
static ssize_t tpm_try_transmit(struct tpm_chip *chip, void *buf, size_t bufsiz)
{
struct tpm_header *header = buf;
@@ -65,6 +89,7 @@ static ssize_t tpm_try_transmit(struct tpm_chip *chip, void *buf, size_t bufsiz)
ssize_t len = 0;
u32 count, ordinal;
unsigned long stop;
+ u8 status;
if (bufsiz < TPM_HEADER_SIZE)
return -EINVAL;
@@ -104,12 +129,12 @@ static ssize_t tpm_try_transmit(struct tpm_chip *chip, void *buf, size_t bufsiz)
stop = jiffies + tpm_calc_ordinal_duration(chip, ordinal);
do {
- u8 status = chip->ops->status(chip);
+ status = tpm_chip_status(chip);
if ((status & chip->ops->req_complete_mask) ==
chip->ops->req_complete_val)
goto out_recv;
- if (chip->ops->req_canceled(chip, status)) {
+ if (tpm_chip_req_canceled(chip, status)) {
dev_err(&chip->dev, "Operation Canceled\n");
return -ECANCELED;
}
@@ -118,7 +143,7 @@ static ssize_t tpm_try_transmit(struct tpm_chip *chip, void *buf, size_t bufsiz)
rmb();
} while (time_before(jiffies, stop));
- chip->ops->cancel(chip);
+ tpm_chip_cancel(chip);
dev_err(&chip->dev, "Operation Timed out\n");
return -ETIME;
diff --git a/drivers/char/tpm/tpm_ftpm_tee.c b/drivers/char/tpm/tpm_ftpm_tee.c
index 8d9209dfc384..3732f3623537 100644
--- a/drivers/char/tpm/tpm_ftpm_tee.c
+++ b/drivers/char/tpm/tpm_ftpm_tee.c
@@ -164,30 +164,12 @@ static int ftpm_tee_tpm_op_send(struct tpm_chip *chip, u8 *buf, size_t len)
return 0;
}
-static void ftpm_tee_tpm_op_cancel(struct tpm_chip *chip)
-{
- /* not supported */
-}
-
-static u8 ftpm_tee_tpm_op_status(struct tpm_chip *chip)
-{
- return 0;
-}
-
-static bool ftpm_tee_tpm_req_canceled(struct tpm_chip *chip, u8 status)
-{
- return false;
-}
-
static const struct tpm_class_ops ftpm_tee_tpm_ops = {
.flags = TPM_OPS_AUTO_STARTUP,
.recv = ftpm_tee_tpm_op_recv,
.send = ftpm_tee_tpm_op_send,
- .cancel = ftpm_tee_tpm_op_cancel,
- .status = ftpm_tee_tpm_op_status,
.req_complete_mask = 0,
.req_complete_val = 0,
- .req_canceled = ftpm_tee_tpm_req_canceled,
};
/*
--
2.39.5
next prev parent reply other threads:[~2025-03-26 15:58 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-20 15:24 [PATCH 0/2] tpm: add send_recv() op and use it in tpm_ftpm_tee driver Stefano Garzarella
2025-03-20 15:24 ` [PATCH 1/2] tpm: add send_recv() op in tpm_class_ops Stefano Garzarella
2025-03-26 16:53 ` Jarkko Sakkinen
2025-03-27 9:48 ` Stefano Garzarella
2025-03-27 13:02 ` Jarkko Sakkinen
2025-03-27 14:44 ` Stefano Garzarella
2025-03-20 15:24 ` [PATCH 2/2] tpm/tpm_ftpm_tee: use send_recv() op Stefano Garzarella
2025-03-25 5:19 ` Sumit Garg
2025-03-26 12:11 ` Jarkko Sakkinen
2025-03-26 14:34 ` Jason Gunthorpe
2025-03-26 14:57 ` Jarkko Sakkinen
2025-03-26 15:58 ` Jarkko Sakkinen [this message]
2025-03-26 20:37 ` Jarkko Sakkinen
2025-03-27 9:27 ` Stefano Garzarella
2025-03-27 13:04 ` Jarkko Sakkinen
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=Z-QkGUenPAMid63l@kernel.org \
--to=jarkko@kernel.org \
--cc=James.Bottomley@hansenpartnership.com \
--cc=jens.wiklander@linaro.org \
--cc=jgg@ziepe.ca \
--cc=linux-integrity@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=peterhuewe@gmx.de \
--cc=sgarzare@redhat.com \
--cc=sumit.garg@kernel.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.