Both the OP-TEE core and some OP-TEE drivers use an if/else expression to check a boolean which can instead be returned directly. Implement this change.
--- Rouven Czerwinski (3): optee: simplify OP-TEE context match hwrng: optee - simplify OP-TEE context match rtc: optee: simplify OP-TEE context match
drivers/char/hw_random/optee-rng.c | 5 +---- drivers/rtc/rtc-optee.c | 5 +---- drivers/tee/optee/device.c | 5 +---- 3 files changed, 3 insertions(+), 12 deletions(-) --- base-commit: 63804fed149a6750ffd28610c5c1c98cce6bd377 change-id: 20260126-optee-simplify-context-match-d5b3467bfacc
Best regards,
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/tee/optee/device.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/drivers/tee/optee/device.c b/drivers/tee/optee/device.c index 950b4661d5df..4c85b04d6004 100644 --- a/drivers/tee/optee/device.c +++ b/drivers/tee/optee/device.c @@ -13,10 +13,7 @@
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 get_devices(struct tee_context *ctx, u32 session,
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/char/hw_random/optee-rng.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/drivers/char/hw_random/optee-rng.c b/drivers/char/hw_random/optee-rng.c index 96b5d546d136..1cb741a6d112 100644 --- a/drivers/char/hw_random/optee-rng.c +++ b/drivers/char/hw_random/optee-rng.c @@ -205,10 +205,7 @@ static int get_optee_rng_info(struct device *dev)
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_rng_probe(struct device *dev)
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)
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.
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
op-tee@lists.trustedfirmware.org