From: Akihiko Odaki <akihiko.odaki@daynix.com>
To: Cornelia Huck <cohuck@redhat.com>,
Peter Maydell <peter.maydell@linaro.org>
Cc: Thomas Huth <thuth@redhat.com>,
Laurent Vivier <lvivier@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>,
qemu-arm@nongnu.org, qemu-devel@nongnu.org, kvm@vger.kernel.org
Subject: Re: [PATCH v3 2/5] target/arm/kvm: Fix PMU feature bit early
Date: Sat, 20 Jul 2024 01:29:29 +0900 [thread overview]
Message-ID: <414c64cb-7d01-4e63-83ea-90eca0de0942@daynix.com> (raw)
In-Reply-To: <87cyn9a7yn.fsf@redhat.com>
On 2024/07/19 21:21, Cornelia Huck wrote:
> On Fri, Jul 19 2024, Akihiko Odaki <akihiko.odaki@daynix.com> wrote:
>
>> On 2024/07/18 21:07, Peter Maydell wrote:
>>> On Tue, 16 Jul 2024 at 13:50, Akihiko Odaki <akihiko.odaki@daynix.com> wrote:
>>>>
>>>> kvm_arm_get_host_cpu_features() used to add the PMU feature
>>>> unconditionally, and kvm_arch_init_vcpu() removed it when it is actually
>>>> not available. Conditionally add the PMU feature in
>>>> kvm_arm_get_host_cpu_features() to save code.
>>>>
>>>> Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
>>>> ---
>>>> target/arm/kvm.c | 7 +------
>>>> 1 file changed, 1 insertion(+), 6 deletions(-)
>>>>
>>>> diff --git a/target/arm/kvm.c b/target/arm/kvm.c
>>>> index 70f79eda33cd..849e2e21b304 100644
>>>> --- a/target/arm/kvm.c
>>>> +++ b/target/arm/kvm.c
>>>> @@ -280,6 +280,7 @@ static bool kvm_arm_get_host_cpu_features(ARMHostCPUFeatures *ahcf)
>>>> if (kvm_arm_pmu_supported()) {
>>>> init.features[0] |= 1 << KVM_ARM_VCPU_PMU_V3;
>>>> pmu_supported = true;
>>>> + features |= 1ULL << ARM_FEATURE_PMU;
>>>> }
>>>>
>>>> if (!kvm_arm_create_scratch_host_vcpu(cpus_to_try, fdarray, &init)) {
>>>> @@ -448,7 +449,6 @@ static bool kvm_arm_get_host_cpu_features(ARMHostCPUFeatures *ahcf)
>>>> features |= 1ULL << ARM_FEATURE_V8;
>>>> features |= 1ULL << ARM_FEATURE_NEON;
>>>> features |= 1ULL << ARM_FEATURE_AARCH64;
>>>> - features |= 1ULL << ARM_FEATURE_PMU;
>>>> features |= 1ULL << ARM_FEATURE_GENERIC_TIMER;
>>>>
>>>> ahcf->features = features;
>>>> @@ -1888,13 +1888,8 @@ int kvm_arch_init_vcpu(CPUState *cs)
>>>> if (!arm_feature(env, ARM_FEATURE_AARCH64)) {
>>>> cpu->kvm_init_features[0] |= 1 << KVM_ARM_VCPU_EL1_32BIT;
>>>> }
>>>> - if (!kvm_check_extension(cs->kvm_state, KVM_CAP_ARM_PMU_V3)) {
>>>> - cpu->has_pmu = false;
>>>> - }
>>>> if (cpu->has_pmu) {
>>>> cpu->kvm_init_features[0] |= 1 << KVM_ARM_VCPU_PMU_V3;
>>>> - } else {
>>>> - env->features &= ~(1ULL << ARM_FEATURE_PMU);
>>>> }
>>>> if (cpu_isar_feature(aa64_sve, cpu)) {
>>>> assert(kvm_arm_sve_supported());
>>>
>>> Not every KVM CPU is necessarily the "host" CPU type.
>>> The "cortex-a57" and "cortex-a53" CPU types will work if you
>>> happen to be on a host of that CPU type, and they don't go
>>> through kvm_arm_get_host_cpu_features().
>>
>> kvm_arm_vcpu_init() will emit an error in such a situation and I think
>> it's better than silently removing a feature that the requested CPU type
>> has. A user can still disable the feature if desired.
>
> OTOH, if we fail for the named cpu models if the kernel does not provide
> the cap, but silently disable for the host cpu model in that case, that
> also seems inconsistent. I'd rather keep it as it is now.
There are two perspectives of consistency:
1) The initial value of pmu
2) The behavior with the pmu value
This change introduces inconsistency for 1); the host cpu model will
have pmu=off by default and the other cpu models will keep default
pmu=on value on a system that does not support PMU. It still keeps
consistency for 2); it fails if the user sets pmu=on for any cpu model
on such a system.
We should align 1) for better consistency, but I don't think such a
change would be useful. It is likely that something is wrong with the
system when the system reports a cpu model but it doesn't support its
feature. I think that is the reason why we assert
kvm_arm_sve_supported() for SVE; however I don't think such an assertion
would help either because kvm_arm_vcpu_init() will fail anyway.
Regards,
Akihiko Odaki
next prev parent reply other threads:[~2024-07-19 16:29 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-16 12:50 [PATCH v3 0/5] target/arm/kvm: Report PMU unavailability Akihiko Odaki
2024-07-16 12:50 ` [PATCH v3 1/5] tests/arm-cpu-features: Do not assume PMU availability Akihiko Odaki
2024-07-16 12:50 ` [PATCH v3 2/5] target/arm/kvm: Fix PMU feature bit early Akihiko Odaki
2024-07-18 12:07 ` Peter Maydell
2024-07-19 7:21 ` Akihiko Odaki
2024-07-19 12:21 ` Cornelia Huck
2024-07-19 16:29 ` Akihiko Odaki [this message]
2024-07-16 12:50 ` [PATCH v3 3/5] target/arm: Always add pmu property for Armv8 Akihiko Odaki
2024-07-18 12:08 ` Peter Maydell
2024-07-16 12:50 ` [PATCH v3 4/5] hvf: arm: Do not advance PC when raising an exception Akihiko Odaki
2024-07-16 12:50 ` [PATCH v3 5/5] hvf: arm: Properly disable PMU Akihiko Odaki
2024-07-18 12:13 ` Peter Maydell
2024-07-18 12:14 ` [PATCH v3 0/5] target/arm/kvm: Report PMU unavailability Peter Maydell
2024-07-18 12:47 ` Peter Maydell
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=414c64cb-7d01-4e63-83ea-90eca0de0942@daynix.com \
--to=akihiko.odaki@daynix.com \
--cc=cohuck@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=lvivier@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=thuth@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.