From: Igor Mammedov <imammedo@redhat.com>
To: Vitaly Kuznetsov <vkuznets@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
drjones@redhat.com, Marcelo Tosatti <mtosatti@redhat.com>,
qemu-devel@nongnu.org, Eduardo Habkost <ehabkost@redhat.com>
Subject: Re: [PATCH v4 16/21] i386: track explicit 'hv-*' features enablement/disablement
Date: Tue, 23 Feb 2021 18:48:02 +0100 [thread overview]
Message-ID: <20210223184802.7080da4a@redhat.com> (raw)
In-Reply-To: <871rd6yefp.fsf@vitty.brq.redhat.com>
On Tue, 23 Feb 2021 16:46:50 +0100
Vitaly Kuznetsov <vkuznets@redhat.com> wrote:
> Igor Mammedov <imammedo@redhat.com> writes:
>
> > On Mon, 22 Feb 2021 11:20:34 +0100
> > Vitaly Kuznetsov <vkuznets@redhat.com> wrote:
> >
> >> Vitaly Kuznetsov <vkuznets@redhat.com> writes:
> >>
> >> > Igor Mammedov <imammedo@redhat.com> writes:
> >> >
> >> >>>
> >> >>> We need to distinguish because that would be sane.
> >> >>>
> >> >>> Enlightened VMCS is an extension to VMX, it can't be used without
> >> >>> it. Genuine Hyper-V doesn't have a knob for enabling and disabling it,
> >> >> ...
> >> >>> That bein said, if
> >> >>> guest CPU lacks VMX it is counter-productive to expose EVMCS. However,
> >> >>> there is a problem with explicit enablement: what should
> >> >>>
> >> >>> 'hv-passthrough,hv-evmcs' option do? Just silently drop EVMCS? Doesn't
> >> >>> sound sane to me.
> >> >> based on above I'd error out is user asks for unsupported option
> >> >> i.e. no VMX -> no hv-evmcs - if explicitly asked -> error out
> >> >
> >> > That's what I keep telling you but you don't seem to listen. 'Scratch
> >> > CPU' can't possibly help with this use-case because when you parse
> >> >
> >> > 'hv-passthrough,hv-evmcs,vmx=off' you
> >> >
> >> > 1) "hv-passthrough" -> set EVMCS bit to '1' as it is supported by the
> >> > host.
> >> >
> >> > 2) 'hv-evmcs' -> keep EVMCS bit '1'
> >> >
> >> > 3) 'vmx=off' -> you have no idea where EVMCS bit came from.
> >> >
> >> > We have to remember which options were aquired from the host and which
> >> > were set explicitly by the user.
> >>
> >> Igor,
> >>
> >> could you please comment on the above? In case my line of thought is
> >> correct, and it is impossible to distinguish between e.g.
> >>
> >> 'hv-passthrough,hv-evmcs,-vmx'
> >> and
> >> 'hv-passthrough,-vmx'
> >>
> >> without a custom parser (written just exactly the way I did in this
> >> version, for example) regardless of when 'hv-passthrough' is
> >> expanded. E.g. we have the exact same problem with
> >> 'hv-default,hv-evmcs,-vmx'. I that case I see no point in discussing
> >
> > right, if we need to distinguish between explicit and implicit hv-evmcs set by
> > hv-passthrough custom parser probably the way to go.
> >
> > However do we need actually need to do it?
>
> I think we really need that. See below ...
>
> > I'd treat 'hv-passthrough,-vmx' the same way as 'hv-passthrough,hv-evmcs,-vmx'
> > and it applies not only hv-evmcs but other features hv-passthrough might set
> > (i.e. if whatever was [un]set by hv-passthrough in combination with other
> > features results in invalid config, QEMU shall error out instead of magically
> > altering host provided hv-passthrough value).
> >
> > something like:
> > 'hv-passthrough,-vmx' when hv-passthrough makes hv-evmcs bit set
> > should result in
> > error_setg(errp,"'vmx' feature can't be disabled when hv-evmcs is enabled,"
> > " either enable 'vmx' or disable 'hv-evmcs' along with disabling 'vmx'"
> >
> > making host's features set, *magically* mutable, depending on other user provided features
> > is a bit confusing. One would never know what hv-passthrough actually means, and if
> > enabling/disabling 'random' feature changes it.
> >
> > It's cleaner to do just what user asked (whether implicitly or explicitly) and error out
> > in case it ends up in nonsense configuration.
> >
>
> I don't seem to agree this is a sane behavior, especially if you replace
> 'hv-passthrough' with 'hv-default' above. Removing 'vmx' from CPU for
> Windows guests is common if you'd want to avoid nested configuration:
> even without any Hyper-V guests created, Windows itself is a Hyper-V
> partition.
>
> So a sane user will do:
>
> '-cpu host,hv-default,vmx=off'
>
> and on Intel he will get an error, and on AMD he won't.
>
> So what you're suggesting actually defeats the whole purpose of
> 'hv-default' as upper-layer tools (think libvirt) will need to know that
I'd assume it would be hard for libvirt to use 'hv-default' from migration
point of view. It's semi opaque (one can find out what features it sets
indirectly inspecting individual hv_foo features, and mgmt will need to
know about them). If it will mutate when other features [un]set, upper
layers might need to enumerate all these permutations to know which hosts
are compatible or compare host feature sets every time before attempting
migration.
> Intel configurations for Windows guests are somewhat different. They'll
> need to know what 'hv-evmcs' is. We're back to where we've started.
we were talking about hv-passthrough, and if host advertises hv-evmcs
QEMU should complain if user disabled features it depends on (
not silently fixing up configuration error).
But the same applies to hv-default.
> If we are to follow this approach let's just throw away 'hv-evmcs' from
> 'hv-default' set, it's going to be much cleaner. But again, I don't
> really believe it's the right way to go.
if desired behavior, on Intel host for above config, to start without error
then indeed defaults should not set 'hv-evmcs' if it results in invalid
feature set.
next prev parent reply other threads:[~2021-02-23 17:50 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-10 16:40 [PATCH v4 00/19] i386: KVM: expand Hyper-V features early and provide simple 'hv-default=on' option Vitaly Kuznetsov
2021-02-10 16:40 ` [PATCH v4 01/21] i386: keep hyperv_vendor string up-to-date Vitaly Kuznetsov
2021-02-10 16:40 ` [PATCH v4 02/21] i386: invert hyperv_spinlock_attempts setting logic with hv_passthrough Vitaly Kuznetsov
2021-02-10 16:40 ` [PATCH v4 03/21] i386: always fill Hyper-V CPUID feature leaves from X86CPU data Vitaly Kuznetsov
2021-02-10 16:40 ` [PATCH v4 04/21] i386: stop using env->features[] for filling Hyper-V CPUIDs Vitaly Kuznetsov
2021-02-10 16:40 ` [PATCH v4 05/21] i386: introduce hyperv_feature_supported() Vitaly Kuznetsov
2021-02-10 16:40 ` [PATCH v4 06/21] i386: introduce hv_cpuid_get_host() Vitaly Kuznetsov
2021-02-10 16:40 ` [PATCH v4 07/21] i386: drop FEAT_HYPERV feature leaves Vitaly Kuznetsov
2021-02-10 16:40 ` [PATCH v4 08/21] i386: introduce hv_cpuid_cache Vitaly Kuznetsov
2021-02-10 16:40 ` [PATCH v4 09/21] i386: split hyperv_handle_properties() into hyperv_expand_features()/hyperv_fill_cpuids() Vitaly Kuznetsov
2021-02-10 16:40 ` [PATCH v4 10/21] i386: move eVMCS enablement to hyperv_init_vcpu() Vitaly Kuznetsov
2021-02-10 16:40 ` [PATCH v4 11/21] i386: switch hyperv_expand_features() to using error_setg() Vitaly Kuznetsov
2021-02-10 16:40 ` [PATCH v4 12/21] i386: adjust the expected KVM_GET_SUPPORTED_HV_CPUID array size Vitaly Kuznetsov
2021-02-10 16:40 ` [PATCH v4 13/21] i386: prefer system KVM_GET_SUPPORTED_HV_CPUID ioctl over vCPU's one Vitaly Kuznetsov
2021-02-10 16:40 ` [PATCH v4 14/21] i386: use global kvm_state in hyperv_enabled() check Vitaly Kuznetsov
2021-02-10 16:40 ` [PATCH v4 15/21] i386: expand Hyper-V features during CPU feature expansion time Vitaly Kuznetsov
2021-02-10 16:40 ` [PATCH v4 16/21] i386: track explicit 'hv-*' features enablement/disablement Vitaly Kuznetsov
2021-02-11 17:35 ` Igor Mammedov
2021-02-12 8:45 ` Vitaly Kuznetsov
2021-02-12 14:12 ` Igor Mammedov
2021-02-12 15:19 ` Vitaly Kuznetsov
2021-02-12 15:26 ` Vitaly Kuznetsov
2021-02-12 16:05 ` Igor Mammedov
2021-02-15 8:56 ` Vitaly Kuznetsov
2021-02-15 15:55 ` Igor Mammedov
2021-02-15 17:05 ` Igor Mammedov
2021-02-15 18:12 ` Vitaly Kuznetsov
2021-02-12 16:01 ` Igor Mammedov
2021-02-15 8:53 ` Vitaly Kuznetsov
2021-02-15 10:48 ` Andrew Jones
2021-02-15 17:01 ` Igor Mammedov
2021-02-15 18:11 ` Vitaly Kuznetsov
2021-02-22 10:20 ` Vitaly Kuznetsov
2021-02-23 15:19 ` Igor Mammedov
2021-02-23 15:46 ` Vitaly Kuznetsov
2021-02-23 17:48 ` Igor Mammedov [this message]
2021-02-23 18:08 ` Vitaly Kuznetsov
2021-02-24 16:06 ` Igor Mammedov
2021-02-24 17:00 ` Vitaly Kuznetsov
2021-03-01 15:32 ` Igor Mammedov
2021-03-01 16:22 ` Vitaly Kuznetsov
2021-02-10 16:40 ` [PATCH v4 17/21] i386: support 'hv-passthrough, hv-feature=off' on the command line Vitaly Kuznetsov
2021-02-11 17:14 ` Igor Mammedov
2021-02-12 8:49 ` Vitaly Kuznetsov
2021-02-12 9:29 ` David Edmondson
2021-02-12 13:52 ` Igor Mammedov
2021-02-10 16:40 ` [PATCH v4 18/21] i386: be more picky about implicit 'hv-evmcs' enablement Vitaly Kuznetsov
2021-02-10 16:40 ` [PATCH v4 19/21] i386: introduce kvm_hv_evmcs_available() Vitaly Kuznetsov
2021-02-10 16:40 ` [PATCH v4 20/21] i386: provide simple 'hv-default=on' option Vitaly Kuznetsov
2021-02-11 17:23 ` Igor Mammedov
2021-02-12 8:52 ` Vitaly Kuznetsov
2021-02-10 16:40 ` [PATCH v4 21/21] qtest/hyperv: Introduce a simple hyper-v test Vitaly Kuznetsov
2021-02-10 16:56 ` [PATCH v4 00/19] i386: KVM: expand Hyper-V features early and provide simple 'hv-default=on' option Daniel P. Berrangé
2021-02-10 17:46 ` Eduardo Habkost
2021-02-11 8:30 ` Vitaly Kuznetsov
2021-02-11 9:14 ` Daniel P. Berrangé
2021-02-11 9:34 ` Vitaly Kuznetsov
2021-02-11 10:14 ` Daniel P. Berrangé
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210223184802.7080da4a@redhat.com \
--to=imammedo@redhat.com \
--cc=drjones@redhat.com \
--cc=ehabkost@redhat.com \
--cc=mtosatti@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=vkuznets@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.