From: Kan Liang <kan.li...@linux.intel.com> CLX-AP has the same uncore counters as SKX, but they are die scope. Add a bool variable to indicate die scope only uncore counters.
Signed-off-by: Kan Liang <kan.li...@linux.intel.com> --- arch/x86/events/intel/uncore.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/arch/x86/events/intel/uncore.c b/arch/x86/events/intel/uncore.c index f795a73..f850ab9 100644 --- a/arch/x86/events/intel/uncore.c +++ b/arch/x86/events/intel/uncore.c @@ -20,6 +20,8 @@ static cpumask_t uncore_cpu_mask[DOMAIN_TYPE_MAX]; static unsigned int uncore_domain_type_mask; +static bool die_only; + /* constraint for the fixed counter */ static struct event_constraint uncore_constraint_fixed = EVENT_CONSTRAINT(~0ULL, 1 << UNCORE_PMC_IDX_FIXED, ~0ULL); @@ -895,6 +897,9 @@ static int __init uncore_type_init(struct intel_uncore_type *type, bool setid) if (!pmus) return -ENOMEM; + if (die_only) + type->type.type = DIE_DOMAIN; + if (domain_type_init(&type->type)) { kfree(pmus); return -ENOMEM; @@ -1503,6 +1508,15 @@ static int __init intel_uncore_init(void) return -ENODEV; uncore_init = (struct intel_uncore_init_fun *)id->driver_data; + + /* + * CLX-AP has the same uncore counters as SKX, + * but they are die scope. + */ + if ((boot_cpu_data.x86_model == INTEL_FAM6_SKYLAKE_X) && + (boot_cpu_data.x86_max_dies > 1)) + die_only = true; + if (uncore_init->pci_init) { pret = uncore_init->pci_init(); if (!pret) -- 2.7.4