perf, x86: Use ALTERNATIVE() to check for X86_FEATURE_PERFCTR_CORE
Using ALTERNATIVE() when checking for X86_FEATURE_PERFCTR_CORE avoids an extra pointer chase and data cache hit. Signed-off-by: Robert Richter <robert.richter@amd.com> Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Link: http://lkml.kernel.org/r/1302913676-14352-4-git-send-email-robert.richter@amd.com Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
68d2cf25d3
commit
c8e5910edf
@ -31,6 +31,7 @@
|
|||||||
#include <asm/nmi.h>
|
#include <asm/nmi.h>
|
||||||
#include <asm/compat.h>
|
#include <asm/compat.h>
|
||||||
#include <asm/smp.h>
|
#include <asm/smp.h>
|
||||||
|
#include <asm/alternative.h>
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
#undef wrmsrl
|
#undef wrmsrl
|
||||||
@ -363,12 +364,18 @@ again:
|
|||||||
return new_raw_count;
|
return new_raw_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* using X86_FEATURE_PERFCTR_CORE to later implement ALTERNATIVE() here */
|
|
||||||
static inline int x86_pmu_addr_offset(int index)
|
static inline int x86_pmu_addr_offset(int index)
|
||||||
{
|
{
|
||||||
if (boot_cpu_has(X86_FEATURE_PERFCTR_CORE))
|
int offset;
|
||||||
return index << 1;
|
|
||||||
return index;
|
/* offset = X86_FEATURE_PERFCTR_CORE ? index << 1 : index */
|
||||||
|
alternative_io(ASM_NOP2,
|
||||||
|
"shll $1, %%eax",
|
||||||
|
X86_FEATURE_PERFCTR_CORE,
|
||||||
|
"=a" (offset),
|
||||||
|
"a" (index));
|
||||||
|
|
||||||
|
return offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline unsigned int x86_pmu_config_addr(int index)
|
static inline unsigned int x86_pmu_config_addr(int index)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user