diff options
-rw-r--r-- | arch/x86/kernel/cpu/perf_event_intel_uncore.c | 9 | ||||
-rw-r--r-- | arch/x86/kernel/cpu/perf_event_intel_uncore.h | 18 | ||||
-rw-r--r-- | arch/x86/kernel/cpu/perf_event_intel_uncore_snbep.c | 6 |
3 files changed, 18 insertions, 15 deletions
diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore.c b/arch/x86/kernel/cpu/perf_event_intel_uncore.c index dd319e59246b..90b7c501c95b 100644 --- a/arch/x86/kernel/cpu/perf_event_intel_uncore.c +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.c | |||
@@ -839,6 +839,7 @@ static int uncore_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id | |||
839 | box->phys_id = phys_id; | 839 | box->phys_id = phys_id; |
840 | box->pci_dev = pdev; | 840 | box->pci_dev = pdev; |
841 | box->pmu = pmu; | 841 | box->pmu = pmu; |
842 | uncore_box_init(box); | ||
842 | pci_set_drvdata(pdev, box); | 843 | pci_set_drvdata(pdev, box); |
843 | 844 | ||
844 | raw_spin_lock(&uncore_box_lock); | 845 | raw_spin_lock(&uncore_box_lock); |
@@ -1002,8 +1003,10 @@ static int uncore_cpu_starting(int cpu) | |||
1002 | pmu = &type->pmus[j]; | 1003 | pmu = &type->pmus[j]; |
1003 | box = *per_cpu_ptr(pmu->box, cpu); | 1004 | box = *per_cpu_ptr(pmu->box, cpu); |
1004 | /* called by uncore_cpu_init? */ | 1005 | /* called by uncore_cpu_init? */ |
1005 | if (box && box->phys_id >= 0) | 1006 | if (box && box->phys_id >= 0) { |
1007 | uncore_box_init(box); | ||
1006 | continue; | 1008 | continue; |
1009 | } | ||
1007 | 1010 | ||
1008 | for_each_online_cpu(k) { | 1011 | for_each_online_cpu(k) { |
1009 | exist = *per_cpu_ptr(pmu->box, k); | 1012 | exist = *per_cpu_ptr(pmu->box, k); |
@@ -1019,8 +1022,10 @@ static int uncore_cpu_starting(int cpu) | |||
1019 | } | 1022 | } |
1020 | } | 1023 | } |
1021 | 1024 | ||
1022 | if (box) | 1025 | if (box) { |
1023 | box->phys_id = phys_id; | 1026 | box->phys_id = phys_id; |
1027 | uncore_box_init(box); | ||
1028 | } | ||
1024 | } | 1029 | } |
1025 | } | 1030 | } |
1026 | return 0; | 1031 | return 0; |
diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore.h b/arch/x86/kernel/cpu/perf_event_intel_uncore.h index f789ec9a0133..ceac8f5dc018 100644 --- a/arch/x86/kernel/cpu/perf_event_intel_uncore.h +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.h | |||
@@ -258,14 +258,6 @@ static inline int uncore_num_counters(struct intel_uncore_box *box) | |||
258 | return box->pmu->type->num_counters; | 258 | return box->pmu->type->num_counters; |
259 | } | 259 | } |
260 | 260 | ||
261 | static inline void uncore_box_init(struct intel_uncore_box *box) | ||
262 | { | ||
263 | if (!test_and_set_bit(UNCORE_BOX_FLAG_INITIATED, &box->flags)) { | ||
264 | if (box->pmu->type->ops->init_box) | ||
265 | box->pmu->type->ops->init_box(box); | ||
266 | } | ||
267 | } | ||
268 | |||
269 | static inline void uncore_disable_box(struct intel_uncore_box *box) | 261 | static inline void uncore_disable_box(struct intel_uncore_box *box) |
270 | { | 262 | { |
271 | if (box->pmu->type->ops->disable_box) | 263 | if (box->pmu->type->ops->disable_box) |
@@ -274,8 +266,6 @@ static inline void uncore_disable_box(struct intel_uncore_box *box) | |||
274 | 266 | ||
275 | static inline void uncore_enable_box(struct intel_uncore_box *box) | 267 | static inline void uncore_enable_box(struct intel_uncore_box *box) |
276 | { | 268 | { |
277 | uncore_box_init(box); | ||
278 | |||
279 | if (box->pmu->type->ops->enable_box) | 269 | if (box->pmu->type->ops->enable_box) |
280 | box->pmu->type->ops->enable_box(box); | 270 | box->pmu->type->ops->enable_box(box); |
281 | } | 271 | } |
@@ -298,6 +288,14 @@ static inline u64 uncore_read_counter(struct intel_uncore_box *box, | |||
298 | return box->pmu->type->ops->read_counter(box, event); | 288 | return box->pmu->type->ops->read_counter(box, event); |
299 | } | 289 | } |
300 | 290 | ||
291 | static inline void uncore_box_init(struct intel_uncore_box *box) | ||
292 | { | ||
293 | if (!test_and_set_bit(UNCORE_BOX_FLAG_INITIATED, &box->flags)) { | ||
294 | if (box->pmu->type->ops->init_box) | ||
295 | box->pmu->type->ops->init_box(box); | ||
296 | } | ||
297 | } | ||
298 | |||
301 | static inline bool uncore_box_is_fake(struct intel_uncore_box *box) | 299 | static inline bool uncore_box_is_fake(struct intel_uncore_box *box) |
302 | { | 300 | { |
303 | return (box->phys_id < 0); | 301 | return (box->phys_id < 0); |
diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore_snbep.c b/arch/x86/kernel/cpu/perf_event_intel_uncore_snbep.c index 12d9548457e7..6d6e85dd5849 100644 --- a/arch/x86/kernel/cpu/perf_event_intel_uncore_snbep.c +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore_snbep.c | |||
@@ -164,8 +164,8 @@ | |||
164 | ((1ULL << (n)) - 1))) | 164 | ((1ULL << (n)) - 1))) |
165 | 165 | ||
166 | /* Haswell-EP Ubox */ | 166 | /* Haswell-EP Ubox */ |
167 | #define HSWEP_U_MSR_PMON_CTR0 0x705 | 167 | #define HSWEP_U_MSR_PMON_CTR0 0x709 |
168 | #define HSWEP_U_MSR_PMON_CTL0 0x709 | 168 | #define HSWEP_U_MSR_PMON_CTL0 0x705 |
169 | #define HSWEP_U_MSR_PMON_FILTER 0x707 | 169 | #define HSWEP_U_MSR_PMON_FILTER 0x707 |
170 | 170 | ||
171 | #define HSWEP_U_MSR_PMON_UCLK_FIXED_CTL 0x703 | 171 | #define HSWEP_U_MSR_PMON_UCLK_FIXED_CTL 0x703 |
@@ -1914,7 +1914,7 @@ static struct intel_uncore_type hswep_uncore_cbox = { | |||
1914 | .name = "cbox", | 1914 | .name = "cbox", |
1915 | .num_counters = 4, | 1915 | .num_counters = 4, |
1916 | .num_boxes = 18, | 1916 | .num_boxes = 18, |
1917 | .perf_ctr_bits = 44, | 1917 | .perf_ctr_bits = 48, |
1918 | .event_ctl = HSWEP_C0_MSR_PMON_CTL0, | 1918 | .event_ctl = HSWEP_C0_MSR_PMON_CTL0, |
1919 | .perf_ctr = HSWEP_C0_MSR_PMON_CTR0, | 1919 | .perf_ctr = HSWEP_C0_MSR_PMON_CTR0, |
1920 | .event_mask = SNBEP_CBO_MSR_PMON_RAW_EVENT_MASK, | 1920 | .event_mask = SNBEP_CBO_MSR_PMON_RAW_EVENT_MASK, |