Re: [PATCH] x86/pmu: Disable inlining of measure()

Bill Wendling
2022-10-25T19:23:13Z

On Wed, Jun 1, 2022 at 10:22 AM Jim Mattson <jmattson@google.com> wrote:
>
> On Wed, Jun 1, 2022 at 9:30 AM Bill Wendling <morbo@google.com> wrote:
> >
> > 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>
> Reviewed-by: Jim Mattson <jmattson@google.com>

Bumping for visibility.

-bw