Re: [PATCH v7 3/3] KVM: arm64: Support FFA_MSG_SEND_DIRECT_REQ2 in host handler

From: Fuad Tabba

Date: Mon Sep 14 2026 - 14:32:04 EST


Hi Per,

On Mon, 31 Aug 2026 at 00:08, Per Larsen via B4 Relay
<devnull+perlarsen.google.com@xxxxxxxxxx> wrote:
...
> -static void do_ffa_direct_msg(struct arm_smccc_1_2_regs *res,
> +static void do_ffa_direct_msg(const u64 func_id,
> + struct arm_smccc_1_2_regs *res,
> struct kvm_cpu_context *ctxt)
> {
> DECLARE_REG(u64, endp, ctxt, 1);
> @@ -894,8 +896,12 @@ static void do_ffa_direct_msg(struct arm_smccc_1_2_regs *res,
> return;
> }
>
> - /* filter out framework messages and validate SBZ/MBZ bits */
> - if (flags) {
> + /*
> + * filter out framework messages and validate SBZ/MBZ flag bits.
> + * FFA_MSG_SEND_DIRECT_REQ2 implies flag-less partition message.
> + */
> + if ((func_id == FFA_MSG_SEND_DIRECT_REQ ||
> + func_id == FFA_FN64_MSG_SEND_DIRECT_REQ) && flags) {
> ffa_to_smccc_error(res, FFA_RET_INVALID_PARAMETERS);
> return;

flags holds x2, which on the REQ2 path is the UUID's low half, so the
name reads as if REQ2 flags had been checked and found zero. Could it
be w2 instead?

Cheers,
/fuad


> }
> @@ -961,15 +967,20 @@ bool kvm_host_ffa_handler(struct kvm_cpu_context *host_ctxt, u32 func_id)
> case FFA_PARTITION_INFO_GET:
> do_ffa_part_get(&res, host_ctxt);
> goto out_handled;
> + case FFA_MSG_SEND_DIRECT_REQ2:
> + if (!ffa_call_supported(func_id))
> + goto out_not_supported;
> + fallthrough;
> case FFA_MSG_SEND_DIRECT_REQ:
> case FFA_FN64_MSG_SEND_DIRECT_REQ:
> - do_ffa_direct_msg(&res, host_ctxt);
> + do_ffa_direct_msg(func_id, &res, host_ctxt);
> goto out_handled;
> }
>
> if (ffa_call_supported(func_id))
> return false; /* Pass through */
>
> +out_not_supported:
> ffa_to_smccc_error(&res, FFA_RET_NOT_SUPPORTED);
> out_handled:
> ffa_set_retval(host_ctxt, &res);
>
> --
> 2.55.0.897.gb25b4bd76c-goog
>
>