[PATCH v5 2/4] KVM: arm64: Introduce hypercall support for retrieving target implementations

Oliver Upton oliver.upton at linux.dev
Mon Jan 27 09:26:04 PST 2025


On Fri, Jan 24, 2025 at 03:17:30PM +0000, Shameer Kolothum wrote:
> If the Guest requires migration to multiple targets, these hypercalls
> will provide a way to retrieve the target CPU implementations from
> the user space VMM.
> 
> Subsequent patch will use this to enable the associated errata.
> 
> Suggested-by: Oliver Upton <oliver.upton at linux.dev>
> Suggested-by: Marc Zyngier <maz at kernel.org>
> Signed-off-by: Shameer Kolothum <shameerali.kolothum.thodi at huawei.com>
> ---
>  Documentation/virt/kvm/arm/hypercalls.rst | 59 +++++++++++++++++++++++
>  include/linux/arm-smccc.h                 | 15 ++++++
>  2 files changed, 74 insertions(+)
> 
> diff --git a/Documentation/virt/kvm/arm/hypercalls.rst b/Documentation/virt/kvm/arm/hypercalls.rst
> index af7bc2c2e0cb..718725cbf6c7 100644
> --- a/Documentation/virt/kvm/arm/hypercalls.rst
> +++ b/Documentation/virt/kvm/arm/hypercalls.rst
> @@ -142,3 +142,62 @@ region is equal to the memory protection granule advertised by
>  |                     |          |    +---------------------------------------------+
>  |                     |          |    | ``INVALID_PARAMETER (-3)``                  |
>  +---------------------+----------+----+---------------------------------------------+
> +
> +``ARM_SMCCC_VENDOR_HYP_KVM_DISCOVER_IMPL_VER_FUNC_ID``
> +-------------------------------------------------------
> +Request the target CPU implementation version information and the number of target
> +implementations for the Guest VM.
> +
> ++---------------------+-------------------------------------------------------------+
> +| Presence:           | Optional;  KVM/ARM64 Guests only                            |
> ++---------------------+-------------------------------------------------------------+
> +| Calling convention: | HVC64                                                       |
> ++---------------------+----------+--------------------------------------------------+
> +| Function ID:        | (uint32) | 0xC6000040                                       |
> ++---------------------+----------+--------------------------------------------------+
> +| Arguments:          | None                                                        |
> ++---------------------+----------+----+---------------------------------------------+
> +| Return Values:      | (int64)  | R0 | ``SUCCESS (0)``                             |
> +|                     |          |    +---------------------------------------------+
> +|                     |          |    | ``NOT_SUPPORTED (-1)``                      |
> +|                     +----------+----+---------------------------------------------+
> +|                     | (uint64) | R1 | Bit[63] Must be zero                        |
> +|                     |          |    +---------------------------------------------+

Why? R0 is sufficient to determine if the hypercall was successful, and
this is already defined as an unsigned quantity to the guest.

> +|                     |          |    | Bits [62:32] Major version                  |
> +|                     |          |    +---------------------------------------------+
> +|                     |          |    | Bits [31:0] Minor version                   |
> +|                     +----------+----+---------------------------------------------+

Do we really need a full u64 of version information? If you collapse
this down to a u32 it'd align with the versioning scheme for PSCI /
SMCCC.

-- 
Thanks,
Oliver



More information about the linux-arm-kernel mailing list