Re: [RFC PATCH 4/4] firmware: arm_ffa: check pkvm initailised when initailise ffa driver
Yeoreum Yun <[email protected]>
| Newsgroups | org.kernel.vger.linux-integrity,dev.linux.lists.kvmarm,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-kernel,org.kernel.vger.linux-security-module |
|---|---|
| Message-ID | <[email protected]> |
Hi Marc, > On Fri, 17 Apr 2026 18:57:59 +0100, > Yeoreum Yun <[email protected]> wrote: > > > > When pKVM is enabled, the FF-A driver must be initialized after pKVM. > > Otherwise, pKVM cannot negotiate the FF-A version or > > obtain RX/TX buffer information, leading to failures in FF-A calls. > > > > During FF-A driver initialization, check whether pKVM has been initialized. > > If not, defer probing of the FF-A driver. > > > > Signed-off-by: Yeoreum Yun <[email protected]> > > --- > > arch/arm64/kvm/arm.c | 1 + > > drivers/firmware/arm_ffa/driver.c | 12 ++++++++++++ > > 2 files changed, 13 insertions(+) > > > > diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c > > index 410ffd41fd73..0f517b1c05cd 100644 > > --- a/arch/arm64/kvm/arm.c > > +++ b/arch/arm64/kvm/arm.c > > @@ -119,6 +119,7 @@ bool is_kvm_arm_initialised(void) > > { > > return kvm_arm_initialised; > > } > > +EXPORT_SYMBOL(is_kvm_arm_initialised); > > EXPORT_SYMBOL_GPL(), please. Okay. > > > > > int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu) > > { > > diff --git a/drivers/firmware/arm_ffa/driver.c b/drivers/firmware/arm_ffa/driver.c > > index 02c76ac1570b..2647d6554afd 100644 > > --- a/drivers/firmware/arm_ffa/driver.c > > +++ b/drivers/firmware/arm_ffa/driver.c > > @@ -42,6 +42,8 @@ > > #include <linux/uuid.h> > > #include <linux/xarray.h> > > > > +#include <asm/virt.h> > > + > > #include "common.h" > > > > #define FFA_DRIVER_VERSION FFA_VERSION_1_2 > > @@ -2035,6 +2037,16 @@ static int __init ffa_init(void) > > u32 buf_sz; > > size_t rxtx_bufsz = SZ_4K; > > > > + /* > > + * When pKVM is enabled, the FF-A driver must be initialized > > + * after pKVM initialization. Otherwise, pKVM cannot negotiate > > + * the FF-A version or obtain RX/TX buffer information, > > + * which leads to failures in FF-A calls. > > + */ > > + if (IS_ENABLED(CONFIG_KVM) && is_protected_kvm_enabled() && > > + !is_kvm_arm_initialised()) > > + return -EPROBE_DEFER; > > + > > That's still fundamentally wrong: pkvm is not ready until > finalize_pkvm() has finished, and that's not indicated by > is_kvm_arm_initialised(). Thanks. I miss the TSC bit set in here. IMHO, I'd like to make an new state check function -- is_pkvm_arm_initialised() so that ff-a driver to know whether pkvm is initialised. or any other suggestion? Thanks. -- Sincerely, Yeoreum Yun