lkml.org 
[lkml]   [2021]   [Apr]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    SubjectRe: [PATCH 4/4] KVM: hyper-v: Advertise support for fast XMM hypercalls
    Date
    Siddharth Chandrasekaran <sidcha@amazon.de> writes:

    > Now that all extant hypercalls that can use XMM registers (based on
    > spec) for input/outputs are patched to support them, we can start
    > advertising this feature to guests.
    >
    > Cc: Alexander Graf <graf@amazon.com>
    > Cc: Evgeny Iakovlev <eyakovl@amazon.de>
    > Signed-off-by: Siddharth Chandrasekaran <sidcha@amazon.de>
    > ---
    > arch/x86/include/asm/hyperv-tlfs.h | 4 ++--
    > arch/x86/kvm/hyperv.c | 1 +
    > 2 files changed, 3 insertions(+), 2 deletions(-)
    >
    > diff --git a/arch/x86/include/asm/hyperv-tlfs.h b/arch/x86/include/asm/hyperv-tlfs.h
    > index e6cd3fee562b..1f160ef60509 100644
    > --- a/arch/x86/include/asm/hyperv-tlfs.h
    > +++ b/arch/x86/include/asm/hyperv-tlfs.h
    > @@ -49,10 +49,10 @@
    > /* Support for physical CPU dynamic partitioning events is available*/
    > #define HV_X64_CPU_DYNAMIC_PARTITIONING_AVAILABLE BIT(3)
    > /*
    > - * Support for passing hypercall input parameter block via XMM
    > + * Support for passing hypercall input and output parameter block via XMM
    > * registers is available
    > */
    > -#define HV_X64_HYPERCALL_PARAMS_XMM_AVAILABLE BIT(4)
    > +#define HV_X64_HYPERCALL_PARAMS_XMM_AVAILABLE BIT(4) | BIT(15)

    TLFS 6.0b states that there are two distinct bits for input and output:

    CPUID Leaf 0x40000003.EDX:
    Bit 4: support for passing hypercall input via XMM registers is available.
    Bit 15: support for returning hypercall output via XMM registers is available.

    and HV_X64_HYPERCALL_PARAMS_XMM_AVAILABLE is not currently used
    anywhere, I'd suggest we just rename

    HV_X64_HYPERCALL_PARAMS_XMM_AVAILABLE to HV_X64_HYPERCALL_XMM_INPUT_AVAILABLE
    and add HV_X64_HYPERCALL_XMM_OUTPUT_AVAILABLE (bit 15).

    > /* Support for a virtual guest idle state is available */
    > #define HV_X64_GUEST_IDLE_STATE_AVAILABLE BIT(5)
    > /* Frequency MSRs available */
    > diff --git a/arch/x86/kvm/hyperv.c b/arch/x86/kvm/hyperv.c
    > index bf2f86f263f1..dd462c1d641d 100644
    > --- a/arch/x86/kvm/hyperv.c
    > +++ b/arch/x86/kvm/hyperv.c
    > @@ -2254,6 +2254,7 @@ int kvm_get_hv_cpuid(struct kvm_vcpu *vcpu, struct kvm_cpuid2 *cpuid,
    > ent->ebx |= HV_POST_MESSAGES;
    > ent->ebx |= HV_SIGNAL_EVENTS;
    >
    > + ent->edx |= HV_X64_HYPERCALL_PARAMS_XMM_AVAILABLE;
    > ent->edx |= HV_FEATURE_FREQUENCY_MSRS_AVAILABLE;
    > ent->edx |= HV_FEATURE_GUEST_CRASH_MSR_AVAILABLE;

    --
    Vitaly

    \
     
     \ /
      Last update: 2021-04-08 14:06    [W:6.308 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site