mirror of https://gitee.com/openkylin/linux.git
oprofile/x86: fix msr access to reserved counters
During switching virtual counters there is access to perfctr msrs. If the counter is not available this fails due to an invalid address. This patch fixes this. Cc: stable@kernel.org Signed-off-by: Robert Richter <robert.richter@amd.com>
This commit is contained in:
parent
c17c8fbf34
commit
cfc9c0b450
|
@ -127,7 +127,7 @@ static void op_mux_switch_ctrl(struct op_x86_model_spec const *model,
|
|||
/* enable active counters */
|
||||
for (i = 0; i < NUM_COUNTERS; ++i) {
|
||||
int virt = op_x86_phys_to_virt(i);
|
||||
if (!counter_config[virt].enabled)
|
||||
if (!reset_value[virt])
|
||||
continue;
|
||||
rdmsrl(msrs->controls[i].addr, val);
|
||||
val &= model->reserved;
|
||||
|
@ -163,7 +163,8 @@ static void op_amd_setup_ctrs(struct op_x86_model_spec const *model,
|
|||
|
||||
/* setup reset_value */
|
||||
for (i = 0; i < NUM_VIRT_COUNTERS; ++i) {
|
||||
if (counter_config[i].enabled)
|
||||
if (counter_config[i].enabled
|
||||
&& msrs->counters[op_x86_virt_to_phys(i)].addr)
|
||||
reset_value[i] = counter_config[i].count;
|
||||
else
|
||||
reset_value[i] = 0;
|
||||
|
@ -197,9 +198,7 @@ static void op_amd_setup_ctrs(struct op_x86_model_spec const *model,
|
|||
/* enable active counters */
|
||||
for (i = 0; i < NUM_COUNTERS; ++i) {
|
||||
int virt = op_x86_phys_to_virt(i);
|
||||
if (!counter_config[virt].enabled)
|
||||
continue;
|
||||
if (!msrs->counters[i].addr)
|
||||
if (!reset_value[virt])
|
||||
continue;
|
||||
|
||||
/* setup counter registers */
|
||||
|
|
Loading…
Reference in New Issue