From: Sean Christopherson <seanjc@google.com>
To: Mingwei Zhang <mizhang@google.com>
Cc: Dongli Zhang <dongli.zhang@oracle.com>,
Paolo Bonzini <pbonzini@redhat.com>,
"H. Peter Anvin" <hpa@zytor.com>,
kvm@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] KVM: x86/pmu: Fix type length error when reading pmu->fixed_ctr_ctrl
Date: Thu, 1 Feb 2024 11:36:14 -0800 [thread overview]
Message-ID: <ZbvyrvvZM-Tocza2@google.com> (raw)
In-Reply-To: <ZbvjKtsVjpuQmKE2@google.com>
On Thu, Feb 01, 2024, Mingwei Zhang wrote:
> On Thu, Feb 01, 2024, Sean Christopherson wrote:
> > On Wed, Jan 31, 2024, Mingwei Zhang wrote:
> > > > The PMC is still active while the VM side handle_pmi_common() is not going to handle it?
> > >
> > > hmm, so the new value is '0', but the old value is non-zero, KVM is
> > > supposed to zero out (stop) the fix counter), but it skips it. This
> > > leads to the counter continuously increasing until it overflows, but
> > > guest PMU thought it had disabled it. That's why you got this warning?
> >
> > No, that can't happen, and KVM would have a massive bug if that were the case.
> > The truncation can _only_ cause bits to disappear, it can't magically make bits
> > appear, i.e. the _only_ way this can cause a problem is for KVM to incorrectly
> > think a PMC is being disabled.
>
> The reason why the bug does not happen is because there is global
> control. So disabling a counter will be effectively done in the global
> disable part, ie., when guest PMU writes to MSR 0x38f.
> > fixed PMC is disabled. KVM will pause the counter in reprogram_counter(), and
> > then leave the perf event paused counter as pmc_event_is_allowed() will return
> > %false due to the PMC being locally disabled.
> >
> > But in this case, _if_ the counter is actually enabled, KVM will simply reprogram
> > the PMC. Reprogramming is unnecessary and wasteful, but it's not broken.
>
> no, if the counter is actually enabled, but then it is assigned to
> old_fixed_ctr_ctrl, the value is truncated. When control goes to the
> check at the time of disabling the counter, KVM thinks it is disabled,
> since the value is already truncated to 0. So KVM will skip by saying
> "oh, the counter is already disabled, why reprogram? No need!".
Ooh, I had them backwards. KVM can miss 1=>0, but not 0=>1. I'll apply this
for 6.8; does this changelog work for you?
Use a u64 instead of a u8 when taking a snapshot of pmu->fixed_ctr_ctrl
when reprogramming fixed counters, as truncating the value results in KVM
thinking all fixed counters, except counter 0, are already disabled. As
a result, if the guest disables a fixed counter, KVM will get a false
negative and fail to reprogram/disable emulation of the counter, which can
leads to spurious PMIs in the guest.
next prev parent reply other threads:[~2024-02-01 19:36 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-23 22:12 [PATCH] KVM: x86/pmu: Fix type length error when reading pmu->fixed_ctr_ctrl Mingwei Zhang
2024-01-31 15:43 ` Sean Christopherson
2024-01-31 17:02 ` Dongli Zhang
2024-01-31 17:13 ` Mingwei Zhang
2024-02-01 17:28 ` Sean Christopherson
2024-02-01 18:30 ` Mingwei Zhang
2024-02-01 19:36 ` Sean Christopherson [this message]
2024-02-01 19:53 ` Mingwei Zhang
2024-02-01 22:53 ` Sean Christopherson
2024-02-01 23:00 ` Mingwei Zhang
2024-02-02 3:25 ` Zhang, Xiong Y
2024-02-02 17:07 ` Sean Christopherson
2024-02-03 0:11 ` Sean Christopherson
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=ZbvyrvvZM-Tocza2@google.com \
--to=seanjc@google.com \
--cc=dongli.zhang@oracle.com \
--cc=hpa@zytor.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mizhang@google.com \
--cc=pbonzini@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.