diff options
Diffstat (limited to 'arch/x86/kernel/cpu/perf_event.h')
| -rw-r--r-- | arch/x86/kernel/cpu/perf_event.h | 8 | 
1 files changed, 6 insertions, 2 deletions
diff --git a/arch/x86/kernel/cpu/perf_event.h b/arch/x86/kernel/cpu/perf_event.h index 8944062f46e..c30c807ddc7 100644 --- a/arch/x86/kernel/cpu/perf_event.h +++ b/arch/x86/kernel/cpu/perf_event.h @@ -147,7 +147,9 @@ struct cpu_hw_events {  	/*  	 * AMD specific bits  	 */ -	struct amd_nb		*amd_nb; +	struct amd_nb			*amd_nb; +	/* Inverted mask of bits to clear in the perf_ctr ctrl registers */ +	u64				perf_ctr_virt_mask;  	void				*kfree_on_online;  }; @@ -417,9 +419,11 @@ void x86_pmu_disable_all(void);  static inline void __x86_pmu_enable_event(struct hw_perf_event *hwc,  					  u64 enable_mask)  { +	u64 disable_mask = __this_cpu_read(cpu_hw_events.perf_ctr_virt_mask); +  	if (hwc->extra_reg.reg)  		wrmsrl(hwc->extra_reg.reg, hwc->extra_reg.config); -	wrmsrl(hwc->config_base, hwc->config | enable_mask); +	wrmsrl(hwc->config_base, (hwc->config | enable_mask) & ~disable_mask);  }  void x86_pmu_enable_all(int added);  |