From: Rouven Czerwinski <rouven.czerwinski@linaro.org>
Simplify the TEE implementor ID match by returning the boolean
expression directly instead of going through an if/else.
Signed-off-by: Rouven Czerwinski <rouven.czerwinski@linaro.org>
---
drivers/rtc/rtc-optee.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/drivers/rtc/rtc-optee.c b/drivers/rtc/rtc-optee.c
index 184c6d142801..2f18be3de684 100644
--- a/drivers/rtc/rtc-optee.c
+++ b/drivers/rtc/rtc-optee.c
@@ -541,10 +541,7 @@ static int optee_rtc_read_info(struct device *dev, struct rtc_device *rtc,
static int optee_ctx_match(struct tee_ioctl_version_data *ver, const void *data)
{
- if (ver->impl_id == TEE_IMPL_ID_OPTEE)
- return 1;
- else
- return 0;
+ return (ver->impl_id == TEE_IMPL_ID_OPTEE);
}
static int optee_rtc_probe(struct device *dev)
--
2.52.0
On 26/01/2026 11:11:26+0100, Rouven Czerwinski via B4 Relay wrote:
> From: Rouven Czerwinski <rouven.czerwinski@linaro.org>
>
> Simplify the TEE implementor ID match by returning the boolean
> expression directly instead of going through an if/else.
>
> Signed-off-by: Rouven Czerwinski <rouven.czerwinski@linaro.org>
> ---
> drivers/rtc/rtc-optee.c | 5 +----
> 1 file changed, 1 insertion(+), 4 deletions(-)
>
> diff --git a/drivers/rtc/rtc-optee.c b/drivers/rtc/rtc-optee.c
> index 184c6d142801..2f18be3de684 100644
> --- a/drivers/rtc/rtc-optee.c
> +++ b/drivers/rtc/rtc-optee.c
> @@ -541,10 +541,7 @@ static int optee_rtc_read_info(struct device *dev, struct rtc_device *rtc,
>
> static int optee_ctx_match(struct tee_ioctl_version_data *ver, const void *data)
> {
> - if (ver->impl_id == TEE_IMPL_ID_OPTEE)
> - return 1;
> - else
> - return 0;
> + return (ver->impl_id == TEE_IMPL_ID_OPTEE);
I guess the correct way to do this would be:
return !!(ver->impl_id == TEE_IMPL_ID_OPTEE);
But is this change actually generating better code?
Before:
static int optee_ctx_match(struct tee_ioctl_version_data *ver, const void *data)
{
if (ver->impl_id == TEE_IMPL_ID_OPTEE)
0: e5900000 ldr r0, [r0]
return 1;
else
return 0;
}
4: e2400001 sub r0, r0, #1
8: e16f0f10 clz r0, r0
c: e1a002a0 lsr r0, r0, #5
10: e12fff1e bx lr
After:
static int optee_ctx_match(struct tee_ioctl_version_data *ver, const void *data)
{
return !!(ver->impl_id == TEE_IMPL_ID_OPTEE);
0: e5900000 ldr r0, [r0]
}
4: e2400001 sub r0, r0, #1
8: e16f0f10 clz r0, r0
c: e1a002a0 lsr r0, r0, #5
10: e12fff1e bx lr
I'm in favor of keeping the current version.
--
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
Hi Alexandre,
On Thu, 2026-01-29 at 17:05 +0100, Alexandre Belloni wrote:
> On 26/01/2026 11:11:26+0100, Rouven Czerwinski via B4 Relay wrote:
> > From: Rouven Czerwinski <rouven.czerwinski@linaro.org>
> >
> > Simplify the TEE implementor ID match by returning the boolean
> > expression directly instead of going through an if/else.
> >
> > Signed-off-by: Rouven Czerwinski <rouven.czerwinski@linaro.org>
> > ---
> > drivers/rtc/rtc-optee.c | 5 +----
> > 1 file changed, 1 insertion(+), 4 deletions(-)
> >
> > diff --git a/drivers/rtc/rtc-optee.c b/drivers/rtc/rtc-optee.c
> > index 184c6d142801..2f18be3de684 100644
> > --- a/drivers/rtc/rtc-optee.c
> > +++ b/drivers/rtc/rtc-optee.c
> > @@ -541,10 +541,7 @@ static int optee_rtc_read_info(struct device
> > *dev, struct rtc_device *rtc,
> >
> > static int optee_ctx_match(struct tee_ioctl_version_data *ver,
> > const void *data)
> > {
> > - if (ver->impl_id == TEE_IMPL_ID_OPTEE)
> > - return 1;
> > - else
> > - return 0;
> > + return (ver->impl_id == TEE_IMPL_ID_OPTEE);
>
> I guess the correct way to do this would be:
>
> return !!(ver->impl_id == TEE_IMPL_ID_OPTEE);
Could you explain why? If I read the standard correctly, an equality
operation always produces either 1 or 0, so there should be no need for
!! here like there is for bit flag comparisons, i.e. !!(flag &
SOME_FLAG_SET) to normalize to 1 or 0. Wondering if I am missing
something.
> But is this change actually generating better code?
>
> Before:
>
> static int optee_ctx_match(struct tee_ioctl_version_data *ver, const
> void *data)
> {
> if (ver->impl_id == TEE_IMPL_ID_OPTEE)
> 0: e5900000 ldr r0, [r0]
> return 1;
> else
> return 0;
> }
> 4: e2400001 sub r0, r0, #1
> 8: e16f0f10 clz r0, r0
> c: e1a002a0 lsr r0, r0, #5
> 10: e12fff1e bx lr
>
> After:
>
> static int optee_ctx_match(struct tee_ioctl_version_data *ver, const
> void *data)
> {
> return !!(ver->impl_id == TEE_IMPL_ID_OPTEE);
> 0: e5900000 ldr r0, [r0]
> }
> 4: e2400001 sub r0, r0, #1
> 8: e16f0f10 clz r0, r0
> c: e1a002a0 lsr r0, r0, #5
> 10: e12fff1e bx lr
>
> I'm in favor of keeping the current version.
I like the short version better, but I am also not very attached to
getting this in at all, I'll let the maintainers decide.
Thanks and best regards,
Rouven
© 2016 - 2026 Red Hat, Inc.