/* Function to return the extended register values */ static u64 get_ext_regs_value(int idx)
{ switch (idx) { case PERF_REG_POWERPC_PMC1 ... PERF_REG_POWERPC_PMC6: return get_pmcs_ext_regs(idx - PERF_REG_POWERPC_PMC1); case PERF_REG_POWERPC_MMCR0: return mfspr(SPRN_MMCR0); case PERF_REG_POWERPC_MMCR1: return mfspr(SPRN_MMCR1); case PERF_REG_POWERPC_MMCR2: return mfspr(SPRN_MMCR2); #ifdef CONFIG_PPC64 case PERF_REG_POWERPC_MMCR3: return mfspr(SPRN_MMCR3); case PERF_REG_POWERPC_SIER2: return mfspr(SPRN_SIER2); case PERF_REG_POWERPC_SIER3: return mfspr(SPRN_SIER3); case PERF_REG_POWERPC_SDAR: return mfspr(SPRN_SDAR); #endif case PERF_REG_POWERPC_SIAR: return mfspr(SPRN_SIAR); default: return 0;
}
}
u64 perf_reg_value(struct pt_regs *regs, int idx)
{ if (idx == PERF_REG_POWERPC_SIER &&
(IS_ENABLED(CONFIG_FSL_EMB_PERF_EVENT) ||
IS_ENABLED(CONFIG_PPC32) ||
!is_sier_available())) return 0;
if (idx == PERF_REG_POWERPC_MMCRA &&
(IS_ENABLED(CONFIG_FSL_EMB_PERF_EVENT) ||
IS_ENABLED(CONFIG_PPC32))) return 0;
if (idx >= PERF_REG_POWERPC_MAX && idx < PERF_REG_EXTENDED_MAX) return get_ext_regs_value(idx);
/* * If the idx is referring to value beyond the * supported registers, return 0 with a warning
*/ if (WARN_ON_ONCE(idx >= PERF_REG_EXTENDED_MAX)) return 0;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.