oprofile/x86: fix perfctr nmi reservation for mulitplexing
Multiple virtual counters share one physical counter. The reservation of virtual counters fails due to duplicate allocation of the same counter. The counters are already reserved. Thus, virtual counter reservation may removed at all. This also makes the code easier. Cc: stable@kernel.org Signed-off-by: Robert Richter <robert.richter@amd.com>
This commit is contained in:
@@ -118,19 +118,6 @@ static u32 get_ibs_caps(void)
|
||||
|
||||
#ifdef CONFIG_OPROFILE_EVENT_MULTIPLEX
|
||||
|
||||
static void op_mux_fill_in_addresses(struct op_msrs * const msrs)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < NUM_VIRT_COUNTERS; i++) {
|
||||
int hw_counter = op_x86_virt_to_phys(i);
|
||||
if (reserve_perfctr_nmi(MSR_K7_PERFCTR0 + i))
|
||||
msrs->multiplex[i].addr = MSR_K7_PERFCTR0 + hw_counter;
|
||||
else
|
||||
msrs->multiplex[i].addr = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void op_mux_switch_ctrl(struct op_x86_model_spec const *model,
|
||||
struct op_msrs const * const msrs)
|
||||
{
|
||||
@@ -149,10 +136,6 @@ static void op_mux_switch_ctrl(struct op_x86_model_spec const *model,
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
static inline void op_mux_fill_in_addresses(struct op_msrs * const msrs) { }
|
||||
|
||||
#endif
|
||||
|
||||
/* functions for op_amd_spec */
|
||||
@@ -174,8 +157,6 @@ static void op_amd_fill_in_addresses(struct op_msrs * const msrs)
|
||||
else
|
||||
msrs->controls[i].addr = 0;
|
||||
}
|
||||
|
||||
op_mux_fill_in_addresses(msrs);
|
||||
}
|
||||
|
||||
static void op_amd_setup_ctrs(struct op_x86_model_spec const *model,
|
||||
|
Reference in New Issue
Block a user