<html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On 01-Mar-2021, at 5:39 PM, Christophe Leroy <<a href="mailto:christophe.leroy@csgroup.eu" class="">christophe.leroy@csgroup.eu</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">From: Rashmica Gupta <<a href="mailto:rashmica.g@gmail.com" class="">rashmica.g@gmail.com</a>><br class=""><br class="">Currently the perf CPU backend drivers detect what CPU they're on using<br class="">cur_cpu_spec->oprofile_cpu_type.<br class=""><br class="">Although that works, it's a bit crufty to be using oprofile related fields,<br class="">especially seeing as oprofile is more or less unused these days.<br class=""><br class="">It also means perf is reliant on the fragile logic in setup_cpu_spec()<br class="">which detects when we're using a logical PVR and copies back the PMU<br class="">related fields from the raw CPU entry. So lets check the PVR directly.<br class=""><br class="">Suggested-by: Michael Ellerman <<a href="mailto:mpe@ellerman.id.au" class="">mpe@ellerman.id.au</a>><br class="">Signed-off-by: Rashmica Gupta <<a href="mailto:rashmica.g@gmail.com" class="">rashmica.g@gmail.com</a>><br class="">Reviewed-by: Madhavan Srinivasan <<a href="mailto:maddy@linux.vnet.ibm.com" class="">maddy@linux.vnet.ibm.com</a>><br class="">[chleroy: Added power10 and fixed checkpatch issues]<br class="">Signed-off-by: Christophe Leroy <<a href="mailto:christophe.leroy@csgroup.eu" class="">christophe.leroy@csgroup.eu</a>><br class=""></div></div></blockquote><div><br class=""></div><span style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);" class="">Reviewed-and-tested-by: Athira Rajeev <<a href="mailto:atrajeev@linux.vnet.ibm.com" class="">atrajeev@linux.vnet.ibm.com</a>></span></div><div><font color="#000000" class=""><span style="caret-color: rgb(0, 0, 0);" class=""><br class=""></span></font></div><div><font color="#000000" class=""><span style="caret-color: rgb(0, 0, 0);" class="">Thanks</span></font></div><div><font color="#000000" class=""><span style="caret-color: rgb(0, 0, 0);" class="">Athira<br class=""></span></font><blockquote type="cite" class=""><div class=""><div class="">---<br class=""> arch/powerpc/perf/e500-pmu.c    | 9 +++++----<br class=""> arch/powerpc/perf/e6500-pmu.c   | 5 +++--<br class=""> arch/powerpc/perf/hv-24x7.c     | 6 +++---<br class=""> arch/powerpc/perf/mpc7450-pmu.c | 5 +++--<br class=""> arch/powerpc/perf/power10-pmu.c | 6 ++----<br class=""> arch/powerpc/perf/power5+-pmu.c | 6 +++---<br class=""> arch/powerpc/perf/power5-pmu.c  | 5 +++--<br class=""> arch/powerpc/perf/power6-pmu.c  | 5 +++--<br class=""> arch/powerpc/perf/power7-pmu.c  | 7 ++++---<br class=""> arch/powerpc/perf/power8-pmu.c  | 5 +++--<br class=""> arch/powerpc/perf/power9-pmu.c  | 4 +---<br class=""> arch/powerpc/perf/ppc970-pmu.c  | 7 ++++---<br class=""> 12 files changed, 37 insertions(+), 33 deletions(-)<br class=""><br class="">diff --git a/arch/powerpc/perf/e500-pmu.c b/arch/powerpc/perf/e500-pmu.c<br class="">index a59c33bed32a..e3e1a68eb1d5 100644<br class="">--- a/arch/powerpc/perf/e500-pmu.c<br class="">+++ b/arch/powerpc/perf/e500-pmu.c<br class="">@@ -118,12 +118,13 @@ static struct fsl_emb_pmu e500_pmu = {<br class=""><br class=""> static int init_e500_pmu(void)<br class=""> {<br class="">-<span class="Apple-tab-span" style="white-space:pre"> </span>if (!cur_cpu_spec->oprofile_cpu_type)<br class="">-<span class="Apple-tab-span" style="white-space:pre">      </span><span class="Apple-tab-span" style="white-space:pre">    </span>return -ENODEV;<br class="">+<span class="Apple-tab-span" style="white-space:pre">       </span>unsigned int pvr = mfspr(SPRN_PVR);<br class=""><br class="">-<span class="Apple-tab-span" style="white-space:pre">      </span>if (!strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc/e500mc"))<br class="">+<span class="Apple-tab-span" style="white-space:pre">      </span>/* ec500mc */<br class="">+<span class="Apple-tab-span" style="white-space:pre"> </span>if (PVR_VER(pvr) == PVR_VER_E500MC || PVR_VER(pvr) == PVR_VER_E5500)<br class=""> <span class="Apple-tab-span" style="white-space:pre">  </span><span class="Apple-tab-span" style="white-space:pre">    </span>num_events = 256;<br class="">-<span class="Apple-tab-span" style="white-space:pre">     </span>else if (strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc/e500"))<br class="">+<span class="Apple-tab-span" style="white-space:pre">    </span>/* e500 */<br class="">+<span class="Apple-tab-span" style="white-space:pre">    </span>else if (PVR_VER(pvr) != PVR_VER_E500V1 && PVR_VER(pvr) != PVR_VER_E500V2)<br class=""> <span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>return -ENODEV;<br class=""><br class=""> <span class="Apple-tab-span" style="white-space:pre">  </span>return register_fsl_emb_pmu(&e500_pmu);<br class="">diff --git a/arch/powerpc/perf/e6500-pmu.c b/arch/powerpc/perf/e6500-pmu.c<br class="">index 44ad65da82ed..bd779a2338f8 100644<br class="">--- a/arch/powerpc/perf/e6500-pmu.c<br class="">+++ b/arch/powerpc/perf/e6500-pmu.c<br class="">@@ -107,8 +107,9 @@ static struct fsl_emb_pmu e6500_pmu = {<br class=""><br class=""> static int init_e6500_pmu(void)<br class=""> {<br class="">-<span class="Apple-tab-span" style="white-space:pre">       </span>if (!cur_cpu_spec->oprofile_cpu_type ||<br class="">-<span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc/e6500"))<br class="">+<span class="Apple-tab-span" style="white-space:pre">    </span>unsigned int pvr = mfspr(SPRN_PVR);<br class="">+<br class="">+<span class="Apple-tab-span" style="white-space:pre">     </span>if (PVR_VER(pvr) != PVR_VER_E6500)<br class=""> <span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>return -ENODEV;<br class=""><br class=""> <span class="Apple-tab-span" style="white-space:pre">  </span>return register_fsl_emb_pmu(&e6500_pmu);<br class="">diff --git a/arch/powerpc/perf/hv-24x7.c b/arch/powerpc/perf/hv-24x7.c<br class="">index e5eb33255066..f3f2472fa1c6 100644<br class="">--- a/arch/powerpc/perf/hv-24x7.c<br class="">+++ b/arch/powerpc/perf/hv-24x7.c<br class="">@@ -1718,16 +1718,16 @@ static int hv_24x7_init(void)<br class=""> {<br class=""> <span class="Apple-tab-span" style="white-space:pre">      </span>int r;<br class=""> <span class="Apple-tab-span" style="white-space:pre">        </span>unsigned long hret;<br class="">+<span class="Apple-tab-span" style="white-space:pre">   </span>unsigned int pvr = mfspr(SPRN_PVR);<br class=""> <span class="Apple-tab-span" style="white-space:pre">   </span>struct hv_perf_caps caps;<br class=""><br class=""> <span class="Apple-tab-span" style="white-space:pre">        </span>if (!firmware_has_feature(FW_FEATURE_LPAR)) {<br class=""> <span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre">    </span>pr_debug("not a virtualized system, not enabling\n");<br class=""> <span class="Apple-tab-span" style="white-space:pre">       </span><span class="Apple-tab-span" style="white-space:pre">    </span>return -ENODEV;<br class="">-<span class="Apple-tab-span" style="white-space:pre">       </span>} else if (!cur_cpu_spec->oprofile_cpu_type)<br class="">-<span class="Apple-tab-span" style="white-space:pre">       </span><span class="Apple-tab-span" style="white-space:pre">    </span>return -ENODEV;<br class="">+<span class="Apple-tab-span" style="white-space:pre">       </span>}<br class=""><br class=""> <span class="Apple-tab-span" style="white-space:pre">        </span>/* POWER8 only supports v1, while POWER9 only supports v2. */<br class="">-<span class="Apple-tab-span" style="white-space:pre"> </span>if (!strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power8"))<br class="">+<span class="Apple-tab-span" style="white-space:pre">    </span>if (PVR_VER(pvr) == PVR_POWER8)<br class=""> <span class="Apple-tab-span" style="white-space:pre">       </span><span class="Apple-tab-span" style="white-space:pre">    </span>interface_version = 1;<br class=""> <span class="Apple-tab-span" style="white-space:pre">        </span>else {<br class=""> <span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">    </span>interface_version = 2;<br class="">diff --git a/arch/powerpc/perf/mpc7450-pmu.c b/arch/powerpc/perf/mpc7450-pmu.c<br class="">index e39b15b79a83..552d51a925d3 100644<br class="">--- a/arch/powerpc/perf/mpc7450-pmu.c<br class="">+++ b/arch/powerpc/perf/mpc7450-pmu.c<br class="">@@ -417,8 +417,9 @@ struct power_pmu mpc7450_pmu = {<br class=""><br class=""> static int __init init_mpc7450_pmu(void)<br class=""> {<br class="">-<span class="Apple-tab-span" style="white-space:pre">  </span>if (!cur_cpu_spec->oprofile_cpu_type ||<br class="">-<span class="Apple-tab-span" style="white-space:pre">    </span>    strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc/7450"))<br class="">+<span class="Apple-tab-span" style="white-space:pre">  </span>unsigned int pvr = mfspr(SPRN_PVR);<br class="">+<br class="">+<span class="Apple-tab-span" style="white-space:pre">     </span>if (PVR_VER(pvr) != PVR_7450)<br class=""> <span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre">    </span>return -ENODEV;<br class=""><br class=""> <span class="Apple-tab-span" style="white-space:pre">  </span>return register_power_pmu(&mpc7450_pmu);<br class="">diff --git a/arch/powerpc/perf/power10-pmu.c b/arch/powerpc/perf/power10-pmu.c<br class="">index a901c1348cad..d1395844a329 100644<br class="">--- a/arch/powerpc/perf/power10-pmu.c<br class="">+++ b/arch/powerpc/perf/power10-pmu.c<br class="">@@ -566,12 +566,10 @@ int init_power10_pmu(void)<br class=""> <span class="Apple-tab-span" style="white-space:pre">  </span>unsigned int pvr;<br class=""> <span class="Apple-tab-span" style="white-space:pre">     </span>int rc;<br class=""><br class="">-<span class="Apple-tab-span" style="white-space:pre">  </span>/* Comes from cpu_specs[] */<br class="">-<span class="Apple-tab-span" style="white-space:pre">  </span>if (!cur_cpu_spec->oprofile_cpu_type ||<br class="">-<span class="Apple-tab-span" style="white-space:pre">    </span>    strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power10"))<br class="">+<span class="Apple-tab-span" style="white-space:pre">     </span>pvr = mfspr(SPRN_PVR);<br class="">+<span class="Apple-tab-span" style="white-space:pre">        </span>if (PVR_VER(pvr) != PVR_POWER10)<br class=""> <span class="Apple-tab-span" style="white-space:pre">      </span><span class="Apple-tab-span" style="white-space:pre">    </span>return -ENODEV;<br class=""><br class="">-<span class="Apple-tab-span" style="white-space:pre">  </span>pvr = mfspr(SPRN_PVR);<br class=""> <span class="Apple-tab-span" style="white-space:pre">        </span>/* Add the ppmu flag for power10 DD1 */<br class=""> <span class="Apple-tab-span" style="white-space:pre">       </span>if ((PVR_CFG(pvr) == 1))<br class=""> <span class="Apple-tab-span" style="white-space:pre">      </span><span class="Apple-tab-span" style="white-space:pre">    </span>power10_pmu.flags |= PPMU_P10_DD1;<br class="">diff --git a/arch/powerpc/perf/power5+-pmu.c b/arch/powerpc/perf/power5+-pmu.c<br class="">index 18732267993a..a79eae40ef6d 100644<br class="">--- a/arch/powerpc/perf/power5+-pmu.c<br class="">+++ b/arch/powerpc/perf/power5+-pmu.c<br class="">@@ -679,9 +679,9 @@ static struct power_pmu power5p_pmu = {<br class=""><br class=""> int init_power5p_pmu(void)<br class=""> {<br class="">-<span class="Apple-tab-span" style="white-space:pre">     </span>if (!cur_cpu_spec->oprofile_cpu_type ||<br class="">-<span class="Apple-tab-span" style="white-space:pre">    </span>    (strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power5+")<br class="">-<span class="Apple-tab-span" style="white-space:pre">     </span>     && strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power5++")))<br class="">+<span class="Apple-tab-span" style="white-space:pre">  </span>unsigned int pvr = mfspr(SPRN_PVR);<br class="">+<br class="">+<span class="Apple-tab-span" style="white-space:pre">     </span>if (PVR_VER(pvr) != PVR_POWER5p)<br class=""> <span class="Apple-tab-span" style="white-space:pre">      </span><span class="Apple-tab-span" style="white-space:pre">    </span>return -ENODEV;<br class=""><br class=""> <span class="Apple-tab-span" style="white-space:pre">  </span>return register_power_pmu(&power5p_pmu);<br class="">diff --git a/arch/powerpc/perf/power5-pmu.c b/arch/powerpc/perf/power5-pmu.c<br class="">index cb611c1e7abe..35a9d7f3b4b9 100644<br class="">--- a/arch/powerpc/perf/power5-pmu.c<br class="">+++ b/arch/powerpc/perf/power5-pmu.c<br class="">@@ -620,8 +620,9 @@ static struct power_pmu power5_pmu = {<br class=""><br class=""> int init_power5_pmu(void)<br class=""> {<br class="">-<span class="Apple-tab-span" style="white-space:pre"> </span>if (!cur_cpu_spec->oprofile_cpu_type ||<br class="">-<span class="Apple-tab-span" style="white-space:pre">    </span>    strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power5"))<br class="">+<span class="Apple-tab-span" style="white-space:pre">      </span>unsigned int pvr = mfspr(SPRN_PVR);<br class="">+<br class="">+<span class="Apple-tab-span" style="white-space:pre">     </span>if (PVR_VER(pvr) != PVR_POWER5)<br class=""> <span class="Apple-tab-span" style="white-space:pre">       </span><span class="Apple-tab-span" style="white-space:pre">    </span>return -ENODEV;<br class=""><br class=""> <span class="Apple-tab-span" style="white-space:pre">  </span>return register_power_pmu(&power5_pmu);<br class="">diff --git a/arch/powerpc/perf/power6-pmu.c b/arch/powerpc/perf/power6-pmu.c<br class="">index 69ef38216418..8aa220c712a7 100644<br class="">--- a/arch/powerpc/perf/power6-pmu.c<br class="">+++ b/arch/powerpc/perf/power6-pmu.c<br class="">@@ -541,8 +541,9 @@ static struct power_pmu power6_pmu = {<br class=""><br class=""> int init_power6_pmu(void)<br class=""> {<br class="">-<span class="Apple-tab-span" style="white-space:pre">  </span>if (!cur_cpu_spec->oprofile_cpu_type ||<br class="">-<span class="Apple-tab-span" style="white-space:pre">    </span>    strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power6"))<br class="">+<span class="Apple-tab-span" style="white-space:pre">      </span>unsigned int pvr = mfspr(SPRN_PVR);<br class="">+<br class="">+<span class="Apple-tab-span" style="white-space:pre">     </span>if (PVR_VER(pvr) != PVR_POWER6)<br class=""> <span class="Apple-tab-span" style="white-space:pre">       </span><span class="Apple-tab-span" style="white-space:pre">    </span>return -ENODEV;<br class=""><br class=""> <span class="Apple-tab-span" style="white-space:pre">  </span>return register_power_pmu(&power6_pmu);<br class="">diff --git a/arch/powerpc/perf/power7-pmu.c b/arch/powerpc/perf/power7-pmu.c<br class="">index 894c17f9a762..ca7373143b02 100644<br class="">--- a/arch/powerpc/perf/power7-pmu.c<br class="">+++ b/arch/powerpc/perf/power7-pmu.c<br class="">@@ -447,11 +447,12 @@ static struct power_pmu power7_pmu = {<br class=""><br class=""> int init_power7_pmu(void)<br class=""> {<br class="">-<span class="Apple-tab-span" style="white-space:pre">        </span>if (!cur_cpu_spec->oprofile_cpu_type ||<br class="">-<span class="Apple-tab-span" style="white-space:pre">    </span>    strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power7"))<br class="">+<span class="Apple-tab-span" style="white-space:pre">      </span>unsigned int pvr = mfspr(SPRN_PVR);<br class="">+<br class="">+<span class="Apple-tab-span" style="white-space:pre">     </span>if (PVR_VER(pvr) != PVR_POWER7 && PVR_VER(pvr) != PVR_POWER7p)<br class=""> <span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">    </span>return -ENODEV;<br class=""><br class="">-<span class="Apple-tab-span" style="white-space:pre">  </span>if (pvr_version_is(PVR_POWER7p))<br class="">+<span class="Apple-tab-span" style="white-space:pre">      </span>if (PVR_VER(pvr) == PVR_POWER7p)<br class=""> <span class="Apple-tab-span" style="white-space:pre">      </span><span class="Apple-tab-span" style="white-space:pre">    </span>power7_pmu.flags |= PPMU_SIAR_VALID;<br class=""><br class=""> <span class="Apple-tab-span" style="white-space:pre">     </span>return register_power_pmu(&power7_pmu);<br class="">diff --git a/arch/powerpc/perf/power8-pmu.c b/arch/powerpc/perf/power8-pmu.c<br class="">index 5282e8415ddf..5a396ba8bf58 100644<br class="">--- a/arch/powerpc/perf/power8-pmu.c<br class="">+++ b/arch/powerpc/perf/power8-pmu.c<br class="">@@ -381,9 +381,10 @@ static struct power_pmu power8_pmu = {<br class=""> int init_power8_pmu(void)<br class=""> {<br class=""> <span class="Apple-tab-span" style="white-space:pre">      </span>int rc;<br class="">+<span class="Apple-tab-span" style="white-space:pre">       </span>unsigned int pvr = mfspr(SPRN_PVR);<br class=""><br class="">-<span class="Apple-tab-span" style="white-space:pre">      </span>if (!cur_cpu_spec->oprofile_cpu_type ||<br class="">-<span class="Apple-tab-span" style="white-space:pre">    </span>    strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power8"))<br class="">+<span class="Apple-tab-span" style="white-space:pre">      </span>if (PVR_VER(pvr) != PVR_POWER8E && PVR_VER(pvr) != PVR_POWER8NVL &&<br class="">+<span class="Apple-tab-span" style="white-space:pre">   </span>    PVR_VER(pvr) != PVR_POWER8)<br class=""> <span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">    </span>return -ENODEV;<br class=""><br class=""> <span class="Apple-tab-span" style="white-space:pre">  </span>rc = register_power_pmu(&power8_pmu);<br class="">diff --git a/arch/powerpc/perf/power9-pmu.c b/arch/powerpc/perf/power9-pmu.c<br class="">index 2a57e93a79dc..28ba1e98f93d 100644<br class="">--- a/arch/powerpc/perf/power9-pmu.c<br class="">+++ b/arch/powerpc/perf/power9-pmu.c<br class="">@@ -444,9 +444,7 @@ int init_power9_pmu(void)<br class=""> <span class="Apple-tab-span" style="white-space:pre">    </span>int rc = 0;<br class=""> <span class="Apple-tab-span" style="white-space:pre">   </span>unsigned int pvr = mfspr(SPRN_PVR);<br class=""><br class="">-<span class="Apple-tab-span" style="white-space:pre">      </span>/* Comes from cpu_specs[] */<br class="">-<span class="Apple-tab-span" style="white-space:pre">  </span>if (!cur_cpu_spec->oprofile_cpu_type ||<br class="">-<span class="Apple-tab-span" style="white-space:pre">    </span>    strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power9"))<br class="">+<span class="Apple-tab-span" style="white-space:pre">      </span>if (PVR_VER(pvr) != PVR_POWER9)<br class=""> <span class="Apple-tab-span" style="white-space:pre">       </span><span class="Apple-tab-span" style="white-space:pre">    </span>return -ENODEV;<br class=""><br class=""> <span class="Apple-tab-span" style="white-space:pre">  </span>/* Blacklist events */<br class="">diff --git a/arch/powerpc/perf/ppc970-pmu.c b/arch/powerpc/perf/ppc970-pmu.c<br class="">index 1f8263785286..39a0a4d7841c 100644<br class="">--- a/arch/powerpc/perf/ppc970-pmu.c<br class="">+++ b/arch/powerpc/perf/ppc970-pmu.c<br class="">@@ -491,9 +491,10 @@ static struct power_pmu ppc970_pmu = {<br class=""><br class=""> int init_ppc970_pmu(void)<br class=""> {<br class="">-<span class="Apple-tab-span" style="white-space:pre">      </span>if (!cur_cpu_spec->oprofile_cpu_type ||<br class="">-<span class="Apple-tab-span" style="white-space:pre">    </span>    (strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/970")<br class="">-<span class="Apple-tab-span" style="white-space:pre"> </span>     && strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/970MP")))<br class="">+<span class="Apple-tab-span" style="white-space:pre">     </span>unsigned int pvr = mfspr(SPRN_PVR);<br class="">+<br class="">+<span class="Apple-tab-span" style="white-space:pre">     </span>if (PVR_VER(pvr) != PVR_970 && PVR_VER(pvr) != PVR_970MP &&<br class="">+<span class="Apple-tab-span" style="white-space:pre">   </span>    PVR_VER(pvr) != PVR_970FX && PVR_VER(pvr) != PVR_970GX)<br class=""> <span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>return -ENODEV;<br class=""><br class=""> <span class="Apple-tab-span" style="white-space:pre">  </span>return register_power_pmu(&ppc970_pmu);<br class="">-- <br class="">2.25.0<br class=""><br class=""></div></div></blockquote></div><br class=""></body></html>