Index: dev/hwpmc/hwpmc_mod.c =================================================================== --- dev/hwpmc/hwpmc_mod.c (revision 233380) +++ dev/hwpmc/hwpmc_mod.c (working copy) @@ -4688,8 +4688,17 @@ M_WAITOK|M_ZERO); if (md->pmd_pcpu_init) error = md->pmd_pcpu_init(md, cpu); - for (n = 0; error == 0 && n < md->pmd_nclass; n++) - error = md->pmd_classdep[n].pcd_pcpu_init(md, cpu); + for (n = 0; error == 0 && n < md->pmd_nclass; n++) { + if (md->pmd_classdep[n].pcd_pcpu_init == NULL) { + printf( + "hwpmc: PMC classdep without fini " + "function: idx=%d pcd_class=%d pcd_ri=%d\n", + n, md->pmd_classdep[n].pcd_class, + md->pmd_classdep[n].pcd_ri); + } + else + error = md->pmd_classdep[n].pcd_pcpu_init(md, cpu); + } } pmc_restore_cpu_binding(&pb); @@ -4881,8 +4890,17 @@ if (!pmc_cpu_is_active(cpu) || pmc_pcpu[cpu] == NULL) continue; pmc_select_cpu(cpu); - for (c = 0; c < md->pmd_nclass; c++) - md->pmd_classdep[c].pcd_pcpu_fini(md, cpu); + for (c = 0; c < md->pmd_nclass; c++) { + if (md->pmd_classdep[c].pcd_pcpu_fini == NULL) { + printf( + "hwpmc: PMC classdep without init " + "function: idx=%d pcd_class=%d pcd_ri=%d\n", + c, md->pmd_classdep[c].pcd_class, + md->pmd_classdep[c].pcd_ri); + } + else + md->pmd_classdep[c].pcd_pcpu_fini(md, cpu); + } if (md->pmd_pcpu_fini) md->pmd_pcpu_fini(md, cpu); } Index: dev/hwpmc/hwpmc_intel.c =================================================================== --- dev/hwpmc/hwpmc_intel.c (revision 233380) +++ dev/hwpmc/hwpmc_intel.c (working copy) @@ -239,6 +239,10 @@ KASSERT(0, ("[intel,%d] Unknown CPU type", __LINE__)); } + + if (error) + goto error; + /* * Init the uncore class. */ Index: dev/hwpmc/hwpmc_core.c =================================================================== --- dev/hwpmc/hwpmc_core.c (revision 233380) +++ dev/hwpmc/hwpmc_core.c (working copy) @@ -2406,8 +2406,12 @@ PMCDBG(MDP,INI,1,"core-init cputype=%d ncpu=%d ipa-version=%d", md->pmd_cputype, maxcpu, ipa_version); - if (ipa_version < 1 || ipa_version > 3) /* Unknown PMC architecture. */ + if (ipa_version < 1 || ipa_version > 3) { + /* Unknown PMC architecture. */ + printf("hwpc_core: unknown PMC architecture: %d\n", + ipa_version); return (EPROGMISMATCH); + } core_cputype = md->pmd_cputype;