Re: [PATCH 1/1] perf/x86/intel/uncore: Add support for Intel SKL client uncore

From: Thomas Gleixner
Date: Wed Apr 20 2016 - 09:30:24 EST


On Fri, 15 Apr 2016, kan.liang@xxxxxxxxx wrote:
> +static void skl_uncore_msr_init_box(struct intel_uncore_box *box)
> +{
> + if (box->pmu->pmu_idx == 0) {
> + wrmsrl(SKL_UNC_PERF_GLOBAL_CTL,
> + SNB_UNC_GLOBAL_CTL_EN | SKL_UNC_GLOBAL_CTL_CORE_ALL);
> + }
> +}
> +
> +static void skl_uncore_msr_enable_box(struct intel_uncore_box *box)
> +{
> + wrmsrl(SKL_UNC_PERF_GLOBAL_CTL,
> + SNB_UNC_GLOBAL_CTL_EN | SKL_UNC_GLOBAL_CTL_CORE_ALL);
> +}
> +
> +static void skl_uncore_msr_disable_box(struct intel_uncore_box *box)
> +{
> + wrmsrl(SKL_UNC_PERF_GLOBAL_CTL, 0);
> +}
> +
> +static void skl_uncore_msr_exit_box(struct intel_uncore_box *box)
> +{
> + if (box->pmu->pmu_idx == 0)
> + wrmsrl(SKL_UNC_PERF_GLOBAL_CTL, 0);
> +}

The above looks broken.

init() enables the uncore machinery on the node it is running on.

start() enables the uncore machinery on the node it is running on.

stop() disables the uncore machinery on the node it is running on.

So what happens in the following case:

start(event(box0), node0)

start(event(box1), node0)

stop(event(box1), node0)

The stop of the box1 events disables the whole machinery on that node and
therefor the box0 event is wreckaged as well. Hmm?

Thanks,

tglx