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

From: Liang, Kan
Date: Wed Apr 20 2016 - 09:56:51 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?
>

Right. How about check the SKL_UNC_PERF_GLOBAL_CTL in enable_event?
If it's cleared, we can reset it there. The drawback is that there will be an extra
rdmsrl and a possible wrmsrl.

Thanks,
Kan