From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8D972451983 for ; Thu, 20 Aug 2026 13:25:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787232321; cv=none; b=E3qRSAVXcFuktVnvJBP3anXpLVDEQggtPt7SjXUajI3iIM9eJv64l/fG0S75e1rLaaP4Fq4JSKwDCv0kSGfy8oX3koZalG5hzsH1S1qQcGsNm34XkmFXPcvWj3WbWecA55ryzGq0mc7Jod1+JpIdomsw7wdPOHbrsT6RPkvV9Lk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787232321; c=relaxed/simple; bh=3+wXYz3Xivy0AKKEKwgo5jBHvbMzCq6hPJk0sZNdm+Q=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=B4FayB6mchwoI/0Kj1VyS+7JJZsZXx3b9Pe4B5ZkAEVTEvrGYPi+7MLs5R26mx+uBbCexLlRie4/xjTfuGgCe4FV6jXxs9JXTat2czbR1V/wlP3bBp9HV/2P7M5jT3V/vfGO83trqjDmQuH0CtcaCD9d9Vtv7ipq3W0UEQyWQMQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=ed+3/BXE; arc=none smtp.client-ip=209.85.128.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="ed+3/BXE" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-499b1409a75so48965e9.1 for ; Thu, 20 Aug 2026 06:25:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787232318; x=1787837118; darn=vger.kernel.org; h=in-reply-to:content-disposition:content-type:mime-version :references:message-id:subject:cc:to:from:date:from:to:cc:subject :date:message-id:reply-to:content-type; bh=3cD1lm9J5LOoc1VctowqA+QcEiYzpDZbKA3NAtqMB+c=; b=ed+3/BXEMltfqXEyMvfokES6aHc6lEQqyBExgA7mwZFhdaE74en73DtZrR7hTpHijm vix6WttKNqc7gf1yBrrVki1h02WvS+j4JmtSz8DpnZFzLfzPJNP8MVxJZvHyMoiIsFbs HqHXLKTIQOj931OP+mO20hMs1uBR06WwMKAcBoKfaZx5gDVCnNDQNbhAFLcyDIMGgSsw Y5sKOf6cpTe74rBLKy/maMdoDrCfMM5UTaqRSkOBIaca3Z1yKjxle21UnO0uox9vMRJr 3b/vlvN0Ctatquzrzu/hcJJWVqoLCKQbRx3C3sadBStOBH42dhZiQde3IxCbg4j1goa3 d7Rg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787232318; x=1787837118; h=in-reply-to:content-disposition:content-type:mime-version :references:message-id:subject:cc:to:from:date:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=3cD1lm9J5LOoc1VctowqA+QcEiYzpDZbKA3NAtqMB+c=; b=p9/1XJVCFb9MrCfH02GgpUolcm7l3ZfyAQqJZ+N7Gf5lr7/zn3Sh0q3j4dgGOod8uq baf8ZJsHYpWilvb1R5JcGnWc47FD2TpHJPa5WkM0ALawVgTG+FgnezVk1UzbC8wfU2DR WMi4tPPNzxQVxzgU+6K/NbNLOcMCADkCNS6JYOWh1Mw/91CmL5KR07Jk7jsK5EQqa84i KnZI30j5EiwNKGFYOgl8g5Xj+r+iiwAF95vLHqNqXHBYMpAvqQUoiHhBGssxTyscr7Su pBf7gz324xNAJjHo/FJW0tYj6826o7w5HQnCcDV5ujayKGpVducVDHj56suWnSLQuvU9 k3OA== X-Forwarded-Encrypted: i=1; AHgh+RocR8cOFYxUV+FnXRvXzLJyx44mWOzMYmezK9zMhUHnlkDiYdZrbOd3AP/qRIsFl34rr03kgVlncJFNaZU=@vger.kernel.org X-Gm-Message-State: AOJu0YwInI2ou3DzxgT//G5LirfXJcc+diYFS7Y1iGHbdUImEjssbLHC as3dY4BjcYFCMpyXQnmJ20TPrL289pDrqUpErMuJmzc8qohh0KH9dnJxq6bDQASUTw== X-Gm-Gg: AR+sD10NcTRSwAhuiUxtu1ix8Ls6kyITYEMDxnG+TNj10zukx1Wt+lZOMah1AfxbKHa 4AUlno3KfNiUkRUUwxYLXEUQzVHfCABmGIpwOwtbJXX/BV0JQUsL0ijeGdYmOOycmv9FpauYbmq hi75m+7ehPVc9CZPWbQ/GNYYtd9/GNtNR10gKmInm8BYYXvKSYwx8mGv4Xxar5oYpXPrH3tRTFn gsUGt6i/0yq2z8TyK2RlHDpYNvaugN5KOqrDkg19Oz2Iidepe5RxaChRcm/nH5mAS7vKZMcOUjT jOUyo8MyIm2Ms7vEzq2BGJEJuiyV0Ag5LbTTTkKttCedZzkDX8KOKvWgGiS01deInEQexarwgpY z7vutG7d8JGl4tH4TJBfcEnscvUDpOZmsyDQbQqqt60elOIgmufsQD+CY3sgrY+abMjWiY/NfaR 31gd4QwADy1ChkRr96C1E7vcW4AwLIaL9Elgt8xiRC3n65dJ/AeL+CoLFpHPW2HPM1AKYzTwZxf 8Y6cEhvL3UTaLFuPJ4LZvwHzdmGvUPV X-Received: by 2002:a05:600c:5ca:b0:48a:623c:8859 with SMTP id 5b1f17b1804b1-499b1ee3dacmr656705e9.7.1787232317330; Thu, 20 Aug 2026 06:25:17 -0700 (PDT) Received: from google.com (63.235.189.35.bc.googleusercontent.com. [35.189.235.63]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-499aca21c63sm160099225e9.0.2026.08.20.06.25.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Aug 2026 06:25:16 -0700 (PDT) Date: Thu, 20 Aug 2026 13:25:12 +0000 From: Sebastian Ene To: Kim Mankyum Cc: Marc Zyngier , Oliver Upton , Will Deacon , Fuad Tabba , Andrew Walbran , linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-kernel@vger.kernel.org Subject: Re: [PATCH] KVM: arm64: Allow smaller FF-A RX/TX buffers Message-ID: References: <20260820-master-v1-1-ea602b6d3860@samsung.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20260820-master-v1-1-ea602b6d3860@samsung.com> On Thu, Aug 20, 2026 at 02:42:31PM +0900, Kim Mankyum wrote: Hello Kim, > pKVM currently requires the host to map PAGE_SIZE worth of RX/TX > buffers, as do_ffa_rxtx_map() requires the FF-A page count to match > the capacity of the hypervisor RX/TX buffers. > > This is unnecessarily restrictive when the kernel page size is larger > than the minimum RX/TX buffer size advertised by the SPMC. For > example, with a 16K kernel and an SPMC advertising a minimum RX/TX > buffer size of 4K, a host request with a page count of one is rejected > by pKVM. > That is because we should trap and report the minimum number of pages from pKVM and not from SPMC. The host doesn't end up mapping directly in the SPMC. Something like this should do the trick: ``` diff --git a/arch/arm64/kvm/hyp/nvhe/ffa.c b/arch/arm64/kvm/hyp/nvhe/ffa.c index 48cf502ce1e7..95156d409f79 100644 --- a/arch/arm64/kvm/hyp/nvhe/ffa.c +++ b/arch/arm64/kvm/hyp/nvhe/ffa.c @@ -1355,7 +1355,7 @@ static bool do_ffa_features(struct arm_smccc_1_2_regs *res, struct kvm_cpu_context *ctxt) { DECLARE_REG(u32, id, ctxt, 1); - u64 prop = 0; + u64 prop = 0, buff_sz; int ret = 0; if (!ffa_call_supported(id)) { @@ -1364,6 +1364,18 @@ static bool do_ffa_features(struct arm_smccc_1_2_regs *res, } switch (id) { + case FFA_RXTX_MAP: + case FFA_FN64_RXTX_MAP: + buff_sz = KVM_FFA_MBOX_NR_PAGES * PAGE_SIZE; + if (buff_sz == SZ_4K) + prop = FFA_FEAT_RXTX_MIN_SZ_4K; + else if (buff_sz == SZ_64K) + prop = FFA_FEAT_RXTX_MIN_SZ_64K; + else if (buff_sz == SZ_16K) + prop = FFA_FEAT_RXTX_MIN_SZ_16K; + else + ret = FFA_RET_NOT_SUPPORTED; + goto out_handled; case FFA_MEM_SHARE: case FFA_FN64_MEM_SHARE: case FFA_MEM_LEND: ``` > hyp_ffa_post_init() already allows an SPMC whose minimum RX/TX buffer > size is smaller than PAGE_SIZE, and the page count supplied by the host > is forwarded unchanged when mapping the hypervisor buffers into the > SPMC. > > Allow RX/TX buffers smaller than the capacity of the hypervisor buffers > while continuing to reject requests which exceed it. > I don't think you should change that, it will probably brake things because the hyp knows that it is using KVM_FFA_MBOX_NR_PAGES but you only mapped npages in SPMC. I have some android patch where I am also trying to remove the limitation that the hypervisor has only one page per mailbox buffer (set in stone that KVM_FFA_MBOX_NR_PAGES is 1) : https://android-review.googlesource.com/c/kernel/common/+/4238522 This should probably put you in a better position for a patch ? > Fixes: 9d0c6a9af9e3 ("KVM: arm64: Handle FFA_RXTX_MAP and FFA_RXTX_UNMAP calls from the host") > Signed-off-by: Kim Mankyum > --- > arch/arm64/kvm/hyp/nvhe/ffa.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/arch/arm64/kvm/hyp/nvhe/ffa.c b/arch/arm64/kvm/hyp/nvhe/ffa.c > index a327c2bbb6b6..594d1112b5f9 100644 > --- a/arch/arm64/kvm/hyp/nvhe/ffa.c > +++ b/arch/arm64/kvm/hyp/nvhe/ffa.c > @@ -239,7 +239,8 @@ static void do_ffa_rxtx_map(struct arm_smccc_1_2_regs *res, > int ret = 0; > void *rx_virt, *tx_virt; > > - if (npages != (KVM_FFA_MBOX_NR_PAGES * PAGE_SIZE) / FFA_PAGE_SIZE) { > + if (!npages || > + npages > (KVM_FFA_MBOX_NR_PAGES * PAGE_SIZE) / FFA_PAGE_SIZE) { > ret = FFA_RET_INVALID_PARAMETERS; > goto out; > } > > --- > base-commit: cb8a75eec0877810b50aa1c5a833f929525cd2ee > change-id: 20260820-master-572418a358ab > > Best regards, > -- > Kim Mankyum > Thanks, Sebastian