All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] KVM: arm64: Allow pKVM on v1.0 compatible FF-A implementations
@ 2023-07-18 18:45 Oliver Upton
  2023-07-19  9:57 ` Marc Zyngier
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Oliver Upton @ 2023-07-18 18:45 UTC (permalink / raw)
  To: kvmarm
  Cc: Marc Zyngier, James Morse, Suzuki K Poulose, Zenghui Yu,
	Will Deacon, Sebastian Ene, Oliver Upton

pKVM initialization fails on systems with v1.1+ FF-A implementations, as
the hyp does a strict match on the returned version from FFA_VERSION.
This is a stronger assertion than required by the specification, which
requires minor revisions be backwards compatible with earlier revisions
of the same major version.

Relax the check in hyp_ffa_init() to only test the returned major
version. Even though v1.1 broke ABI, the expectation is that firmware
incapable of using the v1.0 ABI return NOT_SUPPORTED instead of a valid
version.

Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
---
 arch/arm64/kvm/hyp/nvhe/ffa.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/arch/arm64/kvm/hyp/nvhe/ffa.c b/arch/arm64/kvm/hyp/nvhe/ffa.c
index 58dcd92bf346..ab4f5d160c58 100644
--- a/arch/arm64/kvm/hyp/nvhe/ffa.c
+++ b/arch/arm64/kvm/hyp/nvhe/ffa.c
@@ -705,7 +705,20 @@ int hyp_ffa_init(void *pages)
 	if (res.a0 == FFA_RET_NOT_SUPPORTED)
 		return 0;
 
-	if (res.a0 != FFA_VERSION_1_0)
+	/*
+	 * Firmware returns the maximum supported version of the FF-A
+	 * implementation. Check that the returned version is
+	 * backwards-compatible with the hyp according to the rules in DEN0077A
+	 * v1.1 REL0 13.2.1.
+	 *
+	 * Of course, things are never simple when dealing with firmware. v1.1
+	 * broke ABI with v1.0 on several structures, which is itself
+	 * incompatible with the aforementioned versioning scheme. The
+	 * expectation is that v1.x implementations that do not support the v1.0
+	 * ABI return NOT_SUPPORTED rather than a version number, according to
+	 * DEN0077A v1.1 REL0 18.6.4.
+	 */
+	if (FFA_MAJOR_VERSION(res.a0) != 1)
 		return -EOPNOTSUPP;
 
 	arm_smccc_1_1_smc(FFA_ID_GET, 0, 0, 0, 0, 0, 0, 0, &res);

base-commit: 9d2a55b403eea26cab7c831d8e1c00ef1e6a6850
-- 
2.41.0.255.g8b1d071c50-goog


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] KVM: arm64: Allow pKVM on v1.0 compatible FF-A implementations
  2023-07-18 18:45 [PATCH] KVM: arm64: Allow pKVM on v1.0 compatible FF-A implementations Oliver Upton
@ 2023-07-19  9:57 ` Marc Zyngier
  2023-07-19 11:17 ` Will Deacon
  2023-07-19 16:59 ` Oliver Upton
  2 siblings, 0 replies; 4+ messages in thread
From: Marc Zyngier @ 2023-07-19  9:57 UTC (permalink / raw)
  To: Oliver Upton
  Cc: kvmarm, James Morse, Suzuki K Poulose, Zenghui Yu, Will Deacon,
	Sebastian Ene

On Tue, 18 Jul 2023 19:45:37 +0100,
Oliver Upton <oliver.upton@linux.dev> wrote:
> 
> pKVM initialization fails on systems with v1.1+ FF-A implementations, as
> the hyp does a strict match on the returned version from FFA_VERSION.
> This is a stronger assertion than required by the specification, which
> requires minor revisions be backwards compatible with earlier revisions
> of the same major version.
> 
> Relax the check in hyp_ffa_init() to only test the returned major
> version. Even though v1.1 broke ABI, the expectation is that firmware
> incapable of using the v1.0 ABI return NOT_SUPPORTED instead of a valid
> version.
> 
> Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
> ---
>  arch/arm64/kvm/hyp/nvhe/ffa.c | 15 ++++++++++++++-
>  1 file changed, 14 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm64/kvm/hyp/nvhe/ffa.c b/arch/arm64/kvm/hyp/nvhe/ffa.c
> index 58dcd92bf346..ab4f5d160c58 100644
> --- a/arch/arm64/kvm/hyp/nvhe/ffa.c
> +++ b/arch/arm64/kvm/hyp/nvhe/ffa.c
> @@ -705,7 +705,20 @@ int hyp_ffa_init(void *pages)
>  	if (res.a0 == FFA_RET_NOT_SUPPORTED)
>  		return 0;
>  
> -	if (res.a0 != FFA_VERSION_1_0)
> +	/*
> +	 * Firmware returns the maximum supported version of the FF-A
> +	 * implementation. Check that the returned version is
> +	 * backwards-compatible with the hyp according to the rules in DEN0077A
> +	 * v1.1 REL0 13.2.1.
> +	 *
> +	 * Of course, things are never simple when dealing with firmware. v1.1
> +	 * broke ABI with v1.0 on several structures, which is itself
> +	 * incompatible with the aforementioned versioning scheme. The
> +	 * expectation is that v1.x implementations that do not support the v1.0
> +	 * ABI return NOT_SUPPORTED rather than a version number, according to
> +	 * DEN0077A v1.1 REL0 18.6.4.

To quote someone: "What a great!"

> +	 */
> +	if (FFA_MAJOR_VERSION(res.a0) != 1)
>  		return -EOPNOTSUPP;
>  
>  	arm_smccc_1_1_smc(FFA_ID_GET, 0, 0, 0, 0, 0, 0, 0, &res);
> 
> base-commit: 9d2a55b403eea26cab7c831d8e1c00ef1e6a6850

