From: Bill Wendling <morbo@google.com>
To: kvm@vger.kernel.org, Paolo Bonzini <pbonzini@redhat.com>
Cc: Bill Wendling <isanbard@gmail.com>,
Jim Mattson <jmattson@google.com>,
Bill Wendling <morbo@google.com>
Subject: [PATCH] x86/pmu: Disable inlining of measure()
Date: Wed, 1 Jun 2022 16:30:12 +0000 [thread overview]
Message-ID: <20220601163012.3404212-1-morbo@google.com> (raw)
From: Bill Wendling <isanbard@gmail.com>
Clang can be more aggressive at inlining than GCC and will fully inline
calls to measure(). This can mess with the counter overflow check. To
set up the PMC overflow, check_counter_overflow() first records the
number of instructions retired in an invocation of measure() and checks
to see that subsequent calls to measure() retire the same number of
instructions. If inlining occurs, those numbers can be different and the
overflow test fails.
FAIL: overflow: cntr-0
PASS: overflow: status-0
PASS: overflow: status clear-0
PASS: overflow: irq-0
FAIL: overflow: cntr-1
PASS: overflow: status-1
PASS: overflow: status clear-1
PASS: overflow: irq-1
FAIL: overflow: cntr-2
PASS: overflow: status-2
PASS: overflow: status clear-2
PASS: overflow: irq-2
FAIL: overflow: cntr-3
PASS: overflow: status-3
PASS: overflow: status clear-3
PASS: overflow: irq-3
Disabling inlining of measure() keeps the assumption that all calls to
measure() retire the same number of instructions.
Cc: Jim Mattson <jmattson@google.com>
Signed-off-by: Bill Wendling <morbo@google.com>
---
x86/pmu.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/x86/pmu.c b/x86/pmu.c
index a46bdbf4788c..bbfd268aafa4 100644
--- a/x86/pmu.c
+++ b/x86/pmu.c
@@ -211,7 +211,7 @@ static void stop_event(pmu_counter_t *evt)
evt->count = rdmsr(evt->ctr);
}
-static void measure(pmu_counter_t *evt, int count)
+static noinline void measure(pmu_counter_t *evt, int count)
{
int i;
for (i = 0; i < count; i++)
--
2.36.1.255.ge46751e96f-goog
next reply other threads:[~2022-06-01 16:30 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-01 16:30 Bill Wendling [this message]
2022-06-01 17:22 ` [PATCH] x86/pmu: Disable inlining of measure() Jim Mattson
2022-10-25 19:22 ` Bill Wendling
2022-10-25 23:12 ` Sean Christopherson
2022-10-26 18:02 ` [kvm-unit-tests PATCH] " Bill Wendling
2022-11-01 18:53 ` Sean Christopherson
2022-11-01 19:16 ` Bill Wendling
2022-11-02 17:36 ` [PATCH] " Paolo Bonzini
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=20220601163012.3404212-1-morbo@google.com \
--to=morbo@google.com \
--cc=isanbard@gmail.com \
--cc=jmattson@google.com \
--cc=kvm@vger.kernel.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox