Index: dev/hwpmc/hwpmc_amd.c =================================================================== --- dev/hwpmc/hwpmc_amd.c (revision 233380) +++ dev/hwpmc/hwpmc_amd.c (working copy) @@ -941,6 +941,7 @@ goto error; /* Initialize AMD K7 and K8 PMC handling. */ + printf("AMD CPU with classindex=%d\n", classindex); pcd = &pmc_mdep->pmd_classdep[classindex]; pcd->pcd_caps = AMD_PMC_CAPS; Index: dev/hwpmc/hwpmc_mod.c =================================================================== --- dev/hwpmc/hwpmc_mod.c (revision 233380) +++ dev/hwpmc/hwpmc_mod.c (working copy) @@ -4688,8 +4688,16 @@ 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 " + "init function: class=%d, ri=%d\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 +4889,16 @@ 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: class=%d, ri=%d\n", + 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); }