From: Vitaly Kuznetsov <vkuznets@redhat.com>
To: Igor Mammedov <imammedo@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
Marcelo Tosatti <mtosatti@redhat.com>,
qemu-devel@nongnu.org, Eduardo Habkost <ehabkost@redhat.com>
Subject: Re: [PATCH v4 17/21] i386: support 'hv-passthrough, hv-feature=off' on the command line
Date: Fri, 12 Feb 2021 09:49:46 +0100 [thread overview]
Message-ID: <87r1llllg5.fsf@vitty.brq.redhat.com> (raw)
In-Reply-To: <20210211181459.08f14c22@redhat.com>
Igor Mammedov <imammedo@redhat.com> writes:
> On Wed, 10 Feb 2021 17:40:29 +0100
> Vitaly Kuznetsov <vkuznets@redhat.com> wrote:
>
>> Currently, we support 'hv-passthrough,hv-feature=on' enablement, this
>> is supposed to mean "hv-feature is mandatory, don't start without it". Add
>> support for 'hv-passthrough,hv-feature=off' meaning "enable everything
>> supported by the host except for hv-feature".
>>
>> While on it, make 'hv-passthrough' parse semantics in-line with other
>> options in qemu: when specified, it overrides what was previously set with
>> what's supported by the host. This can later be modified with 'hv-feature=on'/
>> 'hv-feature=off'.
>>
>> Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
>> ---
>> target/i386/cpu.c | 28 +++++++++++++++++++++++++++-
>> target/i386/kvm/kvm.c | 4 ++++
>> 2 files changed, 31 insertions(+), 1 deletion(-)
>>
>> diff --git a/target/i386/cpu.c b/target/i386/cpu.c
>> index e8a004c39d04..f8df2caed779 100644
>> --- a/target/i386/cpu.c
>> +++ b/target/i386/cpu.c
>> @@ -4725,6 +4725,29 @@ static void x86_hv_stimer_direct_set(Object *obj, bool value, Error **errp)
>> x86_hv_feature_set(obj, value, HYPERV_FEAT_STIMER_DIRECT);
>> }
>>
>> +static bool x86_hv_passthrough_get(Object *obj, Error **errp)
>> +{
>> + X86CPU *cpu = X86_CPU(obj);
>> +
>> + return cpu->hyperv_passthrough;
>> +}
>> +
>> +static void x86_hv_passthrough_set(Object *obj, bool value, Error **errp)
>> +{
>> + X86CPU *cpu = X86_CPU(obj);
>> +
>> + cpu->hyperv_passthrough = value;
>> +
>> + /* hv-passthrough overrides everything with what's supported by the host */
>> + if (value) {
>> + cpu->hyperv_features = 0;
>> + cpu->hyperv_features_on = 0;
>> + cpu->hyperv_features_off = 0;
>
> why do we have _on|_off fields?
>
You mean 'why do we have them at all' or 'why do we reset them here'?
For the former, we need to distinguish between
'hv-passthroug,hv-feature=off' and just 'hv-passthrough';
'hv-passthrough,hv-evmcs=on' and just 'hv-passthrough'. For the later,
I'd like to make the samentics you've asked for:
'hv-feature,hv-passthrough' == 'hv-passthrough'
(though I still see it as a gotcha for an unprepared user)
>> + }
>> +
>> + return;
>> +}
>> +
>> /* Generic getter for "feature-words" and "filtered-features" properties */
>> static void x86_cpu_get_feature_words(Object *obj, Visitor *v,
>> const char *name, void *opaque,
>> @@ -7281,7 +7304,6 @@ static Property x86_cpu_properties[] = {
>> HYPERV_SPINLOCK_NEVER_NOTIFY),
>> DEFINE_PROP_ON_OFF_AUTO("hv-no-nonarch-coresharing", X86CPU,
>> hyperv_no_nonarch_cs, ON_OFF_AUTO_OFF),
>> - DEFINE_PROP_BOOL("hv-passthrough", X86CPU, hyperv_passthrough, false),
>>
>> DEFINE_PROP_BOOL("check", X86CPU, check_cpuid, true),
>> DEFINE_PROP_BOOL("enforce", X86CPU, enforce_cpuid, false),
>> @@ -7460,6 +7482,10 @@ static void x86_cpu_common_class_init(ObjectClass *oc, void *data)
>> x86_hv_stimer_direct_get,
>> x86_hv_stimer_direct_set);
>>
>> + object_class_property_add_bool(oc, "hv-passthrough",
>> + x86_hv_passthrough_get,
>> + x86_hv_passthrough_set);
>> +
>> for (w = 0; w < FEATURE_WORDS; w++) {
>> int bitnr;
>> for (bitnr = 0; bitnr < 64; bitnr++) {
>> diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c
>> index 30013f0d7cee..fca088d4d3b5 100644
>> --- a/target/i386/kvm/kvm.c
>> +++ b/target/i386/kvm/kvm.c
>> @@ -1153,6 +1153,10 @@ static int hv_cpuid_check_and_set(CPUState *cs, int feature, Error **errp)
>> return 0;
>> }
>>
>> + if (cpu->hyperv_passthrough && (cpu->hyperv_features_off & BIT(feature))) {
>> + return 0;
>> + }
>> +
>> deps = kvm_hyperv_properties[feature].dependencies;
>> while (deps) {
>> dep_feat = ctz64(deps);
>
--
Vitaly
next prev parent reply other threads:[~2021-02-12 8:51 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
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 [this message]
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=87r1llllg5.fsf@vitty.brq.redhat.com \
--to=vkuznets@redhat.com \
--cc=ehabkost@redhat.com \
--cc=imammedo@redhat.com \
--cc=mtosatti@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
/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.