Acked-by: Marc Zyngier <maz@kernel.org>

	M.

-- 
Without deviation from the norm, progress is not possible.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] KVM: arm64: Allow pKVM on v1.0 compatible FF-A implementations
  2023-07-18 18:45 [PATCH] KVM: arm64: Allow pKVM on v1.0 compatible FF-A implementations Oliver Upton
  2023-07-19  9:57 ` Marc Zyngier
@ 2023-07-19 11:17 ` Will Deacon
  2023-07-19 16:59 ` Oliver Upton
  2 siblings, 0 replies; 4+ messages in thread
From: Will Deacon @ 2023-07-19 11:17 UTC (permalink / raw)
  To: Oliver Upton
  Cc: kvmarm, Marc Zyngier, James Morse, Suzuki K Poulose, Zenghui Yu,
	Sebastian Ene

On Tue, Jul 18, 2023 at 06:45:37PM +0000, Oliver Upton wrote:
> pKVM initialization fails on systems with v1.1+ FF-A implementations, as
> the hyp does a strict match on the returned version from FFA_VERSION.
> This is a stronger assertion than required by the specification, which
> requires minor revisions be backwards compatible with earlier revisions
> of the same major version.
> 
> Relax the check in hyp_ffa_init() to only test the returned major
> version. Even though v1.1 broke ABI, the expectation is that firmware
> incapable of using the v1.0 ABI return NOT_SUPPORTED instead of a valid
> version.
> 
> Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
> ---
>  arch/arm64/kvm/hyp/nvhe/ffa.c | 15 ++++++++++++++-
>  1 file changed, 14 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm64/kvm/hyp/nvhe/ffa.c b/arch/arm64/kvm/hyp/nvhe/ffa.c
> index 58dcd92bf346..ab4f5d160c58 100644
> --- a/arch/arm64/kvm/hyp/nvhe/ffa.c
> +++ b/arch/arm64/kvm/hyp/nvhe/ffa.c
> @@ -705,7 +705,20 @@ int hyp_ffa_init(void *pages)
>  	if (res.a0 == FFA_RET_NOT_SUPPORTED)
>  		return 0;
>  
> -	if (res.a0 != FFA_VERSION_1_0)
> +	/*
> +	 * Firmware returns the maximum supported version of the FF-A
> +	 * implementation. Check that the returned version is
> +	 * backwards-compatible with the hyp according to the rules in DEN0077A
> +	 * v1.1 REL0 13.2.1.
> +	 *
> +	 * Of course, things are never simple when dealing with firmware. v1.1
> +	 * broke ABI with v1.0 on several structures, which is itself
> +	 * incompatible with the aforementioned versioning scheme. The
> +	 * expectation is that v1.x implementations that do not support the v1.0
> +	 * ABI return NOT_SUPPORTED rather than a version number, according to
> +	 * DEN0077A v1.1 REL0 18.6.4.
> +	 */
> +	if (FFA_MAJOR_VERSION(res.a0) != 1)
>  		return -EOPNOTSUPP;
>  
>  	arm_smccc_1_1_smc(FFA_ID_GET, 0, 0, 0, 0, 0, 0, 0, &res);

Hopefully firmware gets this right!

Acked-by: Will Deacon <will@kernel.org>

Will

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] KVM: arm64: Allow pKVM on v1.0 compatible FF-A implementations
  2023-07-18 18:45 [PATCH] KVM: arm64: Allow pKVM on v1.0 compatible FF-A implementations Oliver Upton
  2023-07-19  9:57 ` Marc Zyngier
  2023-07-19 11:17 ` Will Deacon
@ 2023-07-19 16:59 ` Oliver Upton
  2 siblings, 0 replies; 4+ messages in thread
From: Oliver Upton @ 2023-07-19 16:59 UTC (permalink / raw)
  To: Oliver Upton, kvmarm
  Cc: Will Deacon, Sebastian Ene, Marc Zyngier, James Morse, Zenghui Yu,
	Suzuki K Poulose

On Tue, 18 Jul 2023 18:45:37 +0000, Oliver Upton wrote:
> pKVM initialization fails on systems with v1.1+ FF-A implementations, as
> the hyp does a strict match on the returned version from FFA_VERSION.
> This is a stronger assertion than required by the specification, which
> requires minor revisions be backwards compatible with earlier revisions
> of the same major version.
> 
> Relax the check in hyp_ffa_init() to only test the returned major
> version. Even though v1.1 broke ABI, the expectation is that firmware
> incapable of using the v1.0 ABI return NOT_SUPPORTED instead of a valid
> version.
> 
> [...]

Applied to kvmarm/fixes, thanks!

[1/1] KVM: arm64: Allow pKVM on v1.0 compatible FF-A implementations
      https://git.kernel.org/kvmarm/kvmarm/c/84f686790321

--
Best,
Oliver

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2023-07-19 17:00 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-07-18 18:45 [PATCH] KVM: arm64: Allow pKVM on v1.0 compatible FF-A implementations Oliver Upton
2023-07-19  9:57 ` Marc Zyngier
2023-07-19 11:17 ` Will Deacon
2023-07-19 16:59 ` Oliver Upton

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.