On Fri, Feb 28, 2025 at 06:07:16PM +0100, Stefano Garzarella wrote:
> +bool snp_svsm_vtpm_probe(void)
> +{
> +     struct svsm_call call = {};
> +     u64 send_cmd_mask = 0;
> +     u64 platform_cmds;
> +     u64 features;
> +     int ret;
> +
> +     /* The vTPM device is available only if we have a SVSM */

s/if we have a SVSM/if an SVSM is present/

> +     if (!snp_vmpl)
> +             return false;
> +
> +     call.caa = svsm_get_caa();
> +     call.rax = SVSM_VTPM_CALL(SVSM_VTPM_QUERY);
> +
> +     ret = svsm_perform_call_protocol(&call);
> +


^ Superfluous newline.

> +     if (ret != SVSM_SUCCESS)
> +             return false;
> +
> +     features = call.rdx_out;
> +     platform_cmds = call.rcx_out;
> +
> +     /* No feature supported, it should be zero */
> +     if (features)
> +             pr_warn("SNP SVSM vTPM unsupported features: 0x%llx\n",
> +                     features);

So

        return false;

here?

> +
> +     /* TPM_SEND_COMMAND - platform command 8 */
> +     send_cmd_mask = 1 << 8;

        BIT_ULL(8);

> +
> +     return (platform_cmds & send_cmd_mask) == send_cmd_mask;
> +}
> +EXPORT_SYMBOL_GPL(snp_svsm_vtpm_probe);
> +
> +int snp_svsm_vtpm_send_command(u8 *buffer)
> +{
> +     struct svsm_call call = {};
> +
> +     call.caa = svsm_get_caa();
> +     call.rax = SVSM_VTPM_CALL(SVSM_VTPM_CMD);
> +     call.rcx = __pa(buffer);
> +
> +     return svsm_perform_call_protocol(&call);
> +}

In any case, you can zap all those local vars, use comments instead and slim
down the function, diff ontop:

diff --git a/arch/x86/coco/sev/core.c b/arch/x86/coco/sev/core.c
index 3902af4b1385..6d7e97c1f567 100644
--- a/arch/x86/coco/sev/core.c
+++ b/arch/x86/coco/sev/core.c
@@ -2631,12 +2631,9 @@ static int snp_issue_guest_request(struct snp_guest_req 
*req, struct snp_req_dat
 bool snp_svsm_vtpm_probe(void)
 {
        struct svsm_call call = {};
-       u64 send_cmd_mask = 0;
-       u64 platform_cmds;
-       u64 features;
        int ret;
 
-       /* The vTPM device is available only if we have a SVSM */
+       /* The vTPM device is available only if a SVSM is present */
        if (!snp_vmpl)
                return false;
 
@@ -2644,22 +2641,17 @@ bool snp_svsm_vtpm_probe(void)
        call.rax = SVSM_VTPM_CALL(SVSM_VTPM_QUERY);
 
        ret = svsm_perform_call_protocol(&call);
-
        if (ret != SVSM_SUCCESS)
                return false;
 
-       features = call.rdx_out;
-       platform_cmds = call.rcx_out;
-
        /* No feature supported, it should be zero */
-       if (features)
-               pr_warn("SNP SVSM vTPM unsupported features: 0x%llx\n",
-                       features);
-
-       /* TPM_SEND_COMMAND - platform command 8 */
-       send_cmd_mask = 1 << 8;
+       if (call.rdx_out) {
+               pr_warn("SNP SVSM vTPM unsupported features: 0x%llx\n", 
call.rdx_out);
+               return false;
+       }
 
-       return (platform_cmds & send_cmd_mask) == send_cmd_mask;
+       /* Check platform commands is TPM_SEND_COMMAND - platform command 8 */
+       return (call.rcx_out & BIT_ULL(8)) == BIT_ULL(8);
 }
 EXPORT_SYMBOL_GPL(snp_svsm_vtpm_probe);
 

-- 
Regards/Gruss,
    Boris.

https://people.kernel.org/tglx/notes-about-netiquette

Reply via email to